Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: openchoreo.dev/v1alpha1
kind: ReleaseBinding
metadata:
name: frontend-development
namespace: default
spec:
environment: development
owner:
componentName: frontend
projectName: doclet
releaseName: frontend-6e0156a1
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
apiVersion: openchoreo.dev/v1alpha1
kind: ComponentRelease
metadata:
name: frontend-6e0156a1
namespace: default
spec:
componentProfile:
parameters:
port: 80
replicas: 1
componentType:
kind: ComponentType
name: deployment/web-application
spec:
environmentConfigs:
openAPIV3Schema:
$defs:
ResourceQuantity:
properties:
cpu:
default: 100m
type: string
memory:
default: 256Mi
type: string
type: object
ResourceRequirements:
properties:
limits:
$ref: '#/$defs/ResourceQuantity'
default: {}
requests:
$ref: '#/$defs/ResourceQuantity'
default: {}
type: object
properties:
imagePullPolicy:
default: IfNotPresent
type: string
replicas:
default: 1
type: integer
resources:
$ref: '#/$defs/ResourceRequirements'
default: {}
type: object
resources:
- id: deployment
template:
apiVersion: apps/v1
kind: Deployment
metadata:
labels: ${metadata.labels}
name: ${metadata.name}
namespace: ${metadata.namespace}
spec:
replicas: ${environmentConfigs.replicas}
selector:
matchLabels: ${metadata.podSelectors}
template:
metadata:
labels: ${metadata.podSelectors}
spec:
containers:
- args: |
${has(workload.container.args) ? workload.container.args : oc_omit()}
command: |
${has(workload.container.command) ? workload.container.command : oc_omit()}
env: ${dependencies.toContainerEnvs()}
envFrom: ${configurations.toContainerEnvFrom()}
image: ${workload.container.image}
imagePullPolicy: ${environmentConfigs.imagePullPolicy}
name: main
resources:
limits:
cpu: ${environmentConfigs.resources.limits.cpu}
memory: ${environmentConfigs.resources.limits.memory}
requests:
cpu: ${environmentConfigs.resources.requests.cpu}
memory: ${environmentConfigs.resources.requests.memory}
volumeMounts: ${configurations.toContainerVolumeMounts()}
volumes: ${configurations.toVolumes()}
- id: service
includeWhen: ${size(workload.endpoints) > 0}
template:
apiVersion: v1
kind: Service
metadata:
labels: ${metadata.labels}
name: ${metadata.componentName}
namespace: ${metadata.namespace}
spec:
ports: ${workload.toServicePorts()}
selector: ${metadata.podSelectors}
type: ClusterIP
- forEach: '${workload.endpoints.transformList(name, ep, ("external" in ep.visibility
&& ep.type in ["HTTP", "REST", "GraphQL", "Websocket"]) ? [name] : []).flatten()}'
id: httproute-external
template:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
labels: '${oc_merge(metadata.labels, {"openchoreo.dev/endpoint-name":
endpoint, "openchoreo.dev/endpoint-visibility": "external"})}'
name: ${oc_generate_name(metadata.componentName, endpoint)}
namespace: ${metadata.namespace}
spec:
hostnames: |
${[gateway.ingress.external.?http, gateway.ingress.external.?https]
.filter(g, g.hasValue()).map(g, g.value().host).distinct()
.map(h, oc_dns_label(endpoint, metadata.componentName, metadata.environmentName, metadata.componentNamespace) + "." + h)}
parentRefs:
- name: ${gateway.ingress.external.name}
namespace: ${gateway.ingress.external.namespace}
rules:
- backendRefs:
- name: ${metadata.componentName}
port: ${workload.endpoints[endpoint].port}
var: endpoint
- forEach: '${workload.endpoints.transformList(name, ep, ("internal" in ep.visibility
&& ep.type in ["HTTP", "REST", "GraphQL", "Websocket"]) ? [name] : []).flatten()}'
id: httproute-internal
template:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
labels: '${oc_merge(metadata.labels, {"openchoreo.dev/endpoint-name":
endpoint, "openchoreo.dev/endpoint-visibility": "internal"})}'
name: ${oc_generate_name(metadata.componentName, endpoint, "internal")}
namespace: ${metadata.namespace}
spec:
hostnames: |
${[gateway.ingress.internal.?http, gateway.ingress.internal.?https]
.filter(g, g.hasValue()).map(g, g.value().host).distinct()
.map(h, oc_dns_label(endpoint, metadata.componentName, metadata.environmentName, metadata.componentNamespace) + "." + h)}
parentRefs:
- name: ${gateway.ingress.internal.name}
namespace: ${gateway.ingress.internal.namespace}
rules:
- backendRefs:
- name: ${metadata.componentName}
port: ${workload.endpoints[endpoint].port}
var: endpoint
- forEach: ${configurations.toConfigEnvsByContainer()}
id: env-config
template:
apiVersion: v1
data: |
${envConfig.envs.transformMapEntry(index, env, {env.name: env.value})}
kind: ConfigMap
metadata:
name: ${envConfig.resourceName}
namespace: ${metadata.namespace}
var: envConfig
- forEach: ${configurations.toConfigFileList()}
id: file-config
template:
apiVersion: v1
data:
${config.name}: |
${config.value}
kind: ConfigMap
metadata:
name: ${config.resourceName}
namespace: ${metadata.namespace}
var: config
- forEach: ${configurations.toSecretEnvsByContainer()}
id: secret-env-external
template:
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: ${secretEnv.resourceName}
namespace: ${metadata.namespace}
spec:
data: |
${secretEnv.envs.map(secret, {
"secretKey": secret.name,
"remoteRef": {
"key": secret.remoteRef.key,
?"property": secret.remoteRef.?property
}
})}
refreshInterval: 15s
secretStoreRef:
kind: ClusterSecretStore
name: ${dataplane.secretStore}
target:
creationPolicy: Owner
name: ${secretEnv.resourceName}
var: secretEnv
- forEach: ${configurations.toSecretFileList()}
id: secret-file-external
template:
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: ${file.resourceName}
namespace: ${metadata.namespace}
spec:
data:
- remoteRef:
key: ${file.remoteRef.key}
property: |
${has(file.remoteRef.property) ? file.remoteRef.property : oc_omit()}
secretKey: ${file.name}
refreshInterval: 15s
secretStoreRef:
kind: ClusterSecretStore
name: ${dataplane.secretStore}
target:
creationPolicy: Owner
name: ${file.resourceName}
var: file
workloadType: deployment
owner:
componentName: frontend
projectName: doclet
workload:
container:
image: host.k3d.internal:10082/doclet-frontend-image:v1-6e0156a1
dependencies:
endpoints:
- component: document-svc
envBindings:
address: DOC_SERVICE_URL
name: http
visibility: project
- component: collab-svc
envBindings:
address: COLLAB_SERVICE_URL
name: http
visibility: project
endpoints:
http:
port: 80
type: HTTP
visibility:
- external
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,25 @@ metadata:
namespace: default
spec:
container:
image: host.k3d.internal:10082/doclet-frontend-image:v1-4a2acc61
image: host.k3d.internal:10082/doclet-frontend-image:v1-6e0156a1
dependencies:
endpoints:
- component: document-svc
envBindings:
address: DOC_SERVICE_URL
name: http
visibility: project
- component: collab-svc
envBindings:
address: COLLAB_SERVICE_URL
name: http
visibility: project
endpoints:
http:
type: HTTP
port: 80
visibility: [external]
dependencies:
endpoints:
- component: document-svc
name: http
visibility: project
envBindings:
address: DOC_SERVICE_URL
- component: collab-svc
name: http
visibility: project
envBindings:
address: COLLAB_SERVICE_URL
type: HTTP
visibility:
- external
owner:
componentName: frontend
projectName: doclet