diff --git a/.github/workflows/release-beta.yml b/.github/workflows/release-beta.yml new file mode 100644 index 0000000..b389b6f --- /dev/null +++ b/.github/workflows/release-beta.yml @@ -0,0 +1,32 @@ +name: Release EOC Beta Chart + +on: + push: + branches: + - eoc-2.0.0 + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Install Helm + uses: azure/setup-helm@v4 + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + + - name: Chart | Push + uses: appany/helm-oci-chart-releaser@v0.5.0 + with: + name: eoc + repository: radiantlogic-devops/helm-charts + path: charts/eoc + tag: 2.0.0 + registry: ghcr.io + update_dependencies: true + registry_username: "$GITHUB_ACTOR" + registry_password: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index e99c86c..fe3b836 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ .DS_Store *.tgz -*.lock \ No newline at end of file +*.lock +local/ +.devcontainer/ \ No newline at end of file diff --git a/charts/eoc/Chart.yaml b/charts/eoc/Chart.yaml index 7e8c2ec..fe8f27d 100644 --- a/charts/eoc/Chart.yaml +++ b/charts/eoc/Chart.yaml @@ -7,13 +7,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.5.3-rc.1 +version: 2.0.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "1.5.3-rc.1" +appVersion: "2.0.0" maintainers: - name: pgodey diff --git a/charts/eoc/templates/_helpers.tpl b/charts/eoc/templates/_helpers.tpl index c2a4a75..838f1d8 100644 --- a/charts/eoc/templates/_helpers.tpl +++ b/charts/eoc/templates/_helpers.tpl @@ -212,4 +212,179 @@ Create the name of the service account to use {{- else }} {{- default "default" .Values.serviceAccount.name }} {{- end }} +{{- end }} + +{{/* +WORKER +*/}} + +{{/* +Expand the name of the chart. +*/}} +{{- define "eoc-worker.name" -}} +{{- if .Values.nameOverride }} +{{- printf "%s-%s" .Values.nameOverride "worker" | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Chart.Name "worker" | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "eoc-worker.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $_name := default .Chart.Name .Values.nameOverride }} +{{- $name := printf "%s-%s" $_name "worker" }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s" $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "eoc-worker.chart" -}} +{{- printf "%s-%s-%s" .Chart.Name "worker" .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "eoc-worker.labels" -}} +helm.sh/chart: {{ include "eoc-worker.chart" . }} +{{ include "eoc-worker.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "eoc-worker.selectorLabels" -}} +app.kubernetes.io/name: {{ include "eoc-worker.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "eoc-worker.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "eoc-worker.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + +{{/* +CLOUD PROVIDER ACCOUNTS HELPERS +*/}} + +{{/* +Cloud Provider Accounts with credentials (for orchestrator) +*/}} +{{- define "eoc.cloudProviderAccounts.withCredentials" -}} +{{- if .Values.cloudProviderAccounts }} +{{- .Values.cloudProviderAccounts | toJson }} +{{- else }} +{{- "[]" }} +{{- end }} +{{- end }} + +{{/* +Cloud Provider Accounts without credentials (for backend) +*/}} +{{- define "eoc.cloudProviderAccounts.withoutCredentials" -}} +{{- if .Values.cloudProviderAccounts }} +{{- $accounts := list }} +{{- range .Values.cloudProviderAccounts }} +{{- $account := dict "name" .name "label" .label "managedBy" .managedBy "platform" .platform }} +{{- $accounts = append $accounts $account }} +{{- end }} +{{- $accounts | toJson }} +{{- else }} +{{- "[]" }} +{{- end }} +{{- end }} + +{{/* +MCP +*/}} + +{{/* +Expand the name of the chart. +*/}} +{{- define "eoc-mcp.name" -}} +{{- if .Values.nameOverride }} +{{- printf "%s-%s" .Values.nameOverride "mcp" | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Chart.Name "mcp" | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "eoc-mcp.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $_name := default .Chart.Name .Values.nameOverride }} +{{- $name := printf "%s-%s" $_name "mcp" }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s" $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "eoc-mcp.chart" -}} +{{- printf "%s-%s-%s" .Chart.Name "mcp" .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "eoc-mcp.labels" -}} +helm.sh/chart: {{ include "eoc-mcp.chart" . }} +{{ include "eoc-mcp.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "eoc-mcp.selectorLabels" -}} +app.kubernetes.io/name: {{ include "eoc-mcp.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "eoc-mcp.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "eoc-mcp.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} {{- end }} \ No newline at end of file diff --git a/charts/eoc/templates/backend_configmap.yaml b/charts/eoc/templates/backend_configmap.yaml index 540cfeb..fed0cba 100644 --- a/charts/eoc/templates/backend_configmap.yaml +++ b/charts/eoc/templates/backend_configmap.yaml @@ -114,6 +114,14 @@ data: REGION: {{ .Values.global.region | quote }} + CLOUD_PROVIDER_ACCOUNTS: {{ include "eoc.cloudProviderAccounts.withoutCredentials" . | quote }} + + TIERS_ENABLED: {{ .Values.ui.tiersVisibility | default false | quote }} + TASK_MANAGEMENT_LOGS_ENABLED: {{ .Values.ui.taskManagementLogsEnabled | default false | quote }} + TASK_MANAGEMENT_RE_RUN_ENABLED: {{ .Values.ui.taskManagementReRunEnabled | default false | quote }} + TASK_MANAGEMENT_CANCEL_ENABLED: {{ .Values.ui.taskManagementCancelEnabled | default false | quote }} + PROMOTION_PIPELINES_ENABLED: {{ .Values.features.pipeline.enabled | default false | quote }} + {{- range $key, $value := (.Values.backend).env }} {{ tpl $key $ }}: {{ tpl (print $value) $ | quote }} {{- end }} diff --git a/charts/eoc/templates/backend_deployment.yaml b/charts/eoc/templates/backend_deployment.yaml index 134a5d4..330e0db 100644 --- a/charts/eoc/templates/backend_deployment.yaml +++ b/charts/eoc/templates/backend_deployment.yaml @@ -5,7 +5,7 @@ metadata: labels: {{- include "eoc-backend.labels" . | nindent 4 }} spec: - replicas: 1 + replicas: {{ .Values.backend.replicas | default 1 }} selector: matchLabels: {{- include "eoc-backend.selectorLabels" . | nindent 6 }} diff --git a/charts/eoc/templates/mcp_configmap.yaml b/charts/eoc/templates/mcp_configmap.yaml new file mode 100644 index 0000000..86d7467 --- /dev/null +++ b/charts/eoc/templates/mcp_configmap.yaml @@ -0,0 +1,28 @@ +{{- if .Values.mcp.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "eoc-mcp.fullname" . }} + labels: + app: {{ template "eoc-mcp.fullname" . }} + chart: "{{ template "eoc-mcp.chart" . }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + role: eoc-mcp +data: + # Server Configuration + PORT: "3000" + NODE_ENV: {{ .Values.mcp.nodeEnv | default "production" | quote }} + + # Global Configuration + ENV_PREFIX: {{ .Values.global.infrastructureName | quote }} + DOMAIN_NAME: {{ .Values.global.domainName | quote }} + REGION: {{ .Values.global.region | quote }} + +{{- range $key, $value := (.Values.mcp).env }} + {{ tpl $key $ }}: {{ tpl (print $value) $ | quote }} +{{- end }} +{{- range $key, $value := (.Values.global).env }} + {{ tpl $key $ }}: {{ tpl (print $value) $ | quote }} +{{- end }} +{{- end }} diff --git a/charts/eoc/templates/mcp_deployment.yaml b/charts/eoc/templates/mcp_deployment.yaml new file mode 100644 index 0000000..594a7fb --- /dev/null +++ b/charts/eoc/templates/mcp_deployment.yaml @@ -0,0 +1,66 @@ +{{- if .Values.mcp.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "eoc-mcp.fullname" . }} + labels: + {{- include "eoc-mcp.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.mcp.replicas | default 1 }} + selector: + matchLabels: + {{- include "eoc-mcp.selectorLabels" . | nindent 6 }} + template: + metadata: + name: {{ include "eoc-mcp.fullname" . | nindent 8 }} + labels: + {{- include "eoc-mcp.selectorLabels" . | nindent 8 }} + annotations: + {{- if (.Values.checksumConfigMap).enabled | default true }} + checksum/environment: {{ include (print $.Template.BasePath "/mcp_configmap.yaml") . | sha256sum }} + {{- end }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 6 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.mcp.image.repository }}:{{ .Values.mcp.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.mcp.image.pullPolicy }} + ports: + - name: http + containerPort: 3000 + protocol: TCP + envFrom: + - configMapRef: + name: {{ template "eoc-mcp.fullname" . }} + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: {{ default 60 .Values.mcp.initialDelaySeconds }} + periodSeconds: {{ default 30 .Values.mcp.periodSeconds }} + failureThreshold: 10 + successThreshold: 1 + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: {{ default 60 .Values.mcp.initialDelaySeconds }} + periodSeconds: {{ default 30 .Values.mcp.periodSeconds }} + failureThreshold: 10 + successThreshold: 1 + {{- with .Values.mcp.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.mcp.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.mcp.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} +{{- end }} diff --git a/charts/eoc/templates/mcp_service.yaml b/charts/eoc/templates/mcp_service.yaml new file mode 100644 index 0000000..26ed2dc --- /dev/null +++ b/charts/eoc/templates/mcp_service.yaml @@ -0,0 +1,17 @@ +{{- if .Values.mcp.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "eoc-mcp.fullname" . }} + labels: + {{- include "eoc-mcp.labels" . | nindent 4 }} +spec: + type: {{ .Values.mcp.service.type }} + ports: + - port: {{ .Values.mcp.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "eoc-mcp.selectorLabels" . | nindent 4 }} +{{- end }} diff --git a/charts/eoc/templates/orchestrator_configmap.yaml b/charts/eoc/templates/orchestrator_configmap.yaml index 6bf0904..83b2df9 100644 --- a/charts/eoc/templates/orchestrator_configmap.yaml +++ b/charts/eoc/templates/orchestrator_configmap.yaml @@ -23,6 +23,7 @@ data: APP_GIT_PRIVATE_KEY: {{ .Values.applications.fid.pipelineConfig.git.privateKey | quote }} DUPLO_SERVICES_NAMESPACE: {{ .Values.global.commonServicesNamespace | default .Values.orchestrator.duplo.servicesTenantName | quote }} ENVIRONMENT_NAMESPACE_PREFIX: {{ .Values.global.environmentNamespacePrefix | quote }} + CLOUD_PROVIDER_ACCOUNTS: {{ include "eoc.cloudProviderAccounts.withCredentials" . | quote }} {{- range $key, $value := (.Values.orchestrator).env }} {{ tpl $key $ }}: {{ tpl (print $value) $ | quote }} {{- end }} diff --git a/charts/eoc/templates/orchestrator_deployment.yaml b/charts/eoc/templates/orchestrator_deployment.yaml index 92dd667..32e5e15 100644 --- a/charts/eoc/templates/orchestrator_deployment.yaml +++ b/charts/eoc/templates/orchestrator_deployment.yaml @@ -5,7 +5,7 @@ metadata: labels: {{- include "eoc-orchestrator.labels" . | nindent 4 }} spec: - replicas: 1 + replicas: {{ .Values.orchestrator.replicas | default 1 }} selector: matchLabels: {{- include "eoc-orchestrator.selectorLabels" . | nindent 6 }} diff --git a/charts/eoc/templates/ui_deployment.yaml b/charts/eoc/templates/ui_deployment.yaml index 3a59f5b..c1f1b26 100644 --- a/charts/eoc/templates/ui_deployment.yaml +++ b/charts/eoc/templates/ui_deployment.yaml @@ -5,7 +5,7 @@ metadata: labels: {{- include "eoc-ui.labels" . | nindent 4 }} spec: - replicas: 1 + replicas: {{ .Values.ui.replicas | default 1 }} selector: matchLabels: {{- include "eoc-ui.selectorLabels" . | nindent 6 }} diff --git a/charts/eoc/templates/worker_configmap.yaml b/charts/eoc/templates/worker_configmap.yaml new file mode 100644 index 0000000..590bb01 --- /dev/null +++ b/charts/eoc/templates/worker_configmap.yaml @@ -0,0 +1,81 @@ +apiVersion: v1 +data: + # Worker shares most backend configuration since it's a clone that processes BullMQ jobs + + UI_BASE_URL: {{ printf "%s%s" .Values.ui.auth.loginReturnUrl .Values.ui.basePath | quote }} + # Redis - Critical for BullMQ + BULL_REDIS_URL: {{ .Values.backend.redis.bullUrl | quote }} + REDIS_HOST: {{ .Values.backend.redis.host | quote }} + REDIS_PORT: {{ .Values.backend.redis.port | quote }} + + # Database + DATABASE_NAME: {{ .Values.backend.database.name | quote }} + DATABASE_SCHEMA: {{ .Values.backend.database.schema | quote }} + DATABASE_HOST: {{ .Values.backend.database.host | quote }} + DATABASE_PORT: {{ .Values.backend.database.port | quote }} + DATABASE_USERNAME: {{ .Values.backend.database.auth.user | quote }} + DATABASE_PASSWORD: {{ .Values.backend.database.auth.pass | quote }} + + # Email/SMTP + EMAIL_FROM: {{ .Values.backend.smtp.from | quote }} + EMAIL_ID: {{ .Values.backend.smtp.user | quote }} + EMAIL_PASS: {{ .Values.backend.smtp.pass | quote }} + EMAIL_HOST: {{ .Values.backend.smtp.host | quote }} + EMAIL_PORT: {{ .Values.backend.smtp.port | quote }} + + # App Configuration + APP_ROOT_DIRECTORY: {{ .Values.backend.appRootDirectory | quote }} + ENCRYPTION_KEY: {{ .Values.backend.encryptionKey | quote }} + + # Global Configuration + ENV_PREFIX: {{ .Values.global.infrastructureName | quote }} + DOMAIN_NAME: {{ .Values.global.domainName | quote }} + REGION: {{ .Values.global.region | quote }} + DUPLO_SERVICES_NAMESPACE: {{ .Values.global.commonServicesNamespace | default .Values.orchestrator.duplo.servicesTenantName | quote }} + ENVIRONMENT_NAMESPACE_PREFIX: {{ .Values.global.environmentNamespacePrefix | default "" | quote }} + + # JWT Configuration -temporary added to bypass worker failing due to JWT secret not being set + JWT_SECRET: {{ .Values.backend.jwt.secret | quote }} + JWT_EXPIRES_IN: {{ .Values.backend.jwt.expiresIn | quote }} + + # Scheduled Maintenance Configuration + SCHEDULED_MAINTENANCE_CONFIG: {{ .Values.backend.scheduledMaintenanceConfig | default "" | toJson | quote }} + + # User Notifications Configuration + NOTIFICATION_CONFIG: {{ .Values.backend.userNotificationsConfig | default "" | toJson | quote }} + + AGENTS_BASE_PATH: {{ .Values.backend.agents.api.endpoint | quote }} + AGENTS_CLIENT_ID: {{ .Values.backend.agents.api.clientId | quote }} + AGENTS_CLIENT_SECRET: {{ .Values.backend.agents.api.clientSecret | quote }} + AGENTS_INLETS_TOKEN: {{ .Values.backend.agents.inlets.token | quote }} + AGENTS_SERVER_NAME: {{ .Values.backend.agents.inlets.serverName | quote }} + AGENTS_SERVER_ENDPOINT: {{ .Values.backend.agents.inlets.serverEndpoint | quote }} + + SDC_AWS_ACCESS_KEY_ID: {{ .Values.backend.agents.client.accessKeyId | quote}} + SDC_AWS_ACCESS_KEY_SECRET: {{ .Values.backend.agents.client.accessKeySecret | quote }} + SDC_AWS_REGION: {{ .Values.backend.agents.client.s3Region | quote }} + SDC_AWS_S3_BUCKET_NAME: {{ .Values.backend.agents.client.s3BucketName | quote }} + SDC_CLIENT_VERSION: {{ .Values.backend.agents.client.version | quote }} + + GRAFANA_BASE_URL: {{ .Values.backend.grafana.host | quote }} + GRAFANA_USERNAME: {{ .Values.backend.grafana.username | quote }} + GRAFANA_PASSWORD: {{ .Values.backend.grafana.password | quote }} + GRAFANA_METRICS_PREFIXES: {{ .Values.backend.grafana.metricsPrefixes | quote }} + GRAFANA_BASIC_AUTH: {{ .Values.backend.grafana.basicAuth | default "" | quote }} + +{{- range $key, $value := (.Values.worker).env }} + {{ tpl $key $ }}: {{ tpl (print $value) $ | quote }} +{{- end }} +{{- range $key, $value := (.Values.global).env }} + {{ tpl $key $ }}: {{ tpl (print $value) $ | quote }} +{{- end }} +kind: ConfigMap +metadata: + name: {{ template "eoc-worker.fullname" . }} + labels: + app: {{ template "eoc-worker.fullname" . }} + chart: "{{ template "eoc-worker.chart" . }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + role: eoc-worker + diff --git a/charts/eoc/templates/worker_deployment.yaml b/charts/eoc/templates/worker_deployment.yaml new file mode 100644 index 0000000..9f5d1bc --- /dev/null +++ b/charts/eoc/templates/worker_deployment.yaml @@ -0,0 +1,63 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "eoc-worker.fullname" . }} + labels: + {{- include "eoc-worker.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.worker.replicas | default 1 }} + selector: + matchLabels: + {{- include "eoc-worker.selectorLabels" . | nindent 6 }} + template: + metadata: + name: {{ include "eoc-worker.fullname" . | nindent 8 }} + labels: + {{- include "eoc-worker.selectorLabels" . | nindent 8 }} + annotations: + {{- if (.Values.checksumConfigMap).enabled | default true }} + checksum/environment: {{ include (print $.Template.BasePath "/worker_configmap.yaml") . | sha256sum }} + {{- end }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 6 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.worker.image.repository }}:{{ .Values.worker.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.worker.image.pullPolicy }} + ports: + - containerPort: 80 + envFrom: + - configMapRef: + name: {{ template "eoc-worker.fullname" . }} + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: {{ default 60 .Values.worker.initialDelaySeconds }} + periodSeconds: {{ default 30 .Values.worker.periodSeconds }} + failureThreshold: 10 + successThreshold: 1 + readinessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: {{ default 60 .Values.worker.initialDelaySeconds }} + periodSeconds: {{ default 30 .Values.worker.periodSeconds }} + failureThreshold: 10 + successThreshold: 1 + {{- with .Values.worker.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.worker.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.worker.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + diff --git a/charts/eoc/templates/worker_service.yaml b/charts/eoc/templates/worker_service.yaml new file mode 100644 index 0000000..b639a36 --- /dev/null +++ b/charts/eoc/templates/worker_service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "eoc-worker.fullname" . }}-service +spec: + ports: + - name: {{ include "eoc-worker.fullname" . }}-service-port + protocol: TCP + port: 80 + targetPort: 3000 + selector: + {{- include "eoc-worker.selectorLabels" . | nindent 4 }} + diff --git a/charts/eoc/values.yaml b/charts/eoc/values.yaml index 998ed0f..1e24266 100644 --- a/charts/eoc/values.yaml +++ b/charts/eoc/values.yaml @@ -17,6 +17,21 @@ global: ## AWS_REGION: us-east-1 env: {} +## Cloud Provider Accounts Configuration +## This configuration will be converted to JSON and set as CLOUD_PROVIDER_ACCOUNTS env var +## For backend: credential block will be excluded +## For orchestrator: full configuration including credentials will be included +## +## cloudProviderAccounts: +## - name: ops01 +## label: Operations Account 01 +## managedBy: radiant +## platform: aws # Supported values: aws, azure, gcp +## credential: +## token: +## baseUrl: https://ops01.dc.radiantlogic.io +cloudProviderAccounts: [] + ## Image pull secrets to pull the images ## Do not add under global as it is used by redis ## imagePullSecrets: @@ -127,6 +142,7 @@ features: appName: "Promotion pipelines feature" ui: + replicas: 1 basePath: /eoc # example https://{fqdm}/eoc-backend apiBaseUrl: "" @@ -172,6 +188,7 @@ ui: env: {} backend: + replicas: 1 basePath: eoc-backend redis: # redundant, will be removed @@ -462,7 +479,55 @@ backend: ## AWS_REGION: us-east-1 env: {} +worker: + replicas: 1 + # Worker shares backend configuration (redis, database, smtp, appRootDirectory, encryptionKey) + # Only worker-specific settings are defined here + image: + repository: radiantone/eoc-worker + pullPolicy: Always + # Overrides the image tag whose default is the chart appVersion. + # tag: "dev" + nodeSelector: {} + tolerations: [] + affinity: {} + initialDelaySeconds: 60 + periodSeconds: 30 + ## Extra environment variables that will be pass onto deployment pods + ## + ## env: + ## AWS_ROLE_ARN: arn:aws:iam::123456789000:role/iam-role-name-here + ## AWS_REGION: us-east-1 + env: {} + +mcp: + # Enable or disable the MCP server deployment + enabled: false + replicas: 1 + # Node environment (production, development) + nodeEnv: production + image: + repository: radiantone/eoc-mcp + pullPolicy: Always + # Overrides the image tag whose default is the chart appVersion. + # tag: "dev" + service: + type: NodePort + port: 80 + nodeSelector: {} + tolerations: [] + affinity: {} + initialDelaySeconds: 60 + periodSeconds: 30 + ## Extra environment variables that will be pass onto deployment pods + ## + ## env: + ## AWS_ROLE_ARN: arn:aws:iam::123456789000:role/iam-role-name-here + ## AWS_REGION: us-east-1 + env: {} + orchestrator: + replicas: 1 duplo: token: "" baseUrl: ""