Ansible剧本Playbook

1. 简介

Ansible提供了Playbook、Roles的功能来更方便的组织批量执行的操作,一般Playbook由以下几部分组成:

---  # 语法规定首行需要写
- hosts: webservers  # 定义执行主机/组
  vars:
    # 定义变量
  tasks:
    # 定义tasks
  handlers:
    # 定义触发器

2. 常用选项

  • 指定并行执行的进程数:-f, --forks, 默认是5
ansible-playbook -i hosts deploy_lnmp.yml --forks=10
  • 检查语法:--syntax-check
ansible-playbook -i hosts deploy_lnmp.yml --syntax-check
  • 测试playbook,并不真正执行:--check
ansible-playbook -i hosts deploy_lnmp.yml --check
  • 列出执行的主机列表:--list-hosts
ansible-playbook -i hosts deploy_lnmp.yml --list-hosts
  • 限制指定的主机:--limit
ansible-playbook -i hosts deploy_lnmp.yml --limit 192.168.44.154
  • 列出可执行的tags:--list-tags
ansible-playbook -i hosts deploy_lnmp.yml --list-tags
  • 指定执行的tag:--tags
ansible-playbook -i hosts deploy_lnmp.yml --tags TAG_NAME
  • 跳过指定的tags:--skip-tags
ansible-playbook -i hosts deploy_lnmp.yml --skip-tags "second ping","third ping"
  • 列出可执行的tasks:--list-tasks
ansible-playbook -i hosts deploy_lnmp.yml --list-tasks
  • 从指定的task执行:--start-at-task
ansible-playbook -i hosts deploy_lnmp.yml --start-at-task "task name"
  • 按步执行,需要手动确认:--step
ansible-playbook -i hosts deploy_lnmp.yml --step
  • 指定执行用户、特权:
--become-method BECOME_METHOD 默认sudo,可以通过ansible-doc -t become -l列出其它选项
--become-user BECOME_USER   指定执行用户,默认root
-K, --ask-become-pass       询问特权账号密码
-b, --become                指定执行用户,一般visudo需要设置特权用户NOPASSWORD

3. 触发操作

在Playbook中通过在tasks中定义的notify触发在handlers块下定义的执行流程,使用场景如:当nginx的配置被改变时,可以通过notify触发执行重启nginx的操作。使用handlers通常注意以下几点:

  • 每个handler的名字必须是唯一的,并且只有被notify时(&配置被改变)才会执行
  • 如果一个handler被notify了多次,其只会在Playbook的最后执行一次
  • 如果一个playbook在运行到handlers之前失败了,则handler不会被执行
  • 如果需要在中途执行handler操作,需要meta来实现

下面是一段配置示例:

---
- name: Verify apache installation
  hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: Ensure apache is at the latest version
    ansible.builtin.yum:
      name: httpd
      state: latest

  - name: Write the apache config file
    ansible.builtin.template:
      src: /srv/httpd.j2
      dest: /etc/httpd.conf
    notify:
    - Restart apache

  - name: Ensure apache is running
    ansible.builtin.service:
      name: httpd
      state: started

  handlers:
    - name: Restart apache
      ansible.builtin.service:
        name: httpd
        state: restarted

在一个task中notify多个handler

- name: Template configuration file
  ansible.builtin.template:
    src: template.j2
    dest: /etc/foo.conf
  notify:
    - Restart memcached
    - Restart apache

  handlers:
    - name: Restart memcached
      ansible.builtin.service:
        name: memcached
        state: restarted

    - name: Restart apache
      ansible.builtin.service:
        name: apache
        state: restarted
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值