Ansible课后作业

​

题目一

使用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
相关推荐
垚垚学技术_聚焦云原生8 天前
Ansible Vault 安全实践:敏感密码、密钥加密存储方案
安全·elasticsearch·ansible
广目软件10 天前
HA分布式架构采集节点变更操作手册20261029
运维·服务器·ansible·zabbix·prometheus
Moshow郑锴10 天前
Ansible 批量部署 Node.js 服务:ZIP 直解与共享目录分发两种方案对比
node.js·ansible
垚垚学技术_聚焦云原生10 天前
Ansible Playbook 进阶:when 条件、loop 循环、handlers 触发器落地
linux·ansible·自动化运维·devops
Moshow郑锴11 天前
GCP MIG 重建后 Ansible 初始化实战:PowerShell + NSSM 挂载 Windows 服务
windows·ansible
承渊政道13 天前
新增一台服务器时还要重新装Nginx?Ansible只改hosts目标列表,同一份Playbook继续执行
运维·nginx·ansible·内网穿透·cpolar
Helix25014 天前
Ansible混合环境自动化:Windows与Linux统一配置管理实战
windows·自动化·ansible·playbook·配置管理·winrm·混合环境
垚垚学技术_聚焦云原生16 天前
Ansible 变量体系详解:主机变量、组变量、全局变量优先级实战
ansible·自动化运维·devops·变量优先级
I'mChloe25 天前
不再逐台装Docker:我用Ansible Playbook批量统一服务器环境
服务器·docker·ansible
筑梦之路25 天前
Alibaba Cloud Linux 4 制作 Ansible RPM包实践(离线可复用)——筑梦之路
linux·运维·ansible