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.