网站搜索

如何使用 Ansible 模块执行系统管理任务 - 第 6 部分


在 Ansible 系列的第 6 部分中,我们在过去的主题中介绍了一些 Ansible 模块,现在我们将更深入地了解有助于执行许多系统管理任务的其他模块。

您将了解每个模块的基本概念,并了解可用于完成某些任务的选项。

在本页面:
  1. 在 Ansible 中管理软件包和存储库
  2. 使用 Ansible 管理服务
  3. 使用 Ansible 管理防火墙
  4. 使用 Ansible 归档文件或文件夹
  5. 使用 Ansible 安排任务
  6. 使用 Ansible 管理用户和组
  7. 使用 Ansible 创建文件和目录
  8. 使用 Ansible 管理存储
  9. 使用 Ansible 管理文件系统

1. 在 Ansible 中管理软件包和存储库

在 Linux 系统上安装软件包时,不同的发行版具有不同的软件包管理器。对于 RedHat 发行版,我们有 yum 和 dnf,而对于 Debian 风格,我们有 apt。

Ansible 附带一个名为 package 的模块,它消除了为不同系统使用不同包管理器的需要。它自动使用主机系统相应的包管理器,从而使工作更加轻松。

安装软件包

例如,要在包含 DebianRedHat 发行版的一组主机中安装 htop,请使用 package 模块作为如下面的 install_htop.yml 剧本所示。

---
- name: Install htop on Ubuntu and CentOS
  hosts: all
  tasks:

- package:
         name: htop
         state: installed

注意:软件包名称可能因操作系统而异。例如,Redhat 发行版中有 httpdDebian/Ubuntu 系统有 Apache2,所有这些都表示 Apache网络服务器。因此,传递这些包裹时应格外小心。通常,最好使用变量或条件语句。

2. 使用 Ansible 管理服务

接下来,我们有一个 service 模块,用于管理 Linux 系统上的服务。它用于启动、停止或重新启动服务。您还可以使用它来启用服务,以便系统启动时自动启动该服务。

启动并启用服务

例如,要在 RHEL 8 上启动并启用 Apache Web 服务器,请使用如图所示的服务。

---
- name: Start and enable httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: started
	    enabled: yes

停止服务

要停止 httpd 服务,请传递 stopped 属性。

---
- name: Stop httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: stopped

重启服务

要重新启动 httpd 服务,请传递 restarted 属性。

---
- name: Restart httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: restarted

3. 使用 Ansible 管理防火墙

系统管理员承担的另一项重要任务是防火墙的管理。在 Ansible playbook 中,使用 firewalldufw 模块使这变得更加容易。您可以将防火墙配置为允许或阻止端口或服务甚至源地址。

让我们来看几个例子:

在firewalld中打开/阻止端口80

---
- name: Allow port 80 
  hosts: webservers
  tasks: 
   
   -firewalld:
	port: 80/tcp
     permanent: yes
     state: enabled

在上面的剧本中,允许端口 80 穿过防火墙。

选项permanent: yes强制执行防火墙规则并使其在重新启动后保持不变。然而,该规则并不立即适用。仅在重新启动后才生效。要立即强制执行规则,请使用选项immediate: yes

要指定允许的地址,请使用 source:0.0.0.0/0 语句。

- firewalld:
    source: 192.168.0.0/24
    zone: public
    state: enabled

要指定允许使用 port 选项的端口范围,如下所示:

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

要阻止端口,请将状态选项更改为禁用,如下所示:

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

在firewalld中添加/阻止服务

除了添加/阻止端口之外,您还可以将相同的规则应用于服务。这很简单。只需使用服务模块并附加要添加的服务,并确保状态选项设置为启用

- firewalld:
    service: https
    permanent: true
    state: enabled

要阻止该服务,请将状态选项设置为禁用

- firewalld:
    service: https
    permanent: true
    state: disabled

4. 使用 Ansible 归档文件或文件夹

归档是指将文件或文件夹压缩为易于移植且体积较小的格式。 Ansible 附带了一个名为 archive 的模块。压缩文件非常简单。所需要做的就是指定文件的源路径和压缩文件的目标。

压缩目录

考虑下面的剧本compress.yml

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

上面的 playbook 压缩 /opt/data/web 目录并将其保存到 /tmp/web.gz

使用格式压缩目录

默认压缩格式是 .gz,但是,可以使用 format 属性来指定。尝试下一本剧本。

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

上面的 playbook 将 /opt/data/web 目录压缩到 /tmp/web.zip

解压缩文件

