That worked, thank you Will.

On Monday, April 23, 2018 at 3:09:43 AM UTC-7, Will McDonald wrote:
>
> 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 <[email protected] <javascript:>> 
> 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 <[email protected] 
>> <javascript:>> 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 <[email protected] <javascript:>> 
>>> 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 [email protected] <javascript:>.
>>>> To post to this group, send email to [email protected] 
>>>> <javascript:>.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/ansible-project/51b431bb-e0dd-4765-9051-cf5dbc8d624c%40googlegroups.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/topic/ansible-project/4twB7g9pdNk/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to 
>>> [email protected] <javascript:>.
>>> To post to this group, send email to [email protected] 
>>> <javascript:>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/ansible-project/CAKtKohSbX8%2B-1b0HmpUFkW-BksE4teRnSyvBbKCcoeu%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 [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> 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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/8da6919a-c335-4a66-8624-cc0954d30529%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to