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
     
     
     





  • 相关阅读:
    Android 2.2 r1 API 中文文档系列(11) —— RadioButton
    Android API 中文 (15) —— GridView
    Android 中文 API (16) —— AnalogClock
    Android2.2 API 中文文档系列(7) —— ImageButton
    Android2.2 API 中文文档系列(6) —— ImageView
    Android 2.2 r1 API 中文文档系列(12) —— Button
    Android2.2 API 中文文档系列(8) —— QuickContactBadge
    [Android1.5]TextView跑马灯效果
    [Android1.5]ActivityManager: [1] Killed am start n
    Android API 中文(14) —— ViewStub
  • 原文地址:https://www.cnblogs.com/51runsky/p/4665904.html
Copyright © 2011-2022 走看看