Ansible學習筆記--使用ansible管理windows集羣

最近工作中需要統一管理一批Linux和Windows機器,實現應用的自動化部署。剛開始直接使用的ssh登錄到目標機器進行部署,Linux機器上面沒什麼問題,但是Windows上面需要提前安裝並配置好ssh server。當時選用freesshd作爲ssh server,雖然成功實現了自動化,但是因爲freesshd已經很久沒更新了,不符合公司的安全規範,所以就重新調研,最後選擇了Ansible。

Ansible從1.7+版本之後提供了對Windows機器的支持,而且管理方式和管理Linux機器大同小異,這一點非常棒。不過不同的是,與Linux機器通信是採用的ssh,而與Windows的通信方式則採用了Windows機器自帶的powershell。因此在Windows機器上只需完成很少的配置即可使用Ansible進行管理。

Ansible可用於管理Windows集羣,不過管理節點需要部署在Linux機器上,而且需要預裝python winrm模塊。同時,Windows機器上的powershell版本需要滿足3.0+,且Management Framework也需要滿足3.0+版本。

Windows機器配置

Windows機器需要完成如下幾步簡單配置才能實現與管理節點通信。

啓用Administrator賬戶

要想使用Ansible管理windows主機,需要使用Administrator賬戶進行登錄。
默認情況下,windows系統是不允許使用Administrator管理員賬戶進行登錄的,在開機登錄界面也將Administrator賬戶隱藏了。我們需要啓用Administrator賬戶,如果已經可以使用Administrator進行登錄,則跳過這一步。

我們從如下路徑進行配置:計算機 –> 管理 –> 系統工具 –> 本地用戶和組 –> 用戶 –> Administrator,雙擊然後我們可以看到如下界面。

啓用Administrator

取消”賬戶已禁用”選項,應用。
然後我們再右鍵Administrator,爲該賬戶設置密碼。完成之後重啓即可使用Administrator賬戶進行登錄了。

安裝Microsoft .NET Framework 4

下載.Net Framework 4到本地進行安裝。

升級powershell版本爲3.0+

我們首先在powershell中運行get-host命令查看powershell版本,win7默認安裝的powershell爲2.0版本,我們需要升級到3.0+版本。

下載安裝Windows Management Framework 3.0,這裏選擇Windows6.1-KB2506143-x64.msu下載安裝。安裝完成之後,重啓系統,之後查看powershell版本會發現已經更新到了3.0版本。

配置winrm服務

Windows上winrm服務默認是未啓用的,使用如下命令可以查看狀態。

> winrm enumerate winrm/config/listener

使用如下命令配置winrm服務

> winrm quickconfig
> winrm set winrm/config/service/auth '@{Basic="true"}'
> winrm set winrm/config/service '@{AllowUnencrypted="true"}'

至此,windows主機的配置就完成了,接下來我們配置linux管理節點進行驗證。

Linux管理節點配置

首先參考前一篇文章安裝好ansible。

然後需要使用pip安裝pywinrm模塊。如果沒有安裝pip,則先參考前面的文章安裝並配置pip。

$ pip install "pywinrm>=0.2.2"

然後我們在/etc/ansible/hosts文件中增加windows主機的配置信息,如下:

[win1]
192.168.1.7  ansible_ssh_user="Administrator" ansible_ssh_pass="admin123" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore

然後使用如下命令進行驗證,我們看到,此時可以使用win_ping模塊連到之前配置的windows主機上了。

$ ansible win1 -m win_ping
192.168.1.7 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
} 

Windows下可用模塊

Windows下的可用模塊並沒有linux下那麼多,不過常用的功能已經有了,例如:

#測試聯通性
$ ansible win1 -m win_ping
192.168.1.7 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}

#拷貝文件
$ ansible win1 -m win_copy -a 'src=/etc/passwd dest=C:\'
192.168.1.7 | SUCCESS => {
    "changed": true, 
    "checksum": "395a02d7cd0aa830be63b4bbc6d2ee082bb14934", 
    "dest": "'C:\\passwd'", 
    "failed": false, 
    "operation": "file_copy", 
    "original_basename": "passwd", 
    "size": 1150, 
    "src": "/etc/passwd"
}

#創建刪除文件/目錄
$ ansible win1 -m win_file -a "path=C:\passwd state=absent"
192.168.1.7 | SUCCESS => {
    "changed": true, 
    "failed": false
}

Windows下更多的可用模塊可以參考官方文檔


參考資料:
1. http://www.cnblogs.com/kingleft/p/6391652.html
2. http://blog.csdn.net/juladoe/article/details/76963073

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章