From 80ddd1ca7509768afb315e913fb6d15f5b693ee6 Mon Sep 17 00:00:00 2001 From: Richard C Isaacson Date: Fri, 14 Feb 2014 14:34:58 -0600 Subject: [PATCH] Config resoution order correction and documentation. --- docsite/rst/intro_configuration.rst | 21 ++++++++++++++------- examples/ansible.cfg | 7 ++++--- lib/ansible/constants.py | 22 ++++++++++++---------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/docsite/rst/intro_configuration.rst b/docsite/rst/intro_configuration.rst index 2174da2acc..efcc4cf504 100644 --- a/docsite/rst/intro_configuration.rst +++ b/docsite/rst/intro_configuration.rst @@ -5,17 +5,24 @@ The Ansible Configuration File .. highlight:: bash -Certain things in Ansible are adjustable in a configuration file. In general, the stock configuration is probably -right for most users, but that doesn't mean you might not want to change them. +Certain settings in Ansible are adjustable via a configuration file. The stock configuration should be sufficient +for most users, but there may be reasons you would want to change them. -The mechanism for doing this is the "ansible.cfg" file, which is looked for in the following locations:: +Changes can be made and used in a configuration file which will be processed processed in the following order:: - * /etc/ansible/ansible.cfg - * ~/.ansible.cfg + * ANSIBLE_CONFIG (an environment variable) * ansible.cfg (in the current directory) + * .ansible.cfg (in the home directory) + * /etc/ansible/ansible.cfg -If multiple file locations matching the above exist, the last location on the above list is used. Settings in files -are not merged together. +Prior to 1.5 the order was:: + + * ansible.cfg (in the current directory) + * ANSIBLE_CONFIG (an environment variable) + * .ansible.cfg (in the home directory) + * /etc/ansible/ansible.cfg + +Ansible will process the above list and use the first file found. Settings in file are not merged together. .. _getting_the_latest_configuration: diff --git a/examples/ansible.cfg b/examples/ansible.cfg index 930880df34..f543b2e4bc 100644 --- a/examples/ansible.cfg +++ b/examples/ansible.cfg @@ -2,9 +2,10 @@ # ============================================== # nearly all parameters can be overridden in ansible-playbook -# or with command line flags. ansible will read ~/.ansible.cfg, -# ansible.cfg in the current working directory or -# /etc/ansible/ansible.cfg, whichever it finds first +# or with command line flags. ansible will read ANSIBLE_CONFIG, +# ansible.cfg in the current working directory, .ansible.cfg in +# the home directory or /etc/ansible/ansible.cfg, whichever it +# finds first [defaults] diff --git a/lib/ansible/constants.py b/lib/ansible/constants.py index c055ccf3d0..c9daa24722 100644 --- a/lib/ansible/constants.py +++ b/lib/ansible/constants.py @@ -56,20 +56,22 @@ def _get_config(p, section, key, env_var, default): return default def load_config_file(): + ''' Load Config File order(first found is used): ENV, CWD, HOME, /etc/ansible ''' + p = ConfigParser.ConfigParser() + + path0 = os.getenv("ANSIBLE_CONFIG", None) + if path0 is not None: + path0 = os.path.expanduser(path0) path1 = os.getcwd() + "/ansible.cfg" - path2 = os.path.expanduser(os.environ.get('ANSIBLE_CONFIG', "~/.ansible.cfg")) + path2 = os.path.expanduser("~/.ansible.cfg") path3 = "/etc/ansible/ansible.cfg" - if os.path.exists(path1): - p.read(path1) - elif os.path.exists(path2): - p.read(path2) - elif os.path.exists(path3): - p.read(path3) - else: - return None - return p + for path in [path0, path1, path2, path3]: + if path is not None and os.path.exists(path): + p.read(path) + return p + return None def shell_expand_path(path): ''' shell_expand_path is needed as os.path.expanduser does not work