Ansible之Playbook详解、案例

栏目: 服务器 · 发布时间: 7年前

内容简介:playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。Tasks:任务,由模板定义的操作列表Variables:变量

playbook-剧本 介绍

playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。

  • 核心元素

Tasks:任务,由模板定义的操作列表

Variables:变量

Templates:模板,即使用模板语法的文件

Handlers:处理器 ,当某条件满足时,触发执行的操作

Roles:角色

  • hosts和users介绍
  • 在playbook中的每一个play都可以选择在哪些服务器和以什么用户完成,hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。

    ---
    - hosts: abc               #指定主机组,可以是一个或多个组。
        remote_user: root                #指定远程主机执行的用户名
  • 指定远程主机sudo切换用

    # vim ping.yml
    ---
    - hosts: abc
        remote_user: root            
        become: yes                #2.6版本以后的参数,之前是sudo,意思为切换用户运行
        become_user: mysql          #指定sudo用户为mysql
    
    执行playbook
    # ansible-playbook ping.yml -K
  • Tasks list 和action介绍

1:Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。

在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。

Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。

2:每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,‘action’的值将会用作输出信息中标记特定的task。

3:定义一个task,常见的格式:”module: options” 例如:yum: name=httpd

4:ansible的自带模块中,command模块和 shell 模块无需使用key=value格式

  • 常用命令
  • ansible-playbook [yaml文件名、也可以yml结尾]
  • 例如:ansible-playbook a.yml
  • 参数:

    -k(–ask-pass) 用来交互输入ssh密码

    -K(-ask-become-pass) 用来交互输入sudo密码

    -u 指定用户

    # ansible-playbook a.yml --syntax-check    #检查yaml文件的语法是否正确
        # ansible-playbook a.yml --list-task       #检查tasks任务
        # ansible-playbook a.yml --list-hosts      #检查生效的主机
        # ansible-playbook a.yml --start-at-task='Copy Nginx.conf'     #指定从某个task开始运行
  • 示例

    # vim a.yml
    ---
    - hosts: 192.168.200.129                  //指定主机
        remote_user: root                         //指定在被管理的主机上执行任务的用户
        tasks:                                            //任务列表↓
         - name: disable selinux                //任务名关闭防火墙
           command: '/sbin/setenforce 0'    //调用command模块 执行关闭防火墙命令
         - name: start httpd                         //任务名 开启httpd
           service: name=httpd state=started         //调用service模块 开启httpd 服务
    # ansible-playbook a.yml --syntax-check    #检查yaml文件的语法是否正确
    # ansible-playbook a.yml

Ansible之Playbook详解、案例 Ansible之Playbook详解、案例

  • play中只要执行命令的返回值不为0,就会报错,tasks停止,可以添加下面
  • ignore_errors: True #忽略错误,强制返回成功

Ansible之Playbook详解、案例 Ansible之Playbook详解、案例

  • Handlers介绍
  • andlers也是一些task的列表,和一般的task并没有什么区别。
  • 是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行
  • 不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次
  • 示例

Ansible之Playbook详解、案例

  • 引用变量
  • 使用:vars: 添加变量

Ansible之Playbook详解、案例

  • 直接引用Ansible变量
  • ansible_all_ipv4_addresses 获取IP

Ansible之Playbook详解、案例

  • 引用主机变量
  • 在组的主机后面添加变量

    # vim /etc/ansible/hosts

    Ansible之Playbook详解、案例

    # vim c.yml
    # ansible-playbook c.yml  //执行这个剧本

Ansible之Playbook详解、案例

  • 查看这个生成的文件

    Ansible之Playbook详解、案例

条件判断

  • when的值是一个条件表达式,如果条件判断成立,这个task就执行,如果判断不成立,则task不执行
  • 如果需要根据变量、facts(setup)或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用when子句。
  • 在task后添加when子句即可使用条件测试:when子句支持jinjia2表达式或语法,例如:

Ansible之Playbook详解、案例

  • 多条件判断

Ansible之Playbook详解、案例

  • 组条件判断

Ansible之Playbook详解、案例

  • 自定义条件判断

    Ansible之Playbook详解、案例
  • 迭代
  • 有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句指明迭代的元素列表即可。
  • 示例:
    Ansible之Playbook详解、案例

Ansible之Playbook详解、案例

  • Templates介绍
  • Jinja是基于 Python 的模板引擎。template类是Jinja的另一个重要组件,可以看作一个编译过的模块文件,用来生产目标文本,传递Python的变量给模板去替换模板中的标记。

    # scp root@192.168.175.130:/etc/httpd/conf/httpd.conf ./templates      //复制被管理端的配置文件到本地
    # vim templates/httpd.conf      //在管理端讲配置文件要修改的地方定义变量
    Listen {{http_port}}
    ServerName {{server_name}}
    MaxClients {{access_num}}
  • 在/etc/ansible/hosts 添加变量

    # vim /etc/ansible/hosts
    [abc]
    192.168.200.129 http_port=192.168.200.129:80 access_num=100 server_name="www.yun.com:80"
    # vim apache.yml
    # ansible-playbook apache.yml    #然后执行脚本  然后去abc组的主机上查看下配置文件是否已经改了

Ansible之Playbook详解、案例

  • Tags介绍
  • 在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了

Ansible之Playbook详解、案例

# ansible-playbook hosts.yml --tags="only"   //只执行这个标签上面的任务
  • 事实上,不光可以为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

    Ansible之Playbook详解、案例

    执行下面命令

    # ansible-playbook hosts.yml --tags="only"    //去被管理主机上查看文件创建情况 2个tags都会执行

以上所述就是小编给大家介绍的《Ansible之Playbook详解、案例》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

An Introduction to the Analysis of Algorithms

An Introduction to the Analysis of Algorithms

Robert Sedgewick、Philippe Flajolet / Addison-Wesley Professional / 1995-12-10 / CAD 67.99

This book is a thorough overview of the primary techniques and models used in the mathematical analysis of algorithms. The first half of the book draws upon classical mathematical material from discre......一起来看看 《An Introduction to the Analysis of Algorithms》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具