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
相关推荐
烁3471 天前
Ansible初识
ansible
烁3471 天前
Ansible安装部署调试
ansible
烁3471 天前
Ansible命令
ansible
小义_2 天前
【Ansible】(三)基础配置与连接设置
云原生·ansible
炸炸鱼.6 天前
Ansible 企业级实战:Playbook 与 Roles 完全指南
网络·ansible
风曦Kisaki7 天前
# 自动化运维Day03:Ansible模块进阶(setup,debug),四种常用变量,进阶语法;Ansible Roles(角色)
运维·自动化·ansible
炸炸鱼.9 天前
Ansible 部署应用:从入门到精通
ansible
Peace9 天前
【Ansible】
linux·运维·ansible
Plastic garden10 天前
K8s(1)前置ansible准备环境
容器·kubernetes·ansible