Ansible2:主機清單【轉】

來源:互聯網
上載者:User

標籤:存在   開頭   1.2   文檔   erp   mod   sts   center   limit   

Ansible 通過讀取預設的主機清單配置/etc/ansible/hosts,可以同時串連到多個遠程主機上執行任務, 預設路徑可以通過修改 ansible.cfg 的 hostfile 參數指定路徑。

一、Hosts and Groups(主機與組)

對於/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=‘[email protected]‘
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‘

上面的樣本中指定了三台主機,三台主機的用密碼分別是[email protected]、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 直接理解為正則實際是不完全準確的,正常的理解為patterns意味著在ansible中管理哪些主機,也可以理解為,要與哪台主機進行通訊。在探討這個問題之前我們先看下ansible的用法:

ansible <pattern_goes_here> -m <module_name> -a <arguments>

直接上一個樣本:

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

還可以在開頭的地方使用”~”,用來表示這是一個Regex:

    ~(web|db).*\.yanruogu\.com

給兩個ansible-playbook中具體可能用的用法:

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

    ansible-palybook -e webservers:!{{excluded}}:&{{required}}

b、在ansible和ansible-playbook中,還可以通過一個參數”--limit”來明確指定排除某些主機或組:

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

 

 轉自

本文出自 “無名小卒” 部落格,請務必保留此出處http://breezey.blog.51cto.com/2400275/1757643

Ansible2:主機清單【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.