ansible可以利用playbook来完成将任务写到一个YAML格式的文件中,然后利用ansible-playbook进行调用该文件,可重复执行
1.YAML文件的语法
YAML语法和其他高阶语言类似,并可以简单表达清单,散列表、标量等数据结构。其结构通过空格来展示,序列里的项用“-”来代表,Map你的键值用“;”分隔
YAML文件中列表的表示:列表中的所有元素均使用"-" 开头,例如:
– apple
– orange
– mango
YAML文件中字典的表示:字典通过key与value进行标识,如:
name: nwc
job: manager
sex: M
也可以将key:value放置于{}中进行表示,如
{name: nwc,job: manager,sex: M}
2.playbook的核心元素
Hosts:运行在哪些主机之上
Users:远程主机上,运行此任务的身份,不指名默认为root
Tasks:任务,也就是定义的具体任务,由模块定义的操作的列表
Variables:变量
Templates:模板,包含了模板语法编写的模板的文本文件
Handlers:处理器,类似Tasks,只是在特定的条件下才会触发的任务
某任务的状态在运行后为changed时,可通过"notify"通知给相应的handlers进行触发执行
Roles:角色,将Hosts剥离出去,由Tasks、Variables、Templates、Handlers所组成的一种特定的结构的集合
3.playbook的基础组件
hosts:运行指定任务的而目标主机,多个主机用:冒号分隔
remote_user:在远程主机上执行任务的用户;可以全局指定,也可以单个任务指定
sudo_user:表示以sudo方式运行任务时,切换为哪个用户身份运行
tasks:
任务列表,ansible运行任务的方式为,将第一个任务在所有主机上运行完成,然后再将第二个任务在所有主机上运行…,当某个任务在某个主机上运行出现故障,会造成任务终止,再次执行任务只需直接执行即可
定义任务列表,实际就是指明使用的模块和对应的模块参数来完成的任务的列表,其格式有两种:
(1)action:MODULE ARGUMENTS
(2)MODULE:ARGUMENTS
注意:shell和command模块后面直接跟命令,而不是key=value的参数列表
4.playbook文件的执行
playbook文件定义的任务要向执行,需要利用ansible-playbook命令进行调用
ansible-playbook命令用法:
检测语法
ansible-playbook –syntax-check /PATH/TO/PLAYBOOK.yaml
测试运行
ansible-playbook -C|–check /PATH/TO/PLAYBOOK.yaml
只检测执行指定的YAML文件可能会发生改变,但不真正执行操作,相当于测试运行
–list-hosts 检测YAML文件可能影响到的主机列表
–list-tasks 列出YAML文件的任务列表
–list-tags 列出YAML文件中的标签
运行
ansible-playbook /PATH/TO/PLAYBOOK.yml
可用选项:
不加任何选项表示完整运行整个playbook文件
-t TAGS,–tags=TAGS 表示只执行那个标签的任务
–skip-tags=SKIP_TAGS 表示除了指明的标签的任务,其他任务都执行
–start-at-task=START_AT 从指明的任务开始往下运行
通常情况下剧本的执行过程
先要利用 ansible-playbook -C|–check /PATH/TO/PLAYBOOK.yaml进行测试,测试没问题后
再利用 ansible-playbook /PATH/TO/PLAYBOOK.yml正式执行