自动化运维工具ansible再探

                                                     自动化运维工具ansible再探

-------------------------------------------------------------------------------------------------------------------------------------

ansible常见工具

    (1)ansible-pull:推送命令至远程,效率无线提升,可以管理上千台主机,对运维要求较高,不过目前为止此命令还未有实施,ansible的管理台数还是在三四百台设备

    (2)ansible-playbook * .yml:运行剧本

    (3)ansible-valult:剧本加密解密指令,ansible-vault encrypt chen.yml,加密chen.yml,ansible-vault decrypt chen.yml,解密chen.yml,加密后的剧本无法用ansible -playbook直接执行,必须先解密,另有指令

    ansible-vault     encrypt * .yml 加密

                              decrypt           解密

                              edit                 编辑

              rekey              修改口令

                              create             创建新yml文件

    (4)ansible-console:交互式临时执行命令工具a.jpg

    图中5台主机数量,最多5个并发进程

    执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$

    设置并发数: forks n 例如: forks 10

    切换组: cd 主机组 例如: cd centos6,切换到centos6,b.jpg

    列出当前组主机列表: list

    列出所有的内置命令: ?或help

playbook

基本说明

    (1)playbook是由一个或多个剧本组成的列表

    (2)playbook的主要功能在于将hosts清单中的主机分配任务tasks,tasks就是各种ansible模块的调用,将分配的任务组织在一个playbook中,随后各任务按部就班的运行

    (3)playbook采用YAML语言编写

YAML语言

    (1)YAML是一个可读性高的、用来表达资料序列的格式

    (2)特性

        YAML可读性好

        YAML和脚本语言的交互性好

        YAML使用实现语言的数据模型

        YAML有一个一致的信息模型

        YAML易于实现

        YAML可以基于流来处理

        YAML表达能力强,扩展性好

YAML格式

    (1)单一档案中用三个连字号---区分多个档案,还有选择性的连续三个点表示档案结尾

    (2)次行开始正常写playbook的内容,一般建议写明该playbook的功能

    (3)使用#注释代码

    (4)缩进必须统一,不能空格和tab混用,同样的缩进代表同样的级别

    (5)文件内容大小写敏感

    (6)key/value的值可以同行写也可以换行写,同行使用:分隔

    (7)k/v的v可以是个字符串,也可以是个列表

    (8)一个完整的代码块功能需最少元素包括name、task

    (9)一个name只能包括一个task

    (10)YAML文件扩展名通常为yml或者yaml

List:列表,所有元素-开头

 c.jpg

Dictionary:字典,由多个key与value构成,两种写法d.jpg

playbook核心元素

    hosts:执行的远程主机列表

    tasks:任务集

    varniables:内置变量或者自定义变量

    templates:模板,可替换模板文件中的变量并实现一些简单逻辑的文件

    handlers:和notity结合使用,由特定条件触发的操作,满足条件执行,否则不执行,在某个task的最后一行添加notity,整个task任务集结束,编写handler

    tags:标签执行某条任务执行,用于选择运行playbook中的部分代码,比如说ansible-playbook -t TAGNAME FILE.yml

hosts:可以是如下形式

    one.example.com

    one.example.com:two.example.com

    192.168.1.50

    192.168.1.*

    GROUP1:GROUP2 两个组的并集

    GROUP1:&GROUP2 两个组的交集

    GROUP1:!GROUP2 在GROUP1组,但不在GROUP2组,比如说:

        - hosts: GROUP1:GROUP2 -->务必注意空格,行首-与元素有空格,键:和值之间有空格2.jpg

        remoute_user:可用于host和task中,也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户e.jpg

    handler、notify:条件触发执行,举例说明 f.jpg

    tags:标签,举例说明g.jpg

变量:

    变量名:仅能由字母、数字和下划线组成,且只能以字母开头

    变量来源

    (1)ansible CLASS -m setup,输入指令后可以看到很多代码,现只抓取一小部分做个说明h.jpg

    (2)/etc/ansible/hosts中定义变量 i.jpg

    (3)通过命令行指定变量,ansible-playbook -e varname=value

    (4)在playbook中定义j.jpgk.jpg

    (5)在独立的变量YAML文件中定义 l.jpgm.jpg

    (6)在role中定义,原理和(5)一样,也是将变量存放在一个文件里

模板templates

    文本文件,嵌套有脚本,只能ansible-playbook用,不可以ansible直接使用

    jinja2语言

        字符串:使用单引号或双引号

        数字:整数,浮点数

        列表:[item1, item2, ...]

        元组:(item1, item2, ...)

        字典:{key1:value1, key2:value2, ...}

        布尔型:true/false

    算术运算:+, -, *, /, //, %, **

    比较操作:==, !=, >, >=, <, <=

    逻辑运算:and, or, not

    流表达式:For If When

    功能:根据模块文件动态生成相应的配置文件,意思就是某个服务配置文件有变动了,可以放到模板里,把模板这个文件向目标群体发送

        templates文件必须存放于templates目录下,且命名为.j2结尾

        yml文件需要和temlpates目录评级,结构为

            |————temnginx.yml

            |————templates

                              |———nginx.conf.j2

为说明template作用,附一个小型实验

    (1)控制机和被控制机192.168.239.129都安装了nginx,根据目录建立mkdir -pv /app/templatetest/templates

    (2)cp /etc/nginx/nginx.conf /app/templatetest/templates/nginx.conf.j2

    (3)vim /app/templatetest/temnginx.yml,此时保证了yml文件和templates目录同级n.jpg

    (4)修改nginx.conf.j2文件,保证和被控制机的配置文件有变化o.jpg

    (5)ansible 192.168.239.129 -C检查下,没问题就执行p.jpg

    (6)查看结果q.jpg

when条件判断

    在task后添加when子句即可使用条件测试;when语句支持Jinja2表达式语法,举例r.jpg

迭代:with_items

    类似于shell脚本中的for循环s.jpg

Playbook中template for ift.jpg

    roles:用于层次性、结构化地组织playbook,通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。

    每个角色,以特定的层级目录结构进行组织

roles目录结构:

            playbook.yml

            roles/

            project/

            tasks/

            files/

            vars/

            templates/

            handlers/

            default/ 不常用

            meta/ 不常用

/roles/project/ :项目名称,有以下子目录

        files/ :存放由copy或script模块等调用的文件

templates/:template模块查找所需要模板文件的目录

tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含

handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含

vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含

meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需在此文件中通过include进行包含

default/:设定默认变量时使用此目录中的main.yml文件

role具体实现将以一个实验来进行解释


猜你喜欢

转载自blog.51cto.com/13873498/2283908