在 Ansible 中安装多个包

问题描述:

我在 Ansible 中有这个任务:

I have this task in Ansible:

- name: Install mongodb
  yum:
    name:
    - "mongodb-org-{{ mongodb_version }}"
    - "mongodb-org-server-{{ mongodb_version }}"
    - "mongodb-org-mongos-{{ mongodb_version }}"
    - "mongodb-org-shell-{{ mongodb_version }}"
    - "mongodb-org-tools-{{ mongodb_version }}"
    state: present
  notify: Restart mongodb

有没有一种方法可以指示版本而不必使用这样的循环?什么是更优雅"的写法?

Is there a way I can indicate the version without having to use a loop like this? What is a more "elegant" way of writing this?

- name: Install mongodb
  yum:
    name: "{{ item }}-{{ mongodb_version }}"
    state: present
    loop:
    - mongodb-org-server
    - mongodb-org-mongos
    - mongodb-org-shell
    - mongodb-org-tools
  notify: Restart mongodb

将此变成一个 Ansible Role 调用了mongo,产生的目录结构:

Make this into an Ansible Role called mongo, resulting in the directory structure:

playbook.yml
roles
|-- mongo
|  |-- defaults
|  |    |-- main.yml
|  |
|  |-- tasks
|  |    |-- main.yml
|  |
|  |-- handlers
|  |    |-- main.yml

将所需的MongoDB包和版本添加到默认变量文件roles/mongo/defaults/main.yml:

Add the required MongoDB packages and version into the default variables file roles/mongo/defaults/main.yml:

mongo_version: 4.0
mongo_packages:
- mongodb-org-server
- mongodb-org-mongos
- mongodb-org-shell
- mongodb-org-tools

重写roles/mongo/tasks/main.yml文件中的任务:

- name: Install mongodb
  yum:
    name: "{{ item }}-{{ mongo_version }}"
    state: present
  with_items: "{{ mongo_packages }}"
  notify: Restart mongodb

在文件 roles/mongo/handlers/main.yml 中添加处理程序逻辑以重新启动 MongoDB.

Add your handler logic to restart MongoDB in the file roles/mongo/handlers/main.yml.

编写一个名为 playbook.yml 的 Playbook 来调用角色.

Write a Playbook called playbook.yml that calls the role.

---
- hosts: all
  roles:
  - mongo