fixed file lookup pathing in dwim functinos, now does specific paths and priorities and is commented

fixes #11672 as cwd is now not part of thos paths:
if full path is supplied, used that
This commit is contained in:
Brian Coca 2015-07-22 20:56:37 -04:00
parent d412bc72ef
commit b9050ecf18

View file

@ -194,32 +194,47 @@ class DataLoader():
else: else:
return os.path.abspath(os.path.join(self._basedir, given)) return os.path.abspath(os.path.join(self._basedir, given))
def path_dwim_relative(self, role_path, dirname, source): def path_dwim_relative(self, path, dirname, source):
''' find one file in a directory one level up in a dir named dirname relative to current ''' ''' find one file in a role/playbook dirs with/without dirname subdir '''
basedir = os.path.dirname(role_path) search = []
if os.path.islink(basedir): isrole = False
basedir = unfrackpath(basedir)
template2 = os.path.join(basedir, dirname, source) # I have full path, nothing else needs to be looked at
if source.startswith('~') or source.startswith('/'):
search.append(self.path_dwim(source))
else: else:
template2 = os.path.join(basedir, '..', dirname, source) # base role/play path + templates/files/vars + relative filename
search.append(os.path.join(path, dirname, source))
source1 = os.path.join(role_path, dirname, source) basedir = unfrackpath(path)
if os.path.exists(source1):
return source1 # is it a role and if so make sure you get correct base path
if path.endswith('tasks') and os.path.exists(os.path.join(path,'main.yml')) \
or os.path.exists(os.path.join(path,'tasks/main.yml')):
isrole = True
if path.endswith('tasks'):
basedir = unfrackpath(os.path.dirname(path))
cur_basedir = self._basedir cur_basedir = self._basedir
self.set_basedir(basedir) self.set_basedir(basedir)
source2 = self.path_dwim(template2) # resolved base role/play path + templates/files/vars + relative filename
if os.path.exists(source2): search.append(self.path_dwim(os.path.join(basedir, dirname, source)))
self.set_basedir(cur_basedir)
return source2
self.set_basedir(cur_basedir) self.set_basedir(cur_basedir)
obvious_local_path = self.path_dwim(source) if isrole and not source.endswith(dirname):
if os.path.exists(obvious_local_path): # look in role's tasks dir w/o dirname
#self.set_basedir(cur_basedir) search.append(self.path_dwim(os.path.join(basedir, 'tasks', source)))
return obvious_local_path
return source2 # try to create absolute path for loader basedir + templates/files/vars + filename
search.append(self.path_dwim(os.path.join(dirname,source)))
# try to create absolute path for loader basedir + filename
search.append(self.path_dwim(source))
for candidate in search:
if os.path.exists(candidate):
break
return candidate