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.
Files changed (66) hide show
  1. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/PKG-INFO +1 -1
  2. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/MANUAL.md +17 -11
  3. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/__init__.py +1 -1
  4. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/clusters.py +25 -10
  5. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/eks.py +9 -1
  6. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/SKILL.md +8 -0
  7. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/PKG-INFO +1 -1
  8. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/README.md +0 -0
  9. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/__main__.py +0 -0
  10. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/__init__.py +0 -0
  11. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/approvals.py +0 -0
  12. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/catalog.py +0 -0
  13. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/client.py +0 -0
  14. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/context.py +0 -0
  15. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/deployments.py +0 -0
  16. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/infra.py +0 -0
  17. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/infra_list.py +0 -0
  18. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/kong.py +0 -0
  19. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/services.py +0 -0
  20. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/api/vpc.py +0 -0
  21. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/app.py +0 -0
  22. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/__init__.py +0 -0
  23. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/oauth.py +0 -0
  24. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/session.py +0 -0
  25. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/auth/storage.py +0 -0
  26. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/__init__.py +0 -0
  27. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/approval.py +0 -0
  28. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/auth.py +0 -0
  29. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/catalog.py +0 -0
  30. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/deployment.py +0 -0
  31. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/dynamodb.py +0 -0
  32. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/kong.py +0 -0
  33. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/languages.py +0 -0
  34. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/manual.py +0 -0
  35. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/repositories.py +0 -0
  36. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/request.py +0 -0
  37. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/s3.py +0 -0
  38. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/skill.py +0 -0
  39. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/commands/sqs.py +0 -0
  40. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/config.py +0 -0
  41. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/context.py +0 -0
  42. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/data/placement/vance.json +0 -0
  43. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/errors.py +0 -0
  44. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/__init__.py +0 -0
  45. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/approvals.py +0 -0
  46. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/eks.py +0 -0
  47. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/kong.py +0 -0
  48. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/placement.py +0 -0
  49. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/resources.py +0 -0
  50. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/status.py +0 -0
  51. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/ops/wait.py +0 -0
  52. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/render/__init__.py +0 -0
  53. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/render/output.py +0 -0
  54. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/resolve/__init__.py +0 -0
  55. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/resolve/allowlist.py +0 -0
  56. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/resolve/names.py +0 -0
  57. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/reference/commands.md +0 -0
  58. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/reference/exit-codes.md +0 -0
  59. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli/skill/reference/workflows.md +0 -0
  60. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/SOURCES.txt +0 -0
  61. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/dependency_links.txt +0 -0
  62. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/entry_points.txt +0 -0
  63. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/requires.txt +0 -0
  64. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/devlift_cli.egg-info/top_level.txt +0 -0
  65. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/pyproject.toml +0 -0
  66. {devlift_cli-0.1.3 → devlift_cli-0.1.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devlift-cli
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: DevLift command-line tool: create, change, review and deploy DevLift resources from the terminal.
5
5
  License: Proprietary
6
6
  Keywords: devlift,devops,deployment,infrastructure,cli
@@ -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 to placements you could really create in: the backend reports only
231
- the environments this deployment serves, and the placement allowlist
232
- (section 5) says which of those offer EKS or ECS. Clusters outside both are
233
- real but unusable from here, so they are hidden and counted; `--all` shows
234
- everything the backend reports.
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 Type Environment Region Application Registered
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
- Within that, **Registered** is the flag that matters: only a registered
249
- cluster may take a new service, and `eks create` will not offer the others.
250
- A row whose Application reads "tenant-level" belongs to no single product
251
- and is the fallback for products with no cluster of their own.
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`.
@@ -1,3 +1,3 @@
1
1
  """DevLift command-line tool."""
2
2
 
3
- __version__ = "0.1.3"
3
+ __version__ = "0.1.4"
@@ -66,14 +66,17 @@ def clusters_list(
66
66
  ):
67
67
  """List the clusters a service can run on.
68
68
 
69
- Narrowed to placements this deployment serves and the placement allowlist
70
- permits, so a cluster listed here is one a service could actually be
71
- created on. `--all` shows everything the backend reports.
72
-
73
- "Registered" is the flag that matters within that: only a registered
74
- cluster may take a new service, and `eks create` will not offer the
75
- others. A cluster with no application is tenant-level and is the fallback
76
- for every product that has none of its own.
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
- if before > len(rows):
99
- output.info(f"{before - len(rows)} of {before} hidden: not a placement this deployment offers; --all shows everything.")
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, "cluster": live.get("infrastructure_mst_code"),
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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devlift-cli
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: DevLift command-line tool: create, change, review and deploy DevLift resources from the terminal.
5
5
  License: Proprietary
6
6
  Keywords: devlift,devops,deployment,infrastructure,cli
File without changes
File without changes
File without changes