那么现在,我们来想象一个工作场景,看看怎样把之前的知识点应用到这个工作场景中。
假设,我们想要在testB主机上安装httpd并启动,我们可以在ansible主机中执行如下3条命令
ansible testB -m yum_ repository -a 'name=rhel7.5 description="ansible rhel7.5"
baseurl=http://172.25.254.2/rhel7.5 gpgcheck= no enabled=yes'
ansible testB -m yum -a "name= httpd"
ansible testB -m service -a "name=httpd state= started"
由此可以看出每安装一个服务,都要执行这样的命令,有点麻烦,接下来讲解playbook去安装
(1)编写剧本(以.yml结尾)并测试
注意:剧本hosts可以写组,ip,别名(看清单写的什么)
可以在远程主机上查看到创建的目录
当再次执行时会发现变绿,因为已经存在了(幂等性)
(2)编写剧本创建多个任务
说明:当不确定自己写的剧本对不对时,可以先语法检测
也可以模拟执行剧本
(3)编写剧本的多种形式
以上三种方式均可
handlers的使用
(1)编写剧本修改远程主机的服务端口并重启服务
在远程主机查看httpd端口
ansible修改端口
再次执行命令会发现内容已经不再变,但还是会重启服务
现在我们想让配置文件改变时在重启服务,不改变不重启(handlers)
(2)在远程主机建立文件和目录
查看
此时我删除ht1和ht2文件
再次执行命令会发现不会改变(因为tasks没有真正的执行,所以不会调用)
(3)在(2)的基础上更改顺序
先在远程主机删除上面的文件
用ansible建立
以上可以看出顺序和tasks无关,和hanlers定义顺序相同,但是都会先执行完tasks里面的任务
现在我们如果想执行完tasks立即执行handler怎么 办? meta
meta的使用
建立多个任务
查看
现在我们想一次性调用多个handlers
listen的使用
查看
现在想在多个任务中只执行一个怎么办 tags
tags的使用
查看
tags的多种写法
多个tasks使用相同的标签
当执行前想知道都有哪些标签
tags和always
跳过always
当有多个always
tags和never
剩余的三个特殊标签分别为tagged、untagged、 all这三个特殊标签并非像always-样, always作为标签值存在,而这三个特殊标签则是在调用标签时使用,示例如下
ansible-playbook --tags tagged testtag.yml
.上述命令表示只执行有标签的任务,没有任何标签的任务不会被执行
ansible-playbook --skip-tags tagged testtag.yml
.上述命令表示跳过包含标签的任务,即使对应的任务包含always标签,也会被跳过
ansible-playbook --tags untagged testtag.yml
.上述命令表示只执行没有标签的任务,但是如果某些任务包含always标签,那么这些任务也会被执行
ansible-playbook --skip-tags untagged testtag.yml
上述命令表示跳过没有标签的任务特殊标签all表示所有任务会被执行,不用指定,状认情况下就是使用这个标签
。