ansible playbook相关
playbook(剧本)
格式
playbook的编写应遵循yaml格式的语法
列表 -
字典 k:v
后缀名为 .yaml 或 .yml
# 简单示例
- hosts: web # 主机ip/分组名
remote_user: root # 用户身份
tasks:
- name: installlxml # 任务名
pip: name=lxml # 使用的模块: 参数
# 注: 执行时使用ansible-playbook xx.yml
传参
# 1. 直接给playbook传参
- hosts: web
remote_user: root
tasks:
- name: installl{{ module_name }}
pip: name={{ module_name }}
# 2. 在playbook中以vars方式传参
- hosts: web
remote_user: root
vars:
- module_name: requests
tasks:
- name: installl{{ module_name }}
pip: name={{ module_name }}
# 注: 执行时使用ansible-playbook -e module_name xx.yml
# 3. 在/etc/ansible/hosts 文件中传参
[web]
192.168.80.128 module_name=requests
192.168.80.129 module_name=flask
# 注: 执行时使用ansible-playbook xx.yml
# 4. 在/etc/ansible/hosts 文件中以[分组名:vars]方式传参
[web]
192.168.80.128
192.168.80.129
[web:vars]
module_name=requests
# 5. 利用上次任务的结果传值
- hosts: web
remote_user: root
tasks:
- name: sum
shell: echo 2+2|bc
register: user
- name: create{{ user }}
user: name=nihao{{ user.stdout }}
# 注: 执行时使用ansible-playbook xx.yml
# 需要先进行 yum -y install bc 操作
# 五种传参方式的优先级
-e > vars > hosts
标签
# 只执行playbook中部分内容
- hosts: web # 主机ip/分组名
remote_user: root # 用户身份 tasks:
tasks:
- name: installlxml # 任务名
pip: name=lxml # 使用的模块: 参数
tags: 标签名
# 注: 执行时使用ansible-playbook -t 标签名 xx.yml
模板
- hosts: web
remote_user: root
tasks:
- name: install
yum: name=reids
tags: install
- name: copyfile
template: src=redis.conf.j2 dest=/etc/redis.conf
tags: copyfile
- name: startredis
service: name=redis state=started
tags: start
# 注:redis.conf.j2文件是一个包含jinja2语法的redis.conf文件,通过配合template完成根据主机ip, 动态设置redis.conf中bind ip
# redis.conf.j2
bind {{ ansible_default_ipv4.address }}
条件判断
- hosts: web # 主机ip/分组名
remote_user: root # 用户身份 tasks:
tasks:
- name: installlxml # 任务名
pip: name=lxml # 使用的模块: 参数
when: num==1 # 条件判断,因为when语法原因不需要写成{{ num }} == 1
# 注: 执行时使用ansible-playbook xx.yml
循环
# 循环创建nihao, hello, hah三个用户
- hosts: web # 主机ip/分组名
remote_user: root # 用户身份 tasks:
tasks:
- name: createUser # 任务名
user: name={{ item }}
with_items:
- nihao
- hello
- hah
# 注: 执行时使用ansible-playbook xx.yml
# 创建用户并指定组
- hosts: web # 主机ip/分组名
remote_user: root # 用户身份 tasks:
tasks:
- name: creategroup
group: name={{ item.group }}
- name: createUser # 任务名
user: name={{ item.name }} group={{ item.group }}
with_items:
- { name: nihao, group: niao}
- { name: hello, group: hello}
- { name: hah, group: hah}
handler
- hosts: cache
remote_user: root
tasks:
- name: install
yum: name=redis
tags: install
- name: copyfile
template: dest=/etc/redis.conf src=redis.conf.j2
tags: copyfile
notify: restart redis # 此任务执行完后,执行handler
- name: startredis
service: name=redis state=started
tags: start
handlers:
- name: restart redis
service: name=redis state=restarted