You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
9.0 KiB
211 lines
9.0 KiB
diff --git a/salt/modules/dockercompose.py b/salt/modules/dockercompose.py
|
|
index 61e937536c..0f37e0d43a 100644
|
|
--- a/salt/modules/dockercompose.py
|
|
+++ b/salt/modules/dockercompose.py
|
|
@@ -241,7 +241,7 @@ def __load_docker_compose(path):
|
|
None, None)
|
|
try:
|
|
with salt.utils.files.fopen(file_path, 'r') as fl:
|
|
- loaded = yaml.load(fl)
|
|
+ loaded = yaml.safe_load(fl)
|
|
except EnvironmentError:
|
|
return None, __standardize_result(False,
|
|
'Could not read {0}'.format(file_path),
|
|
@@ -371,7 +371,7 @@ def __load_compose_definitions(path, definition):
|
|
None, None)
|
|
else:
|
|
try:
|
|
- loaded_definition = yaml.load(definition)
|
|
+ loaded_definition = yaml.safe_load(definition)
|
|
except yaml.YAMLError as yerr:
|
|
msg = 'Could not parse {0} {1}'.format(definition, yerr)
|
|
return None, None, __standardize_result(False, msg,
|
|
diff --git a/salt/serializers/yaml.py b/salt/serializers/yaml.py
|
|
index c95b40e48f..2154e5dcab 100644
|
|
--- a/salt/serializers/yaml.py
|
|
+++ b/salt/serializers/yaml.py
|
|
@@ -72,6 +72,7 @@ def serialize(obj, **options):
|
|
'''
|
|
|
|
options.setdefault('Dumper', Dumper)
|
|
+ options.setdefault('default_flow_style', None)
|
|
try:
|
|
response = yaml.dump(obj, **options)
|
|
if response.endswith('\n...\n'):
|
|
diff --git a/salt/serializers/yamlex.py b/salt/serializers/yamlex.py
|
|
index 2e4ba6fb2b..e42634f580 100644
|
|
--- a/salt/serializers/yamlex.py
|
|
+++ b/salt/serializers/yamlex.py
|
|
@@ -182,6 +182,7 @@ def serialize(obj, **options):
|
|
'''
|
|
|
|
options.setdefault('Dumper', Dumper)
|
|
+ options.setdefault('default_flow_style', None)
|
|
try:
|
|
response = yaml.dump(obj, **options)
|
|
if response.endswith('\n...\n'):
|
|
diff --git a/salt/utils/yamldumper.py b/salt/utils/yamldumper.py
|
|
index 9892c87d23..3692ea324a 100644
|
|
--- a/salt/utils/yamldumper.py
|
|
+++ b/salt/utils/yamldumper.py
|
|
@@ -115,6 +115,7 @@ def dump(data, stream=None, **kwargs):
|
|
'''
|
|
if 'allow_unicode' not in kwargs:
|
|
kwargs['allow_unicode'] = True
|
|
+ kwargs.setdefault('default_flow_style', None)
|
|
return yaml.dump(data, stream, **kwargs)
|
|
|
|
|
|
@@ -126,4 +127,5 @@ def safe_dump(data, stream=None, **kwargs):
|
|
'''
|
|
if 'allow_unicode' not in kwargs:
|
|
kwargs['allow_unicode'] = True
|
|
+ kwargs.setdefault('default_flow_style', None)
|
|
return yaml.dump(data, stream, Dumper=SafeOrderedDumper, **kwargs)
|
|
diff --git a/tests/integration/utils/test_win_runas.py b/tests/integration/utils/test_win_runas.py
|
|
index 3042a77991..d4057a4d03 100644
|
|
--- a/tests/integration/utils/test_win_runas.py
|
|
+++ b/tests/integration/utils/test_win_runas.py
|
|
@@ -539,7 +539,7 @@ class RunAsTest(ModuleCase):
|
|
win32serviceutil.StartService('test service')
|
|
wait_for_service('test service')
|
|
with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
|
|
- ret = yaml.load(fp)
|
|
+ ret = yaml.safe_load(fp)
|
|
assert ret['retcode'] == 1, ret
|
|
|
|
@with_system_user('test-runas', on_existing='delete', delete=True,
|
|
@@ -560,7 +560,7 @@ class RunAsTest(ModuleCase):
|
|
win32serviceutil.StartService('test service')
|
|
wait_for_service('test service')
|
|
with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
|
|
- ret = yaml.load(fp)
|
|
+ ret = yaml.safe_load(fp)
|
|
assert ret['retcode'] == 1, ret
|
|
|
|
@with_system_user('test-runas-admin', on_existing='delete', delete=True,
|
|
@@ -581,7 +581,7 @@ class RunAsTest(ModuleCase):
|
|
win32serviceutil.StartService('test service')
|
|
wait_for_service('test service')
|
|
with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
|
|
- ret = yaml.load(fp)
|
|
+ ret = yaml.safe_load(fp)
|
|
assert ret['retcode'] == 0, ret
|
|
|
|
@with_system_user('test-runas-admin', on_existing='delete', delete=True,
|
|
@@ -602,7 +602,7 @@ class RunAsTest(ModuleCase):
|
|
win32serviceutil.StartService('test service')
|
|
wait_for_service('test service')
|
|
with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
|
|
- ret = yaml.load(fp)
|
|
+ ret = yaml.safe_load(fp)
|
|
assert ret['retcode'] == 0, ret
|
|
|
|
def test_runas_service_system_user(self):
|
|
@@ -621,5 +621,5 @@ class RunAsTest(ModuleCase):
|
|
win32serviceutil.StartService('test service')
|
|
wait_for_service('test service')
|
|
with salt.utils.files.fopen(RUNAS_OUT, 'r') as fp:
|
|
- ret = yaml.load(fp)
|
|
+ ret = yaml.safe_load(fp)
|
|
assert ret['retcode'] == 0, ret
|
|
diff --git a/tests/unit/serializers/test_serializers.py b/tests/unit/serializers/test_serializers.py
|
|
index 3bf42b67d7..ea42d617d7 100644
|
|
--- a/tests/unit/serializers/test_serializers.py
|
|
+++ b/tests/unit/serializers/test_serializers.py
|
|
@@ -68,9 +68,24 @@ class TestSerializers(TestCase):
|
|
serialized = yamlex.serialize(data)
|
|
assert serialized == '{foo: bar}', serialized
|
|
|
|
+ serialized = yamlex.serialize(data, default_flow_style=False)
|
|
+ assert serialized == 'foo: bar', serialized
|
|
+
|
|
deserialized = yamlex.deserialize(serialized)
|
|
assert deserialized == data, deserialized
|
|
|
|
+ serialized = yaml.serialize(data)
|
|
+ assert serialized == '{foo: bar}', serialized
|
|
+
|
|
+ deserialized = yaml.deserialize(serialized)
|
|
+ assert deserialized == data, deserialized
|
|
+
|
|
+ serialized = yaml.serialize(data, default_flow_style=False)
|
|
+ assert serialized == 'foo: bar', serialized
|
|
+
|
|
+ deserialized = yaml.deserialize(serialized)
|
|
+ assert deserialized == data, deserialized
|
|
+
|
|
@skipIf(not yamlex.available, SKIP_MESSAGE % 'sls')
|
|
def test_serialize_complex_sls(self):
|
|
data = OrderedDict([
|
|
@@ -84,6 +99,12 @@ class TestSerializers(TestCase):
|
|
deserialized = yamlex.deserialize(serialized)
|
|
assert deserialized == data, deserialized
|
|
|
|
+ serialized = yaml.serialize(data)
|
|
+ assert serialized == '{bar: 2, baz: true, foo: 1}', serialized
|
|
+
|
|
+ deserialized = yaml.deserialize(serialized)
|
|
+ assert deserialized == data, deserialized
|
|
+
|
|
@skipIf(not yaml.available, SKIP_MESSAGE % 'yaml')
|
|
@skipIf(not yamlex.available, SKIP_MESSAGE % 'sls')
|
|
def test_compare_sls_vs_yaml(self):
|
|
diff --git a/tests/unit/utils/test_schema.py b/tests/unit/utils/test_schema.py
|
|
index 677cd0778b..5c2f1fd8fd 100644
|
|
--- a/tests/unit/utils/test_schema.py
|
|
+++ b/tests/unit/utils/test_schema.py
|
|
@@ -5,6 +5,7 @@
|
|
|
|
# Import python libs
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
+import sys
|
|
import copy
|
|
|
|
# Import Salt Testing Libs
|
|
@@ -506,7 +507,7 @@ class ConfigTestCase(TestCase):
|
|
{'personal_access_token': 'foo'},
|
|
Requirements.serialize()
|
|
)
|
|
- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
|
|
+ self.assertIn("'ssh_key_file' is a required property", excinfo.exception.message)
|
|
|
|
def test_boolean_config(self):
|
|
item = schema.BooleanItem(title='Hungry', description='Are you hungry?')
|
|
@@ -1730,7 +1731,10 @@ class ConfigTestCase(TestCase):
|
|
|
|
with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
|
|
jsonschema.validate({'item': {'sides': '4', 'color': 'blue'}}, TestConf.serialize())
|
|
- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
|
|
+ if sys.hexversion >= 0x03000000:
|
|
+ self.assertIn("'4' is not of type 'boolean'", excinfo.exception.message)
|
|
+ else:
|
|
+ self.assertIn("u'4' is not of type u'boolean'", excinfo.exception.message)
|
|
|
|
class TestConf(schema.Schema):
|
|
item = schema.DictItem(
|
|
@@ -1833,7 +1837,10 @@ class ConfigTestCase(TestCase):
|
|
|
|
with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
|
|
jsonschema.validate({'item': ['maybe']}, TestConf.serialize())
|
|
- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
|
|
+ if sys.hexversion >= 0x03000000:
|
|
+ self.assertIn("'maybe' is not one of ['yes']", excinfo.exception.message)
|
|
+ else:
|
|
+ self.assertIn("u'maybe' is not one of [u'yes']", excinfo.exception.message)
|
|
|
|
with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
|
|
jsonschema.validate({'item': 2}, TestConf.serialize())
|
|
@@ -1885,7 +1892,10 @@ class ConfigTestCase(TestCase):
|
|
|
|
with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
|
|
jsonschema.validate({'item': ['maybe']}, TestConf.serialize())
|
|
- self.assertIn('is not valid under any of the given schemas', excinfo.exception.message)
|
|
+ if sys.hexversion >= 0x03000000:
|
|
+ self.assertIn("'maybe' is not one of ['yes']", excinfo.exception.message)
|
|
+ else:
|
|
+ self.assertIn("u'maybe' is not one of [u'yes']", excinfo.exception.message)
|
|
|
|
with self.assertRaises(jsonschema.exceptions.ValidationError) as excinfo:
|
|
jsonschema.validate({'item': 2}, TestConf.serialize())
|