对于前部分的我们在执行ansible相关的命令,都是通过命令行的方式,这种其实很不方便的,我们可以将这些命令写入到一个YAML文件中,每次执行时,调用相关的YAML文件就可以了。这个YAML文件我们称之为剧本。我们只需要将要做的事情编写成playbook,把不同的模块按照顺序编排在剧本中,ansible就会按照剧本一步一步的执行,最终达到我们的目的,虽然playbook的功能与脚本类似,但是剧本并不是简单的将ad-hoc命令按照顺序堆砌在一个可执行文件中,编写剧本需要遵循YAML语法。
如何编写playbook呢?
首先,我们需要创建一个YAML格式的playbook文件。playbook文件以“.yaml”或者“.yml”作为文件名后缀。
在编写剧本之前,我们看如下两条命令:
#ansible pro -m ping #ansible pro -m file -a "path=/testdir/test state=directory"
接下来我们把上面的命令转换成playbook的表现形式,如何书写?
对于上面的剧本说明:
第一行使用三个横杠作为开始,第二行使用“-”作为开头,在YAML预发中使用“-”表示一个块序列的节点。
上例中,“-”后面使用hosts关键字指定了要操作的主机,hosts关键字对应的值为pro,表示我们要在pro这个主机进行操作,在YAML语法中使用冒号映射键值对时,冒号后面必须有空格,这也是语法,如果你想要一次性在多台主机上进行操作,可以同时写多个主机,每台主机使用逗号隔开。
第三行:使用remote_user关键字可以指定在进行远程操作时使用那个用户进行操作,'remote_user:root'表示pro的root用户进行操作,
第四行:使用tasks关键字指明要进行操作的任务列表,之后的行都属于tasks键值对中的值。
之后的行都属于task任务列表中的任务,可以看出,整个任务列表一共有两个任务组成,每个任务都以“-”开头,每个任务都有自己的名字,任务名使用name关键字进行指定,第一个任务使用ping模块,使用ping模块时没有指定任何参数,第二个任务使用file模块,指定了参数。
如上图的,剧本执行后返回了一些信息,这些信息时这次剧本运行的概况。
PLAY[pro]表示这次运行的playbook中有一个play是针对pro这台主机运行的,一个'playbook'是一个或多个'play'组成的,打比方:一个剧本是由一个或多个桥段组成的,所有的桥段组合在一起,组成一个完整的剧本,而上例中,整个剧本中只有一个桥段,也就是说,上述的playbook中,我们只写了一个play。
上述仅有的play是针对pro运行的,这个play一共包含三个任务,第一个任务名字叫做’GAthering Facts‘,这个任务会手机当前play对应的目标主机的相关信息,收集完这些基础信息后,才会执行我们指定的任务,也就是下面两个任务。
上面的playbook里面只有一个play,我们也可以在这个playbook中多写几个play,示例如下:
如果你的playbook写完了,但是不缺东playbook文件中是否存在预发错误,那么你可以使用如下命令进行语法检查。只要返回palybook的名称,就表示没有预发错误。
当我们创建剧本使用的模块需要多个参数时,这时参数可以换种方式写:
如一个创建文件的tasks:
我们可以使用如下简单的方式书写:
在之前的示例中,我们对每个人物都指定对应的名称,即每个task都有对应的name,当我们省略name时,默认以当前任务调用的模块的名称作为任务的名称,建议不要省略name。当任务存在name时,可读性比较高。
原文地址:https://blog.51cto.com/11726212/2378258
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。