如何在 Ansible Playbooks 中安装和管理系统包


该系列的一部分:
如何编写 Ansible Playbooks

Ansible 是一种现代配置管理工具,不需要在远程节点上使用代理软件,仅使用 SSH 和 Python 在托管服务器上进行通信和执行命令。本系列将带您了解可用于编写服务器自动化剧本的主要 Ansible 功能。最后,我们将看到一个实际示例,说明如何创建剧本以自动设置远程 Nginx Web 服务器并向其部署静态 HTML 网站。

自动安装所需的系统包是 Ansible playbook 中的一项常见操作任务,因为典型的应用程序堆栈需要来自不同来源的软件。

apt模块管理基于 Debian 的操作系统(如 Ubuntu)上的系统包,Ubuntu 是本指南中我们在远程节点上使用的发行版。以下剧本将更新apt缓存,然后确保 Vim 安装在远程节点上。

playbook-09.yml在您的ansible-practice目录中创建一个名为的新文件

  • nano ~/ansible-practice/playbook-09.yml

然后将以下行添加到新的剧本文件中:

~/ansible-practice/playbook-09.yml
---
- hosts: all
  become: yes
  tasks:
    - name: Update apt cache and make sure Vim is installed
      apt:
        name: vim
        update_cache: yes

完成后保存并关闭文件。

请注意,我们become在剧本的开头包含了指令。这是必需的,因为安装软件包需要管理系统权限。

以类似的方式删除包,唯一的变化是您必须将包状态定义为absent. state指令的默认值为present,这将确保该软件包安装在系统上,而不管版本如何。如果不存在,将安装该软件包。为确保您拥有最新版本的软件包,您可以latest改用。apt如果请求的包不是最新版本,这将导致更新请求的包。

请记住-K在运行此剧本时提供选项,因为它需要sudo权限:

  • ansible-playbook -i inventory playbook-09.yml -u sammy -K
Output
BECOME password: PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.10] TASK [Update apt cache and make sure Vim is installed] ************************************************** ok: [203.0.113.10] PLAY RECAP ********************************************************************************************** 203.0.113.10 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

安装多个软件包时,您可以使用循环并提供一个包含要安装的软件包名称的数组。下面的剧本将确保包vimunzipcurl安装,并在其最新版本。

创建一个名为新文件playbook-10.yml在你的ansible-practice目录,你Ansible控制节点上:

  • nano ~/ansible-practice/playbook-10.yml

将以下内容添加到新的 playbook 文件中:

~/ansible-practice/playbook-10.yml
---
- hosts: all
  become: yes
  tasks:
    - name: Update apt cache and make sure Vim, Curl and Unzip are installed
      apt:
        name: "{{ item }}"
        update_cache: yes
      loop:
        - vim
        - curl
        - unzip

完成后保存并关闭文件。

然后,ansible-playbook使用与前面示例相同的连接参数运行,并且不要忘记包含该-K选项,因为此剧本需要管理权限:

  • ansible-playbook -i inventory playbook-09.yml -u sammy -K

你会看到类似这样的输出,其指示使用不同的值,我们已经提供了相同的任务过三次反复运行:vimcurlunzip

Output
BECOME password: PLAY [all] *************************************************************************************************************************************** TASK [Gathering Facts] *************************************************************************************************************************** ok: [203.0.113.10] TASK [Update apt cache and make sure Vim, Curl and Unzip are installed] ************************************************************************** ok: [203.0.113.10] => (item=vim) ok: [203.0.113.10] => (item=curl) changed: [203.0.113.10] => (item=unzip) PLAY RECAP *************************************************************************************************************************************** 203.0.113.10 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

关于如何管理系统包的更多详细信息,包括如何删除包以及如何使用高级apt选项,可以参考官方文档

觉得文章有用?

点个广告表达一下你的爱意吧 !😁