gpt4 book ai didi

ansible - 在具有操作系统特定默认值的角色中定义 Ansible 变量,该默认值可以轻松覆盖

转载 作者:行者123 更新时间:2023-12-04 13:38:22 25 4
gpt4 key购买 nike

我正在编写一个 Ansible 角色,该角色可用于不同的 Linux 操作系统系列,并且每个操作系统系列的变量具有不同的默认值。

起初,我认为在角色中使用 include vars 任务会很容易设置,例如:

- name: Gather OS family variables
include_vars: "{{ ansible_os_family|lower }}.yml"


my_role_variable: "Here is the default for Enterprise Linux"

myrole/vars/redhat.yml
my_role_variable: "Here is the default for Debian Linux"

myrole/vars/debian.yml
但是,就我而言,使用角色的剧本能够轻松覆盖默认值非常重要。

因此,我试图找出一种方法,为每个操作系统系列的变量设置不同的默认值,如上所述,但我希望变量是角色默认变量而不是角色包含变量。有没有办法做到这一点?

最佳答案

使用 ternary operator :

- name: Gather OS family variables
include_vars: "{{ (override_os_family is defined) | ternary(override_os_family,ansible_os_family) | lower }}.yml"

这样,如果变量 override_os_family已定义,您的表达式将有其值,否则,它将使用 ansible_os_family 的值.

例子:
---
- hosts: localhost
connection: local
tasks:
- debug: msg="{{ (override_os_family is defined) | ternary(override_os_family,ansible_os_family) | lower }}.yml"

- hosts: localhost
connection: local
vars:
override_os_family: Lamarck
tasks:
- debug: msg="{{ (override_os_family is defined) | ternary(override_os_family,ansible_os_family) | lower }}.yml"

结果(摘录):
...

TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "darwin.yml"
}

...

TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "lamarck.yml"

关于ansible - 在具有操作系统特定默认值的角色中定义 Ansible 变量,该默认值可以轻松覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41189336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com