设置列表选项值指南

某些 AD 选项接受多个值,在检查 Ansible 中的幂等性时需要特殊的规则。此集合的设计使得每个管理 AD 对象的模块在选项方面遵循相同的样式。特别是,在包含多个值的选项(例如 spndelegates 等)方面,它们都应该遵循本指南中记录的样式。

添加、删除和设置

对于每个管理多值 LDAP 属性的模块选项,存在三个操作

  • 添加

  • 删除

  • 设置

addremove 选项将从现有值中添加或删除指定的值。set 选项将用任务中指定的值替换现有值。例如,一个 AD 对象具有以下 servicePrincipalNames 值:

  • HTTP/host1

  • HTTP/host1.domain.com

  • HTTP/host1.domain.com:443

执行 add: ['HTTP/host1','HTTP/host2']HTTP/host2 添加到现有值中,结果为:

  • HTTP/host1

  • HTTP/host1.domain.com

  • HTTP/host1.domain.com:443

  • HTTP/host2

执行 remove: ['HTTP/host1','HTTP/host3'] 将从现有值中删除 HTTP/host1,结果为:

  • HTTP/host1.domain.com

  • HTTP/host1.domain.com:443

执行 set: ['HTTP/host1', 'HTTP/host2'] 将删除列表中不存在的任何值,并添加列表中但尚未设置的值,结果为:

  • HTTP/host1

  • HTTP/host2

可以同时使用 addremove,但设置 set 将始终优先于其他操作。还可以通过将 set 值设置为空列表来清除所有现有值,例如 set: []

示例

addremoveset 选项是其控制的模块选项的子键。例如,microsoft.ad.user 有一个名为 groups 的选项,用于控制用户所属的组列表。要向用户添加组,只需使用 add 键,如下所示:

- name: add a user to a group
  microsoft.ad.user:
    name: MyUser
    groups:
      add:
      - Group 1
      - Group 2

这将确保用户添加到 Group 1Group 2 组,同时保留现有成员资格。要将用户从用户中移除,只需使用 remove 键,如下所示:

- name: remove a user from a group
  microsoft.ad.user:
    name: MyUser
    groups:
      remove:
      - Group 1
      - Group 2

这与添加相反,它将用户从 Group 1Group 2 中移除,但它仍将保留该用户的任何现有组成员资格。也可以组合使用 addremove

- name: add and remove user groups
  microsoft.ad.user:
    name: MyUser
    groups:
      add:
      - Group 1
      remove:
      - Group 2

这将确保用户是 Group 1 的成员,而不是 Group 2 的成员。和以前一样,如果未指定,它不会修改现有的组成员资格。

set 选项遵循相同的格式,如下所示:

- name: set user groups
  microsoft.ad.user:
    name: MyUser
    groups:
      set:
      - Group 1
      - Group 2

这将确保用户只有 Group 1Group 2 的成员,删除列表中不存在的任何其他组。虽然可以将 setaddremove 组合使用,但模块将完全忽略 addremove 中的值。

最后,要将用户从所有组中移除,请对 set 选项使用空列表,如下所示:

- name: remove user groups
  microsoft.ad.user:
    name: MyUser
    groups:
      set: []

注意

对于用户组,这实际上是不可能的,因为它将始终是其主组的成员,这只用于演示目的。