天天看點

Ansible

安裝:

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

Ansible

#定義一個組叫test, test組下面有192.168.33.101 這個主機。

Ansible

ansible -i /etc/ansible/hosts test -u root -m command -a 'ls /home' k

#-i 指定hosts檔案,test是指組;-u root 是指用那個使用者;-m 指定子產品 a 是指子產品内的參數, ls /home  執行的指令; -k 遠端主機的密碼。

Ansible
Ansible

#預設使用 /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拷貝到目的主機上。

Ansible

#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指定端口。

Ansible

主機組之間的嵌套:

[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 表明是一個軟連結。

檢視是否建立成功:

Ansible

删除:

Ansible

建立一個檔案:

Ansible

建立目錄并賦予權限:

Ansible
Ansible

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

Ansible
Ansible

#将目前的目錄下的aaa.txt 複制到目标主機/tmp目錄下,屬主 屬組 root,權限755

Ansible
Ansible

5.command

在遠端主機上執行指令

command子產品包含如下選項:

creates:一個檔案名,當該檔案存在,則該指令不執行

free_form:要執行的linux指令

chdir:在執行指令之前,先切換到該指定的目錄

removes:一個檔案名,當該檔案不存在,則該選項不執行

executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

ansible test -a "/sbin/reboot"

Ansible

#如果file2檔案不存在 執行後面的ls /home,如果aaa.txt存在,不執行ls /home

Ansible

#切換到該指定的目錄

6.shell

切換到某個shell執行指定的指令,參數與command相同。與command相比多了一個管道的功能。

ansible test -m shell -a "somescript.sh >> somelog.txt"

Ansible

shell command raw 三個子產品很相似,我們任用其中即可,ansible官方建議使用command

繼續閱讀