尝试构建与属性(在本例中为ec2_tag)匹配的服务器列表,以调度特定服务器执行特定任务。

我正在尝试将selectattr与以下项匹配:

servers: "{{ hostvars[inventory_hostname]|selectattr('ec2_tag_Role', 'match', 'cassandra_db_seed_node') | map(attribute='inventory_hostname') |list}}"

虽然我从Ansible收到看起来像类型错误的内容:
fatal: [X.X.X.X]: FAILED! => {"failed": true, "msg": "Unexpected templating type error occurred on ({{ hostvars[inventory_hostname]|selectattr('ec2_tag_Role', 'match', 'cassandra_db_seed_node') | map(attribute='inventory_hostname') |list}}): expected string or buffer"}

我在这里想念什么?

最佳答案

您可以使用 group_by 模块根据hostvar创建临时组:

- group_by:
    key: 'ec2_tag_role_{{ ec2_tag_Role }}'

这将创建名为ec2_tag_role_*的组,这意味着以后您可以使用以下任何组创建一个剧本:
- hosts: ec2_tag_role_cassandra_db_seed_node
  tasks:
    - name: Your tasks...

10-06 05:37