http://blog.csdn.net/kellyseeme/article/details/506368131、 Windows下如何工作
在ansible控制linux的時候,用的是ssh的方式,在windows中,使用的是power shell,在客戶端機器上也是不用裝任何客戶端的。
在控制windows機器的時候,使用的模塊為“winrm“。
2、 在控制機上安裝
在linux控制機器上安裝模塊winrm:
pip install "pywinrm>=0.1.1" |
3、 動態(tài)目錄的支持
如果想連接動態(tài)目錄下的domain賬戶,那么必須安裝python-kerberos模塊在控制機上,并且需要安裝MIT krb5庫。還需要在動態(tài)目錄中配置正確的賬戶。
3.1 安裝python-kerberos的依賴
# Via Yum yum -y install python-devel krb5-devel krb5-libs krb5-workstation # Via Apt (Ubuntu) sudo apt-get install python-dev libkrb5-dev # Via Portage (Gentoo) emerge -av app-crypt/mit-krb5 emerge -av dev-python/setuptools # Via pkg (FreeBSD) sudo pkg install security/krb5 # Via OpenCSW (Solaris) pkgadd -d http://get.opencsw.org/now /opt/csw/bin/pkgutil -U /opt/csw/bin/pkgutil -y -i libkrb5_3 # Via Pacman (Arch Linux) pacman -S krb5 |
3.2 安裝python-kerberos
安裝的時候執(zhí)行如下指令即可:
3.3 配置kerberos
編輯配置文件/etc/krb5.conf,在其中添加如下的信息,在每個想連接的domain中。
找到如下開頭的節(jié):
添加domain的全稱,并且添加主要和次要的動態(tài)目錄域的全名稱,如下例子:
[realms] MY.DOMAIN.COM = { kdc = domain-controller1.my.domain.com kdc = domain-controller2.my.domain.com } |
并且在【domain_realm】節(jié)中添加每個你想連接的域:
[domain_realm] .my.domain.com = MY.DOMAIN.COM |
3.4 測試kerberos連接
如果安裝了krb5-workstation(yum)或者krb5-user(apt_get),那么可以用如下的命令測試是否被域控制器授權:
注意域的部分必須是全稱,并且必須全部為大寫。
查看獲得的tickets,可以使用命令如下:
3.5 解決kerberos連接問題
如果使用kerberos不能進行連接,那么檢查下列問題:
確保正向和反向DNS在域中能正常解析,在做這個解析的時候,首先ping服務器的名稱,然后nslookup服務器的ip地址,會返回服務器的名稱
如果在返回的服務器名稱和ping的服務器名稱不一致,檢查動態(tài)目錄中的DNSScavenging 是開啟的,并且DNS和DHCP是相互更新的;
確保ansible控制機在domain中配置了賬戶屬性。
檢查ansible控制機的在域控制器中是時鐘異步的,kerberos是對時間敏感的,一點時間的偏差會導致tickets失效
確保用的是域全名稱,可以使用下面的命令進行檢查:
kinit -C user@MY.DOMAIN.COM klist |
當獲取到不同的域名稱的時候,必須更新配置文件krb5.conf,在其中使用域的全名稱。
4、 inventory
ansible對windows的支持依賴于幾個常用的變量來表示用戶名,密碼,連接類型(windows),如下所示:
[windows] winserver1.example.com winserver2.example.com |
在group_vars/windows.yml中,定義以下inventory變量:
# it is suggested that these be encrypted with ansible-vault: # ansible-vault edit group_vars/windows.yml ansible_user: Administrator ansible_password: SecretPasswordGoesHere ansible_port: 5986 ansible_connection: winrm # The following is necessary for Python 2.7.9+ when using default WinRM self-signed certificates: ansible_winrm_server_cert_validation: ignore |
5、 關于powershell版本
Powershell為3.0版本或者更高,只有windows7 sp1,windows server 2008 sp1,和以后的版本支持。
6、 哪些模塊是可用的
Windows支持的模塊在以下網(wǎng)址中可以找到:
http://docs.ansible.com/ansible/list_of_windows_modules.html |
可以使用script模塊來運行powershell腳本,也可以在playbook中使用,如下:
- hosts: windows tasks: - script: foo.ps1 --argument --other-argument |
注意有的模塊并不以win開頭,如下:
“slurp”, “raw”, and “setup” |
7、 獲得windows的fact
ansible winhost.example.com -m setup |
8、 Windows的playbook例子
下面例子表示推送和運行powershell腳本的例子:
- name: test script module hosts: windows tasks: - name: run test script script: files/test_script.ps1 |
運行單個命令的時候,使用raw模塊,在linux中是使用command或者shell模塊:
- name: test raw module hosts: windows tasks: - name: run ipconfig raw: ipconfig register: ipconfig - debug: var=ipconfig |
運行DOS命令的時候,可以使用CMD /C開頭,并且用雙引號進行包括,如下:
- name: another raw module example hosts: windows tasks: - name: Move file on remote Windows Server from one location to another raw: CMD /C "MOVE /Y C:\teststuff\myfile.conf C:\builds\smtp.conf" |
最后一個例子用win_stat模塊測試文件是否存在,注意返回的日期和linux中稍有不同:
- name: test stat module hosts: windows tasks: - name: test stat module on file win_stat: path="C:/Windows/win.ini" register: stat_file - debug: var=stat_file - name: check stat_file result assert: that: - "stat_file.stat.exists" - "notstat_file.stat.isdir" - "stat_file.stat.size>0" - "stat_file.stat.md5" |
posted on 2017-11-10 10:34
思月行云 閱讀(790)
評論(1) 編輯 收藏 引用 所屬分類:
服務器\Ops