• ansible的playbook组件


    playbook的核心元素:

            tasks: 任务

            variables: 变量

            templates: 模板

            handlers: 处理器

            roles: 角色

    组织格式:YAML(被称为另外一种标记语言)

      语法:(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对)

    例如:    name:tom

           age:21

           gender:Male

           spourse:

             name:lily

             gender:female

           children:

             —    name:susan

                age: 2

                gender:female

             —    name:sunny

                age: 10

                gender:male

    列表:用—引导

    字典:包含多个k:v键值对  例如   {name:tom age:21 gender:male}   上面的表示就是一个字典,字典也可以嵌套,如上面的

    spourse下又嵌套了一个字典,而children下包含了两个列表,每个列表下又嵌套了一个字典  

    创建一个playbook文件:vim /root/first.yml  (这类文件必须以.yml或.yaml结尾)

    一般的格式为:

       - hosts:

         vars: 

         remote_user:   

         tasks:

         handlers:

    hosts 定义单个主机或组,vars定义变量,remote_user定义执行命令的远程用户,tasks定义执行哪些命令,handlers定义调用哪些

    处理器

    下图是一个简单示例:

    如何运行我定义的剧本呢?  使用ansible-playbook命令  例如:ansible-playbook /root/first.yml

    变量:

      变量命名:字母数字下划线组成,只能以字母开头

      变量种类:  facts(内置变量)   

           自定义变量:(1)通过命令行传递,(2)通过roles传递,(3)主机变量,(4)组变量

      facts:由远程主机发回的主机属性信息,这些信息被保存在ansible变量当中

      例如:ansible 192.168.238.170 -m setup  来获取远程主机上的属性信息,这些属性信息保存在facts中

      通过命令行传递:ansible-playbook test.yml --extra-vars “host=www user=tom“(如果剧本中已有此处定义的变量则会被

    覆盖)

        主机变量:在/etc/ansible/hosts中定义,如下图

      

      name=tom就是给主机192.168.238.168单独定义的变量(主机变量)

      组变量:[group_name:vars]

          var1=value

          var2=value

    inventory参数:ansible基于ssh连接inventory(/etc/ansible/hosts)中指定的远程主机时,将以此处指定的属性进行连接

      ansible_ssh_port 连接远程主机使用的端口

      ansible_ssh_user 连接远程主机使用的用户

      ansible_ssh_pass 连接远程主机使用的密码(建议使用基于密钥认证,而不是用此选项)

    使用示例:vim /etc/ansible/hosts

    第二个剧本:vim /root/second.yml

    在playbook中调用变量的方式为{{ variable }}

    条件测试:在某task后面添加when子句即可实现条件测试功能,例如:

    ansible_os_family 是facts中内置的属性信息   ansible_os_family的信息可以使用ansible all -m setup | grep

    ansible_os_family 查看

    迭代:

      在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表

    例如:

    - name: add four users

      user: name={{ item }}  state=present

      with_items:

      - testuser1

      - testuser2

      - testuser3

      - testuser4

    迭代中,列表中的每个元素可以为字典格式

    例如:

    - name: add two users

      user: name={{ item.name }}  state=present  groups={{ item.groups }}

      with_items:  

      - { name: 'testuser5', groups: 'wheel' }

      - { name: 'testuser6', groups: 'root' }

    handlers:也是task,但只有其关注的条件满足时,才会被触发执行 例如:

    vim /root/fourth.yml

    上面的意思是copy中复制过去的文件跟远程主机上的文件不同,就通过notify调用handlers,即重启httpd服务

    handler 重启服务是最通用的用法

    templates:用于生成文本文件(配置文件);模板文件中可使用jinja2表达式,表达式要定义在{{ }},也可以简单地仅执行变量替

    换;

    使用示例: vim /etc/ansible/hosts

    添加了http_port的变量

    接下来:vim /root/httpd.conf 

    Listen的端口使用 {{ http_port }},这样是为了调用此变量

    接下来: vim /root/fourth.yml

    修改copy为template    

    ansible-playbook /root/fourth.yml,这时192.168.238.168就会监听为8080端口,  而不是默认的80端口了

    roles:roles用于实现“代码复用”,roles以特定的层次型格式组织起来的playbook元素(variables, tasks, templates,

    handlers);可被playbook以role的名字直接进行调用

    roles的文件结构:

        files/:此角色中用到的所有文件均放置于此目录中;

        templates/:Jinja2模板文件存放位置

        tasks/:任务列表文件;可以有多个,但至少有一个叫做main.yml的文件

        handlers/:处理器列表文件;可以有多个,但至少有一个叫做main.yml的文件

          vars/:变量字典文件;可以有多个,但至少有一个叫做main.yml的文件

        meta/:此角色的特殊设定及依赖关系

    例如:mkdir /etc/ansible/roles   cd /etc/ansible/roles    mkdir  web1/{files,templates,tasks,handlers,vars,meta}

    (1)vim web1/vars/main.yml   

      

     (2) vim web1/tasks/main.yml

    这里的template指的是相对路径-->web1/templates

    (3) vim web1/handlers/main.yml

    cp /root/httpd.conf   /etc/ansible/roles/web1/templates/

    vim /etc/ansible/roles/web1/templates/httpd.conf

    将User和Group都替换为上面定义的变量

    在roles之外定义一个调用roles的文件,vim /etc/ansible/web1.yml  这个文件的文件名必须以.yml结尾

    hosts:web1 指在/etc/ansible/hosts中定义的组,上面有定义

    最后的 -  web1  指的是/etc/ansible/roles/web1 目录

    这时只需更改上面的hosts指定的值就可对不同的主机实现代码重用了

    还可以通过role传递变量,例如

    还可以调用多个role,例如

    每次运行palybook都会把里面的内容都运行一遍,而有时只想运行一些内容,这时可以使用tags

    vim /etc/ansible/roles/web1/tasks/main.yml

    使用命令ansible-playbook -t conf web1.yml  就只执行定义了conf的tags的那个标签的任务,此处就是install config file

    tags可以定义在多处

  • 相关阅读:
    水晶报表关于System.Web.Extensions报错的问题
    个人下一步学习计划
    一个老程序员对数据库的一点纠结
    Visual SourceSafe权限配置记录
    SQL SERVER 2008代码折叠小技巧
    用命令行自动备份数据库到其他服务器
    CrystalReports 2008序列号留档
    ····
    C语言中的static
    页面自动刷新的几种方法
  • 原文地址:https://www.cnblogs.com/linuxboke/p/5469392.html
Copyright © 2020-2023  润新知