|
|
@@ -1,3 +1,5 @@
|
|
|
+import api from "shared/api";
|
|
|
+
|
|
|
export type Service = WorkerService | WebService | JobService;
|
|
|
export type ServiceType = 'web' | 'worker' | 'job';
|
|
|
|
|
|
@@ -80,7 +82,7 @@ const WebService = {
|
|
|
targetCPUUtilizationPercentage: '50',
|
|
|
targetRAMUtilizationPercentage: '50',
|
|
|
port: '80',
|
|
|
- generateUrlForExternalTraffic: true,
|
|
|
+ generateUrlForExternalTraffic: false,
|
|
|
customDomain: '',
|
|
|
}),
|
|
|
serialize: (service: WebService) => {
|
|
|
@@ -93,13 +95,6 @@ const WebService = {
|
|
|
targetMemoryUtilizationPercentage: service.targetRAMUtilizationPercentage,
|
|
|
}
|
|
|
} : {};
|
|
|
- const ingress = service.generateUrlForExternalTraffic ? {
|
|
|
- ingress: {
|
|
|
- enabled: true,
|
|
|
- custom_domain: service.customDomain ? true : false,
|
|
|
- hosts: service.customDomain ? [service.customDomain] : [],
|
|
|
- }
|
|
|
- } : {};
|
|
|
return {
|
|
|
replicaCount: service.replicas,
|
|
|
resources: {
|
|
|
@@ -115,7 +110,6 @@ const WebService = {
|
|
|
port: service.port,
|
|
|
},
|
|
|
...autoscaling,
|
|
|
- ...ingress,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -173,5 +167,52 @@ export const Service = {
|
|
|
case 'job':
|
|
|
return JobService.serialize(service);
|
|
|
}
|
|
|
+ },
|
|
|
+ isWeb: (service: Service): service is WebService => service.type === 'web',
|
|
|
+ isWorker: (service: Service): service is WorkerService => service.type === 'worker',
|
|
|
+ isJob: (service: Service): service is JobService => service.type === 'job',
|
|
|
+ handleWebIngress: (service: WebService, stackName: string, projectId?: number, clusterId?: number) => {
|
|
|
+ if (projectId == null || clusterId == null) {
|
|
|
+ throw new Error('Project ID and Cluster ID must be provided to handle web ingress');
|
|
|
+ }
|
|
|
+ if (!service.generateUrlForExternalTraffic) {
|
|
|
+ return {}
|
|
|
+ }
|
|
|
+ const ingress: Ingress = {
|
|
|
+ enabled: true,
|
|
|
+ hosts: [],
|
|
|
+ custom_domain: false,
|
|
|
+ porter_hosts: [],
|
|
|
+ };
|
|
|
+ if (service.customDomain) {
|
|
|
+ ingress.hosts.push(service.customDomain);
|
|
|
+ ingress.custom_domain = true;
|
|
|
+ } else {
|
|
|
+ // const res = await api
|
|
|
+ // .createSubdomain(
|
|
|
+ // "<token>",
|
|
|
+ // {},
|
|
|
+ // {
|
|
|
+ // id: projectId,
|
|
|
+ // cluster_id: clusterId,
|
|
|
+ // release_name: stackName,
|
|
|
+ // namespace: `porter-stack-${stackName}`,
|
|
|
+ // }
|
|
|
+ // )
|
|
|
+ // if (res == null || res.data == null || res.data.external_url == null) {
|
|
|
+ // throw new Error('Failed to create subdomain for web service');
|
|
|
+ // }
|
|
|
+ // ingress.porter_hosts.push(res.data.external_url)
|
|
|
+ throw new Error('Generating external URLs without custom subdomains not yet supported!');
|
|
|
+ }
|
|
|
+
|
|
|
+ return ingress;
|
|
|
}
|
|
|
-}
|
|
|
+}
|
|
|
+
|
|
|
+type Ingress = {
|
|
|
+ enabled: boolean;
|
|
|
+ hosts: string[];
|
|
|
+ custom_domain: boolean;
|
|
|
+ porter_hosts: string[];
|
|
|
+}
|