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

posted on 2019-07-04 23:45  透明的洪湖里  阅读(132)  评论(0编辑  收藏  举报