Add traps for py3 and fix remote src
This change adds traps for the FileNotFound exception which is used instead of OSError when a file is not found. This will ensure that that fall back exception handeling works properly in py2 and py3. The remote_src flag was not being respected with the new fallback options, this change adds a check for remote_src so it works in normal and fallback mode. Change-Id: I136dd1f3220d3b004d5275a9fa15edea53d58f6b Signed-off-by: Kevin Carter <kecarter@redhat.com>
This commit is contained in:
parent
43def985ed
commit
80cc8ed4b1
@ -63,6 +63,10 @@ try:
|
|||||||
PermissionError = PermissionError
|
PermissionError = PermissionError
|
||||||
except NameError:
|
except NameError:
|
||||||
PermissionError = (IOError, OSError)
|
PermissionError = (IOError, OSError)
|
||||||
|
try:
|
||||||
|
FileNotFoundError = FileNotFoundError
|
||||||
|
except NameError:
|
||||||
|
FileNotFoundError = OSError
|
||||||
|
|
||||||
|
|
||||||
class IDumper(AnsibleDumper):
|
class IDumper(AnsibleDumper):
|
||||||
@ -121,6 +125,8 @@ class MultiKeyDict(OrderedDict):
|
|||||||
if str(value) not in items:
|
if str(value) not in items:
|
||||||
items += tuple([str(value)])
|
items += tuple([str(value)])
|
||||||
super(MultiKeyDict, self).__setitem__(key, items)
|
super(MultiKeyDict, self).__setitem__(key, items)
|
||||||
|
elif isinstance(self[key], MultiKeyDict):
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
if str(self[key]) != str(value):
|
if str(self[key]) != str(value):
|
||||||
items = tuple([str(self[key]), str(value)])
|
items = tuple([str(self[key]), str(value)])
|
||||||
@ -313,7 +319,6 @@ class ConfigTemplateParser(ConfigParser.RawConfigParser):
|
|||||||
)
|
)
|
||||||
cursect[optname] = optval
|
cursect[optname] = optval
|
||||||
else:
|
else:
|
||||||
|
|
||||||
optname = '%s-%d' % (
|
optname = '%s-%d' % (
|
||||||
STRIP_MARKER,
|
STRIP_MARKER,
|
||||||
marker_counter
|
marker_counter
|
||||||
@ -612,16 +617,19 @@ class ActionModule(ActionBase):
|
|||||||
',' in value or (
|
',' in value or (
|
||||||
'\n' in value and not yml_multilines))):
|
'\n' in value and not yml_multilines))):
|
||||||
base_items[key] = re.split(',|\n', value)
|
base_items[key] = re.split(',|\n', value)
|
||||||
base_items[key] = [i.strip() for i in base_items[key] if i]
|
base_items[key] = [
|
||||||
|
i.strip() for i in base_items[key] if i
|
||||||
|
]
|
||||||
elif isinstance(value, list):
|
elif isinstance(value, list):
|
||||||
if isinstance(base_items.get(key), list) and list_extend:
|
if isinstance(base_items.get(key), list) and list_extend:
|
||||||
base_items[key].extend(value)
|
base_items[key].extend(value)
|
||||||
else:
|
else:
|
||||||
base_items[key] = value
|
base_items[key] = value
|
||||||
elif isinstance(value, (tuple, set)):
|
elif isinstance(value, (tuple, set)):
|
||||||
if isinstance(base_items.get(key), tuple) and list_extend:
|
le = list_extend # assigned for pep8
|
||||||
|
if isinstance(base_items.get(key), tuple) and le:
|
||||||
base_items[key] += tuple(value)
|
base_items[key] += tuple(value)
|
||||||
elif isinstance(base_items.get(key), list) and list_extend:
|
elif isinstance(base_items.get(key), list) and le:
|
||||||
base_items[key].extend(list(value))
|
base_items[key].extend(list(value))
|
||||||
else:
|
else:
|
||||||
base_items[key] = value
|
base_items[key] = value
|
||||||
@ -798,9 +806,11 @@ class ActionModule(ActionBase):
|
|||||||
template_uid = temp_vars['template_uid'] = os.stat(
|
template_uid = temp_vars['template_uid'] = os.stat(
|
||||||
source
|
source
|
||||||
).st_uid
|
).st_uid
|
||||||
except PermissionError:
|
except (PermissionError, FileNotFoundError):
|
||||||
local_task_vars = temp_vars.copy()
|
local_task_vars = temp_vars.copy()
|
||||||
local_task_vars['connection'] = 'local'
|
if not boolean(self._task.args.get('remote_src', False),
|
||||||
|
strict=False):
|
||||||
|
local_task_vars['connection'] = 'local'
|
||||||
stat = self._execute_module(
|
stat = self._execute_module(
|
||||||
module_name='stat',
|
module_name='stat',
|
||||||
module_args=dict(path=source),
|
module_args=dict(path=source),
|
||||||
@ -829,12 +839,14 @@ class ActionModule(ActionBase):
|
|||||||
try:
|
try:
|
||||||
with open(source, 'r') as f:
|
with open(source, 'r') as f:
|
||||||
template_data = to_text(f.read())
|
template_data = to_text(f.read())
|
||||||
except PermissionError:
|
except (PermissionError, FileNotFoundError):
|
||||||
local_temp_vars = task_vars.copy()
|
local_temp_vars = task_vars.copy()
|
||||||
local_temp_vars['connection'] = 'local'
|
if not boolean(self._task.args.get('remote_src', False),
|
||||||
|
strict=False):
|
||||||
|
local_temp_vars['connection'] = 'local'
|
||||||
template_data_slurpee = self._execute_module(
|
template_data_slurpee = self._execute_module(
|
||||||
module_name='slurp',
|
module_name='slurp',
|
||||||
module_args=dict(src=_vars['dest']),
|
module_args=dict(src=source),
|
||||||
task_vars=local_temp_vars
|
task_vars=local_temp_vars
|
||||||
)
|
)
|
||||||
template_data = base64.b64decode(
|
template_data = base64.b64decode(
|
||||||
|
Loading…
Reference in New Issue
Block a user