Ansible 小手册系列 十七(特性模块)
异步操作和轮询
---
# 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 小手册系列 十七(特性模块)的更多相关文章
- Ansible 小手册系列 二十(经常遇到的问题)
(1). 怎么为任务设置环境变量? - name: set environment shell: echo $PATH $SOME >> /tmp/a.txt environment: P ...
- Ansible 小手册系列 十八(Lookup 插件)
file:获取文件内容 --- - hosts: all vars: contents: "{{ lookup('file', '/etc/foo.txt') }}" tasks: ...
- Ansible 小手册系列 十三(Jinja2)
用于playbook中的jinja 2过滤器 更改数据格式,其结果是字符串 {{ some_variable | to_json }} {{ some_variable | to_yaml }} 对于 ...
- Ansible 小手册系列 十二(Facts)
Facts 是用来采集目标系统信息的,具体是用setup模块来采集得. 使用setup模块来获取目标系统信息 ansible hostname -m setup 仅显示与ansible相关的内存信息 ...
- Ansible 小手册系列 十(包含和角色)
一.包含 (include) 使用include模块来包含foo文件 tasks: - include: foo.yml --- foo.yml - name: test foo command: e ...
- Ansible 小手册系列 七(Ad-hoc)
Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务. ad hoc——临时的,在ansible ...
- Ansible 小手册系列 四(详解配置文件)
[root@host-172-20-6-120 ansible]# ansible --version ansible 2.2.0.0 config file = /etc/ansible/ansib ...
- Ansible 小手册系列 三(命令介绍)
仅仅只是介绍,可以选择跳过 ansible ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令.默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块. Us ...
- Ansible 小手册系列 十四(条件判断和循环)
条件判断 When 语句 在when 后面使用Jinja2 表达式,结果为True则执行任务. tasks: - name: "shut down Debian flavored syste ...
随机推荐
- 如何检测浏览器是否安装了Adblock,uBlock Origin,Adguard,uBlock等广告屏蔽插件
由于我们网站上的广告经常被一些广告插件给屏蔽掉,上级给我下达了一个检测浏览器是否安装了屏蔽广告的插件的任务. 经过研究,借鉴,参考,整合了如下三种解决方案. 方案一: 利用广告插件通过对含有goo ...
- 移动端打印输出内容以及网络请求-vconsole.js
今天,无意间从别人那里得知一个很好的js插件--vconsole.min.js,可以实现在移动端打印输出内容以及查看网络请求.下面记录使用方式. 1.下载vconsole.min.js插件 以下复制了 ...
- 从硬件到语言,详解C++的内存对齐(memory alignment)
转载请保留以下声明 作者:赵宗晟 出处:https://www.cnblogs.com/zhao-zongsheng/p/9099603.html 很多写C/C++的人都知道“内存对齐”的概念以及规则 ...
- 性能调优之MySQL篇一:MySQL性能计数器
计数器 计数器分析 Threads_connected 表示当前有多少个客户连接该mysql服务器,连接数是否过多,网络是否存在问题,它是动态变化的,当达到最大连接数时,数据库系统就不能提供更多的连接 ...
- Java GC 标记/清除算法
1) 标记/清除算法是怎么来的? 我们在程序运行期间如果想进行垃圾回收,就必须让GC线程与程序当中的线程互相配合,才能在不影响程序运行的前提下,顺利的将垃圾进行回收. 为了达到这个目的,标记/清除算法 ...
- Docker-初始docker
一.什么是Docker Docker 在容器的基础上,进行了进一步的封装,从文件系统.网络互联到进程隔离等等,极大的简化了容器的创建和维护.使得 Docker 技术比虚拟机技术更为轻便.快捷. 下面的 ...
- Kafka学习之(三)Centos下给PHP开启Kafka扩展(rdkafka)
Centos版本:Centos6.4,PHP版本:PHP7. 在上一篇文章中使用IP为192.168.9.154的机器安装并开启了Kafka进行了简单测试,充当了Kafka服务器. 本篇文章新开启一台 ...
- CSS 图片廊
CSS 图片廊 一.示例一 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 20135320赵瀚青LINUX内核分析第三周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...
- T-shirt again
T-shirt again 标签(空格分隔): 软工实践 第一次获得小黄裳是在大一下的C++课上,见T-shirt 0.0... 这次在软工课上能再次获得小黄裳,是我没有想到的,个人觉得里面有蛮多的运 ...