blob: 2d34e0622b11fed910a885af44728cccbc595f05 [file] [log] [blame]
Dmitry Ukovf58264b2017-04-20 23:08:42 +02001#!/usr/bin/env python
2'''
3Management of policy.json
4=========================
5
6Merge user defined hash to policy.json
7--------------------------------------
8
9.. code-block:: yaml
10
11/etc/keystone/policy.json:
12 keystone_policy.present:
13 - override_data:
14 override_key: override_value
15 - formatter: json
16
17'''
18import logging
19import json
20
21log = logging.getLogger(__name__)
22
23JSON_LOCATION = '/etc/keystone/policy.json'
24
25
26def _deep_merge(dct, merge_dct):
27 for k, v in merge_dct.iteritems():
28 if (k in dct and isinstance(dct[k], dict)):
29 _deep_merge(dct[k], merge_dct[k])
30 else:
31 dct[k] = merge_dct[k]
32
33
34def present(name, override_data={}, **kwargs):
35 '''
36 Ensures that given key present in policy.json file. This is a wrapper
37 around file.serialize state with additional argument: override_data.
38 Rest parameters of file.serialize can be safely used as well.
39 Function reads contents of existing policy.json file into a python
40 dictionary. User defined data populated to this dictionary using deep
41 merge procedure.
42
43 :param name: Name of the resource
44 :param override_data: User defined data with overrides
45 '''
46 with open(JSON_LOCATION) as policy_json:
47 json_content = json.load(policy_json)
48
49 _deep_merge(json_content, override_data)
50
51 kwargs['dataset'] = json_content
52 ret = __states__['file.serialize']('/etc/keystone/policy.json', **kwargs)
53 return ret