如果未标记 VM,Azure Ansible 插件无法生成清单
Azure Ansible plugin cannot generate inventory if VMs are not tagged
所以我 运行 在这里遇到了一些奇怪的行为,虽然我不确定我是否以错误的方式处理这个问题或者 azure_rm
Ansible 插件。
我想构建一个动态清单,并且只包含某些 VM,而不是我 Azure 帐户中的所有 VM。因此,我根据某些标签进行过滤,但插件仅提供 exclude_host_filters
选项,因此我必须过滤掉所有 不 符合所需标签的 VM,该标签已经我觉得很奇怪:
plugin: azure_rm
include_vm_resource_groups:
- my-rg
auth_source: auto
keyed_groups:
- key: tags.Function
exclude_host_filters:
- tags.Environment != 'DEV'
当尝试创建清单并且我的 Azure 帐户确实有一个没有任何标签的 VM 时,我实际上遇到了以下错误和一个空的清单:
[WARNING]: * Failed to parse /home/azureuser/.../.../ansible/etc/azure_rm.yml with auto plugin: Error evaluating filter condition
'tags.Environment != 'DEV'' for host myinstance_4dcc: 'dict object' has no attribute 'Environment'
这在技术上是正确的,实例实际上没有这个标签。但是,我不明白为什么只有提供排除过滤器的选项。 aws_ec2
插件以相反的方式处理它,这对我来说更有意义:它是一个包含过滤器,因此所有明确符合条件的 EC2 实例都会被纳入清单,其余的将被忽略。
然而,只要有人在我的帐户中创建任何不相关的虚拟机并忘记标签,这个插件就会导致我的 Ansible 运行失败,我觉得这不是对的吗?有人已经遇到过这个问题或有办法解决这个问题吗?
正如描述 exclude_host_filters
parameter 的部分所指出的,此参数确实接受 Jinja 表达式:
Excludes hosts from the inventory with a list of Jinja2 conditional expressions. Each expression in the list is evaluated for each host; when the expression is true, the host is excluded from the inventory.
因此,您可以添加您认为合适的任何 Jinja 表达式和过滤器。
在你的情况下,使用 default
filter 就可以了:
exclude_host_filters:
- tags.Environment | default('') != 'DEV'
所以我 运行 在这里遇到了一些奇怪的行为,虽然我不确定我是否以错误的方式处理这个问题或者 azure_rm
Ansible 插件。
我想构建一个动态清单,并且只包含某些 VM,而不是我 Azure 帐户中的所有 VM。因此,我根据某些标签进行过滤,但插件仅提供 exclude_host_filters
选项,因此我必须过滤掉所有 不 符合所需标签的 VM,该标签已经我觉得很奇怪:
plugin: azure_rm
include_vm_resource_groups:
- my-rg
auth_source: auto
keyed_groups:
- key: tags.Function
exclude_host_filters:
- tags.Environment != 'DEV'
当尝试创建清单并且我的 Azure 帐户确实有一个没有任何标签的 VM 时,我实际上遇到了以下错误和一个空的清单:
[WARNING]: * Failed to parse /home/azureuser/.../.../ansible/etc/azure_rm.yml with auto plugin: Error evaluating filter condition
'tags.Environment != 'DEV'' for host myinstance_4dcc: 'dict object' has no attribute 'Environment'
这在技术上是正确的,实例实际上没有这个标签。但是,我不明白为什么只有提供排除过滤器的选项。 aws_ec2
插件以相反的方式处理它,这对我来说更有意义:它是一个包含过滤器,因此所有明确符合条件的 EC2 实例都会被纳入清单,其余的将被忽略。
然而,只要有人在我的帐户中创建任何不相关的虚拟机并忘记标签,这个插件就会导致我的 Ansible 运行失败,我觉得这不是对的吗?有人已经遇到过这个问题或有办法解决这个问题吗?
正如描述 exclude_host_filters
parameter 的部分所指出的,此参数确实接受 Jinja 表达式:
Excludes hosts from the inventory with a list of Jinja2 conditional expressions. Each expression in the list is evaluated for each host; when the expression is true, the host is excluded from the inventory.
因此,您可以添加您认为合适的任何 Jinja 表达式和过滤器。
在你的情况下,使用 default
filter 就可以了:
exclude_host_filters:
- tags.Environment | default('') != 'DEV'