对于前部分的咱们在执行ansible相关的命令,都是经过命令行的方式,这种其实很不方便的,咱们能够将这些命令写入到一个YAML文件中,每次执行时,调用相关的YAML文件就能够了。这个YAML文件咱们称之为剧本。咱们只须要将要作的事情编写成playbook,把不一样的模块按照顺序编排在剧本中,ansible就会按照剧本一步一步的执行,最终达到咱们的目的,虽然playbook的功能与脚本相似,可是剧本并非简单的将ad-hoc命令按照顺序堆砌在一个可执行文件中,编写剧本须要遵循YAML语法。bash
如何编写playbook呢?ide
首先,咱们须要建立一个YAML格式的playbook文件。playbook文件以“.yaml”或者“.yml”做为文件名后缀。命令行
在编写剧本以前,咱们看以下两条命令:blog
#ansible pro -m ping #ansible pro -m file -a "path=/testdir/test state=directory"
接下来咱们把上面的命令转换成playbook的表现形式,如何书写?rem
对于上面的剧本说明:it
第一行使用三个横杠做为开始,第二行使用“-”做为开头,在YAML预发中使用“-”表示一个块序列的节点。class
上例中,“-”后面使用hosts关键字指定了要操做的主机,hosts关键字对应的值为pro,表示咱们要在pro这个主机进行操做,在YAML语法中使用冒号映射键值对时,冒号后面必须有空格,这也是语法,若是你想要一次性在多台主机上进行操做,能够同时写多个主机,每台主机使用逗号隔开。test
第三行:使用remote_user关键字能够指定在进行远程操做时使用那个用户进行操做,'remote_user:root'表示pro的root用户进行操做,基础
第四行:使用tasks关键字指明要进行操做的任务列表,以后的行都属于tasks键值对中的值。file
以后的行都属于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时,可读性比较高。