题目描述
按照下方所述,创建一个名为 /home/greg/ansible/issue.yml
的 playbook :
- 该
playbook
将在所有清单主机上运行; - 该
playbook
会将/etc/issue
的内容替换为下方所示的一行文本:
- 在
dev
主机组中的主机上,这行文本显示 为:Development
; - 在
test
主机组中的主机上,这行文本显示 为:Test
; - 在
prod
主机组中的主机上,这行文本显示 为:Production
.
详细解析
完成本题需要用到 Ansible 的 copy
模块。在 copy
模块中,可以使用 content
字段将指定的内容写入到受控端主机的指定位置。
此外,由于需要在不同的主机组中的主机上写入不同的内容,我们还需要在调用 copy
模块之前判断一下当前主机是否在指定的主机组中,这里的判断操作需要用到 when
关键字。
首先,按照题目要求,创建并编辑 playbook:
vim /home/greg/ansible/issue.yml
接着,在该 playbook 中写入如下内容:
--- - name: hosts: all tasks: - name: copy: content: "Development" dest: /etc/issue when: "inventory_hostname in groups.dev" - name: copy: content: "Test" dest: /etc/issue when: "inventory_hostname in groups.test" - name: copy: content: "Production" dest: /etc/issue when: "inventory_hostname in groups.prod"
[1]. 在上面的 playbook 中,有些内容是重复的,考试时完全可以复制粘贴相同的部分,以加快速度并提升准确率。但是,在平时练习时,还是尽可能全部自己敲一遍,不要粘贴复制;
运行该 playbook:
ansible-playbook /home/greg/ansible/issue.yml
如果上面的 playbook 在执行的时候没有什么问题,则可以使用如下命令作进一步的验证:
ansible dev,test,prod -m command -a "cat /etc/issue"
如果上述命令执行后返回的信息类似下面这样,则表明本题已经成功完成:
node2 | CHANGED | rc=0 >> Test node4 | CHANGED | rc=0 >> Production node3 | CHANGED | rc=0 >> Production node1 | CHANGED | rc=0 >> Development