# Returns a generic block of values suitable for inclusion in most states. {% macro sls_block(dict, ind=4) %} {% for key, value in dict.items() %} {{ '-'|indent(ind, True) }} {{ key }}: {{ value|json() }} {% endfor %} {% endmacro %} # Serializes dicts into sequenced data {%- macro serialize(data) -%} {%- if data is mapping -%} {%- set ret = [] -%} {%- for key, value in data.items() -%} {%- set value = serialize(value)|load_json() -%} {%- do ret.append({key: value}) -%} {%- endfor -%} {%- elif data is iterable and data is not string -%} {%- set ret = [] -%} {%- for value in data -%} {%- set value = serialize(value)|load_json() -%} {%- do ret.append(value) -%} {%- endfor -%} {%- else -%} {% set ret = data %} {%- endif -%} {{ ret|json() }} {%- endmacro -%} {%- macro deserialize(data) -%} {%- if data is mapping -%} {%- set ret = odict([]) -%} {%- for key, value in data.items() -%} {%- do ret.update({key: deserialize(value)}) -%} {%- endfor -%} {%- elif data is iterable and data is not string -%} {%- if is_list_skd(data)|int() == 1 -%} {%- set ret = odict([]) -%} {%- for item in data -%} {%- for key, value in item.items() -%} {% do ret.update({key: deserialize(value)}) %} {%- endfor -%} {%- endfor -%} {%- else -%} {%- set ret = [] -%} {%- for item in data -%} {%- do ret.append(deserialize(item)) -%} {%- endfor -%} {%- endif -%} {%- else -%} {% set ret = data %} {%- endif -%} {{ ret }} {%- endmacro -%} # and is not number and is mapping and item|length() == 1 {%- macro is_list_skd(list) -%} {% set ret = 0 %} {%- set skds = {'counter': 0} -%} {%- for item in list if item is mapping and item|length() == 1 -%} {%- do skds.update({'counter': (skds.counter + 1)}) -%} {%- endfor -%} {%- if skds.counter == list|length() -%} {% set ret = 1 %} {%- endif -%} {{ ret }} {%- endmacro -%}