题目一
使用debug模块,显示当前受管主机的dns服务器的ip地址。
bash
#进入ansible主机
[root@master ~]# ssh devops@192.168.168.10
#进入目标文件夹
[devops@master ~]$ cd ansible
#创建目标文件并把内容写进去
[devops@master ansible]$ vim dns_debug.yml
---
- name:
hosts: localhost
connection: local
gather_facts: true
tasks:
- debug:
msg: "DNS服务器列表:{{ ansible_dns.nameservers }}"
#输出结果验证
[devops@master ansible]$ ansible-playbook dns_debug.yml
PLAY [localhost] *********************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [localhost]
TASK [debug] *************************************************************************
ok: [localhost] => {
"msg": "DNS服务器列表:['114.114.114.114']"
}
PLAY RECAP ***************************************************************************
localhost : 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
<directory /var/www/html>
allowoverride none
require all granted
bash
#创建目标文件并把内容写进去
[devops@master ansible]$ vim httpd_vhost.yml
---
- name:
hosts: localhost
connection: local
tasks:
# 1. 写入虚拟主机配置文件
- name: 生成 /etc/httpd/conf.d/example.conf
copy:
dest: /etc/httpd/conf.d/example.conf
content: |
<virtualhost *:80>
servername 0.0.0.0
documentroot /var/www/html
</virtualhost>
<directory /var/www/html>
allowoverride none
require all granted
</directory>
notify: restart httpd
# 2. 写入网站首页
- name: 生成首页:wq文件index.html
copy:
dest: /var/www/html/index.html
content: "zuoye"
# 3. 放行http防火墙端口
- name: 放行80端口
firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
handlers:
# 配置文件变更后触发重启服务
- name: restart httpd
service:
name: httpd
state: restarted
enabled: yes
#输出结果验证
[devops@master ansible]$ ansible-playbook httpd_vhost.yml
[WARNING]: Collection ansible.posix does not support Ansible version 2.14.9
PLAY [localhost] *********************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [localhost]
TASK [生成 /etc/httpd/conf.d/example.conf] *******************************************
ok: [localhost]
TASK [生成首页:wq文件index.html] *****************************************************
ok: [localhost]
TASK [放行80端口] ********************************************************************
ok: [localhost]
PLAY RECAP ***************************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[devops@master ansible]$ curl 127.0.0.1
zuoye
题目三
向受管主机的/home/file文件里面写入内容如下:
hostname=当前主机的名字
memory=当前主机的内存大小
BIOS version=当前主机的bios的版本
distribution=当前linux主机的发行版本信息
Size of disk device is 当前主机的磁盘大小
bash
#查看磁盘设备名
[devops@master ansible]$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 9.8G 0 rom /media
/mnt
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 98.4G 0 part
├─rhel-root 253:0 0 96.4G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
#创建目标文件并把内容写进去
[devops@master ansible]$ vim write_info.yml
---
- name: 写入主机硬件系统信息到 /home/file
hosts: all
gather_facts: true
# 必须开启,采集系统、硬件、BIOS、磁盘、内存信息
tasks:
- name: 生成 /home/file 文件,写入主机信息
copy:
dest: /home/file
content: |
hostname={{ inventory_hostname }}
memory={{ ansible_memtotal_mb }} MB
BIOS version={{ ansible_bios_version }}
distribution={{ ansible_distribution }} {{ ansible_distribution_version }}
Size of disk device is {{ ansible_devices.nvme0n1.size }} GB
[devops@master ansible]$ ansible-playbook write_info.yml
PLAY [写入主机硬件系统信息到 /home/file] *********************************************
TASK [Gathering Facts] ***************************************************************
ok: [node01]
ok: [node02]
ok: [master]
TASK [生成 /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
[devops@master ansible]$ ansible all -m command -a "cat /home/file"
node01 | CHANGED | rc=0 >>
hostname=node01
memory=1731 MB
BIOS version=VMW201.00V.24006586.B64.2406042154
distribution=RedHat 9.3
Size of disk device is 100.00 GB GB
master | CHANGED | rc=0 >>
hostname=master
memory=1731 MB
BIOS version=VMW201.00V.24006586.B64.2406042154
distribution=RedHat 9.3
Size of disk device is 100.00 GB GB
node02 | CHANGED | rc=0 >>
hostname=node02
memory=1731 MB
BIOS version=VMW201.00V.24006586.B64.2406042154
distribution=RedHat 9.3
Size of disk device is 100.00 GB GB
题目四
如果当前受管主机的根分区容量大于1G,则安装httpd和mariadb-server软件包,如果httpd和
mariadb服务未运行则运行该服务。
bash
#创建目标文件并把内容写进去
[devops@master ansible]$ vim install_web_db.yml
---
- name: 根分区大于1G安装并启动httpd、mariadb
hosts: all
gather_facts: true
become: true
tasks:
- name: 安装并启动web与数据库服务
block:
- name: 安装httpd和mariadb-server
yum:
name:
- httpd
- mariadb-server
state: present
- name: 启动httpd并开机自启
service:
name: httpd
state: started
enabled: true
- name: 启动mariadb并开机自启
service:
name: mariadb
state: started
enabled: true
when: (ansible_mounts | selectattr('mount','equalto','/') | first).size_total > 1073741824
#执行命令
[devops@master ansible]$ ansible-playbook install_web_db.yml
PLAY [根分区大于1G安装并启动httpd、mariadb] ******************************************
TASK [Gathering Facts] ***************************************************************
ok: [node02]
ok: [node01]
ok: [master]
TASK [安装httpd和mariadb-server] *****************************************************
changed: [master]
changed: [node02]
changed: [node01]
TASK [启动httpd并开机自启] ***********************************************************
ok: [master]
changed: [node01]
changed: [node02]
TASK [启动mariadb并开机自启] *********************************************************
changed: [node02]
changed: [master]
changed: [node01]
PLAY RECAP ***************************************************************************
master : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node01 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node02 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
题目五
创建一个playbook,要求如下:
该playbook运行在所有受控节点
该playbook覆盖/etc/message文件的内容
在dev主机组的主机上,内容是:Development
在test主机组的主机上,内容是:Test
bash
#创建目标文件并把内容写进去
[devops@master ansible]$ vim message.yml
---
- name: 按主机组修改/etc/message文件
hosts: all
gather_facts: false
become: true
tasks:
# 针对 dev 组主机写入内容
- name: dev组写入Development
copy:
dest: /etc/message
content: "Development\n"
# 判断当前主机是否属于 dev 组(文档魔法变量 + when)
when: inventory_hostname in groups.dev
# 针对 test 组主机写入内容
- name: test组写入Test
copy:
dest: /etc/message
content: "Test\n"
# 判断当前主机是否属于 test 组
when: inventory_hostname in groups.test
#修改主机清单inventory
[devops@master ansible]$ vim inventory
[dev]
master
[test]
node01
node02
#执行命令
[devops@master ansible]$ ansible-playbook message.yml
PLAY [按主机组修改/etc/message文件] **************************************************
TASK [dev组写入Development] **********************************************************
skipping: [node02]
skipping: [node01]
changed: [master]
TASK [test组写入Test] ****************************************************************
skipping: [master]
changed: [node02]
changed: [node01]
PLAY RECAP ***************************************************************************
master : ok=1 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
node01 : ok=1 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
node02 : ok=1 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
#验证结果
[devops@master ansible]$ cat /etc/message
Development
[devops@node01 ~]$ cat /etc/message
Test