在Ansible中安装多个软件包

在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

将其放入

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 文件中重新编写任务:

Re-write the task in the roles/mongo/tasks/main.yml file:

- 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