ansible playbook相关

Posted tmdhhl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于ansible playbook相关的主要内容,如果未能解决你的问题,请参考以下文章

Ansible playboos 实现上传文件创建crontab

ansible playbook实践-基础相关命令

ansible playbook相关

ansible playbook在服务器怎么执行

Ansible Playbook 使用条件判断语句

Ansible之Playbooks的when语句