您好,登錄后才能下訂單哦!
系統(tǒng)環(huán)境:CentOS Linux release 7.5.1804 (Core)
ansible版本:ansible 2.9.0
Ansible配置以ini格式存儲(chǔ)配置數(shù)據(jù),在Ansible中幾乎所有配置都可以通過(guò)Ansible的Playbook或環(huán)境變量來(lái)重新賦值。在運(yùn)行Ansible命令時(shí),命令將會(huì)按照以下順序查找配置文件。
(1)ANSIBLE_CONFIG :
首先,Ansible命令會(huì)檢查環(huán)境變量,及這個(gè)環(huán)境變量指向的配置文件。
(2)./ansible.cfg :
其次,將會(huì)檢查當(dāng)前目錄下的ansible.cfg配置文件。
(3)~/.ansible.cfg :
再次,將會(huì)檢查當(dāng)前用戶home目錄下的.ansible.cfg配置文件。
(4)/etc/ansible/ansible.cfg :
最后,將會(huì)檢查在用軟件包管理工具安裝Ansible時(shí)自動(dòng)產(chǎn)生的配置文件。
大多數(shù)的Ansible參數(shù)可以通過(guò)設(shè)置帶有ANSIBLE_
開(kāi)頭的環(huán)境變量進(jìn)行配置,參數(shù)名稱必須都是大寫(xiě)字母,如下配置:
export ANSIBLE_SUDO_USER=root
設(shè)置了環(huán)境變量之后,ANSIBLE_SUDO_USER
就可以在后續(xù)操作中直接引用。
Ansible有很多配置參數(shù),以下是幾個(gè)默認(rèn)的配置參數(shù):
inventory = /root/ansible/hosts
library = /usr/share/my_modules/
forks = 5
sudo_user = root
remote_port = 22
host_key_checking = False
timeout = 20
log_path = /var/log/ansible.log
對(duì)上面的參數(shù)進(jìn)行說(shuō)明:
<1> inventory:
該參數(shù)表示inventory文件的位置,資源清單(inventory)就是Ansible需要連接管理的一些主機(jī)列表。
<2> library:
Ansible的所有操作都使用模塊來(lái)執(zhí)行實(shí)現(xiàn),這個(gè)library參數(shù)就是指向存放Ansible模塊的目錄。
<3> forks:
設(shè)置默認(rèn)情況下Ansible最多能有多少個(gè)進(jìn)程同時(shí)工作,默認(rèn)5個(gè)進(jìn)程并行處理。具體需要設(shè)置多少個(gè),可以根據(jù)控制端性能和被管理節(jié)點(diǎn)的數(shù)量來(lái)確定。
<4> sudo_user:
設(shè)置默認(rèn)執(zhí)行命令的用戶,也可以在playbo o k中重新設(shè)置這個(gè)參數(shù)。
<5> remote_port:
指定連接被管理節(jié)點(diǎn)的管理端口,默認(rèn)是22,除非設(shè)置了特殊的SSH端口,否則不需要修改此參數(shù)。
<6> host_key_checking:
設(shè)置是否檢查SSH主機(jī)的密鑰??梢栽O(shè)置為T(mén)rue或False。即ssh的主機(jī)再次驗(yàn)證。
<7> timeout:
設(shè)置SSH連接的超時(shí)間隔,單位是秒。
<8> log_path:
Ansible默認(rèn)不記錄日志,如果想把Ansible系統(tǒng)的輸出記錄到日志文件中,需要設(shè)置log_path。需要注意,模塊將會(huì)調(diào)用被管節(jié)點(diǎn)的(r)syslog來(lái)記錄,執(zhí)行Ansible的用戶需要有寫(xiě)入日志的權(quán)限。
將ansible server的ssh公鑰分發(fā)到各被管節(jié)點(diǎn)上。
指定ssh公鑰生成格式和存放路徑:ssh-keygen -t rsa -f /tmp/temp/id_rsa -N ''
ssh公鑰分發(fā)目標(biāo)機(jī):ssh-copy-id root@192.168.246.204
也可以使用ansible自身來(lái)批量添加密鑰到被控節(jié)點(diǎn)上。使用ansible的authorized_key模塊即可。
以下是借助expect 工具實(shí)現(xiàn)非交互式的s s h- co py- id,免得總是詢問(wèn)遠(yuǎn)程用戶的登錄密碼。
# 安裝expect
yum install -y expect
# 編輯expect腳本
cat auto_sshcopyid.exp
#!/usr/bin/expect
set timeout 10
set user_hostname [lindex $argv 0]
set password [lindex $argv 1]
spawn ssh-copy-id $user_hostname
expect {
"(yes/no)?"
{
send "yes\n"
expect "*password: " { send "$password\n" }
}
"*password: " { send "$password\n" }
}
expect eof
# 編輯調(diào)用expect的sehll腳本
#!/bin/bash
#加載系統(tǒng)函數(shù)庫(kù)
. /etc/init.d/functions
ip=$(echo -n "$(seq -s "," 59 61),187" | xargs -d "," -i echo 192.168.246.{})
password="wtf"
for i in $ip
do
ping -c 1 $i > /dev/null
if [ $(echo $?) -eq 0 ];then
/tmp/temp/auto_sshcopyid.exp root@$i $password & >> /tmp/temp/a.log
action "$i is ok" /bin/true
else
action "$i There is no!" /bin/false
fi
done
# 執(zhí)行shell腳本配置互信
chmod +x /tmp/temp/{sshkey.sh,auto_sshcopyid.exp}
./sshkey.sh
向默認(rèn)的inventory文件/etc/ansible/hosts中添加上幾個(gè)被管節(jié)點(diǎn)清單。
[test]
## ansible_python_interpreter指定python解釋器版本
192.168.246.187 ansible_python_interpreter=/usr/local/python3/bin/python3
192.168.246.188
192.168.246.189
使用ping模塊測(cè)試被管節(jié)點(diǎn)。能成功,說(shuō)明ansible能控制該節(jié)點(diǎn)。
## 單獨(dú)測(cè)試一臺(tái)node主機(jī)
ansible 192.168.246.187 -m ping
192.168.246.187 | SUCCESS => {
"changed": false,
"ping": "pong"
}
## 測(cè)試一個(gè)主機(jī)組
ansible test -m ping
192.168.246.188 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.188 port 22: No route to host",
"unreachable": true
}
192.168.246.189 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.189 port 22: No route to host",
"unreachable": true
}
192.168.246.187 | SUCCESS => {
"changed": false,
"ping": "pong"
}
如果要指定非root用戶運(yùn)行ansible命令,則加上"--sudo"或"-s"來(lái)提升為sudo_user配置項(xiàng)所指定用戶的權(quán)限。
ansible 192.168.246.187 -m ping -b --become-user=root --become-method=sudo
inventory用于定義ansible要管理的主機(jī)列表,可以定義單個(gè)主機(jī)和主機(jī)組。上面的/etc/ansible/hosts就是默認(rèn)的inventory。下面展示了inventory常用的定義規(guī)則。
cat -n /etc/ansible/hosts
1 192.168.100.59:22
2 192.168.100.60 ansible_ssh_pass=123456 ansible_ssh_port=22
3 [nginx]
4 192.168.100.5[7:9]
5 [nginx:vars]
6 ansible_ssh_pass='123456'
7 [webservers:children]
8 nginx
第一行和第二行單獨(dú)定義主機(jī),第一行帶上了連接被管節(jié)點(diǎn)的端口,第二行帶上了單獨(dú)傳遞給ssh的參數(shù),分別是ssh連接時(shí)的登錄遠(yuǎn)程用戶的密碼參數(shù)和ssh的連接端口。
第三行和第四行定義的是nginx主機(jī)組,該組中包含了192.168.100.57 到59這3臺(tái)主機(jī)。還支持字母的擴(kuò)展,如"web[a- d]"。
第五行和第六行定義了要傳遞給nginx主機(jī)組的變量。若定義為"[all:vars]"或"[*:vars]"則表示傳遞給所有主機(jī)的變 量。
第七和第八行定義了一個(gè)新的主機(jī)組webservers,改組的組成員有nginx組。
可以指定多個(gè)inventory配置文件,只需在ansible的配置文件如/etc/ansible/ansible.cfg中將inventory指令設(shè)置為 對(duì)應(yīng)的文件或目錄即可,如果是目錄,那么此目錄下的所有文件都是inventory文件。
inventory文件中可以使用一些內(nèi)置變量,絕大多數(shù)ansible的連接和權(quán)限變量都可以在此使用,見(jiàn)ansible命令解釋
。常見(jiàn)的有:
(1)ansible_ssh_host :
ansible使用ssh要連接的主機(jī)。
(2)ansible_ssh_port :
ssh的端口。默認(rèn)為22。
(3)ansible_ssh_user :
ssh登錄的用戶名。默認(rèn)為root。
(4)ansible_ssh_pass :
ssh登錄遠(yuǎn)程用戶時(shí)的認(rèn)證密碼。
(5)ansible_ssh_private_key_file :
ssh登錄遠(yuǎn)程用戶時(shí)的認(rèn)證私鑰。
(6)ansible_connection :
使用何種模式連接到遠(yuǎn)程主機(jī)。默認(rèn)值為smart(智能),表示當(dāng)本地ssh支持持久連接(controlpersist)時(shí)采用ssh連接,否則采用python的paramiko ssh連接。
(7)ansible_shell_type :
指定遠(yuǎn)程主機(jī)執(zhí)行命令時(shí)的shell解析器,默認(rèn)為sh(不是bash,它們是有區(qū)別的,也不是全路徑)。
(8)ansible_python_interpreter :
遠(yuǎn)程主機(jī)上的python解釋器路徑。默認(rèn)為/usr/bin/python。
(9)ansible_*_interpreter :
使用什么解釋器。例如,sh、bash、awk、sed、expect、ruby等等。
其中有幾個(gè)參數(shù)可以在配置文件ans ible.cf g中指定,但指定的指令不太一樣,以下是對(duì)應(yīng)的配置項(xiàng):
(1)remote_port:
對(duì)應(yīng)于ansible_ssh_port。
(2)remote_user:
對(duì)應(yīng)于ansible_ssh_user。
(3)private_key_f ile:
對(duì)應(yīng)于ansible_ssh_private_key_f ile。
(4)excutable:
對(duì)應(yīng)于ansible_shell_type。但有一點(diǎn)不一樣,excutable必須指定全路徑,而后者只需指定 basename。
如果定義了"ansible_ssh_host",那么其前面的主機(jī)名就稱為別名。例如,以下inventory文件中nginx就是一個(gè)別名,真正連接的對(duì)象是192.168.246.187。/etc/ansible/hosts
如下:
[test]
nginx ansible_ssh_host=192.168.246.187
#192.168.246.187
192.168.246.188
192.168.246.189
[test:vars]
ansible_ssh_private_key_file=/root/.ssh/rsa_back/id_rsa
ansible_python_interpreter=/usr/local/python3/bin/python3
執(zhí)行ansible:
ansible test -m ping
nginx | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.246.188 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.188 port 22: No route to host",
"unreachable": true
}
192.168.246.189 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.189 port 22: No route to host",
"unreachable": true
}
手動(dòng)指定inventory主機(jī)清單文件路徑:
ansible test -i /tmp/inventory_file -m ping
本博文是參考馬龍帥大佬文章整理生成,屬于博主讀書(shū)筆記,如有侵權(quán),請(qǐng)大佬與我聯(lián)系,立刪!
最后,感謝開(kāi)源,擁抱開(kāi)源~
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。