edge-containers-cli 5.0.1b2__tar.gz → 5.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.copier-answers.yml +1 -1
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/CONTRIBUTING.md +1 -1
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/workflows/_test.yml +0 -5
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/workflows/ci.yml +0 -2
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.pre-commit-config.yaml +1 -1
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/PKG-INFO +2 -2
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/pyproject.toml +2 -2
- edge_containers_cli-5.2.0/renovate.json +40 -0
- edge_containers_cli-5.2.0/src/edge_containers_cli/_version.py +24 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/autocomplete.py +13 -6
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cli.py +76 -32
- edge_containers_cli-5.2.0/src/edge_containers_cli/cmds/argo_commands.py +400 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cmds/commands.py +49 -27
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cmds/demo_commands.py +21 -20
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cmds/helm.py +15 -11
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cmds/k8s_commands.py +83 -44
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cmds/monitor.py +91 -54
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/git.py +25 -25
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/shell.py +17 -7
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/utils.py +31 -2
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli.egg-info/PKG-INFO +2 -2
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli.egg-info/SOURCES.txt +1 -1
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli.egg-info/requires.txt +1 -1
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/conftest.py +19 -4
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/argocd.yaml +113 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/test_argocd.py +20 -7
- edge_containers_cli-5.2.0/tests/test_demo.py +39 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/test_k8s.py +5 -3
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/uv.lock +8 -8
- edge_containers_cli-5.0.1b2/.github/dependabot.yml +0 -28
- edge_containers_cli-5.0.1b2/src/edge_containers_cli/_version.py +0 -34
- edge_containers_cli-5.0.1b2/src/edge_containers_cli/cmds/argo_commands.py +0 -334
- edge_containers_cli-5.0.1b2/tests/test_demo.py +0 -37
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.devcontainer/devcontainer.json +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.dockerignore +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/ISSUE_TEMPLATE/issue.md +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/pages/index.html +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/pages/make_switcher.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/workflows/_container.yml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/workflows/_dist.yml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/workflows/_pypi.yml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/workflows/_release.yml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.github/workflows/_tox.yml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.gitignore +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.gitleaks.toml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.python-version +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.vscode/extensions.json +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.vscode/launch.json +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.vscode/settings.json +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/.vscode/tasks.json +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/Dockerfile +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/LICENSE +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/README.md +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/conf.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/explanations/decisions/0001-record-architecture-decisions.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/explanations/decisions/0002-switched-to-pip-skeleton.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/explanations/decisions.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/build-docs.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/contribute.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/lint.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/make-release.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/pin-requirements.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/run-tests.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/static-analysis.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/test-container.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/how-to/update-tools.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/index.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/reference/standards.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/developer/tutorials/dev-install.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/genindex.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/images/dls-favicon.ico +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/images/dls-logo.svg +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/images/ec-logs.png +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/images/ec-web.png +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/index.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/user/explanations/docs-structure.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/user/how-to/run-container.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/user/index.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/user/reference/api.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/docs/user/tutorials/installation.rst +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/setup.cfg +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/__init__.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/__main__.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/backend.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cmds/__init__.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/cmds/monitor.tcss +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/definitions.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/globals.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/logging.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli.egg-info/dependency_links.txt +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli.egg-info/entry_points.txt +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli.egg-info/top_level.txt +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/__init__.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-deployment/apps/values.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/bl01t-ea-test-01/Chart.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/bl01t-ea-test-01/config/ioc.db +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/bl01t-ea-test-01/config/ioc.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/bl01t-ea-test-01/templates/configmap.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/bl01t-ea-test-01/values.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/bl01t-ea-test-02/Chart.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/bl01t-ea-test-02/values.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/dls-aravis/Chart.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/dls-aravis/config/ioc.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/dls-aravis/templates/configmap.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/dls-aravis/values.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/bl01t-services/services/values.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/cli.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/k8s.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/data/yaml.yaml +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/test_cli.py +0 -0
- {edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/tests/test_unit.py +0 -0
|
@@ -24,4 +24,4 @@ It is recommended that developers use a [vscode devcontainer](https://code.visua
|
|
|
24
24
|
|
|
25
25
|
This project was created using the [Diamond Light Source Copier Template](https://github.com/DiamondLightSource/python-copier-template) for Python projects.
|
|
26
26
|
|
|
27
|
-
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/5.0.
|
|
27
|
+
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/5.0.2/how-to.html).
|
|
@@ -9,9 +9,6 @@ on:
|
|
|
9
9
|
type: string
|
|
10
10
|
description: The runner to run this job on
|
|
11
11
|
required: true
|
|
12
|
-
secrets:
|
|
13
|
-
CODECOV_TOKEN:
|
|
14
|
-
required: true
|
|
15
12
|
|
|
16
13
|
env:
|
|
17
14
|
# https://github.com/pytest-dev/pytest/issues/2042
|
|
@@ -40,5 +37,3 @@ jobs:
|
|
|
40
37
|
with:
|
|
41
38
|
name: ${{ inputs.python-version }}/${{ inputs.runs-on }}
|
|
42
39
|
files: cov.xml
|
|
43
|
-
env:
|
|
44
|
-
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edge-containers-cli
|
|
3
|
-
Version: 5.0
|
|
3
|
+
Version: 5.2.0
|
|
4
4
|
Summary: CLI for deploying and managing epics containers IOCs and services
|
|
5
5
|
Author-email: Giles Knap <giles.knap@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -220,7 +220,7 @@ Requires-Dist: requests
|
|
|
220
220
|
Requires-Dist: ruamel.yaml
|
|
221
221
|
Requires-Dist: jinja2
|
|
222
222
|
Requires-Dist: polars-lts-cpu
|
|
223
|
-
Requires-Dist: textual
|
|
223
|
+
Requires-Dist: textual>=7.4
|
|
224
224
|
Requires-Dist: urllib3<2.4.0
|
|
225
225
|
Dynamic: license-file
|
|
226
226
|
|
|
@@ -20,7 +20,7 @@ dependencies = [
|
|
|
20
20
|
"ruamel.yaml",
|
|
21
21
|
"jinja2",
|
|
22
22
|
"polars-lts-cpu",
|
|
23
|
-
"textual",
|
|
23
|
+
"textual>=7.4",
|
|
24
24
|
# urllib>=2.4.0 fails to validate DLS Kubernetes certificates
|
|
25
25
|
# https://github.com/kubernetes-client/python/issues/2394
|
|
26
26
|
"urllib3<2.4.0",
|
|
@@ -117,7 +117,7 @@ commands = [
|
|
|
117
117
|
[
|
|
118
118
|
"pyright",
|
|
119
119
|
"--pythonpath",
|
|
120
|
-
"
|
|
120
|
+
"{env:VIRTUAL_ENV}/bin/python",
|
|
121
121
|
"src",
|
|
122
122
|
"tests",
|
|
123
123
|
{ replace = "posargs", default = [
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
+
"extends": [
|
|
4
|
+
"config:recommended"
|
|
5
|
+
],
|
|
6
|
+
"lockFileMaintenance": {
|
|
7
|
+
"description": "Keep uv.lock up to date, merging if tests pass",
|
|
8
|
+
"enabled": true,
|
|
9
|
+
"automerge": true
|
|
10
|
+
},
|
|
11
|
+
"packageRules": [
|
|
12
|
+
{
|
|
13
|
+
"description": "Disable python version as that is managed by python-copier-template",
|
|
14
|
+
"matchManagers": [
|
|
15
|
+
"pyenv"
|
|
16
|
+
],
|
|
17
|
+
"enabled": false
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"description": "Disable github actions that are managed by python-copier-template",
|
|
21
|
+
"matchPackageNames": [
|
|
22
|
+
"actions/checkout",
|
|
23
|
+
"astral-sh/setup-uv",
|
|
24
|
+
"actions/upload-artifact",
|
|
25
|
+
"actions/download-artifact",
|
|
26
|
+
"softprops/action-gh-release",
|
|
27
|
+
"codecov/codecov-action",
|
|
28
|
+
"docker/setup-buildx-action",
|
|
29
|
+
"docker/login-action",
|
|
30
|
+
"docker/build-push-action",
|
|
31
|
+
"docker/metadata-action",
|
|
32
|
+
"pypa/gh-action-pypi-publish"
|
|
33
|
+
],
|
|
34
|
+
"matchManagers": [
|
|
35
|
+
"github-actions"
|
|
36
|
+
],
|
|
37
|
+
"enabled": false
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# file generated by vcs-versioning
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"__version__",
|
|
7
|
+
"__version_tuple__",
|
|
8
|
+
"version",
|
|
9
|
+
"version_tuple",
|
|
10
|
+
"__commit_id__",
|
|
11
|
+
"commit_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
version: str
|
|
15
|
+
__version__: str
|
|
16
|
+
__version_tuple__: tuple[int | str, ...]
|
|
17
|
+
version_tuple: tuple[int | str, ...]
|
|
18
|
+
commit_id: str | None
|
|
19
|
+
__commit_id__: str | None
|
|
20
|
+
|
|
21
|
+
__version__ = version = '5.2.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (5, 2, 0)
|
|
23
|
+
|
|
24
|
+
__commit_id__ = commit_id = 'g400995ffa'
|
{edge_containers_cli-5.0.1b2 → edge_containers_cli-5.2.0}/src/edge_containers_cli/autocomplete.py
RENAMED
|
@@ -9,7 +9,12 @@ from edge_containers_cli.cmds.commands import CommandError
|
|
|
9
9
|
from edge_containers_cli.definitions import ECContext
|
|
10
10
|
from edge_containers_cli.git import GitError, create_version_map
|
|
11
11
|
from edge_containers_cli.shell import ShellError
|
|
12
|
-
from edge_containers_cli.utils import
|
|
12
|
+
from edge_containers_cli.utils import (
|
|
13
|
+
_run_async,
|
|
14
|
+
cache_dict,
|
|
15
|
+
new_workdir,
|
|
16
|
+
read_cached_dict,
|
|
17
|
+
)
|
|
13
18
|
|
|
14
19
|
|
|
15
20
|
def url_encode(in_string: str) -> str:
|
|
@@ -32,11 +37,13 @@ def fetch_service_graph(repo: str) -> dict:
|
|
|
32
37
|
)
|
|
33
38
|
if not version_map:
|
|
34
39
|
with new_workdir() as path:
|
|
35
|
-
version_map =
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
version_map = _run_async(
|
|
41
|
+
create_version_map(
|
|
42
|
+
repo,
|
|
43
|
+
Path(globals.SERVICES_DIR),
|
|
44
|
+
path,
|
|
45
|
+
shared_files=[globals.SHARED_VALUES],
|
|
46
|
+
)
|
|
40
47
|
)
|
|
41
48
|
cache_dict(
|
|
42
49
|
globals.CACHE_ROOT / url_encode(repo),
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import re
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
|
|
5
|
+
import rich
|
|
4
6
|
import typer
|
|
5
7
|
|
|
6
8
|
import edge_containers_cli.globals as globals
|
|
@@ -17,14 +19,26 @@ from edge_containers_cli.definitions import ENV
|
|
|
17
19
|
from edge_containers_cli.git import GitError, list_all, list_instances
|
|
18
20
|
from edge_containers_cli.logging import log
|
|
19
21
|
from edge_containers_cli.shell import ShellError
|
|
22
|
+
from edge_containers_cli.utils import async_command
|
|
20
23
|
|
|
21
24
|
|
|
22
25
|
def confirmation(message: str, yes: bool):
|
|
23
|
-
|
|
26
|
+
rich.print(message)
|
|
24
27
|
if not (yes or typer.confirm("Are you sure?")):
|
|
25
28
|
raise typer.Abort()
|
|
26
29
|
|
|
27
30
|
|
|
31
|
+
def _check_description(desc_text: str | None):
|
|
32
|
+
_desc_re = r"^[a-zA-Z0-9](?:(?!--)[a-zA-Z0-9-]){0,62}$"
|
|
33
|
+
if desc_text is not None:
|
|
34
|
+
if not re.match(_desc_re, desc_text):
|
|
35
|
+
raise typer.BadParameter(
|
|
36
|
+
f"The description '{desc_text}' is not kebab-case or uses illegal characters.\n\
|
|
37
|
+
Only alphanumeric characters and '-' are allowed."
|
|
38
|
+
)
|
|
39
|
+
return desc_text
|
|
40
|
+
|
|
41
|
+
|
|
28
42
|
class ErrorHandlingTyper(typer.Typer):
|
|
29
43
|
def __call__(self, *args, **kwargs):
|
|
30
44
|
try:
|
|
@@ -38,7 +52,8 @@ cli = ErrorHandlingTyper(pretty_exceptions_show_locals=False)
|
|
|
38
52
|
|
|
39
53
|
|
|
40
54
|
@cli.command()
|
|
41
|
-
|
|
55
|
+
@async_command
|
|
56
|
+
async def attach(
|
|
42
57
|
service_name: str = typer.Argument(
|
|
43
58
|
...,
|
|
44
59
|
help="Name of the service to attach to",
|
|
@@ -49,11 +64,12 @@ def attach(
|
|
|
49
64
|
"""
|
|
50
65
|
Attach to the console of a live service
|
|
51
66
|
"""
|
|
52
|
-
backend.commands.attach(service_name)
|
|
67
|
+
await backend.commands.attach(service_name)
|
|
53
68
|
|
|
54
69
|
|
|
55
70
|
@cli.command()
|
|
56
|
-
|
|
71
|
+
@async_command
|
|
72
|
+
async def delete(
|
|
57
73
|
service_name: str = typer.Argument(
|
|
58
74
|
...,
|
|
59
75
|
help="Name of the service to delete",
|
|
@@ -69,11 +85,12 @@ def delete(
|
|
|
69
85
|
f"Remove {service_name} from the target `{backend.commands.target}`",
|
|
70
86
|
yes,
|
|
71
87
|
)
|
|
72
|
-
backend.commands.delete(service_name)
|
|
88
|
+
await backend.commands.delete(service_name)
|
|
73
89
|
|
|
74
90
|
|
|
75
91
|
@cli.command()
|
|
76
|
-
|
|
92
|
+
@async_command
|
|
93
|
+
async def deploy(
|
|
77
94
|
service_name: str = typer.Argument(
|
|
78
95
|
...,
|
|
79
96
|
help="Name of the service to deploy",
|
|
@@ -86,6 +103,12 @@ def deploy(
|
|
|
86
103
|
autocompletion=avail_versions,
|
|
87
104
|
show_default=False,
|
|
88
105
|
),
|
|
106
|
+
description: str | None = typer.Option(
|
|
107
|
+
None,
|
|
108
|
+
"--desc",
|
|
109
|
+
help="Custom description label for the service",
|
|
110
|
+
callback=_check_description,
|
|
111
|
+
),
|
|
89
112
|
wait: bool = typer.Option(False, "--wait", help="Waits for readiness"),
|
|
90
113
|
yes: bool = typer.Option(False, "-y", "--yes", help="Skip confirmation prompt"),
|
|
91
114
|
args: str = typer.Option(
|
|
@@ -96,20 +119,28 @@ def deploy(
|
|
|
96
119
|
Add a service to the cluster from its source repository
|
|
97
120
|
"""
|
|
98
121
|
|
|
99
|
-
def confirm_callback(svc_version):
|
|
122
|
+
def confirm_callback(svc_version: str, current_desc: str | None):
|
|
123
|
+
message = (
|
|
124
|
+
f"[bold]Deploy [white]{service_name.lower()}[/white]"
|
|
125
|
+
f" version [white]{svc_version}[/white] to target [white]{backend.commands.target}[/white] with \
|
|
126
|
+
{'existing ' if description is None else ''}description [white]{current_desc}[/white][/bold]"
|
|
127
|
+
)
|
|
128
|
+
|
|
100
129
|
confirmation(
|
|
101
|
-
|
|
102
|
-
f" version `{svc_version}` to target `{backend.commands.target}`",
|
|
130
|
+
message,
|
|
103
131
|
yes,
|
|
104
132
|
)
|
|
105
133
|
|
|
106
134
|
args = args if not wait else args + " --wait"
|
|
107
135
|
version = version if version != "latest tag" else ""
|
|
108
|
-
backend.commands.deploy(
|
|
136
|
+
await backend.commands.deploy(
|
|
137
|
+
service_name, version, description, args, confirm_callback
|
|
138
|
+
)
|
|
109
139
|
|
|
110
140
|
|
|
111
141
|
@cli.command()
|
|
112
|
-
|
|
142
|
+
@async_command
|
|
143
|
+
async def deploy_local(
|
|
113
144
|
svc_instance: Path = typer.Argument(
|
|
114
145
|
...,
|
|
115
146
|
help="folder of local service definition",
|
|
@@ -133,7 +164,7 @@ def deploy_local(
|
|
|
133
164
|
yes,
|
|
134
165
|
)
|
|
135
166
|
|
|
136
|
-
backend.commands.deploy_local(svc_instance, args, confirm_callback)
|
|
167
|
+
await backend.commands.deploy_local(svc_instance, args, confirm_callback)
|
|
137
168
|
|
|
138
169
|
|
|
139
170
|
@cli.command()
|
|
@@ -144,7 +175,8 @@ def env():
|
|
|
144
175
|
|
|
145
176
|
|
|
146
177
|
@cli.command()
|
|
147
|
-
|
|
178
|
+
@async_command
|
|
179
|
+
async def exec(
|
|
148
180
|
service_name: str = typer.Argument(
|
|
149
181
|
...,
|
|
150
182
|
help="Name of the service container to run in",
|
|
@@ -153,11 +185,12 @@ def exec(
|
|
|
153
185
|
),
|
|
154
186
|
):
|
|
155
187
|
"""Execute a bash prompt in a running container"""
|
|
156
|
-
backend.commands.exec(service_name)
|
|
188
|
+
await backend.commands.exec(service_name)
|
|
157
189
|
|
|
158
190
|
|
|
159
191
|
@cli.command()
|
|
160
|
-
|
|
192
|
+
@async_command
|
|
193
|
+
async def instances(
|
|
161
194
|
service_name: str = typer.Argument(
|
|
162
195
|
...,
|
|
163
196
|
help="Name of the service to inspect",
|
|
@@ -167,7 +200,7 @@ def instances(
|
|
|
167
200
|
):
|
|
168
201
|
"""List all versions of the specified service in the repository"""
|
|
169
202
|
print(
|
|
170
|
-
list_instances(
|
|
203
|
+
await list_instances(
|
|
171
204
|
service_name,
|
|
172
205
|
backend.commands.repo,
|
|
173
206
|
Path(globals.SERVICES_DIR),
|
|
@@ -177,10 +210,11 @@ def instances(
|
|
|
177
210
|
|
|
178
211
|
|
|
179
212
|
@cli.command(name="list")
|
|
180
|
-
|
|
213
|
+
@async_command
|
|
214
|
+
async def _list():
|
|
181
215
|
"""List all services available in the service repository"""
|
|
182
216
|
print(
|
|
183
|
-
list_all(
|
|
217
|
+
await list_all(
|
|
184
218
|
backend.commands.repo,
|
|
185
219
|
Path(globals.SERVICES_DIR),
|
|
186
220
|
shared_files=[globals.SHARED_VALUES],
|
|
@@ -189,7 +223,8 @@ def _list():
|
|
|
189
223
|
|
|
190
224
|
|
|
191
225
|
@cli.command()
|
|
192
|
-
|
|
226
|
+
@async_command
|
|
227
|
+
async def log_history(
|
|
193
228
|
service_name: str = typer.Argument(
|
|
194
229
|
...,
|
|
195
230
|
help="Name of the service to inspect",
|
|
@@ -198,11 +233,12 @@ def log_history(
|
|
|
198
233
|
),
|
|
199
234
|
):
|
|
200
235
|
"""Open historical logs for a service"""
|
|
201
|
-
backend.commands.log_history(service_name)
|
|
236
|
+
await backend.commands.log_history(service_name)
|
|
202
237
|
|
|
203
238
|
|
|
204
239
|
@cli.command()
|
|
205
|
-
|
|
240
|
+
@async_command
|
|
241
|
+
async def logs(
|
|
206
242
|
service_name: str = typer.Argument(
|
|
207
243
|
...,
|
|
208
244
|
help="Name of the service to inspect",
|
|
@@ -217,7 +253,7 @@ def logs(
|
|
|
217
253
|
),
|
|
218
254
|
):
|
|
219
255
|
"""Show logs for current and previous instances of a service"""
|
|
220
|
-
backend.commands.logs(service_name, prev)
|
|
256
|
+
await backend.commands.logs(service_name, prev)
|
|
221
257
|
|
|
222
258
|
|
|
223
259
|
@cli.command()
|
|
@@ -246,7 +282,8 @@ def ps(
|
|
|
246
282
|
|
|
247
283
|
|
|
248
284
|
@cli.command()
|
|
249
|
-
|
|
285
|
+
@async_command
|
|
286
|
+
async def restart(
|
|
250
287
|
service_name: str = typer.Argument(
|
|
251
288
|
...,
|
|
252
289
|
help="Name of the container to restart",
|
|
@@ -255,47 +292,54 @@ def restart(
|
|
|
255
292
|
),
|
|
256
293
|
):
|
|
257
294
|
"""Restart a service"""
|
|
258
|
-
backend.commands.restart(service_name)
|
|
295
|
+
await backend.commands.restart(service_name)
|
|
259
296
|
|
|
260
297
|
|
|
261
298
|
@cli.command()
|
|
262
|
-
|
|
299
|
+
@async_command
|
|
300
|
+
async def start(
|
|
263
301
|
service_name: str = typer.Argument(
|
|
264
302
|
...,
|
|
265
303
|
help="Name of the service container to start",
|
|
266
304
|
autocompletion=all_svc,
|
|
267
305
|
show_default=False,
|
|
268
306
|
),
|
|
269
|
-
commit: bool = typer.Option(
|
|
307
|
+
commit: bool = typer.Option(
|
|
308
|
+
False, help="Also commit the change to the git repo for an audit trail"
|
|
309
|
+
),
|
|
270
310
|
):
|
|
271
311
|
"""Start a service"""
|
|
272
312
|
try:
|
|
273
|
-
backend.commands.start(service_name, commit=commit)
|
|
313
|
+
await backend.commands.start(service_name, commit=commit)
|
|
274
314
|
except GitError as e:
|
|
275
315
|
msg = f"{str(e)} - Commit failed. Try 'ec start <service> --no-commit to set values without updating git"
|
|
276
316
|
raise GitError(msg) from e
|
|
277
317
|
|
|
278
318
|
|
|
279
319
|
@cli.command()
|
|
280
|
-
|
|
320
|
+
@async_command
|
|
321
|
+
async def stop(
|
|
281
322
|
service_name: str = typer.Argument(
|
|
282
323
|
...,
|
|
283
324
|
help="Name of the service container to stop",
|
|
284
325
|
autocompletion=running_svc,
|
|
285
326
|
show_default=False,
|
|
286
327
|
),
|
|
287
|
-
commit: bool = typer.Option(
|
|
328
|
+
commit: bool = typer.Option(
|
|
329
|
+
False, help="Also commit the change to the git repo for an audit trail"
|
|
330
|
+
),
|
|
288
331
|
):
|
|
289
332
|
"""Stop a service"""
|
|
290
333
|
try:
|
|
291
|
-
backend.commands.stop(service_name, commit=commit)
|
|
334
|
+
await backend.commands.stop(service_name, commit=commit)
|
|
292
335
|
except GitError as e:
|
|
293
336
|
msg = f"{str(e)} - Commit failed. Try ec stop <service> --no-commit to set values without updating git"
|
|
294
337
|
raise GitError(msg) from e
|
|
295
338
|
|
|
296
339
|
|
|
297
340
|
@cli.command()
|
|
298
|
-
|
|
341
|
+
@async_command
|
|
342
|
+
async def template(
|
|
299
343
|
svc_instance: Path = typer.Argument(
|
|
300
344
|
...,
|
|
301
345
|
help="folder of local service definition",
|
|
@@ -311,7 +355,7 @@ def template(
|
|
|
311
355
|
Print out the helm template generated from a local service instance
|
|
312
356
|
"""
|
|
313
357
|
args = f"{args} --debug"
|
|
314
|
-
backend.commands.template(svc_instance, args)
|
|
358
|
+
await backend.commands.template(svc_instance, args)
|
|
315
359
|
|
|
316
360
|
|
|
317
361
|
def drop_methods(ctx: typer.Context, to_drop: list[str]):
|