In fairness, I probably am Doing It Wrong in some respects -
I don't have prod/dev groups in this case, we're using a different
inventory for prod and dev.

The alternative would be to have [prod_mongos] , [prod_mongors], [dev_mongos]
etc. etc. in the inventory which seems a bit cut n pasty to me.

With the 2 inventory approach, I can have the same groups across environments
that differ only in FQDNs and number of members, and then an [all:vars] to hold
environment-wide 'globals' (NTP settings, proxy, ansible_ssh* settings etc).

For the record :

I got this working cleanly (to my mind at least ) thanks to @drybjed
on IRC pointing
out set_fact.

I have a roles/proxyenv/tasks/main.yml applied to all hosts
that mpopulates a proxy_env var using set_fact + when
and then all our yum/get_url/gem etc. always have an environment:
proxy_env tacked onto them.

Environments that don't need to use a proxy simply don't set one in
their inventory, and
so that proxy_env dict is empty for them.

On 1 May 2014 22:21, Michael DeHaan <[email protected]> wrote:
> "Sounds like a bit of abuse of the inventory - I think it's only meant for
> listing hosts and connection details."
>
> I strongly disagree.
>
> Group based variables are quite useful and having a group_vars/production
> and group_vars/stage can be a great way to organize things.
>
>
>
> On Thu, May 1, 2014 at 11:37 AM, Tomasz Kontusz <[email protected]>
> wrote:
>>
>> Dnia czw, 1 maj 2014, 11:40:22 Dick Davies pisze:
>>
>>> I'm developing an ansible playbook in Vagrant and then
>>> applying it to a customer environment. Getting pretty far
>>> by using a single playbook (site.yml) and setting per-environment
>>> variables in different inventory files.
>>
>>
>> Sounds like a bit of abuse of the inventory - I think it's only meant for
>> listing hosts and connection details.
>>
>>
>>> dev_hosts = my dev. VMs
>>> live_hosts = customer VM stack
>>>
>>> then i can run
>>>
>>> ansible-playbook -i (pick one) site.yml
>>>
>>> and things by and large work great.
>>>
>>> One problem I keep hitting is the 'live' environment needs everything
>>> to go via a proxy. live_hosts has:
>>>
>>> ....
>>> [all:vars]
>>> http_proxy=http://custproxy:8080
>>> ....
>>>
>>> and that's absent from dev_hosts.
>>>
>>> I use that to template /etc/profile.d/proxy.sh,
>>> so curl etc. are pre-set to use it. I'ts easy to do conditional
>>> logic in that template.
>>>
>>> I'd like all the Ansible tasks that support an environment: field
>>> (git / get_url / etc) to only have one set if that var is populated.
>>>
>>> I can't just blindly set it or the tasks end up running with a proxy
>>> of nil/null/'' .
>>>
>>> But I can't just add this to the inventory:
>>>
>>> ....
>>> [all:vars]
>>> http_proxy=http://custproxy:8080
>>> proxy_env:
>>>    http_proxy: {{http_proxy}}
>>> ....
>>>
>>> because it just allows key=var style definitions.
>>>
>>> Where's the earliest I can set this up?
>>>
>>
>> I'm not sure if that's the right way, but for environment-specific
>> variables I'm using play's vars_files.
>> vagrant_inventory:
>> [all:vars]
>> environment_name=vagrant
>>
>> site.yml:
>> - hosts: some_group
>>   vars_files:
>>     - vars/{{ environment_name }}.yml
>>
>> This way I have less clutter in inventory, and I can easily see the
>> environment's global settings.
>> It's also pretty handy for usage with Vault, by adding "- secrets/{{
>> environment_name }}.yml" there (and as secrets for Vagrant aren't that
>> secret, that gives you an index of required secrets too :-))
>>
>>
>> --
>> 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/53626A41.8050803%40gmail.com.
>>
>> 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/CA%2BnsWgyw_neYLS6GFzwzZpsq%3DHJej8gMiHTqgeid2_rXbKti0w%40mail.gmail.com.
>
> 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/CAK5eLPRzdYUo6%2BzmpcFARNFWGurNfw6vk5E993SmW4c2-GEx_w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to