devlift-cli 0.1.3__tar.gz → 0.1.4__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.
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/PKG-INFO +1 -1
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/MANUAL.md +17 -11
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/__init__.py +1 -1
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/clusters.py +25 -10
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/eks.py +9 -1
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/SKILL.md +8 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/PKG-INFO +1 -1
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/README.md +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/__main__.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/__init__.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/approvals.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/catalog.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/client.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/context.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/deployments.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/infra.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/infra_list.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/kong.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/services.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/vpc.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/app.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/__init__.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/oauth.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/session.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/storage.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/__init__.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/approval.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/auth.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/catalog.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/deployment.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/dynamodb.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/kong.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/languages.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/manual.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/repositories.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/request.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/s3.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/skill.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/sqs.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/config.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/context.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/data/placement/vance.json +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/errors.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/__init__.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/approvals.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/eks.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/kong.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/placement.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/resources.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/status.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/wait.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/render/__init__.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/render/output.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/resolve/__init__.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/resolve/allowlist.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/resolve/names.py +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/reference/commands.md +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/reference/exit-codes.md +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/reference/workflows.md +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/SOURCES.txt +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/dependency_links.txt +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/entry_points.txt +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/requires.txt +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/top_level.txt +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/pyproject.toml +0 -0
- {devlift_cli-0.1.3 → devlift_cli-0.1.4}/setup.cfg +0 -0
|
@@ -227,11 +227,13 @@ devlift clusters list [--app NAME] [--env ENV] [--region REGION] [--type eks|ecs
|
|
|
227
227
|
```
|
|
228
228
|
|
|
229
229
|
The clusters services run on, and the `--cluster` values for `eks create`.
|
|
230
|
-
Narrowed
|
|
231
|
-
the environments this deployment serves,
|
|
232
|
-
(section 5) says which of those offer EKS or ECS
|
|
233
|
-
|
|
234
|
-
|
|
230
|
+
Narrowed by three filters, the same ones a create goes through: the backend
|
|
231
|
+
reports only the environments this deployment serves, the placement allowlist
|
|
232
|
+
(section 5) says which of those offer EKS or ECS, and only a **registered**
|
|
233
|
+
cluster may take a new service. Anything outside those is real but can never
|
|
234
|
+
be chosen, so it is hidden and counted. `--all` drops all three and shows
|
|
235
|
+
everything the backend reports, for checking what exists rather than for
|
|
236
|
+
choosing.
|
|
235
237
|
|
|
236
238
|
```
|
|
237
239
|
devlift clusters list --type eks --app core --env stage
|
|
@@ -239,16 +241,20 @@ devlift clusters list --type eks --app core --env stage
|
|
|
239
241
|
|
|
240
242
|
```
|
|
241
243
|
22 of 25 hidden: not a placement this deployment offers; --all shows everything.
|
|
244
|
+
2 more hidden: not registered, so no service can be created on them.
|
|
242
245
|
|
|
243
|
-
Cluster
|
|
246
|
+
Cluster Type Environment Region Application Registered
|
|
244
247
|
acme-core-stage-mumbai-01-application-cluster EKS stage Mumbai core yes
|
|
245
|
-
…two more in the same placement, not registered
|
|
246
248
|
```
|
|
247
249
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
Everything listed is a cluster `eks create` would accept. A row whose
|
|
251
|
+
Application reads "tenant-level" belongs to no single product and is the
|
|
252
|
+
fallback for products with no cluster of their own.
|
|
253
|
+
|
|
254
|
+
**Name and code are two labels for one cluster.** The Cluster column and
|
|
255
|
+
`eks create` both show the name; the Code column and `eks show`'s
|
|
256
|
+
`cluster_code` show the backend's identifier. They look nothing alike, so do
|
|
257
|
+
not read a difference between them as two different clusters.
|
|
252
258
|
|
|
253
259
|
With exactly one registered cluster in a placement, `eks create` fills it in
|
|
254
260
|
silently. With several it asks, or wants `--cluster` under `--no-input`.
|
|
@@ -66,14 +66,17 @@ def clusters_list(
|
|
|
66
66
|
):
|
|
67
67
|
"""List the clusters a service can run on.
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
for
|
|
69
|
+
Three filters, the same ones every create goes through: placements this
|
|
70
|
+
deployment serves, placements the allowlist permits, and registration.
|
|
71
|
+
Only a registered cluster may take a new service, so an unregistered one
|
|
72
|
+
is never a candidate and is not listed. Everything shown here is a cluster
|
|
73
|
+
`eks create` would actually accept.
|
|
74
|
+
|
|
75
|
+
`--all` drops all three and shows everything the backend reports, which is
|
|
76
|
+
for checking what exists rather than for choosing.
|
|
77
|
+
|
|
78
|
+
A cluster with no application is tenant-level and is the fallback for
|
|
79
|
+
every product that has none of its own.
|
|
77
80
|
"""
|
|
78
81
|
inv: Invocation = ctx.obj
|
|
79
82
|
res = Resolver(inv.api, inv.profile.name)
|
|
@@ -95,8 +98,20 @@ def clusters_list(
|
|
|
95
98
|
if not show_all:
|
|
96
99
|
before = len(rows)
|
|
97
100
|
rows = _placeable(res, rows)
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
placement_hidden = before - len(rows)
|
|
102
|
+
|
|
103
|
+
# Unregistered clusters are not offerable, so listing them is worse than
|
|
104
|
+
# useless: a service cannot be created on one, and naming it invites a
|
|
105
|
+
# comparison against the registered cluster that reads as a discrepancy.
|
|
106
|
+
# `--all` still shows them, for someone checking what exists.
|
|
107
|
+
registered = [r for r in rows if r.get("is_registered")]
|
|
108
|
+
unregistered_hidden = len(rows) - len(registered)
|
|
109
|
+
rows = registered
|
|
110
|
+
|
|
111
|
+
if placement_hidden:
|
|
112
|
+
output.info(f"{placement_hidden} of {before} hidden: not a placement this deployment offers; --all shows everything.")
|
|
113
|
+
if unregistered_hidden:
|
|
114
|
+
output.info(f"{unregistered_hidden} more hidden: not registered, so no service can be created on them.")
|
|
100
115
|
inv.emit(rows, lambda d: rows_table(
|
|
101
116
|
["Cluster", "Type", "Environment", "Region", "Application", "Registered", "Status", "Code"],
|
|
102
117
|
[(r.get("cluster_name") or r.get("name"), r.get("cluster_type"), r.get("environment"),
|
|
@@ -119,7 +119,13 @@ def eks_show(
|
|
|
119
119
|
request = eff.draft
|
|
120
120
|
data = {
|
|
121
121
|
"service": eff.target.service_name, "service_config_code": eff.target.config_code,
|
|
122
|
-
"environment": live.get("environment"), "region": eff.target.region_name,
|
|
122
|
+
"environment": live.get("environment"), "region": eff.target.region_name,
|
|
123
|
+
# The NAME, the same identifier `eks create` and `clusters list` print.
|
|
124
|
+
# This used to report infrastructure_mst_code, so the two commands named
|
|
125
|
+
# one cluster two different ways and anyone comparing them concluded the
|
|
126
|
+
# service had moved. The code is still here, under its own key.
|
|
127
|
+
"cluster": eff.config.get("cluster_name") or live.get("infrastructure_mst_code"),
|
|
128
|
+
"cluster_code": live.get("infrastructure_mst_code"),
|
|
123
129
|
"type": eff.service.get("service_type"), "repository": eff.config.get("repository"),
|
|
124
130
|
"branches": eff.config.get("branches") or eff.config.get("selected_branches"),
|
|
125
131
|
"language": f"{eff.language_label or ''} {eff.language_version or ''}".strip() or None,
|
|
@@ -131,6 +137,8 @@ def eks_show(
|
|
|
131
137
|
output.err_console.print(kv_table([
|
|
132
138
|
("Service", d["service"]), ("Type", d["type"]), ("Environment", f"{d['environment']} / {d['region']}"),
|
|
133
139
|
("Cluster", d["cluster"]), ("Repository", d["repository"] or "–"),
|
|
140
|
+
# Kept out of the table: the code adds nothing a reader can act on,
|
|
141
|
+
# and showing both invites exactly the comparison this fixes.
|
|
134
142
|
("Branches", ", ".join(d["branches"] or []) or "–"), ("Language", d["language"] or "–"),
|
|
135
143
|
("Pending request", f"{d['pending_request']['code']} ({d['pending_request']['status']})" if d["pending_request"] else "none"),
|
|
136
144
|
], title=d["service"]))
|
|
@@ -239,6 +239,14 @@ the approved rows. The summary is printed on every dry run, in json mode too.
|
|
|
239
239
|
finished, and `eks status <service> --env <env>` also asks ArgoCD whether the
|
|
240
240
|
pod is actually serving, which is the real "is it up" question. A finished
|
|
241
241
|
pipeline is not a running application.
|
|
242
|
+
- **Never compare a cluster code with a cluster name.** `eks show` returns both
|
|
243
|
+
`cluster` (the name, e.g. `acme-core-stage-mumbai-01-application-cluster`)
|
|
244
|
+
and `cluster_code` (e.g. `infra-acme-eks-staging-mumbai-app-01`). They are
|
|
245
|
+
two labels for the SAME cluster. Use `cluster` when you talk about it, and
|
|
246
|
+
never tell a user their services are on different clusters because the
|
|
247
|
+
strings differ — check with `devlift clusters list` before claiming any such
|
|
248
|
+
thing. That list is already narrowed to registered clusters a service can
|
|
249
|
+
actually be created on, so it is the authority.
|
|
242
250
|
- Resources behave differently. `s3`, `sqs` and `dynamodb` create and update
|
|
243
251
|
deploy straight away, so there report the resource name and the workflow id,
|
|
244
252
|
which is what `deployment status` needs.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|