Hi Fred,

In your first example, you* did not quote your variables in the play*:

tasks:
      - name: create instance
        ec2: key_name={{ keypair }} image={{ image }} instance_type={{
instance_type }} vpc_subnet_id={{ subnet }} user_data='{"shortname":"{{
hostname }}", "hostname":"{{ hostname }}.{{ dnsdomain }}"}'
wait_timeout=500 private_ip={{ ip }} wait=yes group={{ group }} count=1
state=present volumes={{ volumes }}

The second error you received:

ERROR: parse error: playbooks must be formatted as a YAML list, got <type
'dict'>

This error means that you likely did not format your playbook into a list
of plays.  The format should be as David Adams previously described.



On Tue, Feb 18, 2014 at 10:00 AM, Frédéric Badel <[email protected]> wrote:

> Hi Michael,
>
> Thanks for your help.
> ... I am not sure to understand though ...
>
> I tried to copy the example given on doc.ansible.com:
>
>
> local_action:
>     module: ec2
>     keypair: mykey
>     group: webserver
>     instance_type: m1.large
>     image: ami-6e649707
>     wait: yes
>     wait_timeout: 500
>     volumes:
>     - device_name: /dev/sdb
>       snapshot: snap-abcdef12
>       device_type: io1
>       iops: 1000
>       volume_size: 100
>
> and I get the following error:
>
> ERROR: parse error: playbooks must be formatted as a YAML list, got <type
> 'dict'>
>
>
> Then I tried with
>
> volumes: [{ device_name: '/dev/sda1', volume_size: '10' }, { device_name:
> '/dev/xvdf', ephemeral: 'ephemeral0' }, { device_name: '/dev/xvdg',
> volume_size: '25'}]
>
> and
>
> volumes:
> - { device_name: '/dev/sda1', volume_size: '10' },
> - { device_name: '/dev/xvdf', ephemeral: 'ephemeral0' }
>  - { device_name: '/dev/xvdg', volume_size: '25'}
>
> And with both, I get:
>
> msg: this module requires key=value arguments (['key_name=GenericLinux',
> 'image=ami-75342c01', 'instance_type=m1.small',
> 'vpc_subnet_id=subnet-81407bf5', 'user_data={shortname:test4,
> hostname:test4.aws.onlotaris.com}', 'wait_timeout=500',
> 'private_ip=172.16.4.100', 'wait=yes', 'group=default', 'count=1',
> 'state=present', 'instance_tags={"Name":"test4"}',
> 'volumes=[{volume_size:', '10,', 'device_name:', '/dev/sda1},',
> '{ephemeral:', 'ephemeral0,', 'device_name:', '/dev/xvdf},',
> '{volume_size:', '25,', 'device_name:', '/dev/xvdg}]'])
>
> Thanks in advance.
>
> Fred
>
> On Feb 18, 2014, at 14:48 , Michael DeHaan <[email protected]> wrote:
>
> When using the ec2 module it's almost always easier to use the complex
> arguments style as shown in the examples.
>
> If you are going to pass typed data to modules (like "volumes"), that is
> going to be required.
>
>
>
>
> On Tue, Feb 18, 2014 at 7:57 AM, Fred Badel <[email protected]> wrote:
>
>> Hello,
>>
>> I am trying to create an ec2 instance with specific volumes requirement
>> ... but I keep getting a "this module requires key=value arguments" error
>> message.
>> Looking closer at ansible output (see below), it looks like the
>> single-quoting of the volumes parameter is a little bit "fancy"...
>>
>> Am I doing something wrong?
>>
>>  ---
>> - hosts: 127.0.0.1
>>   connection: local
>>   gather_facts: True
>>   vars:
>>       volumes:
>>       - device_name: /dev/sda1
>>         volume_size: 10
>>       - device_name: /dev/xvdf
>>         ephemeral: ephemeral0
>>       - device_name: /dev/xvdg
>>         volume_size: 25
>>       keypair: ec2key
>>       image: ami-xxx
>>       dnsdomain: domain.com
>>   vars_prompt:
>>       hostname: "What is this instance hostname?"
>>       subnet: "What is this instance subnet?"
>>       ip: "What is this instance ip?"
>>       group: "Provide a list of group name"
>>       instance_type: "Provide the instance type"
>>   tasks:
>>       - name: create instance
>>         ec2: key_name={{ keypair }} image={{ image }} instance_type={{
>> instance_type }} vpc_subnet_id={{ subnet }} user_data='{"shortname":"{{
>> hostname }}", "hostname":"{{ hostname }}.{{ dnsdomain }}"}'
>> wait_timeout=500 private_ip={{ ip }} wait=yes group={{ group }} count=1
>> state=present volumes={{ volumes }}
>>
>>
>>
>> <127.0.0.1> REMOTE_MODULE ec2 key_name=ec2key image=ami-xxx
>> instance_type=m1.small vpc_subnet_id=subnet-xxx
>> user_data='{"shortname":"test4", "hostname":"test4.domain.com"}'
>> wait_timeout=500 private_ip=172.16.4.100 wait=yes group="['default',
>> 'J2EE']" count=1 state=present volumes=[{'volume_size': 10, 'device_name':
>> '/dev/sda1'}, {'ephemeral': 'ephemeral0', 'device_name': '/dev/xvdf'},
>> {'volume_size': 25, 'device_name': '/dev/xvdg'}]
>> <127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p
>> $HOME/.ansible/tmp/ansible-tmp-1392727140.89-11533654997021 && chmod a+rx
>> $HOME/.ansible/tmp/ansible-tmp-1392727140.89-11533654997021 && echo
>> $HOME/.ansible/tmp/ansible-tmp-1392727140.89-11533654997021']
>> <127.0.0.1> PUT
>> /var/folders/38/_r_kpxbd4cvfq_9qdvkb0jd40000gn/T/tmpapBeCB TO
>> /Users/fred/.ansible/tmp/ansible-tmp-1392727140.89-11533654997021/ec2
>> <127.0.0.1> EXEC ['/bin/sh', '-c',
>> '/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
>> /Users/fred/.ansible/tmp/ansible-tmp-1392727140.89-11533654997021/ec2; rm
>> -rf /Users/fred/.ansible/tmp/ansible-tmp-1392727140.89-11533654997021/
>> >/dev/null 2>&1']
>> failed: [127.0.0.1] => {"failed": true}
>> msg: this module requires key=value arguments (['key_name=ec2key',
>> 'image=ami-xxx', 'instance_type=m1.small', 'vpc_subnet_id=subnet-xxx',
>> 'user_data={"shortname":"test4", "hostname":"test4.domain.com"}',
>> 'wait_timeout=500', 'private_ip=172.16.4.100', 'wait=yes',
>> "group=['default', 'J2EE']", 'count=1', 'state=present',
>> 'volumes=[{volume_size:', '10,', 'device_name:', '/dev/sda1},',
>> '{ephemeral:', 'ephemeral0,', 'device_name:', '/dev/xvdf},',
>> '{volume_size:', '25,', 'device_name:', '/dev/xvdg}]'])
>>
>> FATAL: all hosts have already failed -- aborting
>>
>>
>> ansible-playbook --version
>> ansible-playbook 1.5 (devel 7e23ed345f) last updated 2014/02/18 12:15:46
>> (GMT +200)
>>
>> Thanks for your advices!
>>
>> Fred
>>
>> --
>> 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].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
> --
> 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].
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>  --
> 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].
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
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].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to