您还可以使用unarchive属性解压缩压缩文件。考虑下面的剧本。

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

上面的 playbook 将文件 /opt/data/web.gz 解压缩到 Ansible 控制器上的 /opt

在远程节点上解压缩文件

要指定远程源系统,请使用 remote_src=yes 选项。

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.bz2 to/opt on remote host
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/
     remote_src=yes 

上面的 playbook 将远程节点上的文件 /tmp/web.bz2 解压缩到 /opt/ 目录。

5. 使用 Ansible 安排任务

cron 模块有助于在 Ansible Playbooks 中安排作业。

创建计划任务

考虑下面的剧本。

---
- hosts: webservers
  tasks:

 - name: Create a scheduled task
   cron:
     name: Run employee attendance
     job: sh /opt/scripts/attendace.sh
      
     month: 4
     day: 5
     hour: 17
     minute: 00

该剧本运行 4 月 5 日下午 5:00 的出勤脚本。

在特定日期安排脚本

如果您希望安排此脚本仅在 4 月 5 日是星期一时运行,请使用 weekday: 1 属性。根据 cron 表示法,0 表示星期日,6 表示星期六。

month: 4
day: 5
hour: 17
minute: 00
weekday: 1

这些字段中的任何一个星号 (*) 都表示任何值。

在某个日期运行作业

要在 4 月 5 日下午 5:00 运行作业(无论工作日是哪一天),请使用所示的时间参数。

month: 4
day: 5
hour: 17
minute: 00
weekday: *

在每月的特定日期执行作业

要在每月第 5 天下午 5:00 执行 cron 作业,请使用以下设置。

month: *
day: 5
hour: 17
minute: 00
weekday: *

每天执行一项工作

要每天下午 5:00 执行 cron 作业,请设置时间设置,如下所示:

month: *
day: *
hour: 17
minute: 00
weekday: *

每 5 小时执行一次作业

要每 5 小时执行一次 cron 作业,请使用步骤值 */5,如图所示。

month: *
day: *
hour: */5
minute: *
weekday: *

6. 使用 Ansible 管理用户和组

您还可以轻松管理 Ansible playbook 中的用户和组。

创建新用户

要创建新用户,请使用用户模块,如图所示。

---
- hosts: webservers
  tasks:

 - name: Create a new user
   user: 
     name: Jack

您还可以添加其他选项,例如 UID、组。

- name: Create a new user
   user: 
      name: Jack
      comment: Jack Peters
          uid:   1002
      group: administrators
      shell:  /bin/bash

删除用户

要删除用户,请使用 remove: yes 语句。

- name: Remove the user 'Jack'
  user:
    name: Jack
    state: absent
    remove: yes

创建一个新组

要创建新组,请使用模块。

- name: Create a group
  group:
    name: developers

7. 使用 Ansible 创建文件和目录

要创建目录文件,请使用file模块。

创建一个新目录

例如,创建一个新目录。

---
- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/app
     state: directory

您可以添加其他属性,例如所有者、组和文件权限。

- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/web
     state: directory
     owner: www-data
     group: www-data
     mode: 0644

此外,您可以使用 recurse: yes 语句递归地创建目录。

---
- hosts: webservers
  tasks:

  - name: Create directories recursively
    file: 
     path: /opt/web/app
     state: directory
     owner: www-data
     group: www-data
     mode: 0644
recurse: yes

创建文件

要创建文件,请使用 state: touch 选项。

---
- hosts: webservers
  tasks:

  - name: Create a new file
    file: 
     path: /opt/web/index.html
     state: touch
owner: www-data
     group: www-data
     mode: 0644

8. 使用 Ansible 管理存储

lvg 模块用于配置 LVM 卷和组。

创建LVM卷组

考虑下面的剧本:

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

这将在 /dev/sda1 分区之上创建一个物理范围大小为 32 MB 的卷组。

创建后,使用lvol模块创建逻辑卷,如图所示

创建逻辑卷

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

9. 使用 Ansible 管理文件系统

要在块设备上创建文件系统,请使用文件系统模块。

创建文件系统

下面的 playbook 在块卷上创建 xfs 的文件系统类型。

---
    - hosts: webservers
      tasks: 

       - name: Create a filesystem
         filesystem:
         
           fstype: xfs
           dev: /dev/vg1/lvol1

挂载文件系统

接下来,您可以使用 mount 模块继续安装块存储卷,如下面的 playbook 所示:

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted
结论

主题到此结束。我们已经介绍了可以通过 Ansible Playbook 中的特定内置模块完成的各种系统管理任务。