安裝:
yum -y install ansible
rpm -ql ansible
安裝完ansible之後,這個檔案指我們可以對那些主機實行操作。/etc/ansible/hosts
ansible配置檔案詳解:
egrep -v "^#|^$" ansible.cfg -n
10:[defaults]
14:hostfile = /etc/ansible/hosts#預設的資源檔案
15:library = /usr/share/ansible#預設庫檔案,也可以把自己寫的子產品檔案,放裡這裡面。
16:remote_tmp = $home/.ansible/tmp#ansible在執行時預設生成的臨時檔案。
17:pattern = *
18:forks = 5#并發
19:poll_interval = 15 #多長時間去看一下執行的狀态
20:sudo_user = root
23:transport = smart#傳輸的方式,如ssh
24:remote_port = 22
cd /etc/ansible/
mv hosts hosts.back
#定義一個組叫test, test組下面有192.168.33.101 這個主機。
ansible -i /etc/ansible/hosts test -u root -m command -a 'ls /home' k
#-i 指定hosts檔案,test是指組;-u root 是指用那個使用者;-m 指定子產品 a 是指子產品内的參數, ls /home 執行的指令; -k 遠端主機的密碼。
#預設使用 /etc/ansible/hosts ,預設使用 root使用者,預設使用 command子產品。
簡要說明:
1、[test] 主機可以是ip位址,也可以使用域名,還可以使用數字和字母來組成一連續主機,如:192.168.33.[100:120]就是指192.168.33.100 192.168.33.101 ……
2、ansible 我們一般使用ssh key方式進行ssh認證,也可以使用-k使用互動模式。有了key我們就可以更加友善的操作。
ansible all m ping 用于檢測所有的主機是否線上,如果隻想檢測某一組,可以将all 改成該組組名,例:ansible test m ping 也可以直接輸入管理主機的ip位址。
3、預設使用的root進行所有的遠端管理,在大多數情況下,為了安全起見,人們更願意使用一個普通帳号來進行管理,我們可以在所有的被管理主機建立一個ansible的使用者,并讓其可以使用sudo擷取管理權限,當然在ansible主機上也需要有這麼樣一個使用者,并為其生成ssh key,然後通過修改/etc/ansible/ansible.cfg配置檔案裡的remote_user以使ansible預設使用ansible使用者進行管理,然後使用sudo 參數來擷取root權限,你也可以通過修改/etc/ansible.cfg裡的remote_port來修改ssh端口。
例:我們在ansible主機上執行ssh-keygen然後 ssh-copy-id 将key拷貝到目的主機上。
#all代表所有,也可以使用組名 ip位址 域名
也可以在ansible的hosts檔案裡指定使用者。
[test]
192.168.33.100 ansible_ssh_user=ansible
192.168.33.100 ansible_ssh_port=19828
#這樣就會以ansiible來進行遠端管理,我們可以配置sudo來切換權限。ansible_ssh_port=19828指定端口。
主機組之間的嵌套:
[ms:children]
mfs_log
mfs_node
mfs_master
mfs_client
[mfs_log]
192.168.33.101
[mfs_node]
192.168.33.102
[mfs_master]
192.168.33.103
[mfs-client]
#如果在上面嵌套定義了組,下面也要寫上,不然會報錯。
ansible子產品:
ansible-doc l 檢視ansible自帶的子產品
ansible-doc s command 檢視該子產品的用法
ansible -i /etc/ansible/hosts test -m setup 可以用來檢視遠端主機的一些基本資訊。
ansible test -m ping可以用來測試遠端主機的運作狀态
3.file
設定檔案的屬性
file子產品包含如下選項:
force:需要在兩種情況下強制建立軟連結,一種是源檔案不存在但之後會建立的情況下;另一種是目标軟連結已存在,需要先取消之前的軟鍊,然後建立新的軟鍊,有兩個選項:yes|no
group:定義檔案/目錄的屬組
mode:定義檔案/目錄的權限
owner:定義檔案/目錄的屬主
path:必選項,定義檔案/目錄的路徑
recurse:遞歸的設定檔案的屬性,隻對目錄有效
src:要被連結的源檔案的路徑,隻應用于state=link的情況
dest:被連結到的路徑,隻應用于state=link的情況
state:
directory:如果目錄不存在,建立目錄
file:即使檔案不存在,也不會被建立
link:建立軟連結
hard:建立硬連結
touch:如果檔案不存在,則會建立一個新的檔案,如果檔案或目錄已存在,則更新其最後修改時間
absent:删除目錄、檔案或者取消連結檔案
示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
ansible test -m file -a "path=/tmp/fstab state=absent"
ansible test -m file -a "path=/tmp/test state=touch"
#将101主機的/etc/fstab 檔案軟連結到/media/fstab,state=link 表明是一個軟連結。
檢視是否建立成功:
删除:
建立一個檔案:
建立目錄并賦予權限:
4.copy
複制檔案到遠端主機
copy子產品包含如下選項:
backup:在覆寫之前将原檔案備份,備份檔案包含時間資訊。有兩個選項:yes|no
content:用于替代"src",可以直接設定指定檔案的值
dest:必選項。要将源檔案複制到的遠端主機的絕對路徑,如果源檔案是一個目錄,那麼該路徑也必須是個目錄
directory_mode:遞歸的設定目錄的權限,預設為系統預設權限
force:如果目标主機包含該檔案,但内容不同,如果設定為yes,則強制覆寫,如果為no,則隻有當目标主機的目标位置不存在該檔案時,才複制。預設為yes
others:所有的file子產品裡的選項都可以在這裡使用
src:要複制到遠端主機的檔案在本地的位址,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它将遞歸複制。在這種情況下,如果路徑使用"/"來結尾,則隻複制目錄裡的内容,如果沒有使用"/"來結尾,則包含目錄在内的整個内容全部複制,類似于rsync。
validate :the validation command to run before copying into place. the path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"
#将目前的目錄下的aaa.txt 複制到目标主機/tmp目錄下,屬主 屬組 root,權限755
5.command
在遠端主機上執行指令
command子產品包含如下選項:
creates:一個檔案名,當該檔案存在,則該指令不執行
free_form:要執行的linux指令
chdir:在執行指令之前,先切換到該指定的目錄
removes:一個檔案名,當該檔案不存在,則該選項不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑
ansible test -a "/sbin/reboot"
#如果file2檔案不存在 執行後面的ls /home,如果aaa.txt存在,不執行ls /home
#切換到該指定的目錄
6.shell
切換到某個shell執行指定的指令,參數與command相同。與command相比多了一個管道的功能。
ansible test -m shell -a "somescript.sh >> somelog.txt"
shell command raw 三個子產品很相似,我們任用其中即可,ansible官方建議使用command