Ok I get how it supposed to work now. I'd like to share our setup.

We created a rackspace role and pass in the different variables (different 
apps have different flavors on different environments). We no longer add 
the local-rackspace group to the application group and add specific vars to 
the local-rackspace group on specific environments(acceptance/production). 
Setup is now like this:

*playbook app_a*:
./appa.yml
---
- hosts: local-rackspace
  connection: local
  remote_user: root
  roles:
    - { role: rackspace, hostname: "{{ app_a_hostname }}", 
rackspace_flavor: "{{ app_a_rackspace_flavor }}", rackspace_image: "{{ 
rackspace_image_id }}", virtual_host_name: "{{ app_a_virtual_host_name }}", 
groupname: "{{ app_a_groupname }}", when: rails_env != "development" }

- hosts: app_a
  sudo: true
  roles:
    - common
…

*inventory*
./acceptance
[local-rackspace]
localhost ansible_python_interpreter=/usr/local/bin/python

[app_a]
# Added by rackspace module

[app_b]
# Added by rackspace module

[local-rackspace:vars]
rails_env=acceptance
rackspace_image_id=5345356456
app_a_hostname=acc.appa.com
app_a_rackspace_flavor=4
app_b_hostname=acc.appb.com
app_b_rackspace_flavor=6

-- Lars

On Sunday, November 24, 2013 5:50:54 PM UTC+1, Lars Vonk wrote:
>
> I am doing just that. Here is the code:
>
> a.yml and b.yml start with the same rackspace setup. How can I not have 
> hostname, or the flavor or the image as a variable?
>
> - hosts: local-rackspace
>   connection: local
>   remote_user: root
>   tasks:
>     - name: Rackspace | Create Rackspace server instance
>       local_action:
>         module: rax
>         credentials: ~/.rax
>         name: "{{ hostname }}"
>         flavor: "{{ rackspace_flavor }}"
>         image: "{{ rackspace_image }}"
>         region: LON
>         state: present
>         wait: yes
>         wait_timeout: 900
>         files:
>           /root/.ssh/authorized_keys: ~/.ssh/id_rsa.pub
>       register: rax
>
>     - name: Rackspace | Add new instance to host group
>       action: add_host hostname={{ hostname }} 
> ansible_ssh_host=${item.accessIPv4} groupname={{ groupname }}
>       with_items: ${rax.instances}
>
> My slimmed down inventory file:
>
> [local-rackspace]
> localhost ansible_python_interpreter=/usr/local/bin/python
>
> [a]
> # Added by rackspace module
>
> [b]
> # Added by rackspace module
>
> [acceptance-a:children]
> a
> local-rackspace
>
> [a:vars]
> hostname=test.a.com<http://www.google.com/url?q=http%3A%2F%2Ftest.a.com&sa=D&sntz=1&usg=AFQjCNGFMtnfVBde_HjWQcaOtqEriyktxA>
> rackspace_flavor=4
> groupname=a
>
> [acceptance-b:children]
> b
> local-rackspace
>
> [acceptance-b:vars]
> hostname=test.b.com<http://www.google.com/url?q=http%3A%2F%2Ftest.b.com&sa=D&sntz=1&usg=AFQjCNHejpIUR_d6Ly7rd8uE3aofdGpyDg>
> rackspace_flavor=3
> groupname=b
>
>
> rackspace_image is defined in group_vars/all since we use the same base 
> image for our apps.
>
> Maybe my earlier example was to simplistic but I thought it was easier to 
> explain my question since it doesn't require a rackspace account to test it.
>
> So my question is still: how can I make sure that I pass the correct 
> variables to the rax module in this case? Or I just hardcode them in the 
> file? I'd really like it to make it a role so I can use it for my other 
> apps as well, but being unable to use variables makes it impossible. Now I 
> am sure I am missing something really obvious here, but I can't figure out 
> what....
>
> Thanks again for your help.
>
> Lars 
>
> On Sunday, November 24, 2013 5:30:50 PM UTC+1, Michael DeHaan wrote:
>>
>> BTW, you don't pre-create hosts when using cloud machines.
>>
>> You should be using the rackspace dynamic inventory script.
>>
>> You would still use add_host, but if you are trying to predefine the 
>> system in your INI based inventory, that's not really the way it's meant to 
>> work.
>>
>> The cloud is meant to be authorative.
>>
>> Can you still use group variables?  Sure.  Should you it to define 
>> hostnames prior to creating instances -- no.
>>
>>
>>
>>
>> On Sun, Nov 24, 2013 at 11:29 AM, Michael DeHaan <[email protected]
>> > wrote:
>>
>>> I'm having difficulty between drawing the lines between "command echo" 
>>> and your cloud integration.
>>>
>>> The rax module has a parameter "instance-name" and will create that 
>>> instance with that name if it does not exist.
>>>
>>> http://ansibleworks.com/docs/modules.html#rax<http://www.google.com/url?q=http%3A%2F%2Fansibleworks.com%2Fdocs%2Fmodules.html%23rax&sa=D&sntz=1&usg=AFQjCNFhakL_krg_UpTClykOtR6KIrFmYA>
>>>
>>> You can also use the "exact_count" parameter to request an exact number 
>>> of instances starting with a given name, and it will slay extra instances 
>>> if you have too many.
>>>
>>>
>>>
>>> On Sun, Nov 24, 2013 at 11:16 AM, Lars Vonk <[email protected]>wrote:
>>>
>>>> Thanks for replying and clarifying.
>>>>
>>>> So then my question is this: Both application A and B require a local 
>>>> connection and variables to communicate with rackspace (like hostname for 
>>>> instance). Do you have some pointers how I should setup my inventory file 
>>>> and were to put my variables? The playbook for both apps is basically:
>>>>
>>>> - if not exists create instance in rackspace with this {{ hostname }}
>>>> - add host to group using add_host command
>>>> - include application specific playbook
>>>>
>>>> Like the example below one of the apps fails because it (rightfully) 
>>>> resolves to the wrong hostname. 
>>>>
>>>> Thanks again.
>>>>
>>>> Lars
>>>>
>>>>
>>>> On Sunday, November 24, 2013 5:02:02 PM UTC+1, Michael DeHaan wrote:
>>>>
>>>>> The host is a member of two groups.
>>>>>
>>>>> In this case, rightfully, variables are pulled from both.
>>>>>
>>>>> This is by design -- you may select hosts based on purpose (such as 
>>>>> webservers), while assigning other variables based on geography.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sun, Nov 24, 2013 at 10:42 AM, Lars Vonk <[email protected]>wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> We are creating playbooks for our servers that include creating 
>>>>>> instances with rackspace. We have problems with setting up the different 
>>>>>> inventory files with the appropriate vars. To illustrate the problem I 
>>>>>> created a small test case:
>>>>>>
>>>>>> DIR
>>>>>> ./a.yml
>>>>>> ./b.yml
>>>>>> ./test
>>>>>>
>>>>>> a.yml contains:
>>>>>> ---
>>>>>> - hosts: a
>>>>>>   connection: local
>>>>>>   remote_user: root
>>>>>>   tasks:
>>>>>>     - name: Foo
>>>>>>       command: echo {{ hostname }}
>>>>>>
>>>>>> b.yml contains:
>>>>>> ---
>>>>>> - hosts: b
>>>>>>   connection: local
>>>>>>   remote_user: root
>>>>>>   tasks:
>>>>>>     - name: Foo
>>>>>>       command: echo {{ hostname }}
>>>>>>
>>>>>> test contains:
>>>>>> localhost ansible_python_interpreter=/usr/local/bin/python
>>>>>>
>>>>>> [a]
>>>>>> localhost
>>>>>>
>>>>>> [b]
>>>>>> localhost
>>>>>>
>>>>>> [test-a:children]
>>>>>> a
>>>>>>
>>>>>> [test-a:vars]
>>>>>> hostname=a.com<http://www.google.com/url?q=http%3A%2F%2Fa.com&sa=D&sntz=1&usg=AFQjCNEYnDzIlRjJbXDcx3Cax_hkvntAFQ>
>>>>>>
>>>>>> [test-b:children]
>>>>>> b
>>>>>>
>>>>>> [test-b:vars]
>>>>>> hostname=b.com<http://www.google.com/url?q=http%3A%2F%2Fb.com&sa=D&sntz=1&usg=AFQjCNFq7tUq50NgFVyTsk2WMeiRf6l6WQ>
>>>>>>
>>>>>> When I run ansible-playbook a.yml -i test -vvvv it echos *b.com 
>>>>>> <http://www.google.com/url?q=http%3A%2F%2Fb.com&sa=D&sntz=1&usg=AFQjCNFq7tUq50NgFVyTsk2WMeiRf6l6WQ>*
>>>>>>  while 
>>>>>> I expect *a.com 
>>>>>> <http://www.google.com/url?q=http%3A%2F%2Fa.com&sa=D&sntz=1&usg=AFQjCNEYnDzIlRjJbXDcx3Cax_hkvntAFQ>*.
>>>>>>  
>>>>>> I expected this because the hosts in a.yml is a and a is a child of 
>>>>>> test-a 
>>>>>> that defines the hostname as *a.com 
>>>>>> <http://www.google.com/url?q=http%3A%2F%2Fa.com&sa=D&sntz=1&usg=AFQjCNEYnDzIlRjJbXDcx3Cax_hkvntAFQ>*.
>>>>>>  
>>>>>> For some reason I don't understand the hostname variable resolves to 
>>>>>> *b.com 
>>>>>> <http://www.google.com/url?q=http%3A%2F%2Fb.com&sa=D&sntz=1&usg=AFQjCNFq7tUq50NgFVyTsk2WMeiRf6l6WQ>*
>>>>>> .
>>>>>> What we are trying to achieve with this setup is to create a 
>>>>>> rackspace instance using a local connection (a.yml) and that add a host 
>>>>>> to 
>>>>>> the test-a which is then used later in the playbook as host. This fails 
>>>>>> because it resolves to the wrong hostname.
>>>>>>
>>>>>> What am I doing wrong here? Is there a better setup to achieve this?
>>>>>>
>>>>>> Thanks in advance,
>>>>>> Lars
>>>>>>
>>>>>>  -- 
>>>>>> 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].
>>>>>>
>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Michael DeHaan <[email protected]>
>>>>>
>>>>> CTO, AnsibleWorks, Inc.
>>>>> http://www.ansibleworks.com/<http://www.google.com/url?q=http%3A%2F%2Fwww.ansibleworks.com%2F&sa=D&sntz=1&usg=AFQjCNEn7XMcb-1wMxliSyOhlnyBBlDaQg>
>>>>>
>>>>>   -- 
>>>> 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].
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>
>>>
>>>
>>> -- 
>>> Michael DeHaan <[email protected]>
>>>
>>> CTO, AnsibleWorks, Inc.
>>> http://www.ansibleworks.com/<http://www.google.com/url?q=http%3A%2F%2Fwww.ansibleworks.com%2F&sa=D&sntz=1&usg=AFQjCNEn7XMcb-1wMxliSyOhlnyBBlDaQg>
>>>
>>>  
>>
>>
>> -- 
>> Michael DeHaan <[email protected]>
>> CTO, AnsibleWorks, Inc.
>> http://www.ansibleworks.com/<http://www.google.com/url?q=http%3A%2F%2Fwww.ansibleworks.com%2F&sa=D&sntz=1&usg=AFQjCNEn7XMcb-1wMxliSyOhlnyBBlDaQg>
>>
>> 

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

Reply via email to