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
6 # http://www.apache.org/licenses/LICENSE-2.0
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
19 from osmclient
.common
import utils
20 from osmclient
.common
.exceptions
import ClientException
21 from osmclient
.common
.exceptions
import NotFound
26 def __init__(self
, http
=None, client
=None):
29 self
._apiName
= "/admin"
30 self
._apiVersion
= "/v1"
31 self
._apiResource
= "/k8srepos"
32 self
._apiBase
= "{}{}{}".format(
33 self
._apiName
, self
._apiVersion
, self
._apiResource
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")
40 def create(self
, name
, repo
):
42 self
._client
.get_token()
43 http_code
, resp
= self
._http
.post_cmd(
44 endpoint
=self
._apiBase
, postfields_dict
=repo
46 # print 'HTTP CODE: {}'.format(http_code)
47 # print 'RESP: {}'.format(resp)
48 # if http_code in (200, 201, 202, 204):
50 resp
= json
.loads(resp
)
51 if not resp
or "id" not in resp
:
52 raise ClientException("unexpected response from server - {}".format(resp
))
58 # msg = json.loads(resp)
61 # raise ClientException("failed to add repo {} - {}".format(name, msg))
63 def update(self
, name
, 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"]),
71 # print 'HTTP CODE: {}'.format(http_code)
72 # print 'RESP: {}'.format(resp)
73 # if http_code in (200, 201, 202, 204):
79 # msg = json.loads(resp)
82 # raise ClientException("failed to update repo {} - {}".format(name, msg))
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"]:
90 raise NotFound("Repo {} not found".format(name
))
92 def delete(self
, name
, force
=False):
93 self
._client
.get_token()
95 if not utils
.validate_uuid4(name
):
96 repo_id
= self
.get_id(name
)
99 querystring
= "?FORCE=True"
100 http_code
, resp
= self
._http
.delete_cmd(
101 "{}/{}{}".format(self
._apiBase
, repo_id
, querystring
)
103 # print 'HTTP CODE: {}'.format(http_code)
104 # print 'RESP: {}'.format(resp)
106 print("Deletion in progress")
107 elif http_code
== 204:
113 # msg = json.loads(resp)
116 raise ClientException("failed to delete repo {} - {}".format(name
, msg
))
118 def list(self
, filter=None):
119 """Returns a list of repos"""
120 self
._client
.get_token()
123 filter_string
= "?{}".format(filter)
124 _
, resp
= self
._http
.get2_cmd("{}{}".format(self
._apiBase
, filter_string
))
126 return json
.loads(resp
)
130 """Returns a repo based on name or id"""
131 self
._client
.get_token()
133 if not utils
.validate_uuid4(name
):
134 repo_id
= self
.get_id(name
)
136 _
, resp
= self
._http
.get2_cmd("{}/{}".format(self
._apiBase
, repo_id
))
138 resp
= json
.loads(resp
)
139 if not resp
or "_id" not in resp
:
140 raise ClientException("failed to get repo info: {}".format(resp
))
143 raise NotFound("Repo {} not found".format(name
))