【问题标题】:How to use multiple statements in Ansible azure_rm conditional_groups如何在 Ansible azure_rm conditional_groups 中使用多个语句
【发布时间】:2021-09-22 12:32:45
【问题描述】:

我有一个可以提取所有 VM 名称的 ansible 角色(在下面添加详细信息):

插件:azure_rm

auth_source: cli

include_vm_resource_groups:

plain_host_names:是的

条件组:
prod_hosts:“名称中的‘prod1’”
uat_hosts: "名称中的'uat'"

上面的工作非常好。但是,我有一个要求,即 prod 主机可以在 VM 名称中包含 prod1 或 prod2。例如:prod1-appvm、prod2-appvm。如果我在名称中添加“'prod1'或'prod2'”,它会起作用吗?

例如:

条件组:
prod_hosts:“名称中的‘prod1’或‘prod2’”
uat_hosts: "名称中的'uat'"

我尝试在线搜索,我找到了this,它表示组名到 Jinja2 表达式的映射。但如果“或”有效,我无法得到任何确认的答案。

感谢和问候,

萨菲·朱奈德。

【问题讨论】:

    标签: ansible azure-resource-manager azure-rm


    【解决方案1】:

    使用 When Condition 添加条件语句。何时使用条件来控制任务或角色是运行还是跳过。

    这是适用于 Ansible 中单个任务的最简单的条件语句。创建任务,然后添加应用测试的when 语句。你可以这样写:

    - hosts: all
      tasks:
          when: name in ['prod1','prod2']
    

    查看this document,了解根据 VM 类型对 VM 进行分组的示例。

    打开此Conditionals 文档以获取更多信息。

    【讨论】:

    • 您好 Saurav,我认为这仅在 VM 名称为 prod1 时有效,而当 prod1 是 VM 名称的一部分时无效。即,如果 VM 名称为“prod1”而不是当 VM 名称为“prod1-appvm”时,这将起作用。有错请指正?
    • 您可以使用when: "name.startswith('prod1')"。您也可以组合逻辑运算符,例如 andor。你也可以试试when: name is match("prod1.*")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多