blob: b3b4faceee416b2341e449e82616c4d8979f269b [file] [log] [blame]
Yuriy Taradayaeeaa742017-06-28 15:54:56 +04001import difflib
Yuriy Taraday84a21032017-06-27 11:13:16 +04002import logging
3
Yuriy Taradayaeeaa742017-06-28 15:54:56 +04004from salt.serializers import yaml
5
Yuriy Taraday76126042017-08-11 15:27:41 +04006
7def failure(name, message):
8 return {
9 'name': name,
10 'changes': {},
11 'result': False,
12 'comment': message,
13 }
14
15
Yuriy Taraday66e61df2017-08-11 15:14:26 +040016def present(name, chart_name, namespace, version=None, values=None):
17 exists = __salt__['helm.release_exists'](name, namespace)
Yuriy Taraday84a21032017-06-27 11:13:16 +040018 if not exists:
19 result = __salt__['helm.release_create'](
Yuriy Taraday66e61df2017-08-11 15:14:26 +040020 name, namespace, chart_name, version, values)
Yuriy Taraday76126042017-08-11 15:27:41 +040021 if not result:
22 return failure(name, 'Failed to create release "{}"'.format(name))
23 return {
24 'name': name,
25 'changes': {name: 'CREATED'},
26 'result': True,
27 'comment': 'Release "{}" was created'.format(name),
28 }
29
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040030 old_values = __salt__['helm.get_values'](name)
31 result = __salt__['helm.release_upgrade'](
Yuriy Taraday66e61df2017-08-11 15:14:26 +040032 name, namespace, chart_name, version, values)
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040033 if not result:
Yuriy Taraday76126042017-08-11 15:27:41 +040034 return failure(name, 'Failed to create release "{}"'.format(name))
35
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040036 new_values = __salt__['helm.get_values'](name)
37 if new_values == old_values:
38 return {
39 'name': name,
40 'changes': {},
41 'result': True,
42 'comment': 'Release "{}" already exists'.format(name),
43 }
Yuriy Taraday76126042017-08-11 15:27:41 +040044
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040045 old_str = yaml.serialize(old_values, default_flow_style=False)
46 new_str = yaml.serialize(new_values, default_flow_style=False)
47 diff = difflib.unified_diff(
48 old_str.split('\n'), new_str.split('\n'), lineterm='')
Yuriy Taraday84a21032017-06-27 11:13:16 +040049 return {
50 'name': name,
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040051 'changes': {'values': '\n'.join(diff)},
Yuriy Taraday84a21032017-06-27 11:13:16 +040052 'result': True,
Yuriy Taraday3c3f63c2017-06-29 20:46:20 +040053 'comment': 'Release "{}" was updated'.format(name),
Yuriy Taraday84a21032017-06-27 11:13:16 +040054 }
Yuriy Taraday893b3fb2017-07-03 16:22:57 +040055
56
Yuriy Taraday66e61df2017-08-11 15:14:26 +040057def absent(name, namespace):
58 exists = __salt__['helm.release_exists'](name, namespace)
Yuriy Taraday893b3fb2017-07-03 16:22:57 +040059 if not exists:
60 return {
61 'name': name,
62 'changes': {},
63 'result': True,
64 'comment': 'Release "{}" doesn\'t exist'.format(name),
65 }
66 result = __salt__['helm.release_delete'](name)
67 if not result:
Yuriy Taraday76126042017-08-11 15:27:41 +040068 return failure(name, 'Failed to delete release "{}"'.format(name))
Yuriy Taraday893b3fb2017-07-03 16:22:57 +040069 return {
70 'name': name,
71 'changes': {name: 'DELETED'},
72 'result': True,
73 'comment': 'Release "{}" was deleted'.format(name),
74 }