New commands for managing K8s cluster and repos
[osm/osmclient.git] / osmclient / sol005 / k8scluster.py
1 #
2 # Licensed under the Apache License, Version 2.0 (the "License"); you may
3 # not use this file except in compliance with the License. You may obtain
4 # a copy of the License at
5 #
6 # http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
10 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
11 # License for the specific language governing permissions and limitations
12 # under the License.
13 #
14
15 """
16 OSM K8s cluster API handling
17 """
18
19 from osmclient.common import utils
20 from osmclient.common.exceptions import ClientException
21 from osmclient.common.exceptions import NotFound
22 import json
23
24 class K8scluster(object):
25 def __init__(self, http=None, client=None):
26 self._http = http
27 self._client = client
28 self._apiName = '/admin'
29 self._apiVersion = '/v1'
30 self._apiResource = '/k8sclusters'
31 self._apiBase = '{}{}{}'.format(self._apiName,
32 self._apiVersion, self._apiResource)
33
34 def create(self, name, k8s_cluster):
35
36 def get_vim_account_id(vim_account):
37 vim = self._client.vim.get(vim_account)
38 if vim is None:
39 raise NotFound("cannot find vim account '{}'".format(vim_account))
40 return vim['_id']
41
42 self._client.get_token()
43 k8s_cluster['vim_account'] = get_vim_account_id(k8s_cluster['vim_account'])
44 http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
45 postfields_dict=k8s_cluster)
46 #print 'HTTP CODE: {}'.format(http_code)
47 #print 'RESP: {}'.format(resp)
48 if http_code in (200, 201, 202, 204):
49 if resp:
50 resp = json.loads(resp)
51 if not resp or 'id' not in resp:
52 raise ClientException('unexpected response from server - {}'.format(
53 resp))
54 print(resp['id'])
55 else:
56 msg = ""
57 if resp:
58 try:
59 msg = json.loads(resp)
60 except ValueError:
61 msg = resp
62 raise ClientException("failed to add K8s cluster {} - {}".format(name, msg))
63
64 def update(self, name, k8s_cluster):
65 self._client.get_token()
66 cluster = self.get(name)
67 http_code, resp = self._http.put_cmd(endpoint='{}/{}'.format(self._apiBase,cluster['_id']),
68 postfields_dict=k8s_cluster)
69 # print 'HTTP CODE: {}'.format(http_code)
70 # print 'RESP: {}'.format(resp)
71 if http_code in (200, 201, 202, 204):
72 pass
73 else:
74 msg = ""
75 if resp:
76 try:
77 msg = json.loads(resp)
78 except ValueError:
79 msg = resp
80 raise ClientException("failed to update K8s cluster {} - {}".format(name, msg))
81
82 def get_id(self, name):
83 """Returns a K8s cluster id from a K8s cluster name
84 """
85 for cluster in self.list():
86 if name == cluster['name']:
87 return cluster['_id']
88 raise NotFound("K8s cluster {} not found".format(name))
89
90 def delete(self, name, force=False):
91 self._client.get_token()
92 cluster_id = name
93 if not utils.validate_uuid4(name):
94 cluster_id = self.get_id(name)
95 querystring = ''
96 if force:
97 querystring = '?FORCE=True'
98 http_code, resp = self._http.delete_cmd('{}/{}{}'.format(self._apiBase,
99 cluster_id, querystring))
100 #print 'HTTP CODE: {}'.format(http_code)
101 #print 'RESP: {}'.format(resp)
102 if http_code == 202:
103 print('Deletion in progress')
104 elif http_code == 204:
105 print('Deleted')
106 else:
107 msg = ""
108 if resp:
109 try:
110 msg = json.loads(resp)
111 except ValueError:
112 msg = resp
113 raise ClientException("failed to delete K8s cluster {} - {}".format(name, msg))
114
115 def list(self, filter=None):
116 """Returns a list of K8s clusters
117 """
118 self._client.get_token()
119 filter_string = ''
120 if filter:
121 filter_string = '?{}'.format(filter)
122 resp = self._http.get_cmd('{}{}'.format(self._apiBase,filter_string))
123 if resp:
124 return resp
125 return list()
126
127 def get(self, name):
128 """Returns a K8s cluster based on name or id
129 """
130 self._client.get_token()
131 cluster_id = name
132 if not utils.validate_uuid4(name):
133 cluster_id = self.get_id(name)
134 resp = self._http.get_cmd('{}/{}'.format(self._apiBase,cluster_id))
135 if not resp or '_id' not in resp:
136 raise ClientException('failed to get K8s cluster info: '.format(resp))
137 else:
138 return resp
139 raise NotFound("K8s cluster {} not found".format(name))
140