獲取主機信息,在playbook裏常常用到的參數 gather_facts 就與該模塊有關,常用的參數是 filter。python
# 結果很是多,能夠用文件重定向保存 ansible lzcx -m setup # 過濾關鍵字 ansible lzcx -m setup -a 'filter=ansible_*_mb' # 獲取網卡信息 ansible lzcx -m setup -a "filter=ansible_eth[0-2]"
測試控制端和遠程主機之間的網絡通訊,注意:有一些主機禁ping,ping不通不表明不能訪問linux
ansible lzcx -m ping
file模塊主要用於建立和刪除主機上的文件、目錄、軟/硬連接,經常使用參數以下:nginx
force: 在兩種狀況下強制建立軟連接。1.源文件不存在但以後會創建的狀況下;2.目標軟鏈接已經存在,須要取消以前的軟連接,而後建立新的軟鏈接,有兩個選項:yes|no;
group: 定義文件/目標的屬組
mode: 定義文件/目錄的權限
owenr: 定義文件/目錄的屬主
path: 定義文件/目錄的路徑
recurse: 遞歸的設置文件的屬性,只對目錄有效
src: 要被連接的源文件的路徑,只應用於state=link的狀況
dest: 被連接到的路徑,只應用於state=link的狀況,也能夠指定路徑
file: 即便文件不存在,也不會被建立
link: 建立軟鏈接
hard: 建立硬連接
touch: 若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間
absent: 刪除目錄、文件或者取消連接文件
state: 狀態描述,可用選項有absent, directory, file, hard, link, touch,默認file算法
# 例:建立遠程文件符號連接 ansible yuhui -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link" # 遠程文件信息查看 ansible yuhui -m command -a "ls -la /tmp/resolv.conf" # 刪除遠程文件符號連接 ansible yuhui -m file -a "path=/tmp/resolv.conf state=absent" # 遠程文件信息查看 ansible yuhui -m command -a "ls -la /tmp/resolv.conf"
# 遠程客戶端新建software目錄 ansible yuhui -m file -a "dest=/home/operation/software mode=754 state=directory" # software目錄下新建s2.txt文件 ansible yuhui -m file -a "dest=/home/operation/software/s2.txt state=touch" # 修改s2.txt權限 ansible yuhui -m file -a "dest=/home/operation/software/s2.txt mode=600" # 刪除目錄,連帶目錄下的文件一塊兒刪除 ansible yuhui -m file -a "dest=/home/operation/software state=absent" # 還可使用 path 參數指定路徑 ansible yuhui -m file -a "path=/home/operation/test.txt state=touch" # 刪除文件 ansible yuhui -m file -a "path=/home/operation/test.txt state=absent"
複製控制端文件到遠程客戶端,主要參數以下:docker
backup: 在文件存在的時候能夠選擇覆蓋以前,將源文件備份.設定值:yes/no 缺省爲yes。
content: 用於替代"src",能夠直接設定指定文件的值
backup: 在文件存在的時候能夠選擇覆蓋以前,將源文件備份.設定值:yes/no 缺省爲yes。
content: 用於替代"src",能夠直接設定指定文件的值
dest: 被複制到遠程主機的本地對象文件或者文件夾
mode: 複製對象的設定權限
directory_mode:遞歸設置目錄的權限,默認爲系統默認權限
force: 是否強制覆蓋.設定值:yes/no 缺省爲no,當源文件和目標文件同樣時,即便強制覆蓋也不生效
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 example below. The command is passed securely so shell features like expansion and pipes won't work. 以上是說明原文,大意:複製以前驗證,驗證路徑經過 %S 傳遞,不能使用shell的擴展和管道特性。: 被複制到遠程主機的本地對象文件或者文件夾shell
# 將本地文件/etc/ansible/ansible.cfg複製到目標機器/tmp/ansible.conf,copy模塊和Linux的copy同樣能夠重命名 ansible yuhui -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.conf mode=0744" ansible yuhui -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.conf mode=0744 force=yes" # 測試force選項 # 測試src的"/"區別 ansible yuhui -m copy -a "src=/etc/ansible dest=/home/operation/temp directory_mode=0744" # 不加 "/" 是源目錄一塊兒複製 ansible yuhui -m file -a "dest=/home/operation/temp/ansible state=absent" # 刪除遠程目錄 ansible ansible yuhui -m copy -a "src=/etc/ansible/ dest=/home/operation/temp directory_mode=0744" # 加 "/" 是複製源目錄的文件和文件夾 ansible yuhui -m file -a "dest=/home/operation/temp/ state=absent" # 刪除遠程目錄 temp
用法和copy基本一致,也是複製本地文件到遠程,主要用於複製配置文件,須要注意配置版本差別大的狀況,經常使用參數以下:centos
backup: 拷貝的同時建立一個包含時間戳的備份文件,默認爲 no
dest: 目標路徑
force: 值(yes|no),是否覆蓋遠程文件,默認 yes
grup: 設置遠程文件的所屬組
owner: 設置文件的全部者
mode: 設置文件的權限。使用數值時不能省略打印位0,即四位數表示
src: ansible控制器上Jinja2格式的模板所在位置,能夠是相對或絕對路徑
validate: 在複製以前執行檢測,若是要引用目標文件名,則使用 %s數組
# 安裝nginx ansible lzcx -m yum -a "name=http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm state=present" -b # 使用 validate 驗證,將安裝後的配置上傳到控制端作驗證 ansible lzcx -m template -a "src=/tmp/nginx.conf dest=/home/operation/nginx.conf mode=0770 backup=yes validate='nginx -t -c %s'" # 刪除複製的文件 ansible lzcx -m file -a "path=/home/operation/nginx.conf state=absent" -b
和copy工做方式相似,fetch是從遠程拉取配置文件到本機,只能拉取文件不能拉取目錄。經常使用參數以下:網絡
dest: 在本地存放拉取文件的目錄。例如dest=/data,src=/etc/fstab,遠程主機名host.exp.com,則保存的路徑爲/data/host.exp.com/etc/fstab。
fail_on_missing: 值(yes|no),默認no,當設置爲yes時,若是拉取的文件不存在,則任務失敗
flat: 改變拉取後的路徑存放格式。若是設置爲yes,且當dest以"/"結尾時,將直接把源文件的basename存儲在dest下。
src: 拉取遠程主機上的源文件。目前不支持拉取目錄
validate_checksum: fetch到文件後,檢查MD5是否和源文件相同app
# 拉取lzcx主機上的nginx配置文件 ansible lzcx -m shell -a "ls /etc/nginx/nginx.conf" ansible lzcx -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation" # 沒有flat選項 ansible lzcx -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation flat=yes" # 有flat選項,注意有flat選項時,dest選項必須以"/"結尾,不然報錯 ansible lzcx -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation/ flat=yes" # 有flat選項
# 當須要從多個遠程主機拉取文件時,須要考慮存放路徑,最好有各自的主機名做爲目錄,便於區分 rm nginx.conf # 刪除上一個步驟的文件 rm -rf 192.168.1.214/ # 刪除上一個步驟的文件 # 使用 inventory_hostname 變量獲取主機信息,顯然生產使用時應該使用該格式合適 ansible lzcx -m fetch -a "src=/etc/nginx/nginx.conf dest=/home/operation/{{inventory_hostname}} flat=yes"
synchronize模塊用於實現簡單的rsync功能,沒法實現完整的rsync功能。在ansible中,能夠經過command或者shell模塊調用rsync命令,如下是經常使用參數:
src: 指定待傳輸的源⽂件能夠是相對路徑,也能夠是絕對路徑
dest: ⽬標路徑能夠是絕對路徑,也能夠是相對路徑
mode: 指定推(push)仍是拉(pull)的傳輸模式;push時,本地爲sender端,pull時,遠程爲sender端默認爲push
archive: 等價於rsync的"-a"選項,即便⽤歸檔模式它等價於rsync的"-rtopgDl"選項值爲yes/no
times: 保留mtime屬性
group: 保留所屬組屬性
owner: 保留全部者屬性
links: 拷貝連接⽂件⾃⾝
perms: 保留權限屬性
recursive: 遞歸到⽬錄中的⽂件
compress: 傳輸過程當中壓縮傳輸應該老是開啓,除⾮遇到問題即rsync的"-z"選項
copy_links: 拷貝軟連接的⽂件名和其指向的⽂件的內容即a指向b⽂件時,將在⽬標端⽣成a普通⽂件,但此⽂件中的內容是b中的內容,默認爲 no
dirs: ⾮遞歸⽅式傳輸⽬錄
delete: ⽬標端若是⽐源端⽂件多,則刪除這些多出來的⽂件,要求recursive=yes,默認爲 no
checksum: 等價於"-c"選項,將基於⽂件的checksum來判斷是否同步,⽽不是默認的quickcheck算法,該算法基於⽂件⼤⼩和最近的mtime來判斷是否要同步該選項會⼤幅下降效率,應謹慎使⽤注意,它⽆法影響archive,即archive仍會啓⽤
existing_only: receiver端沒有的⽂件不一樣步但仍會傳輸,只是臨時⽂件重組後不重命名⽽已
partial: 等價於"--partial"選項默認rsync在傳輸中斷時會刪除傳輸了⼀半的⽂件,指定該選項將保留這部分不完整的⽂件,使得下次傳輸時能夠直接從未完成的數據塊開始傳輸
dest_port: ssh的鏈接端⼝
rsync_opts: 指定額外的rsync選項使⽤數組的⽅式傳遞這些選項
rsync_path: 等價於"--rsync-path"選項,⽬的是啓動遠程rsync;例如能夠指定[--rsync-path=rsync],甚⾄[--rsync-path=cd/tmp/c&&rsync]當不指定rsync路徑時,默認爲/usr/bin/rysnc
rsync_timeout: 指定rsync在多久時間內尚未數據傳輸就超時退出
verify_host: 對⽬標主機進⾏ssh的hostkey驗證
# 從遠程拉取文件 ansible lzcx -m synchronize -a "src=/etc/nginx/nginx.conf dest=/home/operation mode=pull"
在遠程主機上執行命令,默認模塊,經常使用參數以下:
chdiiv: 在執行命令以前,經過 cd 命令進入到指定目錄
creates: 定義一個文件是否存在,若是存在運行相應命令
removes: 定義一個文件是否存在,若是不存在運行相應命令
executable: 改變shell使用command進行執行,而且執行時要使用絕對路徑
free_form: 命令模塊採用自由形式命令組合;便可以輸入任意linux命令
removes: 定義一個文件是否存在,若是存在運行相應命令;若是不存在跳過此步驟
warn: 若是ansible配置文件中定義了命令警告,若是參數設置了no/false將不會警告此行命令
ansible默認模塊command不支持shell變量和管道等,如需使用 -m shell 指定shell模塊,普通的命令是經過python的ssh執行
# 查看核心數 ansible my_vm -m shell -a 'cat /proc/cpuinfo | grep "model name" | wc -l'
raw也是命令執行模塊,直接使用ssh執行,一般用在客戶機尚未python環境
ansible my_vm -m raw -a 'cat /proc/cpuinfo | grep "model name" | wc -l'
user模塊調用的是 useradd,userdel,usermod命令,group模塊調用的是 groupadd,groupdel,groupmod命令,user經常使用參數以下:
name: 指定建立、刪除、修改的用戶名
password: 設置用戶密碼,只能使用加密密碼做爲值
system: 設置爲yes表示建立一個系統用戶,只能用於建立,不能用於修改已有用戶爲系統用戶
state: 用戶的建立(present)或者刪除(absent),默認present
createhome: 建立家目錄,已有用戶但家目錄不存在也能夠建立。值爲 yes|no
home: 指定建立的家目錄路徑
move_home: 若是設置爲yes,則"home="表示將家目錄移動到此選項指定的路徑下
uid: 設置用戶uid
group: 設置用戶primary group
groups: 將用戶加入到指定組中。若是設置爲 "groups=",則會將用戶的其餘(除用戶名的)組移除
shell: 設置用戶的shell
force: 配合 'state=absent' 時,等價於 'userdel --force',即強制刪除用戶、家目錄和郵件列表
remove: 配合 'state=absent' 時,等價於 'userdel --remove',即刪除家目錄和郵件列表
update_password: user是冪等模塊,"always"老是修改密碼,"on_create"只在建立用戶時設置密碼
ansible lzcx -m group -a "name=t1" -b # 添加組 t1 ansible lzcx -m user -a "name=t1 group=t1" -b # 添加用戶 t1 並指定組 # 查看建立的用戶 ansible lzcx -a "id t1" # 刪除用戶和家目錄 ansible lzcx -m user -a "name=t1 state=absent force=yes" -b
在線包管理軟件,經常使用參數以下:
download_only: ansible2.7新增選項,只下載rpm包不安裝
config_file: yum的配置文件
disable_gpg_check: 安裝時禁止gpgcheck,僅在state=present或latest時生效
disablerepo: 禁用指定的repoid,多個repoid使用逗號分隔
enablerepo: 明確使用該repoid
exclude: 排除指定包的安裝,僅在state=present或latest時生效
list: 相似yum list
name: 指定安裝的包名,可帶上版本號(name-1.0),也能夠傳遞一個URL或者一個本地的rpm包的路徑
state: 安裝狀態。(present,installed,latest)用於安裝,(absent、remove)用於移除
update_cache: 強制更新yum cache
# 安裝nginx源 http://nginx.org/packages/centos/6/x86_64/RPMS/nginx-1.14.2-1.el6.ngx.x86_64.rpm # 兩個組安裝 yum-utils 工具,注意安裝軟件須要切換root ansible cetntos6:lzcx -m yum -a "name=yum-utils state=present" -b # 列出dos2unix信息 ansible centos6:lzcx -m yum -a "list=dos2unix" # 只下載不安裝,下載後的路徑在 /var/cache/yum/x86_64/7/base/packages/dos2unix-6.0.3-7.el7.x86_64.rpm ,/var/cache/yum/x86_64/6/base/packages/dos2unix-3.1-37.el6.x86_64.rpm ansible centos6:lzcx -m yum -a "name=dos2unix download_only=true" -b # 指定安裝本地rpm ansible lzcx -m yum -a "name=/var/cache/yum/x86_64/7/base/packages/dos2unix-6.0.3-7.el7.x86_64.rpm state=present" -b ansible centos6 -m yum -a "name=/var/cache/yum/x86_64/6/base/packages/dos2unix-3.1-37.el6.x86_64.rpm state=present" -b # 在線安裝nginx,注意在 ansible2.7.4中,能夠從指定的在線源中直接安裝,而不是下載源到本地,而後再指定源安裝了 ansible lzcx -m yum -a "name=http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm state=present" -b # 查看是否安裝 ansible lzcx -m raw -a "rpm -qa | grep nginx" # 卸載nginx ansible lzcx -m yum -a "name=nginx state=absent" -b
service 風格服務管理模塊,如下是經常使用參數以下:
enabled: 設置是否開機啓動,true|false
name: 操做的服務名稱,必選
pattern: 定義一個匹配模式,若是經過status指令查看服務的狀態沒有響應時,就會經過 ps 指令在進程中根據該模式進行查找,若是匹配到,則認爲該服務依然在運行
runlevel: 定義運行級別
sleep: 若是執行了 restarted ,在stop和start之間等待設置的時間
state: 對服務執行 啓動、中止、重啓、從新加載等操做(started、stopped、restarted、reloaded),當服務未啓動時,使用reloaded參數會啓動服務
# 安裝nginx ansible lzcx -m yum -a "name=http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm state=present" -b # 啓動nginx,並設置開機啓動 ansible lzcx -m service -a "name=nginx state=started enabled=true" -b # 重啓 ansible lzcx -m service -a "name=nginx state=restarted sleep=3" -b -o # 中止nginx ansible lzcx -m service -a "name=nginx state=stopped" -b # 取消開機啓動 ansible lzcx -m service -a "name=nginx enabled=false" -b # 卸載nginx ansible lzcx -m yum -a "name=nginx state=absent" -b
systemd 風格服務管理模塊,使用方法和service大同小異,如下是經常使用參數以下:
daemon_reload: 是否在執行以前從新加載配置,yes|no,默認是 no
enabled: 是否設置開機啓動
masked: 是否將此unit作mask(隱藏、掩蓋)處理。mask後的unit將沒法啓動
name: 操做服務的名稱
state: 對服務執行 啓動、中止、重啓、從新加載等操做(started、stopped、restarted、reloaded),當服務未啓動時,使用reloaded參數會啓動服務
定時任務設置和管理模塊,經常使用參數以下:
backup: (yes|no),設置是否在修改以前備份文件
cron_file: 自定義cron_file的文件名,使用相對路徑則表示在/etc/cron.d中。必須同時指定user選項
user: 指定修改crontab的用戶,默認爲root
disabled: 禁用crontab中的某個job,要求state=present
env: (yes|no)設置一個環境變量,將添加到crontab的頂端。使用name和value定義變量名和值
job: 須要執行的命令。若是設置了env,則表示環境變量的值,此時job='xxx'等價於value='xxx',要求state=present
minute: 分(0-59, , /N),不寫時,默認爲
hour: 時(0-23, , /N),不寫時,默認爲
day: ⽇(1-31, , /N),不寫時,默認爲
month: ⽉(1-12, , /N),不寫時,默認爲
weekday: 周(0-6 for Sunday-Saturday, ),不寫時,默認爲
name: 描述crontab任務的字符串。但若是設置的是env,則name爲環境變量的名稱。要求state=absent,注意,若未設置name,且state=present,則總會建立⼀個新job條⽬,即便cron_file中已經存在一樣的條⽬
special_time: 定時任務的別稱,⽤於定義什麼時候運⾏job條⽬,有效值有reboot/hourly/daily/weekly/monthly/yearly/annually
state: job或者env的狀態是present(默認)仍是absent。present⽤於建立,absent⽤於移除
# 安裝ntp客戶端 ansible lzcx -m yum -a "name=ntpdate state=latest" -b # 添加一個定時任務,每30分鐘執行同步時間一次,注意是添加對控制端執行用戶對應的crontab下 ansible lzcx -m cron -a 'name="custom job" minute=*/30 hour=* day=* month=* weekday=* job="/user/sbin/ntpdate pool.ntp.org"' # 查看添加的定時任務,添加後的centos路徑爲 /var/spool/cron/ 下的用戶名文件 ansible lzcx -m shell -a "crontab -l | grep -A 1 job" # 刪除定時任務,注意指定任務描述 ansible lzcx -m cron -a 'name="custom job" state=absent' # 設置一個環境變量,並定於任務 ansible lzcx -m cron -a 'env=yes name=app_home value=/tmp' -o # 設置一個時間同步任務 ansible lzcx -m cron -a 'name="time sync" job="/usr/bin/ntpdate ntp1.aliyun.com day=*/1"' -o # 查看任務,並打印出環境變量 ansible lzcx -m shell -a "crontab -l | grep -C 1 'time sync'" # 刪除任務 ansible lzcx -m cron -a 'name="time sync" state=absent'
除cron模塊能夠管理cron運行環境變量以外,cronvar
backup: 值(yes|no),若是設置yes則會在遠程cron_file前備份這些文件
cron_file: 自定義cron_file的文件名,使用相對路徑則表示在/etc/cron.d中
state: present表示建立變量,absent表示移除變量
user: 指定用戶的crontab將被修改,默認爲root
value: 環境變量的值,要求state=present
文件系統的掛載、卸載,如下是經常使用參數:
fstype: 必選項,掛載文件的類型,能夠是iso9660、ext四、xfs等等
name: 必選項,掛載點
opts: 傳遞給mount命令的參數
src: 必選項,要掛載的文件
state: 必選項,值爲(mounted|unmounted|present|absent),如下爲參數用法:
present: 只處理fstab中的配置
absent: 刪除掛載點
mounted: 自動建立掛載點並掛載
umounted: 卸載
自定義輸出格式信息,相似echo、print語句。ansible中的debug主要用於輸出變量值、表達式值以及用when語句條件判斷。如下是經常使用參數:
msg: 輸出自定義信息。若是省略,則輸出普通字符串
var: 指定待調試的變量。只能指定變量,不能指定自定義信息,且變量不能加 {{}} 包圍,而是直接的變量名
verbosity: 控制debug運行的調試級別,有效值爲一個數值N
ansible lzcx -m debug -a 'msg="Hello world!"' ansible lzcx -m debug -a 'var=ansible_eth0.ipv4.address'
⽤於在遠端壓縮⽂件。固然,前提是在遠端主機上要有對應的壓縮⼯具。⽀持zip/gz/tar/bz2。如下是經常使用參數:
dest: 目標歸檔文件名。除非path指定要壓縮的是單文件,不然須要dest選項
fromat: 指定壓縮格式,默認爲gz格式
group: 文件/目錄所屬的組
owner: 文件/目錄全部者
mode: 設置文件/目錄的權限,支持'0644或'u+rwx或'u=rw,g=r,o=r'等格式
path: 要壓縮的文件,能夠是絕對路徑,也能夠是glob統配的路徑,還能夠是文件列表
remove: 壓縮後刪除源文件
# 壓縮單個文件並刪除源文件 ansible lzcx -m archive -a "path=/home/operation/test.sh remove=true" # 壓縮一個目錄並指定格式爲字zip ansible lzcx -m archive -a "path=/home/operation/lzcx dest=/home/operation/lzcx.zip format=zip"
默認複製ansible端的歸檔⽂件到被控主機,而後在被控主機上進⾏解包。若是設置選項remote_src=yes,則表⽰解包被控主機上的歸檔⽂件,要求在被控主機上有對應的解包命令。unzip命令⽤於解壓".zip"⽂件,gtar(tar包提供)命令⽤於解壓".tar"、".tar.gz"、".tar.bz2"和".tar.xz"。用參數以下:
creates: 若是指定的⽂件存在則不執⾏該任務。可⽤於實現冪等性
dest: 遠程機器上須要被解包的歸檔⽂件,要求是絕對路徑
exclude: 列出解包過程當中想要忽略的⽬錄和⽂件
group: ⽂件/⽬錄的所屬組
owner: ⽂件/⽬錄的全部者
mode: 設置⽂件/⽬錄的的權限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
keep_newer: 在解包過程當中,若是⽬標路徑中和包中有同名⽂件,且⽐包中的⽂件更新,則保留新的⽂件
list_files: 設置爲true時,將返回歸檔⽂件中的⽂件列表,默認 no
remote_src: 設置爲yes表⽰遠程主機上已有⽬標歸檔⽂件,即再也不從本地複製歸檔⽂件到遠端,直接在遠端解包。默認爲no
src: 若是remote_src=no,將複製本地歸檔⽂件到遠端,可相對路徑也可絕對路徑. 若是remote_src=yes, 將解包遠程已存在的歸檔⽂件,果remote_src=yes且src中包含了"://",將指揮遠程主機從url中下載⽂件並解包
# 解壓本地文件到遠程 ansible lzcx -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation" # 加creates選項 ansible lzcx -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation creates=yes" # 打印解壓縮文件,注意刪除遠程文件 ansible lzcx -m file -a "path=/home/operation/python_script state=absent" ansible lzcx -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation list_files=true" # 解壓遠程壓縮包,注意解壓的文件必須在本地有同名文件,經試驗,若是本地沒有同名文件,將報錯 ansible lzcx -m unarchive -a "src=/home/operation/python_script.tar.gz dest=/home/operation remote_src=yes list_files=true" # 從URL上下載並解壓,注意解壓以後,下載的壓縮包源文件會被刪除,該選項不要求本地有相應的文件,但本地控制端須要有wget命令 ansible lzcx -m unarchive -a "src=http://nginx.org/download/nginx-1.14.0.tar.gz dest=/home/operation remote_src=yes"
當下載HTTP和HTTPS連接時,客戶端要求有get命令,不然報錯;下載ftp文件時,客戶端要求有ftp命令
注意,dest爲⽬錄或者force=yes時,老是會下載⽂件到臨時存放⽬錄中,只不過不⼀定會替換舊⽂件。只有
force=no(默認)且dest是⼀個⽂件時,在⽂件已存在時纔不會下載⽂件。如下是經常使用參數:
backup: 下載⽂件時同時建立⼀個名稱中包含時間戳的備份⽂件
dest: ⽂件保存路徑,必須爲絕對路徑。若是dest是⼀個⽬錄,則使⽤url的base name做爲⽂件名。# 若是dest是⼀個⽬錄,則'force'選項不⽣效。# 若是dest是⼀個⽬錄,則老是會下載⽬標⽂件,但只在已存在的⽂件變化了纔會替換舊⽂件
force: 若是設置爲yes,且dest不是⼀個⽬錄時,則老是會下載⽂件,但只在已存在的⽂件變化了纔會替換舊⽂件。若是設置爲no(默認),則只會在⽬錄路徑下不存在該⽂件時纔會進⾏下載。
tmp_dest: 下載時臨時存放⽬錄,在任務執⾏完成前會刪除下載的臨時⽂件
group: ⽂件/⽬錄的所屬組
owner: ⽂件/⽬錄的全部者
mode: 設置⽂件/⽬錄的的權限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
timeout: 請求url時的超時時間,默認10秒鐘
url: 要下載的url路徑,(http|https|ftp)://[user[:pass]]@host.domain[:port]/path。還⽀持file格式的路徑,實現複製功能。file:///path/to/file
# 下載nginx文件並設置權限 ansible lzcx -m get_url -a "url=http://nginx.org/download/nginx-1.14.2.tar.gz dest=/home/operation mode=0744" # 遠程複製文件,至關於遠程主機拷貝文件到指定目錄 ansible lzcx -m get_url -a "url=file:///home/operation/lzcx.zip dest=/tmp/lzcx.zip"
有些時候任務之間對狀態、⽂件、端⼝等資源是有依賴關係的,只有滿⾜了前提,任務纔會繼續。wait_f or模塊就是⽤於判斷任務在滿⾜什麼條件的狀況下會繼續。主要⽤來判斷端⼝是否開啓、⽂件是否存在、⽂件中是否存在某些字符串。如下是經常使用參數:
delay: 在檢查操做進⾏以前等待的秒數
host: 等待這個主機處於啓動狀態,默認爲127.0.0.1
port: 等待這個端⼝已經開放
path: 這個⽂件是否已經存在
search_regex: 在⽂件中進⾏正則匹配
state: present/started/stopped/absent/drained。默認started
當檢查的是⼀個端⼝時:
started:保證端⼝是開放的
stopped:保證端⼝是關閉的
當檢查的是⼀個⽂件時:
present/started:在檢查到⽂件存在纔會繼續
absent:檢查到⽂件被移除後纔會繼續
sleep: 兩次檢查之間sleep的秒數,默認1秒
timeout: 檢查的等待超時時間(秒數,默認300)
# 鏈接上主機後10秒後才檢查8000端⼝是否處於開放狀態,300秒(默認值)內未開放則超時 ansible lzcx -m wait_for -a "port=8000 delay=10 timeout=10"
script模塊⽤於控制遠程主機執⾏腳本。在執⾏腳本前,ansible會將本地腳本傳輸到遠程主機,而後再執⾏。在執⾏腳本的時候,其採⽤的是遠程主機上的shell環境。 如下是經常使用參數:
chdir: 在遠程執⾏腳本前先切換到此⽬錄下
creates: 當此⽂件存在時,不執⾏腳本。可⽤於實現冪等性
removes: 當此⽂件不存在時,不執⾏腳本。可⽤於實現冪等性
free_form: 本地待執⾏的腳本路徑、選項、參數。之因此稱爲free_form,是由於它是腳本名+選項+參數