Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140867
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-27 20:04
文章分类

全部博文(34)

文章存档

2018年(1)

2017年(23)

2016年(10)

我的朋友

分类: 系统运维

2017-03-29 10:08:59


一、Ansible Play book 的使用
   1、Playbook的核心元素
   2、Play books简介
   3、Play book的基础
    (1)主机与用户
    (2)tasks任务列表
    (3)task定义示例
    (4)Play book使用示例
   4、Play book变量的使用
    (1)变量的定义示例
   5、Play book中notifyh和handlers的使用.
    示例:触发
   6、Play book中tags的使用
   7、tepmplates 模板的使用
    jinja2语言
    示例:模板安装nginx
    when条件判断
    迭代with_items


一、AnsiblePlay book 的使用
1、Playbook的核心元素
         Hosts:               主机,部署目标
         Tasks:               任务,ansible,执行目的
         Varlables:         变量
         Templates:       包含了模板语法的文本文件;
         Handlers:                   有特定条件触发的任务
         Roles :              角色  (特别介绍)

2、Play books简介
         简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.
Playbooks可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.
         Playbooks 的格式是YAML(详见:YAML 语法),语法做到最小化,意在避免 playbooks 成为一种编程语言或是脚本,但它也并不是一个配置模型或过程的模型.
playbook 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.
在 play 之中,一组机器被映射为定义好的角色.在 ansible 中,play 的内容,被称为 tasks,即任务.在基本层次的应用中,一个任务是一个对 ansible 模块的调用。
3、Play book的基础
(1)主机与用户
                   Hosts:运行指定任务的目标主机 ()可以是一个或多个冒号分隔的主机组)
                   remoute_user: 在远程主机上执行任务的用户;
(2)tasks任务列表
         每个play包含了一个task列表(任务列表),每一个task在其对应的所有主机上(通过host parttern匹配到的所有主机)执行完毕之后才执行下一task。注意:一个paly中的所有hosts 都会获取相同的任务指令,也就是将一组选出的hosts映射到task上,所有主机执行task任务中的命令。
         每一个task的目标在于执行一个moudle,通常是带有特定的参数来执行,在参数中可以使用变量(variables).
         modules是具有“幂等”性的,意思是如果在执行module时此前已经执行过一次,目标主机不会作出任何改变,假设新一次的执行有所改动,那moudle只会改变必要的已经改变的地方,原有的已经执行过的结果不会发生任何改变。     
         每一个task必须有一个名称name,这样在运行play book时,从其输出的任务执行信息中可以很好的判断属于哪个task,如果没有定义name, action的值将会用作输出信息中标记的特定的taask。
(3)task定义示例
    示例1:
    下面是一种基本的task定义,server module 使用key=value格式的参数,这也是大多数moudle使用的参数格式:
                   tasks:
                       - name: apache start
                          service:name=httpd  state=started
    示例2:
    注意:shell和command模块后面直接跟命令,而非key=value类的参数列表
                   tasks:
                     - name: disable selunx
                       command: /sbin/setenforce 0
(4)Play book使用示例

4、Play book变量的使用
         (1)facts: 可直接调用
         (2)ansible-playbook 命令的命令行中的自定义变量
                                     -e EXTRA_VARS, --extra-vars=EXTRA_VARS  #命令行中定义变量传递至yaml文件。
        (3)通过roles传递变量
        (4)Host Inventory
            (a)向不同的主机传递不同的变量;
                IP/HOSTANME varable=value var2=value2
                在hosts 组ip后添加变量
            (b)向组中的主机传递相同的变量
    [group:var]         
    arable=value
    注意:Inventory参数:
   用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量。                                 ansible_ssh_host   
    ansible_ssh_user
    ansible_ssh_port
    ansible_ssh_pass
    ansible_sudo_pass
                ….
         查看远程主机的全部系统信息
               ansible all -m setup  #收集到的远程主机的变量




5、Play book中notifyh和handlers的使用
         notify这个action可用于每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之,仅在所有的变化发生完成之后一次性地执行指定操作。
         在notify中列出的操作称为handler,即notify中调用handler中定义的操作。
         handler也是也写task的列表,通过名字来引用,他们和一般的task没有什么区别。
         handler是由通知者进行notify,如果没有被notify,handler是不会执行的。
         不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handler也只会被执行一次。
         handlers最佳的应用场景是用来重启服务,或者触发系统重启操作的。除此之外很少会用到的。

6、Play book中tags的使用
         tags即标签,tags可以和一个play(就是很多个task)或者一个task进行捆绑。然后再执行play book时只需指定相应的tags即可仅执行与tags绑定的task。

7、tepmplates 模板的使用
    template是文本文件,嵌套有脚本(使用模板编程语言编写)的配置文件。
    讲到template模板就不得不先介绍template使用语言 jinja2。
    jinja2语言
    Jinja2是基于python的模板引擎,功能比较类似于PHP的smarty,J2ee的Freemarker和velocity。它能完全支持    unicode,并具有集成的沙箱执行环境,应用广泛。
         Jinja2 语言:
                   字面量:
                            字符串:使用单引号或双引号;
                            数字:整数,浮点数
                            列表:[item1,item2 …..]
                            元组:(item1item2…,)
                            字典:{key1:value,key2:value….}
                                     布尔型: true/filase
                            算数运算:
                                     +,- , * , / , // , % **
                            比较操作:
                                     ==, != , >=  ,<=
                            逻辑运算:
                                     and,or, not,
                            流表达式
                                     For、IF、when



阅读(1670) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~