Move splitter to module_utils so modules can use it and fix command arg splitting

Fixes #8338
pull/8345/head
James Cammarata 10 years ago
parent 912674bd2b
commit e6fa50a306

@ -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…
Cancel
Save