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

642 阅读2分钟

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

apt 模块管理基于Debian的操作系统上的系统包,比如Ubuntu,我们在本指南中一直在远程节点上使用这个发行版。下面的操作手册将更新apt 缓存,然后确保Vim安装在远程节点上。

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

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

然后在新的playbook文件中添加以下几行。

~/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

完成后保存并关闭该文件。

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

移除一个软件包的方法类似,唯一的变化是你必须将软件包的状态定义为absentstate 指令的默认值是present ,这将确保软件包被安装在系统上,不管是什么版本。如果不存在,该软件包将被安装。为了保证你拥有最新版本的软件包,你可以使用latest 。这将导致apt ,以更新所请求的软件包,如果该软件包不在其最新版本上。

在运行这个游戏手册时,记得提供-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   

当安装多个软件包时,你可以使用一个循环,并提供一个包含你要安装的软件包名称的数组。下面的游戏手册将确保软件包vim,unzip, 和curl 被安装,并且是最新版本。

在你的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

你会看到这样的输出,表明同一个任务使用我们提供的不同值运行了三次:vimcurl ,和unzip

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