環(huán)境
- Ansible Server:CentOS7
- Windows Server:Windows Server 2012 R2(192.168.xx.xx)
1苇本、Windows Server
1.1 確認(rèn)Powershell版本
Powershell輸入$psversiontable
ansible依賴WinRM管理Windows終端,powershell版本最低為3.0,如低于此版本需要升級powershell,在此不做展開箭窜。
Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.16394
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
1.2 配置ansible腳本
# 創(chuàng)建目錄
mkdir c:\ansible
cd c:\ansible
# 下載腳本
wget https://github.com/ansible/ansible/raw/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
# 開啟WinRM服務(wù)
set-ExecutionPolicy RemoteSigned
.\ConfigureRemotingForAnsible.ps1 -SkipNetworkProfileCheck
1.3 開啟防火墻端口
# 放行5985端口可被訪問
netsh advfirewall firewall add rule name="Win-RM-HTTP" dir=in localport=5985 protocol=TCP action=allow
2饶氏、Ansible Server
2.1 安裝pywinrm
# 安裝epel倉庫后安裝pip,如果有pip可略過
yum install -y epel-release
yum install -y python-pip
# 安裝pywinrm
pip install pywinrm
# 配置ansible主機(jī)文件
vi /etc/ansible/hosts
# 修改或增加以下配置(YAML格式打厘,注意空格,不可用Tab)
all:
children:
windows:
hosts:
192.168.xx.xx:
ansible_user: Administrator
ansible_password: password #填寫服務(wù)器密碼
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_transport: ntlm #必須有杭棵,不然會報錯
ansible_winrm_server_cert_validation: ignore
在ansible2.0及以后版本婚惫,已經(jīng)將大部分
ansible_ssh_xxx
屬性更改為ansible_xxx
如果Windows服務(wù)器為集群氛赐,賬號密碼相同,該如何編寫終端文件呢先舷?
引入變量
這里假設(shè)我們有11臺服務(wù)器艰管,其中1臺為Hyper-V虛擬機(jī),4臺為AD域服務(wù)器蒋川,6臺為exchange服務(wù)器牲芋,信息如下:
- Hyper-V:192.168.0.100
- AD域:192.168.0.1、192.168.0.3捺球、192.168.0.5缸浦、 192.168.0.7
- exchange:192.168.0.10、 192.168.0.11 氮兵、192.168.0.21-24
# 注意YAML配置文件裂逐,均使用空格進(jìn)行2位縮進(jìn)。
all:
children:
kubernetes:
……省略
windows:
children:
hyper-v:
hosts:
192.168.0.100:
ansible_user: Administrator
ansible_password: 密碼
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_transport: ntlm
ansible_winrm_server_cert_validation: ignore
ad:
hosts:
192.168.0.1:
192.168.0.3:
192.168.0.5:
192.168.0.7:
vars: #此變量僅在ad組生效泣栈,故在exchange組仍然需要重新定義一次卜高。
ansible_user: 域\administrator #把域更換為自己的域名稱
ansible_password: 密碼
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_transport: ntlm
ansible_winrm_server_cert_validation: ignore
exchange:
hosts:
192.168.0.10:
192.168.0.11:
192.168.0.[21:24]: #對連續(xù)的主機(jī)可以簡寫
vars:
ansible_user: 域\administrator
ansible_password: 密碼
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_transport: ntlm
ansible_winrm_server_cert_validation: ignore
2.2 測試配置
# 測試
ansible windows -m win_ping
# 返回如下信息代表成功
192.168.xx.xx | SUCCESS => {
"changed": false,
"ping": "pong"
}
3、踩坑
3.1 plaintext: the specified credentials were rejected by the server
# 返回錯誤
ansibile windows -m win_ping
192.168.xx.xx | UNREACHABLE! => {
"changed": false,
"msg": "plaintext: the specified credentials were rejected by the server",
"unreachable": true
}
# 解決方法
vi /etc/ansible/hosts
# 編輯主機(jī)的配置文件南片,添加以下字段
ansible_winrm_transport: ntlm
3.2 Windows返回中文亂碼
# 查看IP地址掺涛,返回信息中文亂碼
ansible windows -m win_command -a 'ipconfig'
# 解決辦法
vi /etc/ansible/ansbile.cfg
# 修改為如下樣式
#module_lang = C
#module_set_locale = False
module_lang = zh_CN.UTF-8
module_set_locale = True
實(shí)際發(fā)現(xiàn)并不能解決亂碼問題,后期再研究疼进。
參考文章:
- 使用Ansible管理Windows:https://wsgzao.github.io/post/ansible-windows/
- 自動注冊薪缆,實(shí)現(xiàn)自動發(fā)現(xiàn)agent并添加監(jiān)控:https://www.cnblogs.com/zhenglisai/p/6807096.html