Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

本文章是站在root用戶角度對Ansible的19個常用模塊進行測試使用。為什麼突出是站在root用戶角度,因為很多時候,處於服務器安全考慮,我們是禁止root用戶直接登錄系統,如果要遠程登錄或者遠程控制服務器,必須先登錄普通用戶,再登錄root用戶,因此在這個過程中,Ansible中root用戶想使用相應的模塊則沒有像普通用戶那麼簡單。

一、模塊列表

1、setup

2、ping

3、file

4、copy

5、command

6、shell

7、script

8、cron

9、yum

10、service

11、group

12、user

13、stat

14、mount

15、fetch

16、synchronize

17、get_url

18、hostname

19、wait_for

二、模塊示例

1、setup 功能:蒐集系統信息

#通過命令獲取所有的系統信息,蒐集主機的所有系統信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup


Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


注意:/etc/ansible/.hosts 文件的寫法很關鍵,官網也出了相關的說明,只不過官方的文檔分版本描述的,稍不注意就掉坑了,具體格式如下:

[xxxx-root]

192.168.1.51 ansible_become=True ansible_become_method=su ansible_become_user=root ansible_become_pass=1111111111

192.168.1.52 ansible_become=True ansible_become_method=su ansible_become_user=root ansible_become_pass=1111111111

#蒐集系統信息並以主機名為文件名分別保存在/tmp/facts 目錄

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup --tree /tmp/facts

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

#蒐集和內存相關的信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup -a 'filter=ansible_*_mb'

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

#蒐集網卡信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup -a 'filter=ansible_eth[0-2]'

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


2、ping功能:測試網絡連通性, ping模塊沒有參數

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m ping

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


3、file功能:文件屬性設置

force:需要在兩種情況下強制創建軟鏈接,一種是源文件不存在,但之後會建立的情況下;另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然後創建新的軟鏈,有兩個選項:yes|no

group:定義文件/目錄的屬組

mode:定義文件/目錄的權限

owner:定義文件/目錄的屬主

path:必選項,定義文件/目錄的路徑

recurse:遞歸設置文件的屬性,只對目錄有效

src:被鏈接的源文件路徑,只應用於state=link的情況

dest:被鏈接到的路徑,只應用於state=link的情況

state包括以下:

directory:如果目錄不存在,就創建目錄

file:即使文件不存在,也不會被創建

link:創建軟鏈接

hard:創建硬鏈接

touch:如果文件不存在,則會創建一個新的文件,如果文件或目錄已存在,則更新其最後修改時間

absent:刪除目錄、文件或者取消鏈接文件

創建軟鏈接:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m file -a "class="lazy" data-original=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

刪除軟連接:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m file -a "path=/tmp/resolv.conf state=absent"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

創建目錄(文件):

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m file -a "path=/root/testfile group=ihavecar owner=ihavecar mode=700 state=directory"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


4、copy功能:複製文件到遠程主機

backup: #在覆蓋之前,將源文件備份,備份文件包含時間信息。有兩個選項:yes|no

content: #用於替代“src”,可以直接設定指定文件的值

dest: #必選項。要將源文件複製到的遠程主機的絕對路徑,如果源文件是一個目錄,那麼該路徑也必須是個目錄

directory_mode: #遞歸設定目錄的權限,默認為系統默認權限

force: #如果目標主機包含該文件,但內容不同,如果設置為yes,則強制覆蓋,如果為no,則只有當目標主機的目標位置不存在該文件時,才複製。默認為yes

others:#所有的file模塊裡的選項都可以在這裡使用

group # 複製到遠程主機後,指定文件或目錄的屬

mode # 複製到遠程主機後,指定文件或目錄權限,類似與 `chmod’指明如 0644

owner # 複製到遠程主機後,指定文件或目錄屬主

src:被複制到遠程主機的本地文件,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞歸複製。在這種情況下,如果路徑使用“/”來結尾,則只複製目錄裡的內容,如果沒有用“/”來結尾,則包含目錄在內的整個內容全部複製,類似於rsync。

將本地文件“/etc/ansible/ansible.cfg”複製到遠程服務器,設置屬主和屬組及文件權限

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m copy -a "class="lazy" data-original=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=ihavecar group=root mode=400"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


5、command功能:在遠程主機上執行命令

Command不適用於有shell變量的情況,也不適用於有管道符或者&&的情況,如果要使用此種情況,那麼可以使用shell模塊

