blob: f20c3019e4377f661d6ff40282796b4fa79eb768 [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:
Yuriy Taraday6618fb92017-08-11 17:11:48 +040019 err = __salt__['helm.release_create'](
Yuriy Taradayf169d822017-08-14 13:40:21 +040020 name, chart_name, namespace, version, values)
Yuriy Taraday6618fb92017-08-11 17:11:48 +040021 if err:
22 return failure(name, err)
Yuriy Taraday76126042017-08-11 15:27:41 +040023 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)
Yuriy Taraday6618fb92017-08-11 17:11:48 +040031 err = __salt__['helm.release_upgrade'](
Yuriy Taradayf169d822017-08-14 13:40:21 +040032 name, chart_name, namespace, version, values)
Yuriy Taraday6618fb92017-08-11 17:11:48 +040033 if err:
34 return failure(name, err)
Yuriy Taraday76126042017-08-11 15:27:41 +040035
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 }
Yuriy Taraday6618fb92017-08-11 17:11:48 +040066 err = __salt__['helm.release_delete'](name)
67 if err:
68 return failure(name, err)
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 }