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   透明的洪湖里  阅读(132)  评论(0编辑  收藏  举报

编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示