相關選項如下:

creates:一個文件名,當該文件存在,則該命令不執行

free_form:要執行的linux指令

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

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

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

遠程執行查詢系統負載:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m command -a "uptime"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

如帶有管道的,則會如下報錯,command是不允許有管道的:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m command -a "uptime | grep 192.168.1.50"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


6、shell功能:切換到某個shell執行指定的指令

切換到某個shell執行指定的指令,與command不同的是,此模塊可以支持命令管道,同時還有另一個模塊也具備此功能:raw

chdir # 執行之前,先cd到指定目錄在執行命令

creates # 一個文件名,當這個文件存在,則該命令不執行

executable # 切換shell來執行命令,需要使用命令的絕對路徑

free_form= # 執行的命令

removes # 一個文件名,這個文件不存在,則該命令不執行

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m shell -a "cat /etc/passwd | grep root"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

可遠程執行腳本:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m shell -a "sh /tmp/echo.sh"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


7、script功能:指定本地的腳本文件,到遠程主機運行一次

注意這個模塊和shell模塊的不同,shell模塊是要求客戶端上有這個腳本才能執行;script是要求ansible服務端有這個腳本就可以了,執行的時候是不會拷貝這個腳本到客戶端的。

creates # 一個文件名,當這個文件存在,則該命令不執行

free_form= # 本地腳本路徑

removes # 一個文件名,這個文件不存在,則該命令不執行

ansible端的已有腳本,就只有一條/sbin/ifconfig 命令,該腳本被拿到客戶端上執行,並返回結果:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m>

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


8、cron功能:計劃任務管理

backup # 如果設置,創建一個crontab備份

cron_file # 如果指定, 使用這個文件cron.d,而不是單個用戶crontab

day # 日應該運行的工作( 1-31, *, */2, etc )

hour # 小時 ( 0-23, *, */2, etc )

job # 指明運行的命令是什麼

minute # 分鐘( 0-59, *, */2, etc )

month # 月( 1-12, *, */2, etc )

name # 定時任務描述

reboot # 任務在重啟時運行,不建議使用,建議使用special_time

special_time # 特殊的時間範圍,參數:reboot(重啟時),annually(每年),monthly(每月),weekly(每週),daily(每天),hourly(每小時)

state # 指定狀態,prsent表示添加定時任務,也是默認設置,absent表示刪除定時任務

user # 以哪個用戶的身份執行

weekday # 周 ( 0-6 for Sunday-Saturday, *, etc )

定義一個時間任務,每隔3分鐘執行一次時間記錄任務:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m cron -a 'name="ntp datatime job" minute=*/3 hour=* day=* month=* weekday=* job="echo `date` >> /tmp/linshidata.txt"'

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

效果如下:

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

刪除一個時間任務:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m cron -a 'name="ntp datatime job" minute=*/3 hour=* day=* month=* weekday=* job="echo `date` >> /tmp/linshidata.txt" state=absent'

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


9、yum功能:軟件包安裝管理

conf_file # yum的配置文件

disable_gpg_check # 關閉gpg_check

disablerepo # 不啟用某個源

enablerepo # 啟用某個源

List # 非冪等性命令

name= # 指定要安裝的包,如果有多個版本需要指定版本,否則安裝最新的包

state # 安裝(`present’),安裝最新版(`latest’),卸載程序包(`absent’)

指定版本安裝包:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=httpd-devel-2.2.15 state=present"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

指定安裝最新版本的包:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=httpd-devel-2.2.15 state=latest"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

指定rpm包來安裝:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=/usr/local/src/kel.noarch.rpm state=present"

指定遠程網址rpm包來進行安裝:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6.0.el6.ngx.noarch.rpm state=present"

刪除包:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=httpd-devel-2.2.15 state=absent"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


10、service功能:系統服務管理

arguments # 向服務傳遞的命令行參數

enabled # 設置服務開機自動啟動,參數為yes|no

name= # 控制服務的名稱

pattern # 如果通過status指令來查看服務的狀態時,沒有響應,就會通過ps指令在進程中根據該模式進行查找,如果匹配到,則認為該服務依然在運行

runlevel # 設置服務自啟動級別

sleep # 如果執行了restarted,則在stop和start之間沉睡幾秒鐘

state # 啟動`started’ 關閉`stopped’ 重新啟動 `restarted’ 重載 `reloaded’

