Ansible2 主機清單

2021-08-07 23:56:59 字數 4720 閱讀 4213

ansible 通過讀取預設的主機清單配置/etc/ansible/hosts,可以同時連線到多個遠端主機上執行任務, 

預設路徑可以通過修改 ansible.cfg 的 hostfile 引數指定路徑。

對於/etc/ansible/hosts最簡單的定義格式像下面:

1、簡單的主機和組

mail

.yanruogu

.com

[webservers

]web1

.yanruogu

.com

web2

.yanruogu

.com 

[dbservers

]db1

.yanruogu

.com

db2.

yanruogu

.com

a、中括號中的名字代表組名,可以根據自己的需求將龐大的主機分成具有標識的組,如上面分了兩個組webservers和dbservers組;

b、主機(hosts)部分可以使用網域名稱、主機名、ip位址表示;當然使用前兩者時,也需要主機能反解析到相應的ip位址,一般此類配置中多使用ip位址;

2、埠與別名

如果某些主機的ssh執行在自定義的埠上,ansible使用paramiko進行ssh連線時,不會使用你ssh配置檔案中列出的埠,但是如果修改ansible使用openssh進行ssh連線時將會使用:

192.168.1.1:3091
假如你想要為某些靜態ip設定一些別名,可以這樣做:

web1 ansible_ssh_port = 3333 ansible_ssh_host = 192.168.1.2
上面的 web1別名就指代了ip為192.168.1.2,ssh連線埠為3333的主機。

3、指定主機範圍

[webservers]

www[01:50].yanruogu.com

[databases]

db-[a:f].yanruogu.com

上面指定了從web1到web50,webservers組共計50臺主機;databases組有db-a到db-f共6臺主機。

4、使用主機變數

以下是hosts部分中經常用到的變數部分:

ansible_ssh_host     #用於指定被管理的主機的真實ip

ansible_ssh_port     #用於指定連線到被管理主機的ssh埠號,預設是22

ansible_ssh_user     #ssh連線時預設使用的使用者名稱

ansible_ssh_pass     #ssh連線時的密碼

ansible_sudo_pass     #使用sudo連線使用者時的密碼

ansible_sudo_exec     #如果sudo命令不在預設路徑,需要指定sudo命令路徑

ansible_ssh_private_key_file     #秘鑰檔案路徑,秘鑰檔案如果不想使用ssh-agent管理時可以使用此選項

ansible_shell_type     #目標系統的shell的型別,預設sh

ansible_connection     #ssh 連線的型別: local , ssh , paramiko,在 ansible 1.2 之前預設是 paramiko ,後來智慧型選擇,優先使用基於 controlpersist 的 ssh (支援的前提)

ansible_python_interpreter     #用來指定python直譯器的路徑,預設為/usr/bin/python 同樣可以指定ruby 、perl 的路徑

ansible_*_interpreter     #其他直譯器路徑,用法與ansible_python_interpreter類似,這裡"*"可以是ruby或才perl等其他語言

示例如下:

[test]

192.168.1.1 ansible_ssh_user=root ansible_ssh_pass='p@ssw0rd'

192.168.1.2 ansible_ssh_user=breeze ansible_ssh_pass='123456'

192.168.1.3 ansible_ssh_user=bernie ansible_ssh_port=3055 ansible_ssh_pass='456789'

上面的示例中指定了三颱主機,三颱主機的用密碼分別是p@ssw0rd、123456、45789,指定的ssh連線的使用者名稱分別為root、breeze、bernie,ssh 埠分別為22、22、3055 ,這樣在ansible命令執行的時候就不用再指令使用者和密碼等了。

5、組內變數

變數也可以通過組名,應用到組內的所有成員:

[test]

host1

host2

[test:vars]

ntp_server=192.168.1.10

proxy=192.168.1.20

上面test組中包含兩台主機,通過對test組指定vars變更,相應的host1和host2相當於相應的指定了ntp_server和proxy變數引數值 。

6、組的包含與組內變數

[wuhan]

