blob: 464e6d6b0aa91db15d5284fd23d4ae2eab32af4f [file] [log] [blame]
Yuriy Taradayaeeaa742017-06-28 15:54:56 +04001import difflib
Yuriy Taraday84a21032017-06-27 11:13:16 +04002
Yuriy Taradayaeeaa742017-06-28 15:54:56 +04003from salt.serializers import yaml
4
Yuriy Taraday76126042017-08-11 15:27:41 +04005
6def failure(name, message):
7 return {
8 'name': name,
9 'changes': {},
10 'result': False,
11 'comment': message,
12 }
13
14
Yuriy Taraday6f826492017-08-16 12:40:24 +040015def present(name, chart_name, namespace, version=None, values=None,
Yuriy Taradayf9dd0122017-08-17 16:26:16 +040016 tiller_namespace='kube-system', tiller_host=None,
17 kube_config=None):
Yuriy Taraday6f826492017-08-16 12:40:24 +040018 tiller_args = {
19 'tiller_namespace': tiller_namespace,
20 'tiller_host': tiller_host,
Yuriy Taradayf9dd0122017-08-17 16:26:16 +040021 'kube_config': kube_config,
Yuriy Taraday6f826492017-08-16 12:40:24 +040022 }
23 exists = __salt__['helm.release_exists'](name, namespace, **tiller_args)
Yuriy Taraday84a21032017-06-27 11:13:16 +040024 if not exists:
Yuriy Taraday6618fb92017-08-11 17:11:48 +040025 err = __salt__['helm.release_create'](
Yuriy Taraday6f826492017-08-16 12:40:24 +040026 name, chart_name, namespace, version, values, **tiller_args)
Yuriy Taraday6618fb92017-08-11 17:11:48 +040027 if err:
28 return failure(name, err)
Yuriy Taraday76126042017-08-11 15:27:41 +040029 return {
30 'name': name,
31 'changes': {name: 'CREATED'},
32 'result': True,
33 'comment': 'Release "{}" was created'.format(name),
34 }
35
Yuriy Taraday6f826492017-08-16 12:40:24 +040036 old_values = __salt__['helm.get_values'](name, **tiller_args)
Yuriy Taraday6618fb92017-08-11 17:11:48 +040037 err = __salt__['helm.release_upgrade'](
Yuriy Taraday6f826492017-08-16 12:40:24 +040038 name, chart_name, namespace, version, values, **tiller_args)
Yuriy Taraday6618fb92017-08-11 17:11:48 +040039 if err:
40 return failure(name, err)
Yuriy Taraday76126042017-08-11 15:27:41 +040041
Yuriy Taraday6f826492017-08-16 12:40:24 +040042 new_values = __salt__['helm.get_values'](name, **tiller_args)
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040043 if new_values == old_values:
44 return {
45 'name': name,
46 'changes': {},
47 'result': True,
48 'comment': 'Release "{}" already exists'.format(name),
49 }
Yuriy Taraday76126042017-08-11 15:27:41 +040050
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040051 old_str = yaml.serialize(old_values, default_flow_style=False)
52 new_str = yaml.serialize(new_values, default_flow_style=False)
53 diff = difflib.unified_diff(
54 old_str.split('\n'), new_str.split('\n'), lineterm='')
Yuriy Taraday84a21032017-06-27 11:13:16 +040055 return {
56 'name': name,
Yuriy Taradayaeeaa742017-06-28 15:54:56 +040057 'changes': {'values': '\n'.join(diff)},
Yuriy Taraday84a21032017-06-27 11:13:16 +040058 'result': True,
Yuriy Taraday3c3f63c2017-06-29 20:46:20 +040059 'comment': 'Release "{}" was updated'.format(name),
Yuriy Taraday84a21032017-06-27 11:13:16 +040060 }
Yuriy Taraday893b3fb2017-07-03 16:22:57 +040061
62
Yuriy Taradayf9dd0122017-08-17 16:26:16 +040063def absent(name, namespace, tiller_namespace='kube-system', tiller_host=None,
64 kube_config=None):
Yuriy Taraday6f826492017-08-16 12:40:24 +040065 tiller_args = {
66 'tiller_namespace': tiller_namespace,
67 'tiller_host': tiller_host,
Yuriy Taradayf9dd0122017-08-17 16:26:16 +040068 'kube_config': kube_config,
Yuriy Taraday6f826492017-08-16 12:40:24 +040069 }
70 exists = __salt__['helm.release_exists'](name, namespace, **tiller_args)
Yuriy Taraday893b3fb2017-07-03 16:22:57 +040071 if not exists:
72 return {
73 'name': name,
74 'changes': {},
75 'result': True,
76 'comment': 'Release "{}" doesn\'t exist'.format(name),
77 }
Yuriy Taraday6f826492017-08-16 12:40:24 +040078 err = __salt__['helm.release_delete'](name, **tiller_args)
Yuriy Taraday6618fb92017-08-11 17:11:48 +040079 if err:
80 return failure(name, err)
Yuriy Taraday893b3fb2017-07-03 16:22:57 +040081 return {
82 'name': name,
83 'changes': {name: 'DELETED'},
84 'result': True,
85 'comment': 'Release "{}" was deleted'.format(name),
86 }