异步操作和轮询


---
# 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 开启异步加载模式,超时时间1000秒。没有异步时间限制的默认值。 如果省略“async”关键字,任务将同步运行。
  • poll: 0 轮询时间0秒,直接跳过,执行下面的任务。默认轮询值为10秒。

检查模式


在检查模式状态下,是不会在远程系统上做出任何改变的。

ansible-playbook foo.yml --check

忽略错误


ignore_errors 模块可以在任务执行错误时,忽略错误并继续执行任务。

  tasks:
- command: /bin/false
ignore_errors: true
- debug: msg="false"

滚动执行


- name: test play
hosts: webservers
serial: 3

在上面的例子中,如果我们有100个主机,组“webservers”中的3个主机将完成playbook,然后再移动到接下来的3个主机。

还可以使用百分比

  serial: "30%"

指定最大失败数目


默认情况下,只要组中有尚未失败的主机,Ansible将继续执行操作。 在一些情况下,例如利用上述滚动更新,可能希望在达到失败的特定阈值时中止任务。

- 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组中的机器收集facts,并将facts分配给这些机器,而不是app_servers。 这样您可以查找hostvars ['dbhost1'] ['default_ipv4_addresses'] [0],即使dbserver不是play的一部分,或者使用-limit省略。

任务只运行一次


---
tasks:
- command: /opt/application/upgrade_db.py
run_once: true

有错误时立即中断ansbile


---
- hosts: web
any_errors_fatal: True

设置环境变量


  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级别使用

- hosts: testhost
roles:
- php
- nginx
environment:
http_proxy: http://proxy.example.com:8080

即使任务失败,handlers也执行


以下3中方法均可使用
• 命令行加上 --force-handlers 参数
• 配置文件加上 force_handlers = True
• playbook里设置 force_handlers: True

Prompts: 运行时,提示输入内容


- 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: 定义变量名称,即输入的内容赋值给此变量
  • prompt:输入得提示信息
  • default: 输入的默认值,没有输入任何内容的时候,把此值赋值给变量
  • private:是否隐藏输入得内容
  • confirm: 是否要再次确认输入

加密输入的内容


依赖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 }}

可支持以下加密类型
• 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

标记 Tags


标记一个任务

tasks:
- yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
tags:
- packages
- template: src=templates/src.j2 dest=/etc/foo.conf
tags:
- configuration

标记playbook

- hosts: all
tags:
- bar
tasks:
... - hosts: all
tags: ['foo']
tasks:
...

标记roles

roles:
- { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }

标记包含

- include: foo.yml
tags: [web,foo]

始终运行标记的任务

tasks:
- debug: msg="Always runs"
tags:
- always

还有另外3个特殊关键字用于标签,'tagged','untagged'和'all',它们分别是仅运行已标记,只有未标记和所有任务。

默认情况下ansible运行就像指定了'-tags all'。运行playbook中的未标记任务 -tags untagged

显示playbook中的所有标记任务

ansible-playbook example.yml --list-tags

执行所有标记名称为packages的任务

ansible-playbook example.yml --tags packages

跳过所有标记名称为notification的任务

ansible-playbook example.yml --skip-tags "notification"

wait_for


等待端口可用,才能执行任务

- wait_for: port=8000 delay=10

等待直到锁定文件被删除

wait_for: path=/var/lock/file.lock state=absent

