Ansible安裝好以後的主機清單配置文件有以下兩種:
一、yum安裝,配置文件默認路徑爲:
/etc/ansible/hosts
二、源碼包安裝,主機清單配置文件路徑須要從軟件包裏面拷貝,以下:html
[root@Ansible ~]# mkdir /etc/ansible --建立ansible目錄 [root@Ansible ~]# cp /usr/src/ansible-2.5.0/examples/hosts /etc/ansible/ --拷貝文件(已拷貝忽略就行了)
Ansible經過讀取默認的主機清單配置/etc/ansible/hosts(咱們前面已經拷貝)來同時鏈接到多個遠程主機,來執行遠程操做任務的。可是若是要修改默認路徑能夠經過修改主配置文件 ansible.cfg 的 hostfile 參數指定相應的路徑。
具體查看相應的路徑爲:node
[root@Ansible ~]# vim /etc/ansible/ansible.cfg --該配置文件後面會詳細說明 #remote_port = 22 #remote_user = root #private_key_file = /path/to/file #host_key_checking = False #hostfile = /etc/ansible/hosts
經過配置/etc/ansible/hosts這個文件來定義主機和組python
[root@Ansible ~]# vim /etc/ansible/hosts [web] #定義組名,可自定義 192.168.8.55 #定義主機IP 192.168.8.66 #新定義一臺主機IP
組定義:
能夠根據本身的需求將龐大的主機分紅具備標識的組
主機定義:
可使用域名、主機名、IP地址表示;固然使用前二者時,也須要主機能反解析相應的IP地址,通常此類配置中多使用IP地址
示例:nginx
[root@Ansible ~]# ansible web -m command -a 'uptime' 192.168.8.66 | SUCCESS | rc=0 >> 15:54:44 up 13:52, 4 users, load average: 0.00, 0.01, 0.05 192.168.8.55 | SUCCESS | rc=0 >> 15:54:45 up 10:47, 4 users, load average: 0.24, 0.06, 0.06
ssh默認的端口是22(此時的Ansible主機配置文件能夠省略),可是若是某些主機的ssh運行在自定義的端口上,Ansible使用Paramiko進行ssh鏈接時不會使用你ssh配置文件中列出的端口,可是若是修改ansible使用openssh進行ssh鏈接時將會使用:
在Client 192.168.8.66上ssh開啓2個端口鏈接web
[root@Client ~]# vim /etc/ssh/sshd_config 17 Port 10022 18 Port 22 [root@Client ~]# systemctl restart sshd --修改以後,重啓sshd服務生效
在Ansible服務端的配置:正則表達式
[root@Ansible ~]# vim /etc/ansible/hosts [web] 192.168.199.123:10022 192.168.199.124
示例:shell
[root@Ansible ~]# ansible web -m command -a 'uptime' 192.168.8.66 | SUCCESS | rc=0 >> 16:17:28 up 14:14, 4 users, load average: 0.00, 0.02, 0.05 192.168.8.55 | SUCCESS | rc=0 >> 16:17:29 up 11:10, 4 users, load average: 0.01, 0.03, 0.05
hosts官方有個例子是經過指定主機名的範圍來進行多臺主機的定義apache
[root@Ansible ~]# vim /etc/ansible/hosts [webservers] node[01:50] .example.com
上面指定了從node01.com到node50. example.com,webservers組共計50臺主機vim
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等其餘語言
上面的實例也能夠配置直接使用用戶名和密碼進行鏈接tomcat
[root@Ansible ~]# vim /etc/ansible/hosts [web] 192.168.8.66 ansible_ssh_port=10022 ansible_ssh_user=root ansible_ssh_pass='123456' 192.168.8.55
示例:
[root@Ansible ~]# ansible web -m command -a 'uptime' 192.168.8.66 | SUCCESS | rc=0 >> 16:46:32 up 14:43, 4 users, load average: 0.21, 0.06, 0.06 192.168.8.55 | SUCCESS | rc=0 >> 16:46:34 up 11:39, 7 users, load average: 0.16, 0.41, 0.37
變量也能夠經過組名,而後應用到組內的全部成員。組變量的做用域是覆蓋組全部成員,經過定義一個新塊,塊名由組名+":vars" 組成。格式以下:
[root@Ansible ~]# vim /etc/ansible/hosts [web] Server Client [web:vars] Server_01=192.168.8.8 Client_01=192.168.8.66 [root@Ansible ansible]# ansible web -m command -a 'uptime' Client | SUCCESS | rc=0 >> 17:26:55 up 15:24, 4 users, load average: 0.00, 0.01, 0.05 Server | SUCCESS | rc=0 >> 17:26:55 up 14:42, 5 users, load average: 0.05, 0.14, 0.18
說明:上面的web組中包含了兩臺主機Server和Client,經過對web組指定了vars變量,相應的Server和Client主機至關於相應的指定了Server_01和Client_01變量的參數值。
同時Ansible支持組嵌套組 ,經過定義一個新塊,塊名由組名+":children"組成。格式以下:
[root@Ansible ~]# vim /etc/ansible/hosts [shenzhen] host1 host2 [guangzhou] host3 host4 [guangdong:children] shenzhen guangzhou [guangdong:vars] tomcat=192.168.8.8 nginx=192.168.8.66 apache=192.168.8.77 zabbix=192.168.8.88 [china:children] guangdong beijing shanghai
說明:上面我指定了深圳組有host一、host2;廣州組有host三、host4,我又指定了廣東組,同時包含深圳和廣州;同時爲該組內的全部主機指定了四個vars變量。後面我又設定了一箇中國組,包含廣東、北京、上海
Patterns 其實就是Ansible中的規則去管理哪些主機,也能夠理解爲,要與哪臺主機進行通訊。
ansible
-m -a
ansible <執行的客戶機列表> -m <調用的模塊> -a <執行的參數>
示例:
[root@Ansible ~]# ansible web -m service -a "name=httpd state=restarted" 192.168.8.66 | SUCCESS => { "changed": true, "name": "httpd", "state": "started", "status": { …… } }
這裏是Ansible對web組內的主機來進行遠程重啓httpd服務。
其中web就是Patterns部分,而之因此上面說Pattern(模式)能夠理解爲正則,主要針對下面常常用到的用法而言的。
表示全部的主機
all
也能夠寫IP地址或系列主機名
one.example.com
one.example.com:two.example.com
192.168.8.50
192.168.8.*
示例:
[root@Ansible ~]# ansible all -m ping --全部的客戶端執行ping [root@Ansible ~]# ansible '*' -m ping 192.168.8.66 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.8.55 | SUCCESS => { "changed": false, "ping": "pong" }
在Patterns指定要操做的主機可使用不一樣的方法表示:
web[0] #表示web主機組中的第一臺主機
web:data #表示web和data主機組中的全部主機
web[0:25] #表示匹配web組的第1個到第25個主機
.51cto.com #表示全部的以51cto.com結尾的主機.com #表示全部的以.com結尾的主機
Patterns能夠分別表示一個或多個組,多組之間用冒號分開,意味着一個主機能夠屬於多個組
[root@Ansible ~]# vim /etc/ansible/hosts [web] Client Server 192.168.8.55 [server] a=192.168.8.66 b=192.168.8.8 [root@Ansible ~]# ansible web:server -m ping Client | SUCCESS => { "changed": false, "ping": "pong" } Server | SUCCESS => { "changed": false, "ping": "pong" } 192.168.8.55 | SUCCESS => { "changed": false, "ping": "pong" }
(1)排除特定的主機
web:!servers #目標主機必須在web組中但不在servers組中
ansible web:!server -m ping
(2)執行交集的主機
web:&servers #目標主機必須既在web組中又在servers組中
ansible web:&servers -m ping
(3)更復雜的表達式
ansible web: servers:&python:!data -m ping
上面這個複雜的表達式最後表示的目標主機必須知足:在web或者servers組中,必須還存在於python組中,可是不在data組中。
*.51cto.com:*.org
還能夠在開頭的地方使用」~」,用來表示這是一個正則表達式:
~(web|server).*\.51cto\.com
如下是ansible-playbook中具體可能用的用法:
(1)在ansible-palybook命令中,你也可使用變量來組成這樣的表達式,可是你必須使用「-e」的選項來指定這個表達式(一般這種方法不經常使用)
ansible-palybook -e webservers:!{{excluded}}:&{{required}}
(2)在Ansible和ansible-playbook中,還能夠經過一個參數」--limit」來明確指定排除某些主機或組
ansible-playbook site.yml --limit group
(3)從Ansible1.2開始,若是想排除一個文件中的主機可使用"@"
ansible-playbook site.yml --limit @retry_hosts.txt
Ansible官方文檔:
http://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html