Your ec2_instance_tag 'name:webserver' is being evaluated as a string
because there's no space, it needs to be a YAML dictionary.

If you read the docs on the module (ansible-doc ec2), they state:

- instance_tags
>         *a hash/dictionary of tags* to add to the new instance or for
> starting/stopping instance by tag; '{"key":"value"}' and
>         '{"key":"value","key":"value"}'
>         [Default: None]
>         version_added: 1.0
>

And if you pay attention to:
http://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html

* A dictionary is represented in a simple key: value form (the colon must
> be followed by a space): *
>

You have:

    ec2_instance_tag:
     name:webserver

This should be:

    ec2_instance_tag:
     name: webserver
          ^




On 23 April 2018 at 05:09, Saikrishna <lovesaikris...@gmail.com> wrote:

> Hi Will,
>
> Updated changes but see an error, could you please let me know what is
> missing? Inserted code for your reference.
>
> fatal: [localhost]: FAILED! => {"changed": false, "msg": "argument
> instance_tags is of type <type 'str'> and we were unable to convert to
> dict: dictionary requested, could not parse JSON or key=value"}
>
>
>
> ---
>
> - name: Create a sandbox instance
>
>   hosts: localhost
>
>   connection: local
>
>   gather_facts: True
>
>   vars:
>
>     aws_access_key: aabbccdd
>
>     aws_secret_key: aabbccddeeffgghhiijjkk
>
>     key_name: mykeypair
>
>     ec2_instance_count: 5
>
>     ec2_instance_tag:
>
>      name:webserver
>
>     instance_type: 't2.micro'
>
> #    instance_type: 'c4.2xlarge'
>
>     security_group: my_securitygroup
>
>     group: default
>
>     image: ami-00000000
>
> #    region: us-west-2a
>
>     ec2_url: https://ec2.us-west-2.amazonaws.com
>
>   tasks:
>
>     - name: Launch instance
>
>       ec2:
>
>          aws_access_key: "{{ aws_access_key }}"
>
>          aws_secret_key: "{{ aws_secret_key }}"
>
>          count_tag: "{{ ec2_instance_tag }}"
>
>          ec2_url: "{{ ec2_url }}"
>
>          exact_count: "{{ ec2_instance_count }}"
>
>          group: "{{ security_group }}"
>
>          key_name: "{{ key_name }}"
>
>          image: "{{ image }}"
>
>          instance_type: "{{ instance_type }}"
>
>          instance_tags: "{{ ec2_instance_tag }}"
>
>          wait: true
>
> #         region: "{{ region }}"
>
>          vpc_subnet_id: subnet-buiuuyyt
>
> #         vpc_id: vpc-iuuytgfxds
>
>          assign_public_ip: yes
>
>       register: ec2
>
>
>     - name: Add new instance to host group
>
>       add_host:
>
>         hostname: "{{ item.public_ip }}"
>
>         groupname: launched
>
>       with_items: "{{ ec2.instances }}"
>
>
>     - name: Wait for SSH to come up
>
>       wait_for:
>
>         host: "{{ item.public_dns_name }}"
>
>         port: 22
>
>         delay: 60
>
>         timeout: 320
>
>         state: started
>
>       with_items: "{{ ec2.instances }}"
>
>
>
> On Sun, Apr 22, 2018 at 9:26 AM, Will McDonald <wmcdon...@gmail.com>
> wrote:
>
>> I think this is because you've defined the desired count in your vars but
>> not actually in the invocation of the ec2 module.
>>
>> Something like this should work as you expect:
>>
>> - name: create webserver instances
>>   hosts: localhost
>>   connection: local
>>   gather_facts: false
>>
>>   vars:
>>     ec2_instance_count: 2
>>     ec2_instance_tag:
>>       name: webserver
>>
>>   tasks:
>>     - name: provision ec2 webserver instances
>>       ec2:
>>         aws_access_key: "{{ aws_access_key }}"
>>         aws_secret_key: "{{ aws_secret_key }}"
>>         count_tag: "{{ ec2_instance_tag }}"
>>         ec2_url: "{{ ec2_url }}"
>>         exact_count: "{{ ec2_instance_count }}"
>>         groups: "{{ ec2_security_group }}"
>>         key_name: "{{ ec2_key_name }}"
>>         image: "{{ ec2_image }}"
>>         instance_tags: "{{ ec2_instance_tag }}"
>>         instance_type: "{{ ec2_instance_type }}"
>>         region: "{{ ec2_region }}"
>>         wait: true
>>       register: ec2
>>
>> Cheers,
>>
>> Will.
>>
>>
>>
>> On 22 April 2018 at 16:12, Love <lovesaikris...@gmail.com> wrote:
>>
>>> Dear Experts,
>>>
>>>
>>>
>>> How to launch multiple EC2 instances using ansible?
>>>
>>> I want to create an environment in AWS using below playbook but I see
>>> only one instance is being created when I execute below playbook.
>>>
>>>
>>> Could you please help with missing code/syntax here?
>>>
>>>
>>> Note: I'm using free account with AWS.
>>>
>>>
>>>
>>>
>>> ---
>>>
>>> - name: Create sandbox instances
>>>
>>>   hosts: localhost
>>>
>>>   gather_facts: True
>>>
>>>   vars:
>>>
>>>     aws_access_key: aabbccddeeffgghh
>>>
>>>     aws_secret_key: aabbccddeeffgghhiijjkkllmmnnoopp
>>>
>>>     key_name: mykeypair
>>>
>>>     count: 5
>>>
>>>     exact_count: 'count_tag'
>>>
>>>     instance_type: 't2.micro'
>>>
>>>     security_group: my_securitygroup
>>>
>>>     group: default
>>>
>>>     image: ami-00125160
>>>
>>>     ec2_url: https://ec2.us-west-2.amazonaws.com
>>>
>>>   tasks:
>>>
>>>     - name: Launch instance
>>>
>>>       ec2:
>>>
>>>          aws_access_key: "{{ aws_access_key }}"
>>>
>>>          aws_secret_key: "{{ aws_secret_key }}"
>>>
>>>          key_name: "{{ key_name }}"
>>>
>>>          group: "{{ security_group }}"
>>>
>>>          instance_type: "{{ instance_type }}"
>>>
>>>          count_tag: "{{ exact_count }}"
>>>
>>>          image: "{{ image }}"
>>>
>>>          wait: true
>>>
>>>          ec2_url: "{{ ec2_url }}"
>>>
>>>          vpc_subnet_id: subnet-edcf00db
>>>
>>>          assign_public_ip: yes
>>>
>>>       register: ec2
>>>
>>>
>>>     - name: Add new instance to host group
>>>
>>>       add_host:
>>>
>>>         hostname: "{{ item.public_ip }}"
>>>
>>>         groupname: launched
>>>
>>>       with_items: "{{ ec2.instances }}"
>>>
>>>
>>>     - name: Wait for SSH to come up
>>>
>>>       wait_for:
>>>
>>>         host: "{{ item.public_dns_name }}"
>>>
>>>         port: 22
>>>
>>>         delay: 60
>>>
>>>    timeout: 320
>>>
>>>         state: started
>>>
>>>       with_items: "{{ ec2.instances }}"
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ansible Project" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to ansible-project+unsubscr...@googlegroups.com.
>>> To post to this group, send email to ansible-project@googlegroups.com.
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/ansible-project/51b431bb-e0dd-4765-9051-cf5dbc8d624c%40g
>>> ooglegroups.com
>>> <https://groups.google.com/d/msgid/ansible-project/51b431bb-e0dd-4765-9051-cf5dbc8d624c%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Ansible Project" group.
>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>> pic/ansible-project/4twB7g9pdNk/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> ansible-project+unsubscr...@googlegroups.com.
>> To post to this group, send email to ansible-project@googlegroups.com.
>> To view this discussion on the web visit https://groups.google.com/d/ms
>> gid/ansible-project/CAKtKohSbX8%2B-1b0HmpUFkW-BksE4teRnSyvBb
>> KCcoeu%3D4zUEzg%40mail.gmail.com
>> <https://groups.google.com/d/msgid/ansible-project/CAKtKohSbX8%2B-1b0HmpUFkW-BksE4teRnSyvBbKCcoeu%3D4zUEzg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to ansible-project+unsubscr...@googlegroups.com.
> To post to this group, send email to ansible-project@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/ansible-project/CALSWnawmPCBboRPvBSd4-6Ra%2Bkh76ajZonxd%3DQq%2Bs%3D%
> 3Da4dxEsg%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CALSWnawmPCBboRPvBSd4-6Ra%2Bkh76ajZonxd%3DQq%2Bs%3D%3Da4dxEsg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAKtKohRsGesCsLGCphFM7%3Dq74LQPjzUzc8BqsObj%2BWg%3DsvUJCg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to