Windows 2008 R 2以上のdnsサーバをansibleで一括管理

3930 ワード

準備:dnsサーバnet 3をインストールする.5 PowerShell DnsShellプラグインを使用します.DnsShellプラグイン添付ファイルにはansibleサポート環境もインストールします
ansibleディレクトリ構造の説明:
.
├── DnsShell #PowerShell dns     cp to C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules      
│   ├── DNSShell.dll
│   ├── DnsShell.Format.ps1xml
│   ├── DnsShell.psd1
│   └── en-US
│       └── DnsShell.dll-help.xml
├── dns.yml # ansible     
├── hosts #    ip    
└── roles
    └── dns
        ├── files
        │   └── dns.ps1 # PowerShell    
        └── tasks
            └── main.yml # ansible     
dns.yml   :
- hosts: dns #              
  vars: #    
    parameter: dnszone #     (dnszone       A          A    CNAME     cname    delete        update      )
    Domain: test.com # test.com
    name: A # a  
    ipaddress: 192.168.1.1 #   ip
    ipaddress2: 192.168.1.1  #        
  roles: 
    - dns # ansible     
main.yml   :
- name: sc dns
  script: dns.ps1 `parameter` `Domain` `name` `ipaddress` `ipaddress2`
  #    parameter          :    ,    ,     
  Domain       
  name      a   mx   
  ipaddress a   IP cname   
  ipaddress2          
dns.ps1   
# ************************************************************ 
# *                                                          * 
# *                 Powershell  DNS                      * 
# *                                                          * 
# ************************************************************ 
#set-executionpolicy remotesigned 
#   dns    
################################################################################################# 
#    
param($a,$b,$c,$d,$e)
$parameter=$a
$Domain=$b
$name=$c
$ipaddress=$d
$ipaddress2=$e
#################################################################################################
import-module dnsshell #   dnsshell   
##    
if ($parameter -eq "dnszone") 
{
new-dnszone -zonename $Domain -zonetype primary
}
##   A  
elseif ($parameter -eq "A")
{
new-dnsrecord -zonename $Domain -name $name -recordtype A -ipaddress $ipaddress
}
##  CNAME  
elseif ($parameter -eq "CNAME")
{
new-dnsrecord -zonename  $Domain -name $name -recordtype CNAME -hostname $ipaddress
}
##   dns  
elseif ($parameter -eq "delete")
{
$ARecord = Get-WmiObject -Namespace root\MicrosoftDNS -class MicrosoftDNS_ResourceRecord -filter "containername='$Domain' AND OwnerName='$name.$Domain' AND RecordData='$ipaddress'"
$ARecord.delete()
}
##   dns  
elseif ($parameter -eq "update")
{
$ARecord = Get-WmiObject -Namespace root\MicrosoftDNS -class MicrosoftDNS_ResourceRecord -filter "containername='$Domain' AND OwnerName='$name.$Domain' AND RecordData='$ipaddress'"
$ARecord.Modify($ARecord.TTL,"$ipaddress2")
}
else
{
exit
}

その他の説明:
     :ansible-playbook -i hosts dns.yml -verbose --extra-vars "parameter=dnszone Domain=test.com"
   A  
ansible-playbook -i hosts dns.yml -verbose --extra-vars "parameter=A Domain=test.com name=www ipaddress=192.168.1.1"
   cname  
ansible-playbook -i hosts dns.yml -verbose --extra-vars "parameter=cname Domain=test.com name=test ipaddress=
    :
 ansible-playbook -i hosts dns.yml -verbose --extra-vars "parameter=deleteDomain=test.com name=www ipaddress=192.168.1.1"
  ansible-playbook -i hosts dns.yml -verbose --extra-vars "parameter=delete Domain=test.com name=test ipaddress=www.test.com. #       
     
 ansible-playbook -i hosts dns.yml -verbose --extra-vars "parameter=update Domain=test.com name=www ipaddress=192.168.1.1 ipaddress2=192.168.1.2"
 ansible-playbook -i hosts dns.yml -verbose --extra-vars "parameter=update Domain=test.com name=test ipaddress=www.test.com. ipaddress2=www.baidu.com."  
          

転載先:https://blog.51cto.com/juestnow/1876484