設置httpd服務為開機自啟動模式,並限制開啟httpd服務

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m service -a "name=httpd state=started enabled=yes"

重啟httpd服務,中間sleep 10秒鐘

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m service -a "name=httpd state=restarted sleep=10"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


11、group功能:系統用戶組管理

gid # 設置組的GID號

name= # 管理組的名稱

state # 指定組狀態,默認為創建,設置值為absent為刪除

system # 設置值為yes,表示為創建系統組

創建一個foo組,指定gid號

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m group -a "name=foo gid=360 system=no"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

刪除一個組:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m group -a "name=foo gid=360 system=no state=absent"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


12、user功能:系統用戶賬號管理

comment # 用戶的描述信息

createhome # 是否創建家目錄

force # 在使用`state=absent’時, 行為與`userdel –force’一致.

group # 指定基本組

groups # 指定附加組,如果指定為(‘groups=’)表示刪除所有組

home # 指定用戶家目錄

login_class # 可以設置用戶的登錄類 FreeBSD, OpenBSD and NetBSD系統.

move_home # 如果設置為`home=’時, 試圖將用戶主目錄移動到指定的目錄

name= # 指定用戶名

non_unique # 該選項允許改變非唯一的用戶ID值

password # 指定用戶密碼

remove # 在使用 `state=absent’時, 行為是與 `userdel –remove’一致.

shell # 指定默認shell

state #設置帳號狀態,不指定為創建,指定值為absent表示刪除

system # 當創建一個用戶,設置這個用戶是系統用戶。這個設置不能更改現有用戶。

uid #指定用戶的uid

update_password # 更新用戶密碼

添加用戶foo,指定密碼,設置家目錄,不允許遠程登錄

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m user -a "name=foo password=123456 home=/home/foo shell=/sbin/nologin"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

徹底刪除一個用戶,包括家目錄:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m user -a "name=foo remove=yes state=absent"


13、stat功能:獲取遠程文件信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m stat -a "path=/etc/passwd"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


14、mount功能:配置掛載點

fstype:必選項,掛載文件的類型

name:必選項,掛載點

opts:傳遞給mount命令的參數

src:必選項,要掛載的文件

state:必選項

present:只處理fstab中的配置

absent:刪除掛載點

mounted:自動創建掛載點並掛載之

umounted:卸載

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m mount -a "name=/mnt class="lazy" data-original=/dev/sda5 fstype=ext4 opts=rostate=present"


15、fetch功能:文件拉取模塊,主要是將遠程主機中的文件拷貝到本機中

和copy模塊的作用剛剛相反,並且在保存的時候使用hostname來進行保存,當文件不存在的時候,會出現錯誤,除非設置了選項fail_on_missing為yes

Dest:用來存放文件的目錄,例如存放目錄為backup,源文件名稱為/etc/profile在主機pythonserver中,那麼保存為/backup/pythonserver/etc/profile

Fail_on_missing: Yes/no,當源文件不存在的時候,標識為失敗

Flat: 允許覆蓋默認行為從hostname/path到/file的,如果dest以/結尾,它將使用源文件的基礎名稱

Src: 在遠程拉取的文件,並且必須是一個file,不能是目錄

Validate_checksum Yes/no,當文件fetch之後進行md5檢查

從遠程機器上床送文件到ansible服務器

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m fetch -a "class="lazy" data-original=/root/123 dest=/root"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

src表示為遠程主機上需要傳送的文件的路徑,dest表示為本機上的路徑,在傳送過來的文件,是按照IP地址或hostname進行分類,然後路徑是源文件的路徑,例如上面的最終路徑為/root/192.168.1.50/root/123在拉取文件的時候,必須拉取的是文件,不能拉取文件夾

指定路徑目錄進行保存:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m fetch -a "class="lazy" data-original=/root/Ssh.py dest=/root/kel/ flat=yes"

在使用參數為flat的時候,如果dest的後綴名為/,那麼就會保存在目錄中,然後直接保存為文件名,如上例的結果為 dest”: “/root/kel/Ssh.py;

當dest後綴不為/的時候,那麼就會直接保存為kel的文件,如上例1所示。主要是在於dest是否已/結尾,從而來區分這是個目錄還是路徑。


16、synchronize功能:將主控方/root/a目錄推送到指定節點的/tmp目錄下

選項說明

archive # 是否採用歸檔模式同步,即以源文件相同屬性同步到目標地址

