Force relative role paths to be absolute and correct errors about missing path(s). (#16088)
Addresses #10811
This commit is contained in:
parent
3aae0b8a6b
commit
2bf2e0fdfd
2 changed files with 13 additions and 7 deletions
|
@ -123,7 +123,6 @@ class GalaxyCLI(CLI):
|
|||
self.options, self.args =self.parser.parse_args()
|
||||
display.verbosity = self.options.verbosity
|
||||
self.galaxy = Galaxy(self.options)
|
||||
|
||||
return True
|
||||
|
||||
def run(self):
|
||||
|
@ -468,9 +467,9 @@ class GalaxyCLI(CLI):
|
|||
for path in roles_path:
|
||||
role_path = os.path.expanduser(path)
|
||||
if not os.path.exists(role_path):
|
||||
raise AnsibleOptionsError("- the path %s does not exist. Please specify a valid path with --roles-path" % roles_path)
|
||||
raise AnsibleOptionsError("- the path %s does not exist. Please specify a valid path with --roles-path" % role_path)
|
||||
elif not os.path.isdir(role_path):
|
||||
raise AnsibleOptionsError("- %s exists, but it is not a directory. Please specify a valid path with --roles-path" % roles_path)
|
||||
raise AnsibleOptionsError("- %s exists, but it is not a directory. Please specify a valid path with --roles-path" % role_path)
|
||||
path_files = os.listdir(role_path)
|
||||
for path_file in path_files:
|
||||
gr = GalaxyRole(self.galaxy, path_file)
|
||||
|
|
|
@ -39,16 +39,22 @@ def mk_boolean(value):
|
|||
else:
|
||||
return False
|
||||
|
||||
def shell_expand(path):
|
||||
def shell_expand(path, expand_relative_paths=False):
|
||||
'''
|
||||
shell_expand is needed as os.path.expanduser does not work
|
||||
when path is None, which is the default for ANSIBLE_PRIVATE_KEY_FILE
|
||||
'''
|
||||
if path:
|
||||
path = os.path.expanduser(os.path.expandvars(path))
|
||||
if expand_relative_paths and not path.startswith('/'):
|
||||
# paths are always 'relative' to the config?
|
||||
if 'CONFIG_FILE' in globals():
|
||||
CFGDIR = os.path.dirname(CONFIG_FILE)
|
||||
path = os.path.join(CFGDIR, path)
|
||||
path = os.path.abspath(path)
|
||||
return path
|
||||
|
||||
def get_config(p, section, key, env_var, default, boolean=False, integer=False, floating=False, islist=False, isnone=False, ispath=False, ispathlist=False, istmppath=False):
|
||||
def get_config(p, section, key, env_var, default, boolean=False, integer=False, floating=False, islist=False, isnone=False, ispath=False, ispathlist=False, istmppath=False, expand_relative_paths=False):
|
||||
''' return a configuration variable with casting '''
|
||||
value = _get_config(p, section, key, env_var, default)
|
||||
if boolean:
|
||||
|
@ -73,7 +79,8 @@ def get_config(p, section, key, env_var, default, boolean=False, integer=False,
|
|||
value = tempfile.mkdtemp(prefix='ansible-local-tmp', dir=value)
|
||||
elif ispathlist:
|
||||
if isinstance(value, string_types):
|
||||
value = [shell_expand(x) for x in value.split(os.pathsep)]
|
||||
value = [shell_expand(x, expand_relative_paths=expand_relative_paths) \
|
||||
for x in value.split(os.pathsep)]
|
||||
elif isinstance(value, string_types):
|
||||
value = unquote(value)
|
||||
return value
|
||||
|
@ -140,7 +147,7 @@ DEFAULT_PATTERN = get_config(p, DEFAULTS, 'pattern', None, None)
|
|||
DEFAULT_DEBUG = get_config(p, DEFAULTS, 'debug', 'ANSIBLE_DEBUG', False, boolean=True)
|
||||
DEFAULT_HOST_LIST = get_config(p, DEFAULTS,'inventory', 'ANSIBLE_INVENTORY', DEPRECATED_HOST_LIST, ispath=True)
|
||||
DEFAULT_MODULE_PATH = get_config(p, DEFAULTS, 'library', 'ANSIBLE_LIBRARY', None, ispathlist=True)
|
||||
DEFAULT_ROLES_PATH = get_config(p, DEFAULTS, 'roles_path', 'ANSIBLE_ROLES_PATH', '/etc/ansible/roles', ispathlist=True)
|
||||
DEFAULT_ROLES_PATH = get_config(p, DEFAULTS, 'roles_path', 'ANSIBLE_ROLES_PATH', '/etc/ansible/roles', ispathlist=True, expand_relative_paths=True)
|
||||
DEFAULT_REMOTE_TMP = get_config(p, DEFAULTS, 'remote_tmp', 'ANSIBLE_REMOTE_TEMP', '$HOME/.ansible/tmp')
|
||||
DEFAULT_LOCAL_TMP = get_config(p, DEFAULTS, 'local_tmp', 'ANSIBLE_LOCAL_TEMP', '$HOME/.ansible/tmp', istmppath=True)
|
||||
DEFAULT_MODULE_NAME = get_config(p, DEFAULTS, 'module_name', None, 'command')
|
||||
|
|
Loading…
Reference in a new issue