设置列表选项值指南
某些 AD 选项接受多个值,在检查 Ansible 中的幂等性时需要特殊的规则。此集合的设计使得每个管理 AD 对象的模块在选项方面遵循相同的样式。特别是,在包含多个值的选项(例如 spn
、delegates
等)方面,它们都应该遵循本指南中记录的样式。
添加、删除和设置
对于每个管理多值 LDAP 属性的模块选项,存在三个操作
添加
删除
设置
add
和 remove
选项将从现有值中添加或删除指定的值。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
可以同时使用 add
和 remove
,但设置 set
将始终优先于其他操作。还可以通过将 set
值设置为空列表来清除所有现有值,例如 set: []
。
示例
add
、remove
和 set
选项是其控制的模块选项的子键。例如,microsoft.ad.user 有一个名为 groups
的选项,用于控制用户所属的组列表。要向用户添加组,只需使用 add
键,如下所示:
- name: add a user to a group
microsoft.ad.user:
name: MyUser
groups:
add:
- Group 1
- Group 2
这将确保用户添加到 Group 1
和 Group 2
组,同时保留现有成员资格。要将用户从用户中移除,只需使用 remove
键,如下所示:
- name: remove a user from a group
microsoft.ad.user:
name: MyUser
groups:
remove:
- Group 1
- Group 2
这与添加相反,它将用户从 Group 1
和 Group 2
中移除,但它仍将保留该用户的任何现有组成员资格。也可以组合使用 add
和 remove
:
- 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 1
和 Group 2
的成员,删除列表中不存在的任何其他组。虽然可以将 set
与 add
或 remove
组合使用,但模块将完全忽略 add
或 remove
中的值。
最后,要将用户从所有组中移除,请对 set
选项使用空列表,如下所示:
- name: remove user groups
microsoft.ad.user:
name: MyUser
groups:
set: []
注意
对于用户组,这实际上是不可能的,因为它将始终是其主组的成员,这只用于演示目的。