ubuntu - 不同Linux发行版的ansible相同剧本
问题描述
我们为安装了 Ubuntu 的节点设计了一个 ansible playbook。
现在我们必须在新机器(节点)上为使用 Centos 的不同客户播放相同的 Playbook。
问题是对于 Centos,Ansible 使用 Yum 模块(使用 yum 包管理器来安装模块)。在我们实际的剧本中,我们显然使用了 apt 模块。
Ansible 推荐什么来更好地管理这个场景?
- 为 Centos 重写一个版本的 playbook 会更好吗?
- 还是保持相同的剧本并在Ubuntu上动态使用“apt”更好?还是百胜在centos?
- 还有其他更合适的解决方案吗?
解决方案
一种常见的方法是为多个发行版编写一个剧本,其中包含许多条件,或者只是将特定于发行版的任务分成不同的文件,并将这些文件包含在这样的主要角色中
# Perform distro-specific tasks.
- include_tasks: setup-"{{ ansible_distribution }}".yml
因此,在文件等中setup-Ubuntu.yml
,setup-CentOS.yml
您将保留特定于特定 Linux 的所有操作。另请参阅 Geerlingguy 的类似角色作为合适的示例。
如果您只想安装或删除一个包而不使用 apt 或 yum 更复杂的功能,您可以使用相当简单的包模块,但如果这对您来说足够了,那么您将获得不同 Linux 风格的相同代码。
此外,您需要考虑到在 Ubuntu 和 CentOS 中,许多文件(包括配置文件和程序二进制文件)位于不同的位置。因此,如果您决定使用 package 模块,您可以通过以下方式使用外部文件来处理特定于发行版的事情:
- name: Load a variable file based on the OS type, or a default if not found.
include_vars: "{{ item }}"
with_first_found:
- "{{ ansible_distribution }}-vars.yaml"
- "{{ ansible_os_family }}-vars.yaml"
- default-vars.yaml
完成此任务后,您可以使用上述文件中定义的变量,这些变量使用特定于您的平台的值进行初始化,如下所示
- name: Apply some config template
template:
src: my_config_template.j2
dest: "{{ distro_specific_destination }}"
validate: "{{ distro_specific_command }} %s"
推荐阅读
- flutter - Flutter Flappy 搜索
- javascript - 内容可编辑的问题。不要从右边穿过
- spring - Springdoc Open API UI - BaseLayout 不起作用
- opencart-3 - 如何从 OpenCart 3.0.2.0 卸载 VQMOD?
- python - pyAudioAnalysis 的 BPM 检测会为任何信号产生错误的节拍数
- python - 在 python 中没有 ndarray.dot 和 np.matmul 的另一种实现矩阵乘法的方法是什么?
- git - GitLab 服务器:从树到 blob 的链接断开
- php - 将 vue 设置为生产 laravel 5.8
- typescript - 将 TypeScript 枚举的键分配给变量
- javascript - 从 cors 代理获取响应标头