# 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
@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(
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
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:
@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
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: