From d178df8f017193dc6cf9d39e3a7044d57c3867f1 Mon Sep 17 00:00:00 2001 From: Ricardo Carrillo Cruz Date: Mon, 29 Jan 2018 12:03:25 +0100 Subject: [PATCH] Fix edit_config multiline commands on IOS (#35375) * Fix edit_config multiline commands on IOS The current code for multiline commands in IOS is broken: If you pass a dict containing a command, prompt and answer it is seen later as unicode string, but if you do a json.loads it fails as the keys/values are enclosed in single quotes but JSON requires double quotes. Fixes #23539 * Fix pep8 * Use ast literal_eval It's safe to use, as it is just for types and wont execute arbitrary code. --- lib/ansible/plugins/cliconf/ios.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ansible/plugins/cliconf/ios.py b/lib/ansible/plugins/cliconf/ios.py index eee65794dd2..e21ad494589 100644 --- a/lib/ansible/plugins/cliconf/ios.py +++ b/lib/ansible/plugins/cliconf/ios.py @@ -19,6 +19,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type +import ast import re import json @@ -71,7 +72,7 @@ class Cliconf(CliconfBase): def edit_config(self, command): for cmd in chain(['configure terminal'], to_list(command), ['end']): try: - cmd = json.loads(cmd) + cmd = ast.literal_eval(cmd) command = cmd['command'] prompt = cmd['prompt'] answer = cmd['answer']