1.ansible相关命令总结
1.1.Play
指令 |
说明 |
accelerate |
开启加速模式 |
accelerate_ipv6 |
是否开启ipv6 |
accelerate_port |
加速模式的端口 |
always_run |
|
any_errors_fatal |
有任务错误时,立即停止 |
become |
是否提权 |
become_flags |
提权命令的参数 |
become_method |
提权得方式 |
become_user |
提权的用户 |
check_mode |
当为True时,只检查,不做修改 |
connection |
连接方式 |
environment |
定义远端系统的环境变量 |
force_handlers |
任务失败后,是否依然执行handlers中的任务 |
gather_facts |
是否获取远端系统得facts |
gather_subset |
获取facts得哪些键值 |
gather_timeout |
获取facts的超时时间 |
handlers |
定义task执行完成以后需要调用的任务 |
hosts |
指定运行得主机 |
ignore_errors |
是否忽略错误 |
max_fail_percentage |
最大的错误主机数,超过则立即停止ansbile |
name |
定义任务得名称 |
no_log |
不记录日志 |
port |
定义ssh的连接端口 |
post_tasks |
执行任务后要执行的任务 |
pre_tasks |
执行任务前要执行的任务 |
remote_user |
远程登陆的用户 |
roles |
定义角色 |
run_once |
任务只运行一次 |
serial |
任务每次执行的主机数 |
strategy |
play运行的模式 |
tags |
标记标签 |
tasks |
定义任务 |
vars |
定义变量 |
vars_files |
包含变量文件 |
vars_prompt |
要求用户输入内容 |
vault_password |
加密密码 |
1.2.Role
指令 |
说明 |
always_run |
|
become |
是否提权 |
become_flags |
提权命令的参数 |
become_method |
提权的方式 |
become_user |
提权的用户 |
check_mode |
当为True时,只检查,不做修改 |
connection |
连接方式 |
delegate_facts |
委托facts |
delegate_to |
任务委派 |
environment |
定义远端系统的环境变量 |
ignore_errors |
是否忽略错误 |
no_log |
不记录日志 |
port |
定义ssh的连接端口 |
remote_user |
远端系统的执行用户 |
run_once |
只运行一次 |
tags |
标记标签 |
vars |
定义变量 |
when |
条件表达式结果为True则执行block |
1.3.Block
指令 |
说明 |
always |
always里的任务总是执行 |
always_run |
|
any_errors_fatal |
有错误时立即中断ansbile |
become |
是否提权 |
become_flags |
提权命令的参数 |
become_method |
提权的方式 |
become_user |
提权的用户 |
block |
分组执行 |
check_mode |
当为True时,只检查,不做修改 |
connection |
连接方式 |
delegate_facts |
委托facts |
delegate_to |
任务委派 |
environment |
定义远端系统的环境变量 |
ignore_errors |
是否忽略错误 |
no_log |
不记录日志 |
port |
定义ssh的连接端口 |
remote_user |
远端系统的执行用户 |
rescue |
block中的任务在执行中,如果有任何错误,将执行rescue中的任务。 |
run_once |
只运行一次 |
tags |
标记标签 |
vars |
定义变量 |
when |
条件表达式结果为True则执行block |
1.4.Task
|
说明 |
action |
执行动作 |
always_run |
|
any_errors_fatal |
为True时,只要任务有错误,就立即停止ansible |
args |
定义任务得参数 |
async |
是否异步执行任务 |
become |
是否提权 |
become_flags |
提权命令的参数 |
become_method |
提权的方式 |
become_user |
提权的用户 |
changed_when |
条件表达式为True时,使任务状态为changed |
check_mode |
为True时,只检查运行状态,在远端不做任何修改 |
connection |
连接方式 |
delay |
等待多少秒,才执行任务 |
delegate_facts |
委托facts |
delegate_to |
任务委派 |
environment |
定义远端的环境变量 |
failed_when |
条件表达式为True时,使任务为失败状态 |
ignore_errors |
是否忽略错误 |
local_action |
本地执行 |
loop |
|
loop_args |
|
loop_control |
改变循环的变量项 |
name |
定义人物的名称 |
no_log |
不记录日志 |
notify |
用于任务执行完,执行handlers里的任务 |
poll |
轮询时间 |
port |
定义ssh的连接端口 |
register |
注册变量 |
remote_user |
远端系统的执行用户 |
retries |
重试次数 |
run_once |
只运行一次 |
tags |
标记为标签 |
until |
直到为真时,才继续执行任务 |
vars |
定义变量 |
when |
条件表达式,结果为True则执行task |
with_
|
循环 |
2 ansible常用技巧
2.1 ansible find判断字符是否在变量
- hosts: test71
gather_facts: no
vars:
a: "vaA12345"
tasks:
- debug:
msg: "not found"
when: a.find('A2') == -1
当在字符串中没有找到对应的字符时,find函数的返回值为"-1"
2.2 任务委派delegate_to
- hosts: test70,test71
gather_facts: no
tasks:
- file:
path: "/tmp/ttt"
state: touch
- file:
path: "/tmp/delegate"
state: touch
delegate_to: test61
- file:
path: "/tmp/ttt1"
state: touch
第二个任务只会在test61上执行
2.3 让任务在ansible主机上执行(connection: local)
- hosts: test70,test61
gather_facts: no
tasks:
- file:
path: "/tmp/inAnsible"
state: touch
connection: local
- file:
path: "/tmp/test"
state: touch
2.4 任务只执行一次 (run_once: true)
比如下载一个文件,分发到各个目标主机,我们只需要下载一次。
- hosts: A,B,C,D,E
gather_facts: no
tasks:
- get_url:
url: "http://nexus.zsythink.net/repository/testraw/testfile/test.tar"
dest: /tmp/
connection: local
run_once: true
- copy:
src: "/tmp/test.tar"
dest: "/tmp"
2.5 向变量列表里更改内容
追加元素
- hosts: test71
gather_facts: no
vars:
tlist:
- 1
- 2
tasks:
- set_fact:
tlist: "{{ tlist + ['a'] }}"
- debug:
var: tlist
方法二
- hosts: test71
gather_facts: no
vars:
tlist:
- 1
- 2
tasks:
- set_fact:
tlist: "{% set tlist = tlist + ['a'] %}{{tlist}}"
- debug:
var: tlist
方法三:
- hosts: test71
gather_facts: no
vars:
tlist:
- 1
- 2
tasks:
- set_fact:
tlist: "{{ tlist.append('a') }}{{tlist}}"
- debug:
var: tlist
追加多个元素
- hosts: test71
gather_facts: no
vars:
tlist:
- 1
- 2
tasks:
- set_fact:
tlist: "{{ tlist.append(['a','b']) }}{{tlist}}"
- debug:
var: tlist
在列表中插入项
- hosts: test71
gather_facts: no
vars:
tlist:
- 11
- 2
- 11
tasks:
- set_fact:
tlist: "{{ tlist.insert(1,'a') }}{{tlist}}"
- debug:
var: tlist
从列表中删除项
- hosts: test71
gather_facts: no
vars:
tlist:
- 11
- 2
- 'a'
- 'b'
- 3
tasks:
- debug:
msg: "{{tlist.pop(2)}}"
可以通过jinja2语法删除匹配数字
- hosts: test71
gather_facts: no
vars:
tlist:
- 11
- 'b'
- 'a'
- 'b'
- 11
- 'a11'
- '1a'
- '11'
tasks:
- set_fact:
tlist: "{%for i in tlist%}{% if 11 in tlist%}{{tlist.remove(11)}}{%endif%}{%endfor%}{{tlist}}"
- debug:
var: tlist
2.6 Ansible的并发限制 (serial、max_fail_percentage )
serial 并发数
max_fail_percentage 最大失败百分比
默认情况下, 只要ansible的group中还有server没有失败, ansible就是继续执行tasks。实际上, 用户可以通过max_fail_percentage(最大失败百分比)来限制ansible的并发执行。
只要超过max_fail_percentage的server失败, ansible就可以中止tasks的执行。serial参数在ansible-1.8以后就开始支持百分比功能了!!
试想一下如果group组里有200台机器,那么如果使用serial来限制并发数量,比如设置serial=10,意思就是一次只执行10台,一直到200台完成。
只要组内还有server没有失败, ansible就是继续执行tasks。这样就显得效率很低了,很不方便!这时就可以使用类似控制流的max_fail_percentage功能了!!
- hosts : all
max_fail_percentage: 30
serial: 10
tasks :
- name: Install telnet
yum: name=telnet state=installed
- name : Run Serverstart.sh
command : /bin/bash /opt/scripts/Serverstart.sh
async : 300
poll : 10
register: sh_result
2.7 Ansible的任务暂停 (local_action、wait_for )
- hosts: test_server
remote_user: root
gather_facts: no
tasks:
- name: port_test
local_action:
module: wait_for #模块名字
port: 2379
host: 172.16.60.241
delay: 10
timeout: 300
state: started
使用local_action配合wait_for模块来完成任务的暂停操作。
上面配置说明port_test任务每隔10s检查指定主机上的2379端口是否开启,如果操作300s,2379端口任未开启,将返回失败信息。