web1

web2

[suizhou]

web4

web3

[hubei:children]

wuhan

suizhou

[hubei:vars]

ntp_server=192.168.1.10

zabbix_server=192.168.1.10

[china:children]

hubei

hunan

上面的示例中,指定了武漢組有web1、web2;隨州組有web3、web4主機;又指定了乙個湖北組,同時包含武漢和隨州;同時為該組內的所有主機指定了2個vars變數。設定了乙個組中國組,包含湖北、湖南。

注:vars變數在ansible ad-hoc部分中基本用不到,主要用在ansible-playbook中。

把patterns 直接理解為正則實際是不完全準確的,正常的理解為patterns意味著在ansible中管理哪些主機,也可以理解為,要與哪台主機進行通訊。在**這個問題之前我們先看下ansible的用法:

ansible -m -a
ansible webservers -m service -a "name=httpd state=restarted"
這裡是對webservers 組或主機重啟httpd服務 ,其中webservers 就是pattern部分。而之所以上面說pattern(模式)可以理解為正則,主要針對下面經常用到的用法而言的。

1、表示所有的主機可以使用all 或*

2、萬用字元與邏輯或

利用萬用字元還可以指定一組具有規則特徵的主機或主機名,冒號表示or---邏輯或

web1.yanruogu.com

web1.yanruogu.com:web2.yanruogu.com

192.168.1.1

192.168.1.*

當然,這裡的*萬用字元也可以用在前面,如:

*.yanruogu.com

*.com    

webservers1[0]     #表示匹配 webservers1 組的第 1 個主機

webservers1[0:25]  #表示匹配 webservers1 組的第 1 個到第 25 個主機(官網文件是":"表示範圍,測試發現應該使用"-",注意不要和匹配多個主機組混淆)

上面的用法,在多個組之間同樣適用 ,如:

webservers

webservers:dbservers  #表示兩個組中所有的主機

3、邏輯非與邏輯and

非的表示式,如,目標主機必須在組webservers但不在phoenix組中

webserver:!phoenix
交集的表示式,如,目標主機必須即在組webservers中又在組staging中

webservers:&staging
乙個更複雜的示例:

webserver:dbservers:&staging:!phoenix
上面這個複雜的表示式最後表示的目標主機必須滿足:在webservers或者dbservers組中,必須還存在於staging組中,但是不在phoenix組中 。

4、混合高階用法

*.yanruogu.com:*.org
還可以在開頭的地方使用」~」,用來表示這是乙個正規表示式:

~(web|db).*\.yanruogu\.com
給兩個ansible-playbook中具體可能用的用法:

a、在ansible-palybook命令中,你也可以使用變數來組成這樣的表示式,但是你必須使用「-e」的選項來指定這個表示式(通常我們不這樣用):

ansible-palybook -e webservers:!}:&}
b、在ansible和ansible-playbook中,還可以通過乙個引數」--limit」來明確指定排除某些主機或組:

ansible-playbook site.yml --limit datacenter2
c、從ansible1.2開始,如果想排除乙個檔案中的主機可以使用"@":
ansible-playbook site.yml --limit @retry_hosts.txt

Ansible2 主機清單

ansible 通過讀取預設的主機清單配置 etc ansible hosts,可以同時連線到多個遠端主機上執行任務,預設路徑可以通過修改 ansible.cfg 的 hostfile 引數指定路徑。對於 etc ansible hosts最簡單的定義格式像下面 1 簡單的主機和組 mail.yan...

ansible 2 建立主機分組

建立主機分組,要求 1.在inventory中建立分組,database,這個分組包含servera和serverc 2.在inventory中建立分組,webserver,這個分組包含serverb和serverd 3.在database分組的裝置中建立乙個壓縮檔案名為 var tmp db.ta...

主機清單,ansible模組

1 基於密碼的方式 root localhost vim etc ansible hosts web01 192.168.13.20 ansible ssh user root ansible ssh port 22 ansible ssh pass 1 web02 192.168.15.100 a...