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
来源:https://www.cnblogs.com/tmdhhl/p/11135616.html