ansible习题
一、编写playbook的习题

使用debug模块,显示当前受管主机的dns服务器的ip地址
解答
①先用mkdir chap03建立一个名为chap03的目录
②再用cd chap03到chap03的工作目录下
③然后用vim dns_ip.yml去编辑dns_ip.yml文件,代码如下:
---
- name: dns_ip
gather_facts: yes
hosts: all
tasks:
- name: show_facts_ipv4
debug:
var: ansible_facts.dns
④最后用ansible-playbook dns_ip.yml去运行测试这个playbook,结果如下:
[devops@master chap03]$ ansible-playbook dns_ip.yml
PLAY [dns_ip] ******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node01]
ok: [node02]
ok: [master]
TASK [show_facts_ipv4] *********************************************************
ok: [master] => {
"ansible_facts.dns": {
"nameservers": [
"114.114.114.114"
]
}
}
ok: [node01] => {
"ansible_facts.dns": {
"nameservers": [
"114.114.114.114"
]
}
}
ok: [node02] => {
"ansible_facts.dns": {
"nameservers": [
"114.114.114.114"
]
}
}
PLAY RECAP *********************************************************************
master : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node01 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node02 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
将example.conf文件复制到/etc/httpd/conf.d/目录,example.conf文件内容如下:
<virtualhost *:80>
servername 0.0.0.0
documentroot /var/www/html
</virtualhost>
<directory /var/www/html>
allowoverride none
require all granted
</directory>
如果/etc/httpd/conf.d/目录下的文件更新,则重启httpd服务。配置/var/www/html/index.html文件内容如下:
zuoye
解答
①先用vim example.conf去写入上述内容
②再用vim copy_vim.yml去编辑copy_vim.yml文件,代码如下:
---
- name: copy_vim
hosts: all
tasks:
- name: copy conf
copy:
src: ./example.conf
dest: /etc/httpd/conf.d/
notify: restart httpd
- name: install a list of package
yum:
name:
- httpd
- mariadb-server
- firewalld
- php
state: present
- name: define index.html
copy:
content: "zuoye\n"
dest: /var/www/html/index.html
- name: start httpd
service:
name: httpd
state: started
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
③然后用ansible-playbook copy_vim.yml去运行测试这个playbook,结果如下:
[devops@master chap03]$ ansible-playbook copy_vim.yml
PLAY [copy_vim] ****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node01]
ok: [node02]
ok: [master]
TASK [copy conf] ***************************************************************
changed: [node01]
changed: [node02]
changed: [master]
TASK [install a list of package] ***********************************************
ok: [master]
ok: [node01]
ok: [node02]
TASK [define index.html] *******************************************************
changed: [node02]
changed: [node01]
changed: [master]
TASK [start httpd] *************************************************************
ok: [node01]
ok: [node02]
ok: [master]
RUNNING HANDLER [restart httpd] ************************************************
changed: [node02]
changed: [node01]
changed: [master]
PLAY RECAP *********************************************************************
master : ok=6 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node01 : ok=6 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node02 : ok=6 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
④最后用ansible all -m command -a 'cat /etc/httpd/conf.d/example.conf'和ansible all -m command -a 'cat /var/www/html/index.html'来查询受管主机是否将example.conf文件复制到/etc/httpd/conf.d/目录和是否配置/var/www/html/index.html文件,结果如下:
[devops@master chap03]$ ansible all -m command -a 'cat /etc/httpd/conf.d/example.conf'
master | CHANGED | rc=0 >>
<virtualhost *:80>
servername 0.0.0.0
documentroot /var/www/html
</virtualhost>
<directory /var/www/html>
allowoverride none
require all granted
</directory>
node02 | CHANGED | rc=0 >>
<virtualhost *:80>
servername 0.0.0.0
documentroot /var/www/html
</virtualhost>
<directory /var/www/html>
allowoverride none
require all granted
</directory>
node01 | CHANGED | rc=0 >>
<virtualhost *:80>
servername 0.0.0.0
documentroot /var/www/html
</virtualhost>
<directory /var/www/html>
allowoverride none
require all granted
</directory>
[devops@master chap03]$ ansible all -m command -a 'cat /var/www/html/index.html'
master | CHANGED | rc=0 >>
zuoye
node02 | CHANGED | rc=0 >>
zuoye
node01 | CHANGED | rc=0 >>
zuoye
二、ansible的templates的习题
使用file.j2模板文件向受管主机的/home/file文件里面写入上述内容
解答
①先用vim file.j2.yml去编辑file.j2.yml文件,代码如下:
---
- name: file.j2
hosts: all
gather_facts: yes
become: yes
tasks:
- name: write /home/file
copy:
content: |
hostname={{ ansible_facts.hostname }}
memory={{ ansible_facts.memtotal_mb }}MB
BIOS version={{ ansible_facts.bios_version }}
distribution={{ ansible_facts.distribution }} {{ ansible_facts.distribution_version }}
Size of disk device is {{ ansible_facts.devices.sda.size }}
dest: /home/file
②再用ansible-playbook file.j2.yml去运行测试file.j2.yml,结果如下:
[devops@master chap03]$ ansible-playbook file.j2.yml
PLAY [file.j2] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node02]
ok: [master]
ok: [node01]
TASK [write /home/file] ********************************************************
changed: [node01]
changed: [node02]
changed: [master]
PLAY RECAP *********************************************************************
master : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
③最后用ansible all -m command -a 'cat /home/file'去查询受管主机是否实现写入题目要求的内容,结果如下:
[devops@master chap03]$ ansible all -m command -a 'cat /home/file'
node01 | CHANGED | rc=0 >>
hostname=node01
memory=3615MB
BIOS version=VMW201.00V.24006586.B64.2406042154
distribution=RedHat 9.3
Size of disk device is 100.00 GB
master | CHANGED | rc=0 >>
hostname=master
memory=3615MB
BIOS version=VMW201.00V.24006586.B64.2406042154
distribution=RedHat 9.3
Size of disk device is 100.00 GB
node02 | CHANGED | rc=0 >>
hostname=node02
memory=3615MB
BIOS version=VMW201.00V.24006586.B64.2406042154
distribution=RedHat 9.3
Size of disk device is 100.00 GB
三、ansible的流程控制的习题
如果当前受管主机的根分区容量大于1G,则安装httpd和mariadb-server软件包,如果httpd和mariadb服务未运行则运行该服务。
解答
①先用vim test1.yml去编辑test1.yml文件,代码如下:
---
- name: test1
hosts: all
tasks:
- name: install a list of package
yum:
name:
- httpd
- mariadb-server
state: present
when: ansible_facts.devices.sda.size | human_to_bytes > 1073741824
- name: start httpd
service:
name: httpd
state: started
enabled: true
when: ansible_facts.services['httpd.service'].state | default('stopped') != 'running'
- name: start mariadb
service:
name: mariadb
state: started
enabled: true
when: ansible_facts.services['mariadb'].state | default('stopped') != 'running'
②再用ansible-playbook test1.yml去运行测试test1.yml,结果如下:
[devops@master chap03]$ ansible-playbook test1.yml
PLAY [test1] *******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node01]
ok: [node02]
ok: [master]
TASK [install a list of package] ***********************************************
ok: [master]
ok: [node02]
ok: [node01]
TASK [start httpd] *************************************************************
ok: [node02]
ok: [node01]
ok: [master]
TASK [start mariadb] ***********************************************************
ok: [master]
ok: [node02]
ok: [node01]
PLAY RECAP *********************************************************************
master : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node01 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node02 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2、创建一个playbook,要求如下:
该playbook运行在所有受控节点 该playbook覆盖/etc/message文件的内容 在dev主机组的主机上,内容是:Development 在test主机组的主机上,内容是:Test
解答
①先用vim inventory.yml去编辑inventory.yml文件,为了分出dev主机组和test主机组,我将master分到了dev主机组,node01和node02分到了test主机组,代码如下:
master
node01
node02
[webservers]
master
[dbservers]
node01
[servers:children]
webservers
dbservers
[dev]
master
[test]
node01
node02
②再用vim message.yml去编辑message.yml文件,代码如下:
---
- name: message
hosts: all
become: yes
tasks:
- name: Set dev
copy:
content: "Development\n"
dest: /etc/message
when: "'dev' in group_names"
- name: Set test
copy:
content: "Test\n"
dest: /etc/message
when: "'test' in group_names"
③然后用ansible-playbook message.yml去运行测试message.yml,结果如下:
[devops@master chap03]$ ansible-playbook message.yml
PLAY [message] *****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node01]
ok: [master]
ok: [node02]
TASK [Set dev] *****************************************************************
skipping: [node01]
skipping: [node02]
changed: [master]
TASK [Set test] ****************************************************************
skipping: [master]
changed: [node02]
changed: [node01]
PLAY RECAP *********************************************************************
master : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
node01 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
node02 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
④最后用ansible all -m command -a 'cat /etc/message'去查询受管主机是否实现写入题目要求的内容,结果如下:
[devops@master chap03]$ ansible all -m command -a 'cat /etc/message'
node02 | CHANGED | rc=0 >>
Test
node01 | CHANGED | rc=0 >>
Test
master | CHANGED | rc=0 >>
Development
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)