checksum # 是否效驗

compress # 開啟壓縮,默認為開啟

copy_links # 同步的時候是否複製連接

delete # 刪除源中沒有而目標存在的文件(即以推送方為主)

dest= # 目標地址

dest_port # 目標接受的端口,ansible配置文件中的 ansible_ssh_port 變量優先級高於該 dest_port 變量

dirs # 以非遞歸的方式傳輸目錄

existing_only # Skip creating new files on receiver.

group # Preserve group

links # Copy symlinks as symlinks.

mode # 模式,rsync 同步的方式 PUSH\PULL,默認都是推送push。如果你在使用拉取pull功能的時候,可以參考如下來實現mode=pull 更改推送模式為拉取模式

recursive # 是否遞歸 yes/no

rsync_opts # 使用rsync 的參數

rsync_path # 服務的路徑,指定 rsync 命令來在遠程服務器上運行。這個參考rsync命令的--rsync-path參數,--rsync-path=PATH # 指定遠程服務器上的rsync命令所在路徑信息

rsync_timeout # 指定 rsync 操作的 IP 超時時間,和rsync命令的 --timeout 參數效果一樣.

set_remote_user # put user@ for the remote paths. If you have a custom ssh config to define the remote user for

class="lazy" data-original=\‘#\‘" # 源,同步的數據源

times #

--exclude=.Git 忽略同步.git結尾的文件

由於模塊默認啟用了archive參數,該參數默認開啟了recursive, links, perms, times, owner,group和-D參數。如果你將該參數設置為no,那麼你將停止很多參數,比如會導致如下目的遞歸失敗,導致無法拉取

壓縮傳輸a目錄到被控節點:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m synchronize -a 'class="lazy" data-original=/root/a dest=/tmp/ compress=yes'

注意:主控端的a目錄傳輸到被控節點,文件屬性過去被控節點後,只能是remote user的權限,也就是ihavecar的,不能是root的,也不允許傳輸到ihavecar這個用戶無權限的目錄下去,不然會報錯。

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

使用pull模式拉取文件到主控節點:

由於模塊,默認都是推送push。因此,如果你在使用拉取pull功能的時候,可以參考如下來實現

mode=pull 更改推送模式為拉取模式。

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m synchronize -a 'mode=pull class="lazy" data-original=/tmp/a dest=/root/ compress=yes'

注意:從被控節點傳目錄回到主控節點,可以遵循權限,被控節點端目錄的屬性是什麼,傳回主控節點的目錄權限就是什麼,並不會像push方式那樣屬性改變成普通用戶的。還有一點需要注意的是,從被控節點傳輸回主控節點,只有一個節點能傳輸成功,其他的節點都會失敗。當然,如果各個被控節點的文件如果不是一樣的話,那麼各個節點都會傳文件回來。那樣主控端就會收到各個節點的全部文件。

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


17、get_url功能:將某個url的文件下載到被控節點的某個位置

將simplejson-3.8.2.tar.gz 下載到/tmp/下:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m get_url -a "url=https://pypi.python.org/packages/source/s/simplejson/simplejson-3.8.2.tar.gz dest=/tmp/"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


18、hostname功能:主要用來修改主機的名稱

在查看的時候,主要查看文件/etc/sysconfig/network,重啟之後才能生效

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m hostname -a "name=ansible-test"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


19、wait_for功能:等待一個事件發生或處理完後,再繼續運行下面的事情

connect_timeout 默認5秒,在下一個事情發生前等待鏈接的時間,單位是秒

delay 延時,大家都懂,在做下一個事情前延時多少秒

host 默認127.0.0.1,執行這個模塊的host

path 當一個文件存在於文件系統中,下一步才繼續。

port 端口號,如8080

state 默認started,對象是端口的時候start狀態會確保端口是打開的,stoped狀態會確認端口是關閉的

present 對象是文件的時候present或者started會確認文件是存在的,而absent會確認文件是不存在的。

started

stopped

absent

10秒後在當前主機開始檢查8000端口,直到端口啟動後返回:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m wait_for -a "port=22612 delay=10"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

檢查path=/tmp/foo直到文件存在後繼續:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m wait_for -a "path=/tmp/foo"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

確認/var/lock/file.lock不存在繼續:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m wait_for -a "path=/var/look/file.lock state=absent"

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)

本文地址:http://www.ywadmin.com/?id=91

Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)


分享到:


相關文章: