Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Proper way to define default variables for all hosts in Ansible

There is a definition of [all:vars] in my ansible inventory file as follows:

[all:vars]
ansible_shell_type=bash
ansible_user=certain_user
ansible_ssh_common_args="-o ConnectionAttempts=10"

I plan to move such variables into ansible.cfg to set defaults for all hosts. Would it simply work in a similar way or is there any circumstances to consider? What else alternatives available to remove [all:vars] from the inventory file?

like image 685
Akif Avatar asked Sep 13 '17 13:09

Akif


3 Answers

ansible.cfg is a configuration file and not inventory, you can't put variables in there.

[all:vars] is a syntax to define group variables for a group (special group all in this case) inside inventory file.

If you want to split out variable definition from main inventory file (which is preferred practice, by the way!), you may want to read this chapter: Splitting Out Host and Group Specific Data.

Excerpt:

In addition to storing variables directly in the inventory file, host and group variables can be stored in individual files relative to the inventory file

Assuming the inventory file path is:

/etc/ansible/hosts

If the host is named ‘foosball’, and in groups ‘raleigh’ and ‘webservers’, variables in YAML files at the following locations will be made available to the host:

/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball
like image 100
Konstantin Suvorov Avatar answered Oct 23 '22 07:10

Konstantin Suvorov


Consider moving the variables to /group_vars/all to achieve the same in a supported way.

like image 13
LuckyAshnar Avatar answered Oct 23 '22 06:10

LuckyAshnar


Of course you can define these values in ansible.cfg, they just have different names, so refer to the manual beforehand:

  • ansible_shell_type can be defined as executable in the ansible.cfg
  • ansible_user as remote_user
  • ansible_ssh_common_args as ssh_args

The values set in the configuration file will apply to all hosts unless overridden by specific settings.

like image 2
techraf Avatar answered Oct 23 '22 05:10

techraf