Fix bug 2373 - Remove old code from v1 client in ns_show
[osm/osmclient.git] / osmclient / sol005 / repo.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 Repo 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
25 class Repo(object):
26 def __init__(self, http=None, client=None):
27 self._http = http
28 self._client = client
29 self._apiName = "/admin"
30 self._apiVersion = "/v1"
31 self._apiResource = "/k8srepos"
32 self._apiBase = "{}{}{}".format(
33 self._apiName, self._apiVersion, self._apiResource
34 )
35
36 def check_oci(self, repo):
37 if repo["oci"] and repo["type"] != "helm-chart":
38 raise ClientException("OCI can only be enabled in helm-chart repos")
39
40 def create(self, name, repo):
41 self.check_oci(repo)
42 self._client.get_token()
43 http_code, resp = self._http.post_cmd(
44 endpoint=self._apiBase, postfields_dict=repo
45 )
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(resp))
53 print(resp["id"])
54 # else:
55 # msg = ""
56 # if resp:
57 # try:
58 # msg = json.loads(resp)
59 # except ValueError:
60 # msg = resp
61 # raise ClientException("failed to add repo {} - {}".format(name, msg))
62
63 def update(self, name, repo):
64 self.check_oci(repo)
65 self._client.get_token()
66 repo_dict = self.get(name)
67 http_code, resp = self._http.put_cmd(
68 endpoint="{}/{}".format(self._apiBase, repo_dict["_id"]),
69 postfields_dict=repo,
70 )
71 # print 'HTTP CODE: {}'.format(http_code)
72 # print 'RESP: {}'.format(resp)
73 # if http_code in (200, 201, 202, 204):
74 # pass
75 # else:
76 # msg = ""
77 # if resp:
78 # try:
79 # msg = json.loads(resp)
80 # except ValueError:
81 # msg = resp
82 # raise ClientException("failed to update repo {} - {}".format(name, msg))
83
84 def get_id(self, name):
85 """Returns a repo id from a repo name"""
86 self._client.get_token()
87 for repo in self.list():
88 if name == repo["name"]:
89 return repo["_id"]
90 raise NotFound("Repo {} not found".format(name))
91
92 def delete(self, name, force=False):
93 self._client.get_token()
94 repo_id = name
95 if not utils.validate_uuid4(name):
96 repo_id = self.get_id(name)
97 querystring = ""
98 if force:
99 querystring = "?FORCE=True"
100 http_code, resp = self._http.delete_cmd(
101 "{}/{}{}".format(self._apiBase, repo_id, querystring)
102 )
103 # print 'HTTP CODE: {}'.format(http_code)
104 # print 'RESP: {}'.format(resp)
105 if http_code == 202:
106 print("Deletion in progress")
107 elif http_code == 204:
108 print("Deleted")
109 else:
110 msg = resp or ""
111 # if resp:
112 # try:
113 # msg = json.loads(resp)
114 # except ValueError:
115 # msg = resp
116 raise ClientException("failed to delete repo {} - {}".format(name, msg))
117
118 def list(self, filter=None):
119 """Returns a list of repos"""
120 self._client.get_token()
121 filter_string = ""
122 if filter:
123 filter_string = "?{}".format(filter)
124 _, resp = self._http.get2_cmd("{}{}".format(self._apiBase, filter_string))
125 if resp:
126 return json.loads(resp)
127 return list()
128
129 def get(self, name):
130 """Returns a repo based on name or id"""
131 self._client.get_token()
132 repo_id = name
133 if not utils.validate_uuid4(name):
134 repo_id = self.get_id(name)
135 try:
136 _, resp = self._http.get2_cmd("{}/{}".format(self._apiBase, repo_id))
137 if resp:
138 resp = json.loads(resp)
139 if not resp or "_id" not in resp:
140 raise ClientException("failed to get repo info: {}".format(resp))
141 return resp
142 except NotFound:
143 raise NotFound("Repo {} not found".format(name))