debugyamlMinor
Unable to run playbooks using Ansible best practices layout
Viewed 0 times
unablelayoutplaybooksusingpracticesansiblerunbest
Problem
I am very new to ansible and I think I am lacking something basic that I am not finding in the examples or on github as to the directory structure and its use.
I have set up my directory structure using ansible best practices document located here:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout
But the documentation is not clear on how the structure should be used in practice. I have multiple clients in which the inventories must be kept seperate. My directory structure is set up as follows:
The hosts files contain routers, switches and firewalls (grouped as such) like this:
The group_vars have router, switch and firewall files with the appropriate variables. There is a credentials.yml in the ./inventory/client name/group_vars directory that is encrypted and should be loaded for every playbook. I understand precedence and I am not having any trouble there.
If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against?
If I run ansible-playbook in the correct inventory folder (./inventory/
I have set up my directory structure using ansible best practices document located here:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout
But the documentation is not clear on how the structure should be used in practice. I have multiple clients in which the inventories must be kept seperate. My directory structure is set up as follows:
inventory/
client1/
group_vars/
all
credentials.yml
router
switch
firewall
host_vars/
router1
switch1
firewall1
hosts
client2/
group_vars/
all
credentials.yml
router
switch
firewall
host_vars/
router1
switch1
firewall1
hosts
roles/
role1/
tasks/
main.yml
role2/
tasks/
main.ymlThe hosts files contain routers, switches and firewalls (grouped as such) like this:
[router]
router1 ansible_host=1.2.3.4
[switch]
switch1 ansible_host=5.6.7.8
[firewall]
firewall1 ansible_host=9.10.11.12The group_vars have router, switch and firewall files with the appropriate variables. There is a credentials.yml in the ./inventory/client name/group_vars directory that is encrypted and should be loaded for every playbook. I understand precedence and I am not having any trouble there.
If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against?
ansible-playbook -i inventory/client1/hosts myplaybook.yml <--where can I put the specific host that is in the hosts file? I have tried several different methods and none seem to work. My guess is that I am running the ansible-playbook command from the wrong directory.If I run ansible-playbook in the correct inventory folder (./inventory/
Solution
Generally, Ansible is very flexible and often there are more "correct" solutions.
Start for example with the question "Where do the configuration data come from?", put the default data to the roles and decide which variables should be configured in "group_vars/host_vars", in the roles, and which in the playbooks. Review Variable precedence: Where should I put a variable?. To set paths to the inventory, roles, and others see Ansible Configuration Settings.
To answer your questions:
Q1: If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against? ...where can I put the specific host that is in the hosts file?
To pick for example "router1" start a play with:
Q2: How do I point to the playbooks that are in the root folder without backing up directories each time like this: "ansible-playbook -i hosttarget ../../myplaybook.yml"
Configure DEFAULT_HOST_LIST. For example:
Q3: How can I load additional credentials files or group variables?
There are a lot of options described in Variable precedence: Where should I put a variable?. For example "include_vars" might be useful to load additional credentials. For "group variables" pick from the options.
Start for example with the question "Where do the configuration data come from?", put the default data to the roles and decide which variables should be configured in "group_vars/host_vars", in the roles, and which in the playbooks. Review Variable precedence: Where should I put a variable?. To set paths to the inventory, roles, and others see Ansible Configuration Settings.
To answer your questions:
Q1: If I run ansible-playbook -i /path to hostfile/ how do I pick the specific host I want to run against? ...where can I put the specific host that is in the hosts file?
To pick for example "router1" start a play with:
- hosts: router1Q2: How do I point to the playbooks that are in the root folder without backing up directories each time like this: "ansible-playbook -i hosttarget ../../myplaybook.yml"
Configure DEFAULT_HOST_LIST. For example:
# ANSIBLE_HOSTS=$PWD/inventory/client1/hosts ansible-playbook myplaybook.ymlQ3: How can I load additional credentials files or group variables?
There are a lot of options described in Variable precedence: Where should I put a variable?. For example "include_vars" might be useful to load additional credentials. For "group variables" pick from the options.
Code Snippets
- hosts: router1# ANSIBLE_HOSTS=$PWD/inventory/client1/hosts ansible-playbook myplaybook.ymlContext
StackExchange DevOps Q#7939, answer score: 3
Revisions (0)
No revisions yet.