厲害—Ansible管理windows集群


最近公司新項目需要安裝400+windows server 2012系統的工作站,想着怎么能像linux下運用ansible批量管理,linux就很簡單了有ssh服務

但是下卻沒這么簡單,但還是有辦法那就是Powershell。

Ansible可用於管理Windows集群,不過管理節點需要部署在Linux機器上,而且需要預裝python winrm模塊。

同時,Windows機器上的powershell版本需要滿足3.0+,且Management Framework也需要滿足3.0+版本。

一、首先在Powershell窗口執行get-host命令查看版本

二、配置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管理節點配置

1.然后需要使用pip安裝pywinrm模塊。如果沒有安裝pip,則先參考python分類博文安裝並配置pip。

[root@cmdb-server ansible]# pip install "pywinrm>=0.2.2"

 

2.配置hosts文件

[wind]
192.168.247.151 ansible_ssh_user="Administrator" ansible_ssh_pass="NPS#2018" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore

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

[root@cmdb-server ansible]# ansible wind -m win_ping
192.168.247.151 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

 4.遠程推送文件

[root@cmdb-server ansible]# ansible wind -m win_copy -a 'src=/etc/ansible/PreventCopy.jar dest=C:\'
192.168.247.151 | SUCCESS => {
    "changed": true, 
    "checksum": "c3da689273ec80f8072573b73dd87d3bc68e0395", 
    "dest": "'C:\\PreventCopy.jar'", 
    "operation": "file_copy", 
    "original_basename": "PreventCopy.jar", 
    "size": 62463090, 
    "src": "/etc/ansible/PreventCopy.jar"
}

 5.刪除遠程文件

[root@cmdb-server ansible]# ansible wind -m win_file -a "path=C:\PreventCopy.jar state=absent"
192.168.247.151 | SUCCESS => {
    "changed": true
}

 更多模塊及詳細功能介紹:https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html除win開頭的模塊外,scripts,raw,slurp,setup模塊在Windows 下也可正常使用。

Windows下可用模塊雖不及Linux豐富,但基礎功能均包括在內,以下幾個模塊為常用模塊:
win_acl (E) —設置文件/目錄屬主屬組權限;
win_copy—拷貝文件到遠程Windows主機;
win_file —創建,刪除文件或目錄;
win_lineinfile—匹配替換文件內容;
win_package (E) —安裝/卸載本地或網絡軟件包;
win_ping —Windows系統下的ping模塊,常用來測試主機是否存活;
win_service—管理Windows Services服務;
win_user —管理Windows本地用戶。

window的通信檢測為:ansible testwin -m win_ping

復制文件到window:
ansible windows -m win_copy -a "src=/etc/passwd dest=E:filepasswd"

刪除文件:
ansible windows -m win_file -a "path=E:filepasswd state=absent"

新增用戶:
ansible windows -m win_user -a "name=stanley password=magedu@123 groups=Administrators"

重啟服務:
ansible windows -m win_service -a "name=spooler state=restarted"

獲取window主機信息:
ansible windows -m setup

執行ps腳本:
ansible windows -m script -a "E://test.ps1"

獲取IP地址:
ansible windows -m win_command -a "ipconfig"

查看文件狀態:
ansible windows -m win_stat -a "path='C://Windows/win.ini'"

移動文件:
ansible windows -m raw -a "cmd /c 'move /y d:\issue c:\issue'"

創建文件夾:
ansible windows -m raw -a "mkdir d:\tst"

重啟:
ansible windows -m win_reboot

結束程序:
ansible windows-m raw -a "taskkill /F /IM QQ.exe /T"

如果window主機傳回來的中文是亂碼,則修改ansible控制機上的python編碼:
sed -i "s#tdout_buffer.append(stdout)#tdout_buffer.append(stdout.decode('gbk').encode('utf-8'))#g" /usr/lib/python2.6/site-packages/winrm/protocol.py
sed -i "s#stderr_buffer.append(stderr)#stderr_buffer.append(stderr.decode('gbk').encode('utf-8'))#g" /usr/lib/python2.6/site-packages/winrm/protocol.py

指定配置文件獲取win網卡信息
ansible -i win_hosts windows -m raw -a "ipconfig"
 
使用默認的配置文件獲取網卡信息
ansible windows -m raw -a "ipconfig"
 
拷貝文件到遠程Windows主機
ansible windows -m win_copy -a 'src=/etc/passwd dest=F:\file\passwd'
 
ansible windows -m win_copy -a "src=/usr/local/src/PayChannels20.35.zip dest=D:\Tomcat8630\webapps\PayChannels20.35.zip"
 
ansible windows -m win_copy -a "src=/usr/local/src/SupplierPay.zip dest=D:\SupplierPay.zip
 
將.zip解壓到遠程Windows主機,遠程主機上必須存在需要解壓的源文件
ansible windows -m win_unzip -a"creates=no src=D:\Tomcat8620\webapps\PayChannels-8630.zip dest=D:\Tomcat8620\webapps"
解壓到D盤:ansible windows -m win_unzip -a"creates=no src=D:\SupplierPay.zip dest=D:"
 
 
重啟遠程windows主機的服務
ansible windows -m win_service -a "name=Tomcat8630 state=restarted"
重啟node.js(.bat命令)
ansible windows -m win_command -a "chdir=D:\SupplierPay .\http_restart.bat"

執行win_command模塊命令
啟動redis
ansible windows -m win_command -a "chdir=D:\Redis server-start.bat "

ansible win -m win_command -a "chdir=C:\ a.bat "
ps:"chdir=C:\ a.bat " 之前有空格

刪除文件或者目錄
ansible windows -m win_file -a "dest=D:\Tomcat8630\log\ state=absent"
ansible windows -m win_file -a "dest=D:\Tomcat8630\logs\ state=absent"
 
創建用戶
ansible windows -m win_user -a "name=aa passwd=123456"
 
創建一個名叫user1的管理員用戶,要求能夠遠程訪問
ansible windows -m win_user -a "name=user1 password=123 groups='Administrators,Remote Desktop Users'"
 
重啟的第一種方式
ansible windows -m win_shell -a "shutdown -r -t 1"

重啟的第二種方式
ansible windows -m win_reboot
獲取ip地址

ansible windows -m raw -a "ipconfig"

獲取身份

ansible windows -m win_command -a "whoami"

移動文件

ansible windows -m raw -a "cmd /c 'move /y D:\Ansible\product\DBFPlus.exe D:\Ansible\back\'"

移動文件目標端也需要制定到文件,而不能只制定到所在目錄位置

ansible windows -m raw -a "cmd /c 'move /y D:\Ansible\product D:\Ansible\back'"

移動文件夾源端和目標端目錄都不能帶反斜杠/。且將源的整個目錄移到目的端目錄里。

創建文件夾

ansible windows -m raw -a "md d:\Ansible\justin"

刪除文件或目錄

ansible windows -m win_file -a "path=d:\Ansible\justin state=absent"

結束某程序

ansible windows -m raw -a "taskkill /F /IM snmp.exe /T"

文件傳輸

ansible windows -m win_copy -a 'src=/app/svn/127_Client/118919/zjcfg.zip dest=D:\soft\'

目標路徑不能含關鍵詞ansible,否則提示無效路徑,源使用反斜杠結果將遞歸傳輸目錄下所有文件,源不一反斜杠結尾將整個目錄傳輸到目標目錄下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM