blob: 4e3ae6dc7857ff23e2c9afa8562bf0e77541e266 [file] [log] [blame]
Adam Tenglerb1ebaca2017-05-04 21:06:08 +00001import io
2import json
3import logging
4
Kirill Bespalov4fe0d082017-06-29 19:02:13 +03005import yaml
6
Adam Tenglerb1ebaca2017-05-04 21:06:08 +00007LOG = logging.getLogger(__name__)
8
9
10def __virtual__():
11 return True
12
13
14def rule_list(path, **kwargs):
15 try:
16 with io.open(path, 'r') as file_handle:
Kirill Bespalov4fe0d082017-06-29 19:02:13 +030017 rules = yaml.safe_load(file_handle) or {}
18 rules = {str(k): str(v) for (k, v) in rules.items()}
Adam Tenglerb1ebaca2017-05-04 21:06:08 +000019 except Exception as e:
Kirill Bespalov4fe0d082017-06-29 19:02:13 +030020 msg = "Unable to load policy file %s: %s" % (path, repr(e))
Adam Tenglerb1ebaca2017-05-04 21:06:08 +000021 LOG.debug(msg)
22 rules = {'Error': msg}
23 return rules
24
25
26def rule_delete(name, path, **kwargs):
27 ret = {}
28 rules = __salt__['keystone_policy.rule_list'](path, **kwargs)
29 if 'Error' not in rules:
30 if name not in rules:
31 return ret
32 del rules[name]
33 try:
34 with io.open(path, 'w') as file_handle:
Kirill Bespalov4fe0d082017-06-29 19:02:13 +030035 if path.endswith('json'):
36 serialized = json.dumps(rules, indent=4)
37 else:
38 serialized = yaml.safe_dump(rules, indent=4)
39 file_handle.write(unicode(serialized))
Adam Tenglerb1ebaca2017-05-04 21:06:08 +000040 except Exception as e:
Kirill Bespalov4fe0d082017-06-29 19:02:13 +030041 msg = "Unable to save policy file: %s" % repr(e)
Adam Tenglerb1ebaca2017-05-04 21:06:08 +000042 LOG.error(msg)
43 return {'Error': msg}
44 ret = 'Rule {0} deleted'.format(name)
45 return ret
46
47
48def rule_set(name, rule, path, **kwargs):
49 rules = __salt__['keystone_policy.rule_list'](path, **kwargs)
50 if 'Error' not in rules:
51 if name in rules and rules[name] == rule:
52 return {name: 'Rule %s already exists and is in correct state' % name}
53 rules.update({name: rule})
54 try:
55 with io.open(path, 'w') as file_handle:
Kirill Bespalov4fe0d082017-06-29 19:02:13 +030056 if path.endswith('json'):
57 serialized = json.dumps(rules, indent=4)
58 else:
59 serialized = yaml.safe_dump(rules, indent=4)
60 file_handle.write(unicode(serialized))
Adam Tenglerb1ebaca2017-05-04 21:06:08 +000061 except Exception as e:
Kirill Bespalov4fe0d082017-06-29 19:02:13 +030062 msg = "Unable to save policy file %s: %s" % (path, repr(e))
Adam Tenglerb1ebaca2017-05-04 21:06:08 +000063 LOG.error(msg)
64 return {'Error': msg}
65 return rule_get(name, path, **kwargs)
66 return rules
67
68
69def rule_get(name, path, **kwargs):
70 ret = {}
71 rules = __salt__['keystone_policy.rule_list'](path, **kwargs)
72 if 'Error' in rules:
73 ret['Error'] = rules['Error']
74 elif name in rules:
75 ret[name] = rules.get(name)
76
77 return ret
78