开源运维自动化工具 Ansible 详解(6)

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

简单聊一聊Ansible自动化运维

playbook的核心元素包含:

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

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

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

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

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

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

ansible-playbook [option] /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:从指定的任务开始往下运行;

执行playbook的示例如下:

[root@centos01 ~]# ansible-playbook --syntax-check /etc/ansible/a.yml <!--语法检测--> playbook: /etc/ansible/a.yml <!--表示没有报错--> [root@centos01 ~]# ansible-playbook -C /etc/ansible/a.yml <!--对a.yml进行预测试--> .................<!--省略部分内容--> 192.168.100.20 : ok=3 changed=1 unreachable=0 failed=0 192.168.100.30 : ok=2 changed=1 unreachable=0 failed=0 <!--返回结果表示没有错误,全部可以执行成功。--> [root@centos01 ~]# ansible-playbook --list-hosts /etc/ansible/a.yml <!--列出a.yml文件中的主机--> [root@centos01 ~]# ansible-playbook --list-tasks /etc/ansible/a.yml <!--列出任务--> [root@centos01 ~]# ansible-playbook --list-tags /etc/ansible/a.yml <!--列出标签--> [root@centos01 ~]# ansible-playbook /etc/ansible/a.yml <!--执行任务--> [root@centos01 ~]# ssh 192.168.100.20 tail -1 /etc/passwd <!--确认执行结果--> user1:x:1001:1001::/home/user1:/bin/bash [root@centos01 ~]# ssh 192.168.100.30 ls -ld /home/passwd -rw-r--r--. 1 root root 2342 7月 23 16:06 /home/passwd <!--一般情况先执行“-C”命令进行预测试,没有问题后再执行.yml文件。-->

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

2、触发器

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

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/83f828c48821a1020ae3d9c1d6ed245b.html