blob: 0b99a3793ed53f91f0891362926c4867c1e86fae [file] [log] [blame]
garciadeblase79f0ca2019-11-05 00:40:11 +01001#
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"""
16OSM K8s cluster API handling
17"""
18
19from osmclient.common import utils
garciadeblase79f0ca2019-11-05 00:40:11 +010020from osmclient.common.exceptions import NotFound
tiernobd39b092020-01-21 09:27:09 +000021from osmclient.common.exceptions import ClientException
garciadeblase79f0ca2019-11-05 00:40:11 +010022import json
23
beierlm95686bb2021-03-23 16:26:45 -040024
garciadeblase79f0ca2019-11-05 00:40:11 +010025class K8scluster(object):
26 def __init__(self, http=None, client=None):
27 self._http = http
28 self._client = client
beierlm95686bb2021-03-23 16:26:45 -040029 self._apiName = "/admin"
30 self._apiVersion = "/v1"
31 self._apiResource = "/k8sclusters"
32 self._apiBase = "{}{}{}".format(
33 self._apiName, self._apiVersion, self._apiResource
34 )
garciadeblase79f0ca2019-11-05 00:40:11 +010035
36 def create(self, name, k8s_cluster):
garciadeblase79f0ca2019-11-05 00:40:11 +010037 def get_vim_account_id(vim_account):
38 vim = self._client.vim.get(vim_account)
39 if vim is None:
40 raise NotFound("cannot find vim account '{}'".format(vim_account))
beierlm95686bb2021-03-23 16:26:45 -040041 return vim["_id"]
garciadeblase79f0ca2019-11-05 00:40:11 +010042
43 self._client.get_token()
beierlm95686bb2021-03-23 16:26:45 -040044 k8s_cluster["vim_account"] = get_vim_account_id(k8s_cluster["vim_account"])
45 http_code, resp = self._http.post_cmd(
46 endpoint=self._apiBase, postfields_dict=k8s_cluster
47 )
48 # print 'HTTP CODE: {}'.format(http_code)
49 # print 'RESP: {}'.format(resp)
50 # if http_code in (200, 201, 202, 204):
pinoa70d6f182019-12-12 12:10:27 +010051 if resp:
52 resp = json.loads(resp)
beierlm95686bb2021-03-23 16:26:45 -040053 if not resp or "id" not in resp:
54 raise ClientException("unexpected response from server - {}".format(resp))
55 print(resp["id"])
56 # else:
pinoa70d6f182019-12-12 12:10:27 +010057 # msg = ""
58 # if resp:
59 # try:
60 # msg = json.loads(resp)
61 # except ValueError:
62 # msg = resp
63 # raise ClientException("failed to add K8s cluster {} - {}".format(name, msg))
garciadeblase79f0ca2019-11-05 00:40:11 +010064
65 def update(self, name, k8s_cluster):
66 self._client.get_token()
67 cluster = self.get(name)
beierlm95686bb2021-03-23 16:26:45 -040068 http_code, resp = self._http.put_cmd(
69 endpoint="{}/{}".format(self._apiBase, cluster["_id"]),
70 postfields_dict=k8s_cluster,
71 )
garciadeblase79f0ca2019-11-05 00:40:11 +010072 # print 'HTTP CODE: {}'.format(http_code)
73 # print 'RESP: {}'.format(resp)
beierlm95686bb2021-03-23 16:26:45 -040074 # if http_code in (200, 201, 202, 204):
tiernobd39b092020-01-21 09:27:09 +000075 # pass
beierlm95686bb2021-03-23 16:26:45 -040076 # else:
pinoa70d6f182019-12-12 12:10:27 +010077 # msg = ""
78 # if resp:
79 # try:
80 # msg = json.loads(resp)
81 # except ValueError:
82 # msg = resp
83 # raise ClientException("failed to update K8s cluster {} - {}".format(name, msg))
garciadeblase79f0ca2019-11-05 00:40:11 +010084
85 def get_id(self, name):
beierlm95686bb2021-03-23 16:26:45 -040086 """Returns a K8s cluster id from a K8s cluster name"""
garciadeblase79f0ca2019-11-05 00:40:11 +010087 for cluster in self.list():
beierlm95686bb2021-03-23 16:26:45 -040088 if name == cluster["name"]:
89 return cluster["_id"]
garciadeblase79f0ca2019-11-05 00:40:11 +010090 raise NotFound("K8s cluster {} not found".format(name))
91
92 def delete(self, name, force=False):
93 self._client.get_token()
94 cluster_id = name
95 if not utils.validate_uuid4(name):
96 cluster_id = self.get_id(name)
beierlm95686bb2021-03-23 16:26:45 -040097 querystring = ""
garciadeblase79f0ca2019-11-05 00:40:11 +010098 if force:
beierlm95686bb2021-03-23 16:26:45 -040099 querystring = "?FORCE=True"
100 http_code, resp = self._http.delete_cmd(
101 "{}/{}{}".format(self._apiBase, cluster_id, querystring)
102 )
103 # print 'HTTP CODE: {}'.format(http_code)
104 # print 'RESP: {}'.format(resp)
garciadeblase79f0ca2019-11-05 00:40:11 +0100105 if http_code == 202:
beierlm95686bb2021-03-23 16:26:45 -0400106 print("Deletion in progress")
garciadeblase79f0ca2019-11-05 00:40:11 +0100107 elif http_code == 204:
beierlm95686bb2021-03-23 16:26:45 -0400108 print("Deleted")
garciadeblase79f0ca2019-11-05 00:40:11 +0100109 else:
tiernobd39b092020-01-21 09:27:09 +0000110 msg = resp or ""
beierlm95686bb2021-03-23 16:26:45 -0400111 # if resp:
112 # try:
113 # msg = json.loads(resp)
114 # except ValueError:
115 # msg = resp
116 raise ClientException(
117 "failed to delete K8s cluster {} - {}".format(name, msg)
118 )
garciadeblase79f0ca2019-11-05 00:40:11 +0100119
120 def list(self, filter=None):
beierlm95686bb2021-03-23 16:26:45 -0400121 """Returns a list of K8s clusters"""
garciadeblase79f0ca2019-11-05 00:40:11 +0100122 self._client.get_token()
beierlm95686bb2021-03-23 16:26:45 -0400123 filter_string = ""
garciadeblase79f0ca2019-11-05 00:40:11 +0100124 if filter:
beierlm95686bb2021-03-23 16:26:45 -0400125 filter_string = "?{}".format(filter)
126 _, resp = self._http.get2_cmd("{}{}".format(self._apiBase, filter_string))
garciadeblase79f0ca2019-11-05 00:40:11 +0100127 if resp:
beierlm95686bb2021-03-23 16:26:45 -0400128 return json.loads(resp)
garciadeblase79f0ca2019-11-05 00:40:11 +0100129 return list()
130
131 def get(self, name):
beierlm95686bb2021-03-23 16:26:45 -0400132 """Returns a K8s cluster based on name or id"""
garciadeblase79f0ca2019-11-05 00:40:11 +0100133 self._client.get_token()
134 cluster_id = name
135 if not utils.validate_uuid4(name):
136 cluster_id = self.get_id(name)
tiernobd39b092020-01-21 09:27:09 +0000137 try:
beierlm95686bb2021-03-23 16:26:45 -0400138 _, resp = self._http.get2_cmd("{}/{}".format(self._apiBase, cluster_id))
tiernobd39b092020-01-21 09:27:09 +0000139 if resp:
140 resp = json.loads(resp)
beierlm95686bb2021-03-23 16:26:45 -0400141 if not resp or "_id" not in resp:
142 raise ClientException("failed to get K8s cluster info: {}".format(resp))
tiernobd39b092020-01-21 09:27:09 +0000143 return resp
144 except NotFound:
145 raise NotFound("K8s cluster {} not found".format(name))