Ansible逻辑在某些实例中具有相同的用户sudo,而在其他实例中则是正常的
我正在尝试构建一个简单的逻辑,其中box/instance(a和B)中的用户与sudo相同,但实例(C和D)中的用户与sudo相同 我有一个变量Ansible逻辑在某些实例中具有相同的用户sudo,而在其他实例中则是正常的,ansible,ansible-inventory,Ansible,Ansible Inventory,我正在尝试构建一个简单的逻辑,其中box/instance(a和B)中的用户与sudo相同,但实例(C和D)中的用户与sudo相同 我有一个变量is_sudo,它是一个布尔值,我正在检查它是否为真,然后让用户在sudoers中,如果在整个设置过程中条件相同,它就可以完美地工作。现在我想有一个条件,在这个条件下,如果实例是C或D,那么用户应该被创建为普通用户。我正在考虑覆盖dict变量值,以便在这些实例上将其设置为false,但似乎不可能动态覆盖dict变量 例如: var/main.yml[来自
is_sudo
,它是一个布尔值,我正在检查它是否为真,然后让用户在sudoers中,如果在整个设置过程中条件相同,它就可以完美地工作。现在我想有一个条件,在这个条件下,如果实例是C或D,那么用户应该被创建为普通用户。我正在考虑覆盖dict变量值,以便在这些实例上将其设置为false,但似乎不可能动态覆盖dict变量
例如:
var/main.yml[来自用户更新角色]
用户:
-用户名:user1
苏多:是真的吗
-用户名:user2
苏多:错吗
1.yml旅社
角色:
-用户更新
变量:
用户:
用户名:user1
苏多:错吗
如果有什么快的吗?看看。播放变量(优先级12.)不会覆盖角色变量(在role/vars/main.yml中定义)
(优先级15)。关于如何覆盖角色变量
,还有更多选项。例如,使用角色参数
(优先级20)。看
角色:
-角色:用户更新
用户:
-用户名:user1
苏多:错吗
注释
- 这是如何在游戏级别覆盖角色变量的唯一选项。其他选项(优先级16、17、18、19)在任务级别
- 正确的角色目录是
vars
而不是var
。注释应该是#cat vars/main.yml[来自用户更新角色]
- 变量
users
是一个列表。这一点也不应该马上改变
- 变量
users
将被覆盖而不是合并
- 阅读中的评论。引述:
以下格式称为角色参数
:
角色:
-角色:富
福:酒吧
鉴于以下是变量
:
角色:
-角色:富
变量:
福:酒吧
合并更新
如果要合并更新,请将结构更改为字典,并将公共和更新组合起来。比如说
shell>cat角色/userupdate/vars/main.yml
普通用户:
用户1:
苏多:是真的吗
用户2:
苏多:错吗
用户:{{users_common | combine(users_update | default({}))}
shell>cat角色/userupdate/tasks/main.yml
-调试:
变量:用户
然后是角色的调用
角色:
-角色:用户更新
用户更新:
用户1:
苏多:错吗
给予
用户:
用户1:
苏多:错吗
用户2:
苏多:错吗
ohh哇!多好的解释啊!是的,这是预期的正确方法。谢谢你指导这个@Vladimir。这太棒了!好的,所以我尝试了这种方法,并使其有效。唯一的问题是我需要在dict项中定义所有的key:value对,例如,在上面我有is_sudo、name、shell等其他键值,我必须在角色调用时重新定义这些键值,以使其正常工作。不过,这很好,可以管理。谢谢你的指导。