Skip to content

Commit ac27491

Browse files
committed
Enable helm deployments from values.yaml
1 parent 895361e commit ac27491

File tree

11 files changed

+52
-17
lines changed

11 files changed

+52
-17
lines changed

backend/src/handlers/listCharts.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { ValidationError } from "../service/common/errors.ts";
12
import { listCharts } from "../service/listCharts.ts";
23
import { json, type HandlerMap } from "../types.ts";
34
export const listChartsHandler: HandlerMap["listCharts"] = async (
@@ -8,6 +9,12 @@ export const listChartsHandler: HandlerMap["listCharts"] = async (
89
try {
910
return json(200, res, await listCharts());
1011
} catch (e) {
12+
if (e instanceof ValidationError) {
13+
return json(400, res, {
14+
code: 400,
15+
message: e.message,
16+
});
17+
}
1118
console.error(e);
1219
return json(500, res, {
1320
code: 500,

backend/src/lib/env.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,11 @@ const variables = {
152152
/**
153153
* The name of the project in which custom AnvilOps charts are stored.
154154
*/
155-
CHART_PROJECT_NAME: { required: false },
155+
CHART_PROJECT_NAME: { required: false, defaultValue: "anvilops-chart" },
156+
/**
157+
* Whether to allow Helm deployments
158+
*/
159+
ALLOW_HELM_DEPLOYMENTS: { required: false },
156160
/**
157161
* The hostname for the image registry, e.g. registry.anvil.rcac.purdue.edu
158162
*/

backend/src/service/getSettings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,6 @@ export async function getSettings() {
3333
faq: clusterConfig?.faq,
3434
storageEnabled: env.STORAGE_CLASS_NAME !== undefined,
3535
isRancherManaged: isRancherManaged(),
36+
allowHelmDeployments: env.ALLOW_HELM_DEPLOYMENTS === "true",
3637
};
3738
}

backend/src/service/helper/app.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
MAX_NAMESPACE_LEN,
1111
MAX_STS_NAME_LEN,
1212
} from "../../lib/cluster/resources.ts";
13+
import { env } from "../../lib/env.ts";
1314
import { isRFC1123 } from "../../lib/validate.ts";
1415
import { ValidationError } from "../../service/common/errors.ts";
1516
import { DeploymentConfigService } from "./deploymentConfig.ts";
@@ -135,6 +136,10 @@ export class AppService {
135136
app.config,
136137
app.type === "update" ? app.existingAppId : undefined,
137138
);
139+
} else if (app.config.appType === "helm") {
140+
if (!env.ALLOW_HELM_DEPLOYMENTS) {
141+
throw new ValidationError("Helm deployments are disabled");
142+
}
138143
}
139144
}
140145

backend/src/service/listCharts.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import { getOrCreate } from "../lib/cache.ts";
22
import { env } from "../lib/env.ts";
33
import { getChart } from "../lib/helm.ts";
44
import { getRepositoriesByProject } from "../lib/registry.ts";
5+
import { ValidationError } from "./common/errors.ts";
56

67
export async function listCharts() {
8+
if (!env.ALLOW_HELM_DEPLOYMENTS) {
9+
throw new ValidationError("Helm deployments are disabled");
10+
}
711
return JSON.parse(
812
await getOrCreate("charts", 60 * 60, async () =>
913
JSON.stringify(await listChartsFromRegistry()),

charts/anvilops/templates/anvilops/anvilops-deployment.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ spec:
221221
value: {{ .Values.anvilops.env.harborProjectName }}
222222
- name: CHART_PROJECT_NAME
223223
value: {{ .Values.anvilops.env.harborChartRepoName }}
224+
- name: ALLOW_HELM_DEPLOYMENTS
225+
value: "{{ .Values.anvilops.env.allowHelmDeployments }}"
224226
- name: BUILDKITD_ADDRESS
225227
value: {{ .Values.buildkitd.address }}
226228
- name: FILE_BROWSER_IMAGE

charts/anvilops/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ anvilops:
2020
railpackBuilderImage: registry.anvil.rcac.purdue.edu/anvilops/railpack-builder:latest
2121
helmDeployerImage: registry.anvil.rcac.purdue.edu/anvilops/helm-deployer:latest
2222
logShipperImage: registry.anvil.rcac.purdue.edu/anvilops/log-shipper:latest
23+
allowHelmDeployments: false
2324

2425
# This is for the secrets for pulling an image from a private repository more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
2526
imagePullSecrets: []

frontend/src/components/config/AppConfigFormFields.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
1-
import type { components } from "@/generated/openapi";
2-
import type { CommonFormFields, GroupFormFields } from "@/lib/form.types";
3-
import { Cable } from "lucide-react";
4-
import { useContext } from "react";
51
import { useAppConfig } from "@/components/AppConfigProvider";
62
import { UserContext } from "@/components/UserProvider";
7-
import { GitConfigFields } from "./workload/git/GitConfigFields";
8-
import { HelmConfigFields } from "./helm/HelmConfigFields";
9-
import { ImageConfigFields } from "./workload/image/ImageConfigFields";
103
import { Label } from "@/components/ui/label";
114
import {
125
Select,
@@ -16,13 +9,20 @@ import {
169
SelectTrigger,
1710
SelectValue,
1811
} from "@/components/ui/select";
19-
import { ProjectConfig } from "./ProjectConfig";
20-
import { CommonWorkloadConfigFields } from "./workload/CommonWorkloadConfigFields";
12+
import type { components } from "@/generated/openapi";
2113
import {
2214
makeFunctionalWorkloadSetter,
2315
makeHelmSetter,
2416
makeImageSetter,
2517
} from "@/lib/form";
18+
import type { CommonFormFields, GroupFormFields } from "@/lib/form.types";
19+
import { Cable } from "lucide-react";
20+
import { useContext } from "react";
21+
import { ProjectConfig } from "./ProjectConfig";
22+
import { HelmConfigFields } from "./helm/HelmConfigFields";
23+
import { CommonWorkloadConfigFields } from "./workload/CommonWorkloadConfigFields";
24+
import { GitConfigFields } from "./workload/git/GitConfigFields";
25+
import { ImageConfigFields } from "./workload/image/ImageConfigFields";
2626

2727
export const AppConfigFormFields = ({
2828
groupState,
@@ -90,7 +90,7 @@ export const AppConfigFormFields = ({
9090
<SelectGroup>
9191
<SelectItem value="git">Git Repository</SelectItem>
9292
<SelectItem value="image">OCI Image</SelectItem>
93-
{/* <SelectItem value="helm">Helm Chart</SelectItem> */}
93+
{/* appConfig.allowHelmDeployments && <SelectItem value="helm">Helm Chart</SelectItem> */}
9494
</SelectGroup>
9595
</SelectContent>
9696
</Select>

frontend/src/components/diff/AppConfigDiff.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
import { UserContext } from "@/components/UserProvider";
22
import { Label } from "@/components/ui/label";
33
import { SelectContent, SelectGroup, SelectItem } from "@/components/ui/select";
4-
import { Cable } from "lucide-react";
5-
import { useContext } from "react";
6-
import { GitConfigDiff } from "./workload/git/GitConfigDiff";
7-
import type { CommonFormFields } from "@/lib/form.types";
84
import {
95
getFormStateFromApp,
106
makeFunctionalWorkloadSetter,
117
makeGitSetter,
128
makeHelmSetter,
139
makeImageSetter,
1410
} from "@/lib/form";
11+
import type { CommonFormFields } from "@/lib/form.types";
12+
import { Cable } from "lucide-react";
13+
import { useContext } from "react";
1514
import type { App } from "../../pages/app/AppView";
15+
import { useAppConfig } from "../AppConfigProvider";
1616
import { DiffSelect } from "./DiffSelect";
1717
import { HelmConfigDiff } from "./helm/HelmConfigDiff";
18-
import { ImageConfigDiff } from "./workload/image/ImageConfigDiff";
1918
import { CommonWorkloadConfigDiff } from "./workload/CommonWorkloadConfigDiff";
19+
import { GitConfigDiff } from "./workload/git/GitConfigDiff";
20+
import { ImageConfigDiff } from "./workload/image/ImageConfigDiff";
2021

2122
export const AppConfigDiff = ({
2223
orgId,
@@ -32,7 +33,7 @@ export const AppConfigDiff = ({
3233
disabled?: boolean;
3334
}) => {
3435
const { user } = useContext(UserContext);
35-
36+
const appConfig = useAppConfig();
3637
const selectedOrg = orgId
3738
? user?.orgs?.find((it) => it.id === orgId)
3839
: undefined;
@@ -79,6 +80,7 @@ export const AppConfigDiff = ({
7980
<SelectGroup>
8081
<SelectItem value="git">Git Repository</SelectItem>
8182
<SelectItem value="image">OCI Image</SelectItem>
83+
{/* {appConfig.allowHelmDeployments && <SelectItem value="helm">Helm Chart</SelectItem>} */}
8284
</SelectGroup>
8385
</SelectContent>
8486
</DiffSelect>

openapi/openapi.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ paths:
5050
type: boolean
5151
isRancherManaged:
5252
type: boolean
53+
allowHelmDeployments:
54+
type: boolean
5355
/login:
5456
get:
5557
tags:
@@ -1867,6 +1869,12 @@ paths:
18671869
type: object
18681870
additionalProperties: true
18691871
required: [name, note, url, urlType, version]
1872+
"400":
1873+
description: Validation failed
1874+
content:
1875+
application/json:
1876+
schema:
1877+
$ref: "#/components/schemas/ApiError"
18701878
"500":
18711879
description: Internal server error
18721880
content:

0 commit comments

Comments
 (0)