異步操作和輪詢(xún)
---
# Requires ansible 1.8+
- name: 'YUM - fire and forget task'
yum: name=docker-io state=installed
async: 1000
poll: 0
register: yum_sleeper
- name: 'YUM - check on fire and forget task'
async_status: jid={{ yum_sleeper.ansible_job_id }}
register: job_result
until: job_result.finished
retries: 30
- async: 1000 開(kāi)啟異步加載模式煤杀,超時(shí)時(shí)間1000秒眷蜈。沒(méi)有異步時(shí)間限制的默認(rèn)值。 如果省略“async”關(guān)鍵字沈自,任務(wù)將同步運(yùn)行酌儒。
- poll: 0 輪詢(xún)時(shí)間0秒,直接跳過(guò)枯途,執(zhí)行下面的任務(wù)忌怎。默認(rèn)輪詢(xún)值為10秒。
檢查模式
在檢查模式狀態(tài)下酪夷,是不會(huì)在遠(yuǎn)程系統(tǒng)上做出任何改變的榴啸。
ansible-playbook foo.yml --check
忽略錯(cuò)誤
ignore_errors 模塊可以在任務(wù)執(zhí)行錯(cuò)誤時(shí),忽略錯(cuò)誤并繼續(xù)執(zhí)行任務(wù)捶索。
tasks:
- command: /bin/false
ignore_errors: true
- debug: msg="false"
滾動(dòng)執(zhí)行
- name: test play
hosts: webservers
serial: 3
在上面的例子中插掂,如果我們有100個(gè)主機(jī),組“webservers”中的3個(gè)主機(jī)將完成playbook腥例,然后再移動(dòng)到接下來(lái)的3個(gè)主機(jī)辅甥。
還可以使用百分比
serial: "30%"
指定最大失敗數(shù)目
默認(rèn)情況下,只要組中有尚未失敗的主機(jī)燎竖,Ansible將繼續(xù)執(zhí)行操作璃弄。 在一些情況下,例如利用上述滾動(dòng)更新构回,可能希望在達(dá)到失敗的特定閾值時(shí)中止任務(wù)夏块。
- hosts: webservers
max_fail_percentage: 30
serial: 10
委托facts
- hosts: app_servers
tasks:
- name: gather facts from db servers
setup:
delegate_to: "{{item}}"
delegate_facts: True
with_items: "{{groups['dbservers']}}"
以上將為dbservers組中的機(jī)器收集facts,并將facts分配給這些機(jī)器纤掸,而不是app_servers脐供。 這樣您可以查找hostvars ['dbhost1'] ['default_ipv4_addresses'] [0],即使dbserver不是play的一部分借跪,或者使用-limit省略政己。
任務(wù)只運(yùn)行一次
---
tasks:
- command: /opt/application/upgrade_db.py
run_once: true
有錯(cuò)誤時(shí)立即中斷ansbile
---
- hosts: web
any_errors_fatal: True
設(shè)置環(huán)境變量
tasks:
- apt: name=cobbler state=installed
environment:
http_proxy: http://proxy.example.com:8080
PATH: /var/local/nvm/versions/node/v4.2.1/bin:{{ ansible_env.PATH }}
也可以在play級(jí)別使用
- hosts: testhost
roles:
- php
- nginx
environment:
http_proxy: http://proxy.example.com:8080
即使任務(wù)失敗,handlers也執(zhí)行
以下3中方法均可使用
? 命令行加上 --force-handlers 參數(shù)
? 配置文件加上 force_handlers = True
? playbook里設(shè)置 force_handlers: True
Prompts: 運(yùn)行時(shí)掏愁,提示輸入內(nèi)容
- hosts: test
gather_facts: no
vars_prompt:
- name: "name"
prompt: "what is your name?"
default: "user"
private: yes
confirm: yes
tasks:
- debug: msg={{ name }}
- name: 定義變量名稱(chēng)歇由,即輸入的內(nèi)容賦值給此變量
- prompt:輸入得提示信息
- default: 輸入的默認(rèn)值卵牍,沒(méi)有輸入任何內(nèi)容的時(shí)候,把此值賦值給變量
- private:是否隱藏輸入得內(nèi)容
- confirm: 是否要再次確認(rèn)輸入
加密輸入的內(nèi)容
依賴(lài)Passlib包
- hosts: test
gather_facts: no
vars_prompt:
- name: "pass"
prompt: "Enter password"
private: yes
encrypt: "sha512_crypt"
confirm: yes
salt_size: 7
tasks:
- debug: msg={{ pass }}
可支持以下加密類(lèi)型
? des_crypt - DES Crypt
? bsdi_crypt - BSDi Crypt
? bigcrypt - BigCrypt
? crypt16 - Crypt16
? md5_crypt - MD5 Crypt
? bcrypt - BCrypt
? sha1_crypt - SHA-1 Crypt
? sun_md5_crypt - Sun MD5 Crypt
? sha256_crypt - SHA-256 Crypt
? sha512_crypt - SHA-512 Crypt
? apr_md5_crypt - Apache’s MD5-Crypt variant
? phpass - PHPass’ Portable Hash
? pbkdf2_digest - Generic PBKDF2 Hashes
? cta_pbkdf2_sha1 - Cryptacular’s PBKDF2 hash
? dlitz_pbkdf2_sha1 - Dwayne Litzenberger’s PBKDF2 hash
? scram - SCRAM Hash
? bsd_nthash - FreeBSD’s MCF-compatible nthash encoding
標(biāo)記 Tags
標(biāo)記一個(gè)任務(wù)
tasks:
- yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
tags:
- packages
- template: src=templates/src.j2 dest=/etc/foo.conf
tags:
- configuration
標(biāo)記playbook
- hosts: all
tags:
- bar
tasks:
...
- hosts: all
tags: ['foo']
tasks:
...
標(biāo)記roles
roles:
- { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }
標(biāo)記包含
- include: foo.yml
tags: [web,foo]
始終運(yùn)行標(biāo)記的任務(wù)
tasks:
- debug: msg="Always runs"
tags:
- always
還有另外3個(gè)特殊關(guān)鍵字用于標(biāo)簽沦泌,'tagged'糊昙,'untagged'和'all',它們分別是僅運(yùn)行已標(biāo)記谢谦,只有未標(biāo)記和所有任務(wù)释牺。
默認(rèn)情況下ansible運(yùn)行就像指定了'-tags all
'。運(yùn)行playbook中的未標(biāo)記任務(wù) -tags untagged
顯示playbook中的所有標(biāo)記任務(wù)
ansible-playbook example.yml --list-tags
執(zhí)行所有標(biāo)記名稱(chēng)為packages的任務(wù)
ansible-playbook example.yml --tags packages
跳過(guò)所有標(biāo)記名稱(chēng)為notification的任務(wù)
ansible-playbook example.yml --skip-tags "notification"
wait_for
等待端口可用,才能執(zhí)行任務(wù)
- wait_for: port=8000 delay=10
等待直到鎖定文件被刪除
wait_for: path=/var/lock/file.lock state=absent
更多文章請(qǐng)看 Ansible 專(zhuān)題文章總覽