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

来自菜鸟教程
跳转至:导航、​搜索

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

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

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

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 指令。 这是必需的,因为安装软件包需要管理系统权限。

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

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

ansible-playbook -i inventory playbook-09.yml -u sammy -K
OutputBECOME 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   

安装多个包时,您可以使用 loop 并提供一个包含您要安装的包名称的数组。 以下 playbook 将确保安装包 vimunzipcurl 并处于最新版本。

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

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 选项,因为此 playbook 需要管理权限:

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

您会看到这样的输出,表明同一个任务使用我们提供的不同值运行了三个迭代:vimcurlunzip

OutputBECOME 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选项,可以参考官方文档