Ansible playbook 入门

    ansible playbook 是一门自动化运维的编程语言,顺序、条件、循环等操作,使用yaml格式实现,playbook配置文件类似于shell脚本。

    playbook的优势:

  • 可读性好。
  • 和脚本语言的交互性好。
  • 脚本模块化,配置灵活。
  • 每个步骤都配有名称,方便查看结果。
  • 易于实现

    1. yaml语法

        YAML语法结构通过缩进来展示,通过“-”来代表项;“:”用来分隔键和值;整个文件以“---”开头,并以“...”结尾,如下所示:

        

        所有的“-”和“:”后面均有空格,而且注意缩进和对齐。

        playbook的核心元素包含:

  • hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts中的分组信息;

  • remote_user:远程主机上,运行此任务的默认身份为root;

  • tasks:任务,即定义的具体任务,由模块定义的操作列表;

  • handlers:触发器,类似tasks,只是在特定的条件下才会触发的任务。某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers进行触发执行;

  • roles:角色,将hosts剥离出去,由tasks、handlers等所组成的一种特定的结构集合。

      playbook文件定义的任务需要通过ansible-playbook命令进行调用并执行。语法结构如下:          

      ansible-playbook [options]  /PATH/TO/PLAYBOOK.yaml

      [option]部分的功能包括:

                 --syntax-check:检测yaml文件的语法;

                 -C(--check):预测试,不会改变目标主机的任何设置

                 --list-hosts:列出yaml文件影响的主机列表

                 --list-tasks:列出yaml文件的任务列表

                 --list-tags:列出yaml文件中的标签

                 -t TAGS(--tags=TAGS):表示只执行指定标签的任务

                 --skip-tags=SKIP_TAGS:表示除了指定标签的任务,执行其他任务

                 --start-at-task=START_AT:从指定的任务开始往下运行;

 

       通常情况下先执行ansible-playbook -C /PATH/TO/PLAYBOOK.yaml命令进行测试,测试没问题后再执行ansible-playbook /PATH/TO/PLAYBOOK.yml命令

测试执行playbook.yaml结果:

     ansible-playbook /etc/ansible/test.yaml

       远程连接192.162.146.128主机查看是否成功执行了任务:

       ssh root@192.168.146.128 tail -1 /etc/passwd

       ssh root@192.168.146.128 ls -rlt /home

    2. 触发器

        需要触发才能执行的任务,当之前定义在tasks中的任务执行成功后,若希望在此基础上触发其他任务,这时就需要定义handlers。例如:例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效。

       handlers触发器具有以下特点:

       1). handlers是Ansible提供的条件机制之一。handlers和task很类似,但是它只在被task通知的时候才会触发执行.

       2).   handlers只会在所有任务执行完成后执行。而且即使被通知了很多次,它也只会执行一次。handlers按照定义的顺序依次执行。

      handlers触发器的使用示例如下:

      cat /etc/ansible/httpd.yaml

 

      执行任务:

      ansible-playbook -C /etc/ansible/httpd.yaml  

      ansible-playbook /etc/ansible/httpd.yaml

   远程连接主机查看结果:

 3. 角色

     将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色。角色一般存放在/etc/ansible/roles/目录,可通过ansible的配置文件来调整默认的角色目录,/etc/ansible/roles/目录下有很多子目录,其中每一个子目录对应一个角色,每个角色也有自己的目录结构。

    tree /etc/ansible/roles/

    

    web:web角色

    mariadb:mariadb角色

     每个角色的定义,以特定的层级目录结构进行组织,角色的文件结构如下:

     files/:此角色中用到的所有文件均放置于此目录中
     templates/: 模板文件存放位置
     tasks/:任务列表文件;可以有多个,但至少有一个叫做main.yml的文件
     handlers/:处理器列表文件;可以有多个,但至少有一个叫做main.yml的文件
     vars/:变量字典文件;可以有多个,但至少有一个叫做main.yml的文件
     meta/:此角色的特殊设定及依赖关系

    有了角色后,可以直接在yaml文件(playbook配置文件)中调用角色,例如:

    

    可以只调用一个角色,也可以调用多个角色,当定义了角色后,用ansible-playbook PALYBOOK文件执行即可。此时ansible会到角色集合的目录(/etc/ansible/roles)去找web和mariadb目录,然后依次运行web和mariadb目录下的所有代码

    4. 实战:安装及配置mariadb数据库的实例

    需求分析:

  • 要求被管理主机上自动安装mariadb,安装完成后上传提前准备好的配置文件至远端主机,重启服务,然后新建testdb数据库,并允许test用户对其拥有所有权限。

  • 被管理主机配置yum仓库,自行配置,若被管理端可以连接互联网,那么直接将yum仓库指向互联网即可。

   在ansible服务器上实施:

       创建任务文件:      

        触发器文件:

      files文件:

    创建PLAYBOOK.yml文件

执行mariadb.yml

      安装完成后,在远端主机上测试:

posted @ 2020-03-15 20:57  出水芙蓉·薇薇  阅读(569)  评论(0编辑  收藏  举报