在 Ansible 中安装多个包 [英] Installing multiple packages in 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
这篇关于在 Ansible 中安装多个包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!