Move splitter to module_utils so modules can use it and fix command arg splitting
Fixes #8338
This commit is contained in:
parent
912674bd2b
commit
e6fa50a306
6 changed files with 9 additions and 11 deletions
|
@ -21,6 +21,7 @@ from ansible.utils.template import template
|
||||||
from ansible import utils
|
from ansible import utils
|
||||||
from ansible import errors
|
from ansible import errors
|
||||||
from ansible.playbook.task import Task
|
from ansible.playbook.task import Task
|
||||||
|
from ansible.module_utils.splitter import split_args, unquote
|
||||||
import ansible.constants as C
|
import ansible.constants as C
|
||||||
import pipes
|
import pipes
|
||||||
import shlex
|
import shlex
|
||||||
|
@ -524,7 +525,7 @@ class Play(object):
|
||||||
task_vars['_original_file'] = original_file
|
task_vars['_original_file'] = original_file
|
||||||
|
|
||||||
if 'include' in x:
|
if 'include' in x:
|
||||||
tokens = utils.splitter.split_args(str(x['include']))
|
tokens = split_args(str(x['include']))
|
||||||
included_additional_conditions = list(additional_conditions)
|
included_additional_conditions = list(additional_conditions)
|
||||||
include_vars = {}
|
include_vars = {}
|
||||||
for k in x:
|
for k in x:
|
||||||
|
@ -573,7 +574,7 @@ class Play(object):
|
||||||
mv = task_vars.copy()
|
mv = task_vars.copy()
|
||||||
for t in tokens[1:]:
|
for t in tokens[1:]:
|
||||||
(k,v) = t.split("=", 1)
|
(k,v) = t.split("=", 1)
|
||||||
v = utils.splitter.unquote(v)
|
v = unquote(v)
|
||||||
mv[k] = template(self.basedir, v, mv)
|
mv[k] = template(self.basedir, v, mv)
|
||||||
dirname = self.basedir
|
dirname = self.basedir
|
||||||
if original_file:
|
if original_file:
|
||||||
|
|
|
@ -47,7 +47,7 @@ import connection
|
||||||
from return_data import ReturnData
|
from return_data import ReturnData
|
||||||
from ansible.callbacks import DefaultRunnerCallbacks, vv
|
from ansible.callbacks import DefaultRunnerCallbacks, vv
|
||||||
from ansible.module_common import ModuleReplacer
|
from ansible.module_common import ModuleReplacer
|
||||||
from ansible.utils.splitter import split_args
|
from ansible.module_utils.splitter import split_args
|
||||||
|
|
||||||
module_replacer = ModuleReplacer(strip_comments=False)
|
module_replacer = ModuleReplacer(strip_comments=False)
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ from ansible import __version__
|
||||||
from ansible.utils.display_functions import *
|
from ansible.utils.display_functions import *
|
||||||
from ansible.utils.plugins import *
|
from ansible.utils.plugins import *
|
||||||
from ansible.callbacks import display
|
from ansible.callbacks import display
|
||||||
from ansible.utils.splitter import split_args, unquote
|
from ansible.module_utils.splitter import split_args, unquote
|
||||||
import ansible.constants as C
|
import ansible.constants as C
|
||||||
import ast
|
import ast
|
||||||
import time
|
import time
|
||||||
|
|
|
@ -186,6 +186,7 @@ def main():
|
||||||
|
|
||||||
# import module snippets
|
# import module snippets
|
||||||
from ansible.module_utils.basic import *
|
from ansible.module_utils.basic import *
|
||||||
|
from ansible.module_utils.splitter import *
|
||||||
|
|
||||||
# only the command module should ever need to do this
|
# only the command module should ever need to do this
|
||||||
# everything else should be simple key=value
|
# everything else should be simple key=value
|
||||||
|
@ -211,18 +212,14 @@ class CommandModule(AnsibleModule):
|
||||||
args = args.replace("#USE_SHELL", "")
|
args = args.replace("#USE_SHELL", "")
|
||||||
params['shell'] = True
|
params['shell'] = True
|
||||||
|
|
||||||
# use shlex to split up the args, while being careful to preserve
|
items = split_args(args)
|
||||||
# single quotes so they're not removed accidentally
|
|
||||||
lexer = shlex.shlex(args)
|
|
||||||
lexer.whitespace = '\t '
|
|
||||||
lexer.whitespace_split = True
|
|
||||||
items = list(lexer)
|
|
||||||
|
|
||||||
for x in items:
|
for x in items:
|
||||||
quoted = x.startswith('"') and x.endswith('"') or x.startswith("'") and x.endswith("'")
|
quoted = x.startswith('"') and x.endswith('"') or x.startswith("'") and x.endswith("'")
|
||||||
if '=' in x and not quoted:
|
if '=' in x and not quoted:
|
||||||
# check to see if this is a special parameter for the command
|
# check to see if this is a special parameter for the command
|
||||||
k, v = x.split('=', 1)
|
k, v = x.split('=', 1)
|
||||||
|
v = unquote(v)
|
||||||
# because we're not breaking out quotes in the shlex split
|
# because we're not breaking out quotes in the shlex split
|
||||||
# above, the value of the k=v pair may still be quoted. If
|
# above, the value of the k=v pair may still be quoted. If
|
||||||
# so, remove them.
|
# so, remove them.
|
||||||
|
|
|
@ -17,7 +17,7 @@ import ansible.utils
|
||||||
import ansible.errors
|
import ansible.errors
|
||||||
import ansible.constants as C
|
import ansible.constants as C
|
||||||
import ansible.utils.template as template2
|
import ansible.utils.template as template2
|
||||||
from ansible.utils.splitter import split_args
|
from ansible.module_utils.splitter import split_args
|
||||||
|
|
||||||
from ansible import __version__
|
from ansible import __version__
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue