Thanks for sharing! Glad I could help. :)

On Mon, Jun 29, 2015, 20:16 ddffgpmfn <[email protected]> wrote:

> Thanks to Hagai I have a good solution worth sharing.
>
> * add common_vars.sh bash script to each of the inventories I wish to
> share variables. Make it executable. Point it where your common Ansible
> YAML variables are (in my case inventory/common_vars.yml).
> * add common_vars.yml and populate it
>
> Run your playbooks with the specified inventory path as normal
> (inventory/aws-dev, inventory/aws-prod etc)
>
> Benefits
> * inventory files are all kept in the inventory folder
> * normal Ansible group_vars are left alone
> * only need one extra file per inventory, and no copy paste
> * if you need a few top level common_vars, you can just point your
> common_vars to onprem_common.yml and cloudstack_common.yml, or as you like.
> * feels like a proper Ansible way to do things without hacks
>
> New dir structure below (compared to original). Bash script code after.
>
> .
> ├── inventory
> │   ├── common_vars.yml
> │   ├── aws-dev
> │   │   ├── aws-dev
> │   │   ├── common_vars.sh
> │   │   ├── ec2.ini
> │   │   ├── ec2.py
> │   │   └── group_vars
> │   │       ├── all
> │   │       │   ├── all.yml
> │   │       │   └── secrets.yml
> │   │       ├── security_group_app.yml
> │   │       └── security_group_util
> │   │           ├── secrets.yml
> │   │           └── security_group_util.yml
> │   ├── aws-prod
> │   │   ├── aws-prod
> │   │   ├── common_vars.sh
> │   │   ├── ec2.ini
> │   │   ├── ec2.py
> │   │   └── group_vars
> │   │       └── all
> │   │           ├── all.yml
> │   │           └── secrets.yml
> │   └── vmware-dev
> │       ├── group_vars
> │       │   ├── all
> │       │   │   ├── all.yml
> │       │   │   └── secrets.yml
> │       │   └── tag_role_app.yml
> │       ├── common_vars.sh
> │       ├── vmware-dev
> │       ├── vmware.ini
> │       └── vmware.py
> ├── roles
> ├── aws-configure.yml
> ├── aws-provision.yml
> ├── vmware-configure.yml
> └── vmware-provision.yml
>
> common_vars.sh
> #!/usr/bin/env bash
>
> #
> http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in
> DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
> # echo $DIR
> #
> http://stackoverflow.com/questions/27382552/converting-yaml-to-json-with-python-block-end-found
> python -c 'import sys, yaml, json; json.dump({"all": {"vars":
> yaml.load(sys.stdin) } }, sys.stdout, indent=4)' < $DIR/../common_vars.yml
> # > all.json
>
> This accomplishes everything required without complexity.
>
> Thanks Hagai!
>
> On Friday, June 26, 2015 at 7:52:28 PM UTC+1, Hagai Kariti wrote:
>>
>> You need to wrap it in an 'all' group, yes. The output should look like
>> this:
>>
>>    {
>>       "all": {
>>          "vars": {
>>             ..your vars here..
>>          }
>>       }
>>    }
>>
>> And templates are evaluated when used, so the vars can be templated.
>>
>  --
> 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/T9RWNQbLRWs/unsubscribe.
> To unsubscribe from this group and all its topics, 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/c21d0da1-f461-4ff6-8a5a-dd49f87b17de%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/c21d0da1-f461-4ff6-8a5a-dd49f87b17de%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 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/CAO0%3DbmE-mUrk2UpGQ5WPk_OudeLh5_5YdccsO9qByOpm1rCNBg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to