Ansible逻辑在某些实例中具有相同的用户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[来自

我正在尝试构建一个简单的逻辑,其中box/instance(a和B)中的用户与sudo相同,但实例(C和D)中的用户与sudo相同

我有一个变量
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等其他键值,我必须在角色调用时重新定义这些键值,以使其正常工作。不过,这很好,可以管理。谢谢你的指导。