mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Attempt to clean up the munging functions a little.
This commit is contained in:
parent
d97b38ba83
commit
e8aa847e5b
1 changed files with 50 additions and 35 deletions
|
@ -103,17 +103,20 @@ class Task(Base):
|
|||
else:
|
||||
return "%s %s" % (self.action, self._merge_kv(self.args))
|
||||
|
||||
def _parse_kv(self, str):
|
||||
return ansible.utils.parse_kv(str)
|
||||
|
||||
def _merge_kv(self, ds):
|
||||
if ds is None:
|
||||
return ""
|
||||
return ""
|
||||
elif isinstance(ds, basestring):
|
||||
return ds
|
||||
return ds
|
||||
elif instance(ds, dict):
|
||||
buf = ""
|
||||
for (k,v) in ds.iteritems():
|
||||
buf = buf + "%s=%s " % (k,v)
|
||||
buf = buf.strip()
|
||||
return buf
|
||||
buf = ""
|
||||
for (k,v) in ds.iteritems():
|
||||
buf = buf + "%s=%s " % (k,v)
|
||||
buf = buf.strip()
|
||||
return buf
|
||||
|
||||
@staticmethod
|
||||
def load(data, block=None, role=None):
|
||||
|
@ -123,6 +126,39 @@ class Task(Base):
|
|||
def __repr__(self):
|
||||
''' returns a human readable representation of the task '''
|
||||
return "TASK: %s" % self.get_name()
|
||||
|
||||
|
||||
def _munge_action(self, ds, new_ds, k, v):
|
||||
''' take a module name and split into action and args '''
|
||||
if self._action.value is not None or 'action' in ds or 'local_action' in ds:
|
||||
raise AnsibleError("duplicate action in task: %s" % k)
|
||||
new_ds['action'] = k
|
||||
new_ds['args'] = v
|
||||
|
||||
|
||||
def _munge_loop(self, ds, new_ds, k, v):
|
||||
''' take a lookup plugin name and store it correctly '''
|
||||
if self._loop.value is not None:
|
||||
raise AnsibleError("duplicate loop in task: %s" % k)
|
||||
new_ds['loop'] = k
|
||||
new_ds['loop_args'] = v
|
||||
|
||||
def _munge_action2(self, ds, new_ds, k, v, local=False):
|
||||
''' take an old school action/local_action and reformat it '''
|
||||
if isinstance(v, basestring):
|
||||
(module, args) = self._parse_kv(v)
|
||||
new_ds['action'] = module
|
||||
if 'args' in ds:
|
||||
raise AnsibleError("unexpected and redundant 'args'")
|
||||
new_ds['args'] = args
|
||||
if local:
|
||||
if 'delegate_to' in ds:
|
||||
raise AnsbileError("local_action and action conflict")
|
||||
new_ds['delegate_to'] = 'localhost'
|
||||
else:
|
||||
raise AnsibleError("unexpected use of 'action'")
|
||||
else:
|
||||
raise AnsibleError("unexpected use of 'action'")
|
||||
|
||||
def munge(self, ds):
|
||||
'''
|
||||
|
@ -130,41 +166,20 @@ class Task(Base):
|
|||
keep it short.
|
||||
'''
|
||||
|
||||
|
||||
assert isinstance(ds, dict)
|
||||
|
||||
new_ds = dict()
|
||||
for (k,v) in ds.iteritems():
|
||||
|
||||
# if any attributes of the datastructure match a module name
|
||||
# convert it to "module + args"
|
||||
|
||||
if k in module_finder:
|
||||
|
||||
|
||||
if self._action.value is not None or 'action' in ds or 'local_action' in ds:
|
||||
raise AnsibleError("duplicate action in task: %s" % k)
|
||||
|
||||
print "SCANNED: %s" % k
|
||||
new_ds['action'] = k
|
||||
new_ds['args'] = v
|
||||
|
||||
# handle any loops, there can be only one kind of loop
|
||||
|
||||
self._munge_action(ds, new_ds, k, v)
|
||||
elif "with_%s" % k in lookup_finder:
|
||||
if self._loop.value is not None:
|
||||
raise AnsibleError("duplicate loop in task: %s" % k)
|
||||
new_ds['loop'] = k
|
||||
new_ds['loop_args'] = v
|
||||
|
||||
# otherwise send it through straight
|
||||
|
||||
self._munge_loop(new_ds, k, v)
|
||||
elif k == 'action':
|
||||
self._munge_action2(ds, new_ds, k, v)
|
||||
elif k == 'local_action':
|
||||
self._munge_action2(ds, new_ds, k, v, local=True)
|
||||
else:
|
||||
# nothing we need to filter
|
||||
print "PASSING: %s => %s" % (k,v)
|
||||
new_ds[k] = v
|
||||
|
||||
print "NEW_DS=%s" % new_ds
|
||||
return new_ds
|
||||
|
||||
|
||||
|
@ -184,7 +199,7 @@ LEGACY = """
|
|||
if module_name not in module_finder:
|
||||
raise AnsibleError("the specified module '%s' could not be found, check your module path" % module_name)
|
||||
results['_module_name'] = module_name
|
||||
results['_parameters'] = utils.parse_kv(params)
|
||||
results['_parameters'] = self._parse_kv(params)
|
||||
|
||||
if k == 'local_action':
|
||||
if 'delegate_to' in ds:
|
||||
|
|
Loading…
Reference in a new issue