我正在开发一个Ansible模块。当一个参数具有特定值时,是否可以将一组参数指定为 required ?
例如,如果我的模块有'state'参数可以是'present'或'absent',那么只有当state = present时才可能需要一组额外的参数,比如'type','path' ?
module_args = dict(
name=dict(type='str', required=True),
type=dict(type='str', required=False),
path=dict(type='str', required=False),
state=dict(type='str', required=False, choices=["present","absent"]
}
module = AnsibleModule(
argument_spec=module_args,
supports_check_mode=True
)
name = module.params["name"]
script_type = module.param["type"]
path = module.param["path"]
state = module.state["state"]
答案 0 :(得分:1)
据我所知,目前的Ansible 2.3中没有这种能力。
required_together
类只有AnsibleModule
选项来定义应该一起提供的参数(但是它的值没有条件):
required_together = [['s3_key', 's3_bucket'],
['vpc_subnet_ids', 'vpc_security_group_ids']]
所以你应该对此进行人工检查。
答案 1 :(得分:0)
虽然在Ansible(AFAIK)中没有嵌套参数这样的概念,但还有其他概念可以实现相同的意图:
通过上述声明,可以在参数之间建立关联 - 将其放入逻辑中,如果指定了一个参数,则可以要求另一个参数指定参数。
或者,如果为参数指定了某个值(即State = present),则可以要求使用该参数指定其他参数(给定其值)。
Joe Seeder的blogpost更详细地介绍了这一点。
答案 2 :(得分:0)
不确定是否为时已晚,但是您可以使用以下方法完全做到这一点。
module_args = dict(
name=dict(type='str', required=True),
type=dict(type='str', required=False),
path=dict(type='str', required=False),
state=dict(type='str', required=False, choices=["present","absent"]
)
required_if_args = [
["state", "present", ["type", "path"]]
]
module = AnsibleModule(
argument_spec=module_args,
required_if=required_if_args,
supports_check_mode=True
)
这表明如果state = present,则需要输入类型和路径。