"   It would be nice if include_vars at the top of the file would get
loaded even when starting at a task below that."

If include vars is below a task they are definitely injected into the
namespace by the time a task below it is executed.

If you mean you want to write include vars after a task apply to a task
before, this can't happen, because the path may be derived from a
registered variable or a call to a custom fact module, etc.




On Mon, Jan 20, 2014 at 6:33 PM, kesten broughton <
[email protected]> wrote:

>
>
> On Sunday, January 19, 2014 2:29:17 PM UTC-6, Michael DeHaan wrote:
>>
>> I'd find that above a bit of an anti-pattern.
>>
>> If you want to include multiple files and have that role associated
>> versus play associated, the best way to do this is to use the
>> "include_vars" module inside a task file.
>>
>> There's an open RFE to include every file in "vars/" automatically with
>> "main" coming first, but I'm thinking we're likely to close that idea
>> entirely -- as conditional includes are useful things.
>>
>>
>>
>
>> I had most of the items using include_vars to begin with, but I make
>> heavy use of --start-at-task while developing scripts / debugging.
>>
>    It would be nice if include_vars at the top of the file would get
> loaded even when starting at a task below that.
>    It's hard to imagine a case where that would be bad.
>
>
>
>
> On Sun, Jan 19, 2014 at 11:00 AM, kesten broughton 
> <[email protected]>wrote:
>>
>>> Another approach that is working for me is to pass in a vars file that
>>> points to all the other vars files that you may need that change from run
>>> to run.
>>>
>>> ansible-playbook -i hosts site.yml -e "@cluster_config.yml"
>>>
>>> The use case is for creating clusters of hadoop based apps that have a
>>> high degree of configuration for various environments.
>>> I find ansible's variables architecture ideal for setting up a situation
>>> that is more or less the same from run to run.
>>> But when you have network variables that change from one datacenter to
>>> the next, or a cluster configuration that depends on staging/prod/dev
>>> I find In need a more robust and de-coupled way of passing in re-usable
>>> but swappable configs.
>>> Note that you could do this by putting all the vars into a
>>> group_vars/cluster_name.yml but then you have to get creative with groups
>>> or lose the re-usability of components that can be shared between groups.
>>>
>>> Here's how i do it.
>>>
>>> cluster_cards/deployment_name/cluster_config.yml  in my ansible
>>> playbook directory contains
>>> network_config: "path to networking details for deployment"
>>> hadoop_config: "path to architecture of hadoop cluster"
>>> environment_config: "path to file with specific dev/prod config stuff"
>>>
>>> Then in site.yml (or a tasks file with include_vars: )
>>>  - hosts: hadoop_cluster
>>>    vars_files:
>>>      - ["{{network_config}}]
>>>      - ["{{environment_config}}]
>>>      - ["{{hadoop_config}}]
>>>
>>> deployment1/network_config_1.yml
>>>                    /environment_config.yml
>>> deployment2/network_config_2.yml
>>>
>>>                    /
>>> shared/small_hadoop_cluster.yml
>>>           /medium_hadoop_cluster.yml
>>>
>>> I still use the ansible hierarchy of vars for less variable/configurable
>>> constants, but this has worked well for me
>>>
>>> kesten
>>>
>>> On Friday, January 17, 2014 11:14:06 AM UTC-6, AmiableAlbion wrote:
>>>>
>>>> I am struggling to break out variables in the "var" directory of roles
>>>> into individual files
>>>>
>>>> I have tried and continue to get tracebacks. I thought this would be
>>>> straight forward after seeing the documentation for include_vars, but
>>>> evidently I am missing something here.
>>>>
>>>> I was trying something like this with Ansible 1.4.4
>>>>
>>>> *vars/main.yml*
>>>> *- include_vars: credentials.yml*
>>>> *- include_vars: imagenames.yml*
>>>>
>>>> *vars/imagenames.yml*
>>>>
>>>> *centos64: 52225cb3-441b-47b6-9cca-deb14d24d72f*
>>>> *rhel64: 364cd1c1-e958-4327-a0b4-3251da47869c*
>>>>
>>>> *> ansible-playbook vm.yml*
>>>> *Traceback (most recent call last):   File "/usr/bin/ansible-playbook",
>>>> line 269, in <module>    sys.exit(main(sys.argv[1:]))  File
>>>> "/usr/bin/ansible-playbook", line 209, in main    pb.run()   File
>>>> "/usr/lib/python2.6/site-packages/ansible/playbook/__init__.py", line 229,
>>>> in run    play = Play(self, play_ds, play_basedir)  File
>>>> "/usr/lib/python2.6/site-packages/ansible/playbook/play.py", line 83, in
>>>> __init__     ds = self._load_roles(self.roles, ds)  File
>>>> "/usr/lib/python2.6/site-packages/ansible/playbook/play.py", line 327, in
>>>> _load_roles    roles = self._build_role_dependencies(roles, [], self.vars)
>>>>   File "/usr/lib/python2.6/site-packages/ansible/playbook/play.py", line
>>>> 192, in _build_role_dependencies    role_vars =
>>>> utils.combine_vars(vars_data, role_vars)  File
>>>> "/usr/lib/python2.6/site-packages/ansible/utils/__init__.py", line 1008, in
>>>> combine_vars     return dict(a.items() + b.items())AttributeError: 'list'
>>>> object has no attribute 'items'*
>>>>
>>>> Perhaps I am abusing syntax here though ...
>>>>
>>>> Thanks
>>>> Albion
>>>>
>>>  --
>>> 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.
>>>
>>
>>
>>
>> --
>> Michael DeHaan <[email protected]>
>>
>> CTO, AnsibleWorks, Inc.
>> http://www.ansibleworks.com/
>>
>>   --
> 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.
>



-- 
Michael DeHaan <[email protected]>
CTO, AnsibleWorks, Inc.
http://www.ansibleworks.com/

-- 
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