Bidyut
Bidyut

Reputation: 993

Adding EC2 hosts to different group based on index in Ansible

I am trying to setup Spark cluster using the Ansible in EC2. The following is the task to create the servers, after creating the servers I want to add the first server's public IP to the group 'master' and rest of the servers to '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

But while executing I am getting this error:

{"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'

I am unable to figure out where the error is, Can anybody help me what is the issue.

Upvotes: 3

Views: 260

Answers (1)

Konstantin Suvorov
Konstantin Suvorov

Reputation: 68289

You may want to try slicing:

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

Upvotes: 2

Related Questions