X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fcli_commands%2Frepo.py;h=b2ecd9a75872d58c5561e2a9b08f42aa6ee09230;hb=c0420cf86aaed737f59666516dd9e4de5c5db16c;hp=2e5b860273e67d8f9e020115a238e6be57bd1062;hpb=00bc0353583beab960fb853375dc1e8f4a77840d;p=osm%2Fosmclient.git diff --git a/osmclient/cli_commands/repo.py b/osmclient/cli_commands/repo.py index 2e5b860..b2ecd9a 100755 --- a/osmclient/cli_commands/repo.py +++ b/osmclient/cli_commands/repo.py @@ -14,7 +14,7 @@ # under the License. import click -from osmclient.common.exceptions import NotFound +from osmclient.common.exceptions import NotFound, ClientException from osmclient.cli_commands import utils from prettytable import PrettyTable import yaml @@ -29,9 +29,9 @@ logger = logging.getLogger("osmclient") @click.argument("uri") @click.option( "--type", - type=click.Choice(["helm-chart", "juju-bundle", "osm"]), + type=click.Choice(["osm", "helm-chart", "juju-bundle"]), default="osm", - help="type of repo (helm-chart for Helm Charts, juju-bundle for Juju Bundles, osm for OSM Repositories)", + help="type of repo (osm for OSM repositories, helm-chart for Helm Charts, juju-bundle for Juju Bundles)", ) @click.option("--description", default=None, help="human readable description") @click.option( @@ -42,6 +42,16 @@ logger = logging.getLogger("osmclient") default=None, help="OSM repository: The password of the OSM repository", ) +@click.option( + "--oci", + is_flag=True, + help="enable OCI (only for helm-chart repos, default: false, automatically set to true for oci:// URI)", +) +@click.option( + "--ca-file", + default=None, + help="cert to use when adding a repository (only for helm)", +) @click.pass_context def repo_add(ctx, **kwargs): """adds a repo to OSM @@ -52,6 +62,21 @@ def repo_add(ctx, **kwargs): kwargs = {k: v for k, v in kwargs.items() if v is not None} repo = kwargs repo["url"] = repo.pop("uri") + if repo["url"].startswith("oci://"): + repo["oci"] = True + if "ca_file" in kwargs: + try: + with open(kwargs["ca_file"], "r") as ca_cert: + repo["cacert"] = ca_cert.read() + repo.pop("ca_file") + except FileNotFoundError: + raise ClientException("CA file not found !") + except EOFError: + raise ClientException("Empty CA file !") + except PermissionError: + raise ClientException("Can not read CA file ! Insufficient permissions") + except Exception as e: + raise ClientException(f"Can not read the cert file ! Error: {e}") if repo["type"] in ["helm-chart", "juju-bundle"]: ctx.obj.repo.create(repo["name"], repo) else: @@ -63,8 +88,13 @@ def repo_add(ctx, **kwargs): @click.option("--newname", help="New name for the repo") @click.option("--uri", help="URI of the repo") @click.option("--description", help="human readable description") +@click.option( + "--oci", + is_flag=True, + help="enable OCI (only for helm-chart repos, default: false, automatically set to true for oci:// URI)", +) @click.pass_context -def repo_update(ctx, name, newname, uri, description): +def repo_update(ctx, name, newname, uri, description, oci): """updates a repo in OSM NAME: name of the repo @@ -74,9 +104,13 @@ def repo_update(ctx, name, newname, uri, description): if newname: repo["name"] = newname if uri: - repo["uri"] = uri + repo["url"] = uri + if uri.startswith("oci://"): + repo["oci"] = True if description: repo["description"] = description + if oci: + repo["oci"] = oci try: ctx.obj.repo.update(name, repo) except NotFound: