mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 17:50:20 +00:00
Add support for encrypted tag
This commit is contained in:
parent
c1ca1c4816
commit
2ccabe296e
2 changed files with 20 additions and 2 deletions
|
@ -77,10 +77,25 @@ def serialize(obj, **options):
|
|||
raise SerializationError(error)
|
||||
|
||||
|
||||
class EncryptedString(str):
|
||||
|
||||
yaml_tag = u'!encrypted'
|
||||
|
||||
@staticmethod
|
||||
def yaml_constructor(loader, tag, node):
|
||||
return EncryptedString(loader.construct_scalar(node))
|
||||
|
||||
@staticmethod
|
||||
def yaml_dumper(dumper, data):
|
||||
return dumper.represent_scalar(EncryptedString.yaml_tag, data.__str__())
|
||||
|
||||
|
||||
class Loader(BaseLoader): # pylint: disable=W0232
|
||||
'''Overwrites Loader as not for pollute legacy Loader'''
|
||||
pass
|
||||
|
||||
|
||||
Loader.add_multi_constructor(EncryptedString.yaml_tag, EncryptedString.yaml_constructor)
|
||||
Loader.add_multi_constructor('tag:yaml.org,2002:null', Loader.construct_yaml_null)
|
||||
Loader.add_multi_constructor('tag:yaml.org,2002:bool', Loader.construct_yaml_bool)
|
||||
Loader.add_multi_constructor('tag:yaml.org,2002:int', Loader.construct_yaml_int)
|
||||
|
@ -100,6 +115,7 @@ class Dumper(BaseDumper): # pylint: disable=W0232
|
|||
'''Overwrites Dumper as not for pollute legacy Dumper'''
|
||||
pass
|
||||
|
||||
Dumper.add_multi_representer(EncryptedString, EncryptedString.yaml_dumper)
|
||||
Dumper.add_multi_representer(type(None), Dumper.represent_none)
|
||||
Dumper.add_multi_representer(str, Dumper.represent_str)
|
||||
if six.PY2:
|
||||
|
|
|
@ -18,6 +18,7 @@ import salt.serializers.yaml as yaml
|
|||
import salt.serializers.yamlex as yamlex
|
||||
import salt.serializers.msgpack as msgpack
|
||||
import salt.serializers.python as python
|
||||
from salt.serializers.yaml import EncryptedString
|
||||
from salt.serializers import SerializationError
|
||||
from salt.utils.odict import OrderedDict
|
||||
|
||||
|
@ -43,10 +44,11 @@ class TestSerializers(TestCase):
|
|||
@skipIf(not yaml.available, SKIP_MESSAGE % 'yaml')
|
||||
def test_serialize_yaml(self):
|
||||
data = {
|
||||
"foo": "bar"
|
||||
"foo": "bar",
|
||||
"encrypted_data": EncryptedString("foo")
|
||||
}
|
||||
serialized = yaml.serialize(data)
|
||||
assert serialized == '{foo: bar}', serialized
|
||||
assert serialized == '{encrypted_data: !encrypted foo, foo: bar}', serialized
|
||||
|
||||
deserialized = yaml.deserialize(serialized)
|
||||
assert deserialized == data, deserialized
|
||||
|
|
Loading…
Add table
Reference in a new issue