我正在寻找一种方法来指定如果另一个参数具有特定值则不能使用模块参数。required_if
如果另一个参数具有特定值,您可以指定要求一个参数,但我需要相反的值。在概念上类似于mutually_exclusive
并且可能被称为的东西forbidden_if
。
我正在开发一个为 SQL 服务器创建登录名的模块。它可以是特定于服务器的 SQL 登录,也可以是使用域控制器的 Windows 登录。对于 SQL 登录,您必须指定密码,但不能为 Windows 指定密码,因为这是由域控制器设置的。登录有一个标识符 (SID),可由用户为 SQL 登录指定,但不能为 Window 指定。
虽然它是 Windows 主机的 Powershell 模块,但我将使用 Python 示例,因为这就是文档所在的内容。
这是创建 SQL 登录的模块的规范
module = AnsibleModule(
argument_spec=dict(
username=dict(type='str', required=True),
password=dict(type='str', no_log=True, required=True),
sid=dict(type='str', required=False),
),
supports_check_mode=True
)
一个用于 Windows 登录
module = AnsibleModule(
argument_spec=dict(
username=dict(type='str', required=True),
),
supports_check_mode=True
)
这是我目前对组合模块规范的尝试
module = AnsibleModule(
argument_spec=dict(
username=dict(type='str', required=True),
password=dict(type='str', no_log=True, required=False),
sid=dict(type='str', required=False),
login_type=dict(
type='str',
choices=[ 'sql', 'windows' ],
default='sql',
required=False
)
),
required_if=[
('login_type', 'sql', ('password')),
],
supports_check_mode=True
)
我能够password
为sql
login_type
. 由于password
并且sid
不能为 Windows 登录指定,所以我想防止它们被使用 if login_type
is windows
。这可能吗?如果可以,我该怎么做?