Environment:
CentOS Linux release 7.3.1611 (Core)
ansible 2.9.9
The hosts file had three groups defined, with only one hostname associated with each group:
[development]
cs-dev.cherryshoe.org ansible_connection=local
[test]
cs-test.cherryshoe.org
[production]
cs.cherryshoe.org
i.e. I need target server cs-test.cherryshoe.org to know the hostname of target_env production. In this case the target_env "production" had hostname cs.cherryshoe.org associated to it.
ansible-playbook cherryshoe.yml -u YOUR_USER_ON_TARGET_SERVER -k -K -e 'target_server=cs-test.cherryshoe.org' 'target_env=production'
These ansible magic variables didn't work:
- debug: var=inventory_hostname - had the hostname where the script was being run against (in this example cs-test.cherryshoe.org)
- debug: var=ansible_hostname - had hostname localhost
There were two solutions to this problem:
1. Access it via hostvars magic variable
- debug: msg="{{hostvars[inventory_hostname]['groups'][target_env][0]}}"
This works because the hostvars magic variable holds the following type of information that you can see when you debug the variable
- debug: var=hostvars
The "groups" attribute inside hostvars[inventory_hostname] has the "target_env" production and if you access the first element in the array it's "cs.cherryshoe.org", which is what we want:
"groups": {
"all": [
"cs-dev.cherryshoe.org",
"cs-test.cherryshoe.org",
"cs.cherryshoe.org"
],
"development": [
"cs-dev.cherryshoe.org"
],
"test": [
"cs-test.cherryshoe.org"
],
"production": [
"cs.cherryshoe.org"
],
"ungrouped": []
}
2. Another way to do this was a hash variable in a group variables file,
hostnames:
development: cs-dev.cherryshoe.org
test: cs-test.cherryshoe.org
production: cs.cherryshoe.org
and access it using:
- debug: msg=""{{hostnames[target_env]}}"
These articles were helpful:
https://stackoverflow.com/questions/30650454/how-can-i-add-keys-to-a-hash-variable-in-ansible-yaml
https://www.google.com/books/edition/Mastering_Ansible/nrkrDwAAQBAJ?hl=en&gbpv=1&dq=ansible+%22hash+variable%22&pg=PA37&printsec=frontcover
No comments:
Post a Comment
I appreciate your time in leaving a comment!