Ansible 小手册系列 十七(特性模块)的更多相关文章

  1. Ansible 小手册系列 二十(经常遇到的问题)

    (1). 怎么为任务设置环境变量? - name: set environment shell: echo $PATH $SOME >> /tmp/a.txt environment: P ...

  2. Ansible 小手册系列 十八(Lookup 插件)

    file:获取文件内容 --- - hosts: all vars: contents: "{{ lookup('file', '/etc/foo.txt') }}" tasks: ...

  3. Ansible 小手册系列 十三(Jinja2)

    用于playbook中的jinja 2过滤器 更改数据格式,其结果是字符串 {{ some_variable | to_json }} {{ some_variable | to_yaml }} 对于 ...

  4. Ansible 小手册系列 十二(Facts)

    Facts 是用来采集目标系统信息的,具体是用setup模块来采集得. 使用setup模块来获取目标系统信息 ansible hostname -m setup 仅显示与ansible相关的内存信息 ...

  5. Ansible 小手册系列 十(包含和角色)

    一.包含 (include) 使用include模块来包含foo文件 tasks: - include: foo.yml --- foo.yml - name: test foo command: e ...

  6. Ansible 小手册系列 七(Ad-hoc)

    Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务. ad hoc——临时的,在ansible ...

  7. Ansible 小手册系列 四(详解配置文件)

    [root@host-172-20-6-120 ansible]# ansible --version ansible 2.2.0.0 config file = /etc/ansible/ansib ...

  8. Ansible 小手册系列 三(命令介绍)

    仅仅只是介绍,可以选择跳过 ansible ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令.默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块. Us ...

  9. Ansible 小手册系列 十四(条件判断和循环)

    条件判断 When 语句 在when 后面使用Jinja2 表达式,结果为True则执行任务. tasks: - name: "shut down Debian flavored syste ...

随机推荐

  1. Font: a C++ class

    Font: a C++ class        This class is used in Fractal Generator.    Avi Examples The header fileFon ...

  2. Linux系统——shell脚本应用示例

    传入一个网段地址,自动找出本网段内存活的IP地址.2,将存活的IP地址当作密码来创建Linux用户,用户名格式为:你的名字_数字 3,有几个存活IP地址,就自动创建几个用户   4,最后将创建的用户名 ...

  3. MySQL 温故知心(二) 事务的隔离级别

    事务的隔离级别 A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据但是 在A事务中查询的话 查到的都是操作之后的数据没有提交的数据只有自己看得到,并没有update到数据库 查看 ...

  4. iClap是什么,能解决什么问题?

    移动互联网时代,APP体验度.用户粘性和活跃度关乎企业命脉,但是市面上使用的办公工具却不足以解决企业存在的问题,iClap应运而生,颠覆互联网企业的传统协作方式,改变了种子用户与企业的互动方式,为企业 ...

  5. SCP命令只能单项拷贝,另一个方向“RSA host key for 172.16.103.176 has changed and you have requested strict checki Host key verification failed. lost connection”问题

    [dinghuaneng@95 move_data]$ scp * dinghuaneng@172.16.103.176:/home/dinghuaneng@@@@@@@@@@@@@@@@@@@@@@ ...

  6. ElasticSearch的x-pack配置查询

    ElasticSearch在安装完x-pack后, 存在客户端通过Transport访问ES出现异常:java.lang.IllegalArgumentException: Unknown Named ...

  7. 一个辅助AWVS C段扫描的小php脚本

    小菜写的小脚本,大牛轻拍砖~~~~~~ 渗透前信息收集时喜欢用椰树来获取旁站及二级域名,然后根据二级.三级域名地址扩展C段,扩大扫描业务边界.例如 以联想为例 但,各个旁站对应IP可能不同,或有CDN ...

  8. 用random模块实现验证码

    #! /usr/bin/env python3 import random checkcode = "" ## 全部为数字的验证码 # for i in range(4): # c ...

  9. 利用JS代码快速获得知网论文作为参考文献的引用文本

    写论文的时候,发现知网虽然提供了生成参考文献引用标注的功能,但是效率仍然不太高.我就忙里偷闲写了一段简单的脚本,能无延迟地生成这段引用文本.目前支持期刊论文和硕士论文. 代码: (function() ...

  10. JavaWeb项目中各种路径的获取

    以工程名为/DemoWeb为例: 访问的jsp为: http://localhost:8080/DemoWeb/test/index.jsp 1 JSP中获得当前应用的相对路径和绝对路径 (1)得到工 ...