根据 Ansible 中的索引将 EC2 主机添加到不同的组

Adding EC2 hosts to different group based on index in Ansible

我正在尝试使用 EC2 中的 Ansible 设置 Spark 集群。以下是创建服务器的任务,创建服务器后我想将第一个服务器的 public IP 添加到组 'master' 并将其余服务器添加到 'slaves':

  tasks:
     - name: creating public instance
       ec2:
         aws_access_key: "{{ AWS_ACCESS_KEY_ID }}"
         aws_secret_key: "{{ AWS_SECRET_ACCESS_KEY }}"
         instance_type: "t2.micro"
         instance_tags: { 'name': 'test' }
         image: "ami-936d9d93"
         count: "{{ count }}"
         wait: yes
         group_id: "sg-47230b20"
         region: "ap-northeast-1"
         state: present
         vpc_subnet_id: "subnet-f4c674ac"
         assign_public_ip: yes
         key_name: "test-key"
       register: public
       - name: adding host to master
         add_host:
           name: "{{ public.instances[0]['public_ip'] }}"
           groups: master
           ansible_user: ubuntu
       - name: adding host to slaves
         add_host: 
           name: "{{ public.instances[item]['public_ip'] }}"
           groups: slaves
           ansible_user: ubuntu
        with_sequence: start=1 end=3 stride=1

但是在执行时出现此错误:

{"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'list object' has no attribute u'1'

我无法弄清楚错误在哪里,任何人都可以帮助我解决问题。

您可能想试试 slicing:

  - name: adding host to slaves
     add_host: 
       name: "{{ item.public_ip }}"
       groups: slaves
       ansible_user: ubuntu
    with_items: "{{ public.instances[1:] }}"