ansible 常用模块写法笔记
- 写ansible-playbook 常用参数
- 写ansible-playbook 常用变量
- 端口检查服务 wait 使用
只是个人常用笔记,想看哪里点哪里,后面持续更新
写ansible-playbook 常用参数
- host: 定义playbook的执行主机范围,与命令模式下的ansible匹配规则一样。
- remote_user: 定义ansible_playbook 的执行用户。
- vars:定义变量
- vars_files: 定义变量文件
- notify:任务执行结果如果是发生更改了的则触发定义在handler的任务执行
- handler:定义被触发的任务列表,由模块来执行完成
- include:能包含的包括task,handler和playbook。可以在include的时候传递变量
tasks:
- include: wordpress.yml
vars:
remote_user: timmy
some_list_variable:
- alpha
- beta
- gamma
写ansible-playbook 常用变量
查看当前应用的所有变量
ansible cloud -m setup
register:把任务转换成变量,用于其他任务的执行:
tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True
内置变量:
group_names:是当前主机所在的group列表
groups:是所有inventory的group列表
inventory_hostname:是在inventory里定义的主机名
play_hosts:是当前的playbook范围内的主机列表
inventory_dir/inventory_file:是定义inventory的目录和文件
判断第一个任务结束并且失败,在执行下一条任务
tasks:
- shell: /usr/bin/foo
register: result
ignore_errors: True
- debug: msg="it failed"
when: result|failed
列表去重:
{{ list | uniq }}
判断when:
tasks:
- shell: echo "only on Red Hat 6, derivatives, and later"
when: ansible_os_family == "RedHat" and ansible_lsb.major_release|int >= 6
- shell: echo "This certainly is epic!"
when: epic is defined
端口检查服务 wait 使用
检查18080 端口是否存在,不存在则轮询查询,轮询三次,每次等待时间2秒
- name: 轮询等待 comm-agent status
shell: "ss -ntl | grep 18080 | awk '{sub(".*:", "", $4); print $4}'"
register: comm_agent_pord
until: comm_agent_pord.stdout == "18080"
retries: 3
delay: 2
ignore_errors: true
对比wait使用写的
- name: 查询 comm-agent status
wait_for:
host: {{ inventory_hostname }}
port: 18080
state: start
timeout: 30
命令行:
ansible -i /etc/ansible/hosts/host-root node -m wait_for -a "port=18080 delay=2 timeout=30"
wait 常用参数:
connect_timeout :在下一个事情发生前等待链接的时间,单位是秒
delay: 在做下一个事情前延时多少秒
host: 执行这个模块的host
path: 当一个文件存在于文件系统中,下一步才继续。
port: 端口号
state:对象是端口的时候start状态会确保端口是打开的,stoped状态会确认端口是关闭的;对象是文件的时候,present或者started会确认文件是存在的,而absent会确认文件是不存在的。
timeout:wait_for的等待的超时时间,默认为300秒
其他例:
#等待8080端口已正常监听,才开始下一个任务,直到超时
- wait_for:
port: 8080
state: started
#等待8000端口正常监听,每隔10s检查一次,直至等待超时
- wait_for:
port: 8000
delay: 10
#等待8000端口直至有连接建立
- wait_for:
host: 0.0.0.0
port: 8000
delay: 10
state: drained
#等待8000端口有连接建立,如果连接来自10.2.1.2或者10.2.1.3,则忽略。
- wait_for:
host: 0.0.0.0
port: 8000
state: drained
exclude_hosts: 10.2.1.2,10.2.1.3
#等待/tmp/foo文件已创建
- wait_for:
path: /tmp/foo
#等待/tmp/foo文件已创建,而且该文件中需要包含completed字符串
- wait_for:
path: /tmp/foo
search_regex: completed
#等待/var/lock/file.lock被删除
- wait_for:
path: /var/lock/file.lock
state: absent
#等待指定的进程被销毁
- wait_for:
path: /proc/3466/status
state: absent
#等待openssh启动,10s检查一次
- wait_for:
port: 22
host: "{{ ansible_ssh_host | default(inventory_hostname) }}" search_regex: OpenSSH
delay: 10