Skip to content

Commit b698aac

Browse files
committed
chore: show mgmt scripts
1 parent d06c684 commit b698aac

File tree

4 files changed

+197
-2
lines changed

4 files changed

+197
-2
lines changed

.gitignore

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
az/push.sh
2-
mgmt
1+
az/push.sh

mgmt/azrm.sh

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export ENV=dev
2+
export AZCOPY_AUTO_LOGIN_TYPE=AZCLI
3+
export AZ_STORAGE_ACCOUNT="${ENV}kernaicluster"
4+
export AZ_STORAGE_FILE_SHARE="${ENV}-cluster-cognition"
5+
6+
azcopy rm --recursive "https://$AZ_STORAGE_ACCOUNT.file.core.windows.net/$AZ_STORAGE_FILE_SHARE/caddy/*"
7+

mgmt/misc.sh

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
APP_REPOS=(
2+
admin-dashboard
3+
cognition-exec-env
4+
cognition-gateway
5+
cognition-pdf2md
6+
cognition-task-master
7+
cognition-ui
8+
ecosystem-welcome-screen
9+
gates-gateway
10+
gates-runtime
11+
gates-ui
12+
platform-monitoring
13+
refinery-authorizer
14+
refinery-commercial-proxy
15+
refinery-config
16+
refinery-doc-ock
17+
refinery-embedder
18+
refinery-entry
19+
refinery-gateway
20+
refinery-gateway-proxy
21+
refinery-model-provider
22+
refinery-neural-search
23+
refinery-tokenizer
24+
refinery-ui
25+
refinery-updater
26+
refinery-weak-supervisor
27+
refinery-websocket
28+
refinery-zero-shot
29+
refinery-ac-exec-env
30+
refinery-lf-exec-env
31+
refinery-ml-exec-env
32+
refinery-record-ide-env
33+
)
34+
35+
for repo in ${APP_REPOS[@]}; do
36+
cd $repo
37+
git checkout -b ci-updates
38+
cp ../hosted-inference-api/.github/workflows/az_acr_delete.yml .github/workflows/az_acr_delete.yml
39+
git add .github
40+
git commit -m "ci(feat): add acr delete workflow"
41+
git push origin ci-updates
42+
gh pr create --head ci-updates --base dev --fill
43+
git checkout dev
44+
git branch -D ci-updates
45+
cd ..
46+
done

mgmt/tfdocs.py

+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import os
2+
import json
3+
4+
from pathlib import Path
5+
from tfparse import load_from_path
6+
7+
8+
BASE_DIR = Path("/Users/andhrelja/DevOps/Infrastructure")
9+
TF_DIR = "tf-azure-fnapp-github-runner-monitor"
10+
os.makedirs(BASE_DIR / TF_DIR / "docs", exist_ok=True)
11+
12+
DOCS_HEADER = """
13+
# Azure {resource_type}
14+
15+
Default location: {location}
16+
Default resource group: {resource_group_name}
17+
"""
18+
19+
DOCS_BODY = """
20+
### {resource_name}
21+
22+
Docs: [Azure {resource_name}](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/{resource_type}/{resource_name_fmt})
23+
24+
```hcl
25+
{resource} {path} {{
26+
name = "{name}"
27+
resource_group_name = "{resource_group_name}"
28+
{kwargs}
29+
}}
30+
```
31+
"""
32+
33+
# Load all TF files from the given path
34+
parsed = load_from_path(
35+
BASE_DIR / TF_DIR,
36+
vars_paths=("vars-prod.tfvars",), # "vars-prod.tfvars"
37+
)
38+
39+
resource_group = {
40+
"location": "northeurope",
41+
**next(
42+
filter(
43+
lambda x: x["__tfmeta"]["path"] == "data.azurerm_resource_group.this",
44+
parsed["azurerm_resource_group"],
45+
)
46+
),
47+
}
48+
49+
resources = {
50+
key: list(
51+
filter(
52+
lambda x: x["__tfmeta"].get("type") == "resource",
53+
parsed[key],
54+
)
55+
)
56+
for key in parsed.keys()
57+
}
58+
59+
data_sources = {
60+
key: list(
61+
filter(
62+
lambda x: x["__tfmeta"].get("type") == "data",
63+
parsed[key],
64+
)
65+
)
66+
for key in parsed.keys()
67+
}
68+
69+
variables = {
70+
key: list(
71+
filter(
72+
lambda x: x["__tfmeta"].get("type") is None,
73+
parsed[key],
74+
)
75+
)
76+
for key in parsed.keys()
77+
}
78+
79+
80+
def rm__attr(obj, attr):
81+
if type(obj) is str or obj is None:
82+
return obj
83+
if attr in obj.keys():
84+
obj.pop(attr)
85+
86+
for key in obj.keys():
87+
if type(obj[key]) is dict:
88+
rm__attr(obj[key], attr)
89+
if type(obj[key]) is list:
90+
for item in obj[key]:
91+
if type(item) is dict:
92+
rm__attr(item, attr)
93+
return obj
94+
95+
96+
def generate_resource_docs(resources, resource_group, resource_type):
97+
resource_docs = DOCS_HEADER.format(
98+
location=resource_group["location"],
99+
resource_group_name=resource_group["name"],
100+
resource_type=resource_type.replace("-", " ").title(),
101+
)
102+
103+
for resource_name, objs in resources.items():
104+
for obj in objs:
105+
obj["path"] = obj["__tfmeta"]["path"]
106+
rm__attr(obj, "__tfmeta")
107+
rm__attr(obj, "id")
108+
rm__attr(obj, "__ref__")
109+
110+
if "resource_group_name" not in obj.keys():
111+
obj["resource_group_name"] = resource_group["name"]
112+
if "body" in obj.keys():
113+
obj["body"] = json.dumps(json.loads(obj["body"]), indent=2)
114+
for key in obj.keys():
115+
if type(obj[key]) is dict and "__attribute__" in obj[key].keys():
116+
obj[key] = obj[key]["__attribute__"]
117+
if type(obj[key]) in [list, dict]:
118+
obj[key] = json.dumps(obj[key], indent=2)
119+
120+
fmt_kwargs = dict(
121+
resource=resource_type.replace("data-sources", "data"),
122+
resource_type=resource_type,
123+
resource_name=resource_name,
124+
resource_name_fmt=resource_name.replace("azurerm_", ""),
125+
path=obj.pop("path"),
126+
resource_group_name=obj.pop("resource_group_name"),
127+
kwargs="\n".join(
128+
[f'{k}\t= "{v}"' for k, v in filter(None, obj.items())]
129+
),
130+
)
131+
132+
resource_docs += DOCS_BODY.format(
133+
name=obj.pop("name") if "name" in obj.keys() else fmt_kwargs["path"],
134+
**fmt_kwargs,
135+
)
136+
137+
with open(BASE_DIR / TF_DIR / "docs" / f"{resource_type}.md", "w") as f:
138+
f.write(resource_docs)
139+
140+
141+
generate_resource_docs(resources, resource_group, "resources")
142+
generate_resource_docs(data_sources, resource_group, "data-sources")
143+
generate_resource_docs(variables, resource_group, "variables")

0 commit comments

Comments
 (0)