Skip to content

Commit 998ee16

Browse files
committed
feat(deployctl): note when deployment is demo
1 parent 9503aaf commit 998ee16

File tree

2 files changed

+49
-7
lines changed

2 files changed

+49
-7
lines changed

deploy/deployctl/shell.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,26 @@ def kubectl(args: typing.List[str], **kwargs) -> str:
3535
)
3636

3737

38-
def get_k8s_deployments(selector: str) -> typing.List[str]:
38+
def get_k8s_deployments(selector: str) -> typing.List[typing.Tuple[str, str]]:
3939
result = kubectl(
4040
[
4141
"get",
4242
"deployments",
4343
f"--selector={selector}",
4444
"--sort-by={.metadata.creationTimestamp}",
45-
"--output=jsonpath={range .items[*]}{.metadata.name}{'\\n'}",
45+
"--output=jsonpath={range .items[*]}{.metadata.name} {.spec.template.spec.nodeSelector.cloud\\.google\\.com/gke-nodepool}{'\\n'}",
4646
]
4747
)
48-
return [line for line in result.splitlines() if line]
48+
return [
49+
(parts[0], parts[1]) for line in result.splitlines() for parts in [line.split(maxsplit=1)] if len(parts) == 2
50+
]
4951

5052

5153
def get_most_recent_k8s_deployment(selector: str) -> str:
5254
deployments = get_k8s_deployments(selector)
5355
if not deployments:
5456
raise RuntimeError(f"No deployment matching '{selector}' found")
55-
return deployments[len(deployments) - 1]
57+
return deployments[len(deployments) - 1][0]
5658

5759

5860
def k8s_deployment_exists(k8s_deployment_name: str) -> bool:

deploy/deployctl/subcommands/browser_deployments.py

+43-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import string
66
import sys
77
import typing
8+
import yaml
89

910
from deployctl.config import config
1011
from deployctl.shell import kubectl, get_most_recent_tag, image_exists, get_k8s_deployments
@@ -115,19 +116,58 @@ def deployments_directory() -> str:
115116
return path
116117

117118

119+
def print_pool_name(pool: str) -> str:
120+
if pool == "demo-pool":
121+
return "(demo)"
122+
if pool == "main-pool":
123+
return ""
124+
125+
return pool
126+
127+
128+
def determine_deployment_pool(path: str) -> str:
129+
with open(path) as f:
130+
content = yaml.safe_load(f)
131+
132+
patches = content.get("patches", [])
133+
for patch in patches:
134+
if isinstance(patch, dict):
135+
patch_content = yaml.safe_load(patch.get("patch", ""))
136+
else:
137+
patch_content = yaml.safe_load(patch)
138+
139+
if (
140+
patch_content
141+
and patch_content.get("kind") == "Deployment"
142+
and patch_content.get("spec", {})
143+
.get("template", {})
144+
.get("spec", {})
145+
.get("nodeSelector", {})
146+
.get("cloud.google.com/gke-nodepool")
147+
== "demo-pool"
148+
):
149+
return "demo-pool"
150+
151+
return "main-pool"
152+
153+
118154
def list_deployments() -> None:
119155
print("Local configurations")
120156
print("====================")
121157
paths = reversed(sorted(glob.iglob(f"{deployments_directory()}/*/kustomization.yaml"), key=os.path.getmtime))
122158
for path in paths:
123-
print(os.path.basename(os.path.dirname(path)))
159+
name = os.path.basename(os.path.dirname(path))
160+
pool = determine_deployment_pool(path)
161+
print(f"{name} {print_pool_name(pool)}")
124162

125163
print()
126164

127165
print("Cluster deployments")
128166
print("===================")
129-
for deployment in get_k8s_deployments("component=gnomad-browser"):
130-
print(deployment[len("gnomad-browser-") :])
167+
for deployment, pool in get_k8s_deployments("component=gnomad-browser"):
168+
print(f"{deployment[len('gnomad-browser-'):]} {print_pool_name(pool)}")
169+
170+
print()
131171

132172

133173
def create_deployment(name: str, browser_tag: str = None, api_tag: str = None, demo: bool = False) -> None:

0 commit comments

Comments
 (0)