ansible 二主機和組

主機清單的管理

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

1、主機和組

一、主機和組(Hosts and Groups)

經過配置/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變量。後面我又設定了一箇中國組,包含廣東、北京、上海

2、Patterns(主機與組正則匹配部分)

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"
}

三、邏輯非!與邏輯and

(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

相關文章
相關標籤/搜索