zoukankan      html  css  js  c++  java
  • 3.1 playbook语法实践

    ansible playbook

    Playbook是使用yaml语言定制的,YAML是一个可读性高的用来表达资料序列的格式
     
    Yml语法:
    1
    2
    3
    4
    5
    6
    - host: websrvs                   #定义执行的主机
      remote_user: root            #定义执行的用户
      tasks:                                #定义任务
        - task1                             #定义第一个任务名称
        module_name: module_args   #定义使用的模块,和模块参数
       -  task 2                            #定义第二个任务名称

    简单示例1:
    定义一个yml: 对webserver组中的主机,调用group和user模块创建组和用户;对dbserver组中的主机调用copy模块复制文件
     
     

    执行yml
     
    执行第二遍,返回的所有结果为ok不是表示执行ok而是所有条件都满足
     

    简单示例2:搭建一个apache环境
     

    准备需要复制到被管理主机的httpd.conf配置文件,修改监听端口为8080
    1
    2
    3
    4
    [root@node1 ~]# mkdir conf
    [root@node1 ~]# cp /etc/httpd/conf /httpd.conf conf/
    [root@node1 ~]# vim conf/httpd.conf
    Listen 8080
    应用之前先停止webserver组中的httpd服务,并卸载
    1
    2
    [root@node1 ~]# ansible webserver -a 'service httpd stop'
    [root@node1 ~]# ansible websrvs -m yum -a 'name=httpd state=absent'
    执行:
      
    验证:httpd软件包已经安装,服务开机自动启动,而且也监听8080端口
    1
    2
    3
    4
    5
    6
    [root@node2 ~]# rpm -qa httpd
    httpd-2.2.15-39.el6.centos.x86_64
    [root@node2 ~]# chkconfig --list httpd
    httpd          0:off1:off2:on3:on4:on5:on6:off
    [root@node2 ~]# netstat -lntp | grep 8080
    tcp        0      0 :::8080                     :::*                        LISTEN      40826/httpd

    YAML中的变量:
    1、自定义变量
     

    2、facts收集被管理主机的信息时,会返回很多变量,这里就是调用了返回的ipv4地址变量

    示例:将客户端返回的ip地址,创建webserver组中主机的/tmp/test.ans文件。
     
    执行结果如下:
     
    验证:使用的变量名一样,但是生成的内容却是被管理主机的ip地址
    1
    2
    3
    4
    [root@node2 ~]# cat /tmp/test.ans
    [u'172.16.4.101']
    [root@node3 ~]# cat /tmp/test.ans
    [u'172.16.4.102']
    3、主机变量
    示例:对webserver组中的主机,定义testvar变量,值为ip地址后两位
    1
    2
    3
    4
    5
    6
    [root@node1 ~]# vim /etc/ansible/hosts
    [webserver]
    172.16.4.101 testvar="4.101"
    172.16.4.102 testvar="4.102"
    [dbserver]
    172.16.4.103
    设置yml文件,和使用其他变量一样的方法调用变量:
     
    执行yml
     
    验证:相同变量,不同主机得到了不同的值
    1
    2
    3
    4
    [root@node2 ~]# cat /tmp/test.ans
    [u'172.16.4.101'],4.101
    [root@node3 ~]# cat /tmp/test.ans
    [u'172.16.4.102'],4.102


    4、配置文件中引用变量(模版)
    示例:使用变量指定httpd.conf配置文件中一些参数的值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@node1 ~]# vim temolastes/httpd.conf.j2
    <IfModule prefork.c>
    StartServers       8
    MinSpareServers    5
    MaxSpareServers   20
    ServerLimit      256
    MaxClients       {{ maxClients }}
    MaxRequestsPerChild  4000
    </IfModule>
    Listen {{ http_port }}
    ServerName {{ ansible_fqdn }}
    修改Ansible的hosts文件定义主机变量
    1
    2
    3
    4
    5
    6
    [root@node1 ~]# vim /etc/ansible/hosts
    [webserver]
    172.16.4.101 http_port=80 maxClients=100
    172.16.4.102 http_port=8080 maxClients=200
    [dbserver]
    172.16.4.103


    定义yml:定义的过程中使用变量,根据不同主机定义的值不同,生成的配置文件参数也不同
     
    执行过程
     
    验证:相同的playbook由于对hosts指定的变量不同,所以生成不同的配置文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    node2:
    <IfModule prefork.c>
    StartServers       8
    MinSpareServers    5
    MaxSpareServers   20
    ServerLimit      256
    MaxClients       100
    MaxRequestsPerChild  4000
    </IfModule>
    Listen 80
    ServerName node2
    node3:
    <IfModule prefork.c>
    StartServers       8
    MinSpareServers    5
    MaxSpareServers   20
    ServerLimit      256
    MaxClients       200
    MaxRequestsPerChild  4000
    </IfModule>
    Listen 8080
    ServerName node3


    条件测试When语句
    示例:添加用户,但是只对主机名为node2的主机添加。
     
    执行结果如下:
     

    迭代
    当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句来指明迭代的元素列表即可。
    例如:
     
    上面语句的功能等同于下面的语句:
    1
    2
    3
    4
    - name: create user
    user: name=testuser1
    - name: create user
    user: name=testuser2


    事实上,with_items中可以使用元素还可为hashes,例如:
     
    ansible的循环机制还有更多的高级功能,具体请参见官方文档(http://docs.ansible.com/playbooks_loops.html
     
     
     





  • 相关阅读:
    MySQL分库分表环境下全局ID生成方案
    centos添加php及mysql环境变量
    shell中的常用通配符,字符类
    centos7 安装xinetd,telnet
    centos7 systemctl一些用法
    ps命令
    nginx与php-fpm通信的两种方式
    nginx常用功能
    MySQL安装
    MySql与MariaDB由来与历程
  • 原文地址:https://www.cnblogs.com/51runsky/p/4665904.html
Copyright © 2011-2022 走看看