diff --git a/apps/andi/README.md b/apps/andi/README.md index 909b5fcf0..7c0274a41 100644 --- a/apps/andi/README.md +++ b/apps/andi/README.md @@ -29,7 +29,7 @@ To run ANDI locally, take the following steps: 3. Run the command `npm install` in the assets folder. 4. Move to the root ANDI folder by running the command `cd ..`. (You should now be in the same directory as this README.) 5. Run `MIX_ENV=integration mix docker.start` to start docker for ANDI local development. If this command times out and you see an error message like 'patiently gave up waiting for...', re-run the command. -6. Start Phoenix endpoint locally with `AUTH0_CLIENT_SECRET="" MIX_ENV=integration iex -S mix start`. Use the auth_client_secret that you obtained in the Auth0 requirements steps above. +6. Start Phoenix endpoint locally with `AUTH0_CLIENT_SECRET="8z_q5nB-8s44duzGc1NzjasvAjGbASk9X8hzRuIq0YbntNb1mbzE2Q3PXEpWnkxo" MIX_ENV=integration iex -S mix start`. Use the auth_client_secret that you obtained in the Auth0 requirements steps above. 7. Congratulations! ANDI is now running locally. Because Auth0 requires `https`, you can visit paths like `localhost` by using `https://127.0.0.1.nip.io:4443/datasets` NOTES: diff --git a/apps/valkyrie/Dockerfile b/apps/valkyrie/Dockerfile index d96875e5a..3b386206c 100644 --- a/apps/valkyrie/Dockerfile +++ b/apps/valkyrie/Dockerfile @@ -1,7 +1,7 @@ FROM smartcitiesdata:build as builder RUN MIX_ENV=prod mix distillery.release --name valkyrie -FROM hexpm/elixir:1.10.4-erlang-23.2.7.5-alpine-3.16.0 +FROM hexpm/elixir:1.10.4-erlang-23.2.7.5-alpine-3.16.9 ENV HOME /opt/app ENV REPLACE_OS_VARS=true WORKDIR ${HOME} diff --git a/apps/valkyrie/mix.exs b/apps/valkyrie/mix.exs index 6797602d9..66dbb7d32 100644 --- a/apps/valkyrie/mix.exs +++ b/apps/valkyrie/mix.exs @@ -4,7 +4,7 @@ defmodule Valkyrie.MixProject do def project do [ app: :valkyrie, - version: "1.7.38", + version: "1.7.39", elixir: "~> 1.10", build_path: "../../_build", config_path: "../../config/config.exs", diff --git a/charts/alchemist/.helmignore b/charts/alchemist/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/alchemist/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/alchemist/Chart.yaml b/charts/alchemist/Chart.yaml new file mode 100644 index 000000000..dd95a4b99 --- /dev/null +++ b/charts/alchemist/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +appVersion: "1.0" +description: Transforms data from the raw topic and writes it to transformed topic +name: alchemist +version: 1.0.6 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/alchemist diff --git a/charts/alchemist/README.md b/charts/alchemist/README.md new file mode 100644 index 000000000..b2916cd92 --- /dev/null +++ b/charts/alchemist/README.md @@ -0,0 +1,48 @@ +# alchemist + +![Version: 1.0.6](https://img.shields.io/badge/Version-1.0.6-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Transforms data from the raw topic and writes it to transformed topic + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| enabled | bool | `false` | | +| fullnameOverride | string | `""` | | +| global.kafka.brokers | string | `"streaming-service-kafka-bootstrap:9092"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/alchemist"` | | +| image.tag | string | `"development"` | | +| kafka.dlqTopic | string | `"streaming-dead-letters"` | | +| kafka.inputTopicPrefix | string | `"raw"` | | +| kafka.outputTopicPrefix | string | `"transformed"` | | +| localstack.enabled | bool | `false` | | +| monitoring.targetPort | int | `9002` | | +| nameOverride | string | `""` | | +| nodeSelector | object | `{}` | | +| processor_stages | int | `1` | | +| profiling_enabled | bool | `false` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `1` | | +| resources.limits.cpu | string | `"300m"` | | +| resources.limits.memory | string | `"512Mi"` | | +| resources.requests.cpu | string | `"300m"` | | +| resources.requests.memory | string | `"512Mi"` | | +| service.type | string | `"ClusterIP"` | | +| tolerations | list | `[]` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/alchemist/templates/_helpers.tpl b/charts/alchemist/templates/_helpers.tpl new file mode 100644 index 000000000..466bf927b --- /dev/null +++ b/charts/alchemist/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/alchemist/templates/cluster-rbac.yaml b/charts/alchemist/templates/cluster-rbac.yaml new file mode 100644 index 000000000..1ea211e7d --- /dev/null +++ b/charts/alchemist/templates/cluster-rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Chart.Name }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ .Chart.Name }} +subjects: +- kind: ServiceAccount + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} +{{- end }} diff --git a/charts/alchemist/templates/deployment.yaml b/charts/alchemist/templates/deployment.yaml new file mode 100644 index 000000000..063cac786 --- /dev/null +++ b/charts/alchemist/templates/deployment.yaml @@ -0,0 +1,94 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "helm.fullname" . }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + helm.sh/chart: {{ include "helm.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: {{ .Chart.Name }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 9001 + - containerPort: 4369 + env: + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers }} + - name: RUN_IN_KUBERNETES + value: "true" + - name: INPUT_TOPIC_PREFIX + value: {{.Values.kafka.inputTopicPrefix}} + - name: OUTPUT_TOPIC_PREFIX + value: {{.Values.kafka.outputTopicPrefix}} + - name: DLQ_TOPIC + value: {{.Values.kafka.dlqTopic}} + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} + - name: PROCESSOR_STAGES + value: {{ .Values.processor_stages | quote }} + - name: PROFILING_ENABLED + value: {{ .Values.profiling_enabled | quote }} + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/charts/alchemist/templates/service.yaml b/charts/alchemist/templates/service.yaml new file mode 100644 index 000000000..82027671d --- /dev/null +++ b/charts/alchemist/templates/service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app.kubernetes.io/name: {{ include "helm.name" . }} + ports: + - name: erlang-vm + protocol: TCP + port: 9001 + targetPort: 9001 + - name: epmd + protocol: TCP + port: 4369 + targetPort: 4369 + type: {{ .Values.service.type }} diff --git a/charts/alchemist/values.yaml b/charts/alchemist/values.yaml new file mode 100644 index 000000000..7b65d37d9 --- /dev/null +++ b/charts/alchemist/values.yaml @@ -0,0 +1,66 @@ +# alchemist is disabled by default until developement goals are met and the +# "topicPrefix" in reaper + valkyrie are updated to accomidate alchemist +enabled: false + +global: + kafka: + brokers: streaming-service-kafka-bootstrap:9092 + redis: + host: redis.external-services + port: 6379 + password: "" + passwordSecret: "" + sslEnabled: false + +replicaCount: 1 + +image: + repository: smartcitiesdata/alchemist + tag: development + pullPolicy: Always + majorPin: "" + minorPin: "" + +service: + type: ClusterIP + +# monitoring: +# targetPort: 4000 +# If running locally on Minikube, set to true to deploy an AWS localstack instance +# https://github.com/localstack/localstack +localstack: + enabled: false + +kafka: + #comma delimited list of kafka seed brokersß + inputTopicPrefix: "raw" + outputTopicPrefix: "transformed" + dlqTopic: "streaming-dead-letters" + +nameOverride: "" +fullnameOverride: "" + +processor_stages: 1 + +profiling_enabled: false + +resources: + limits: + cpu: 300m + memory: 512Mi + requests: + cpu: 300m + memory: 512Mi + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true + +monitoring: + targetPort: 9002 diff --git a/charts/andi/Chart.yaml b/charts/andi/Chart.yaml new file mode 100644 index 000000000..7655cdbc4 --- /dev/null +++ b/charts/andi/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +description: REST API to allow for dataset definition ingestion +name: andi +version: 2.3.19 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/andi diff --git a/charts/andi/README.md b/charts/andi/README.md new file mode 100644 index 000000000..103ec0ea7 --- /dev/null +++ b/charts/andi/README.md @@ -0,0 +1,87 @@ +# andi + +![Version: 2.3.19](https://img.shields.io/badge/Version-2.3.19-informational?style=flat-square) + +REST API to allow for dataset definition ingestion + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| accessLevel | string | `"private"` | | +| auth.andi_auth0_client_id | string | `""` | | +| auth.auth0_client_secret | string | `""` | | +| aws.accessKeyId | string | `""` | | +| aws.accessKeySecret | string | `""` | | +| aws.s3HostName | string | `nil` | | +| aws.s3Port | string | `nil` | | +| documentationRoot | string | `""` | | +| footer.leftSideLink | string | `"https://github.com/UrbanOS-Public/smartcitiesdata"` | | +| footer.leftSideText | string | `"© 2023 UrbanOS. All rights reserved."` | | +| footer.rightLinks | string | `"[{\"linkText\":\"Discovery UI\", \"url\":\"https://discovery.dev.apps.hsrqs9l3.eastus.aroapp.io/\"}, {\"linkText\":\"UrbanOS\", \"url\":\"https://github.com/UrbanOS-Public/smartcitiesdata\"}]"` | | +| fullnameOverride | string | `""` | | +| global.auth.auth0_domain | string | `""` | | +| global.auth.jwt_issuer | string | `""` | | +| global.auth.raptor_url | string | `""` | | +| global.ingress.dnsZone | string | `"localhost"` | | +| global.ingress.rootDnsZone | string | `"localhost"` | | +| global.kafka.brokers | string | `"streaming-service-kafka-bootstrap:9092"` | | +| global.objectStore.accessKey | string | `nil` | | +| global.objectStore.accessSecret | string | `nil` | | +| global.presto.url | string | `"http://platform-kubernetes-data-platform-presto:8080"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| global.require_admin_api_key | bool | `false` | | +| global.vault.endpoint | string | `"urban-os-vault:8200"` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/andi"` | | +| image.tag | string | `"development"` | | +| ingress.annotations | string | `nil` | | +| ingress.enabled | bool | `true` | | +| ingress.tls | bool | `true` | | +| monitoring.targetPort | int | `9002` | | +| nameOverride | string | `""` | | +| postgres.dbname | string | `"postgres"` | | +| postgres.host | string | `"example.com"` | | +| postgres.password | string | `"password"` | | +| postgres.port | string | `"5432"` | | +| postgres.user | string | `"postgres"` | | +| postgres.verifySNI | bool | `true` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `1` | | +| resources.limits.cpu | string | `"150m"` | | +| resources.limits.memory | string | `"256Mi"` | | +| resources.requests.cpu | string | `"150m"` | | +| resources.requests.memory | string | `"256Mi"` | | +| s3.hostedFileBucket | string | `"andi-public-sample-datasets"` | | +| s3.hostedFileRegion | string | `"us-west-2"` | | +| secrets.live_view.enable | bool | `true` | | +| secrets.live_view.value | string | `"devonlyenablefalseanddefineoutofsourceinprod"` | | +| secureCookie | string | `"false"` | | +| service.port | int | `80` | | +| service.targetPort | int | `4000` | | +| service.type | string | `"NodePort"` | | +| theme.customFavIconUrl | string | `nil` | | +| theme.errorColor | string | `"#B80000"` | | +| theme.headerText | string | `"Data Submission Tool"` | | +| theme.logo | string | `"/images/UrbanOS.svg"` | | +| theme.primaryColor | string | `"#0F64B3"` | | +| theme.secondaryColor | string | `"#1176D4"` | | +| theme.successColor | string | `"#008000"` | | +| tolerations[0].effect | string | `"NoExecute"` | | +| tolerations[0].key | string | `"example.run.public-worker"` | | +| tolerations[0].operator | string | `"Equal"` | | +| tolerations[0].value | string | `"true"` | | +| vaultRole | string | `"andi-role"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/andi/templates/_helpers.tpl b/charts/andi/templates/_helpers.tpl new file mode 100644 index 000000000..ef6051778 --- /dev/null +++ b/charts/andi/templates/_helpers.tpl @@ -0,0 +1,39 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default service name for the Kafka Bootstrap endpoint. +*/}} +{{- define "kafka.brokerservice" -}} +{{- printf "%s-%s.%s:%s" .Release.Name "kafka-bootstrap" .Release.Namespace "9092" | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/andi/templates/deployment.yaml b/charts/andi/templates/deployment.yaml new file mode 100644 index 000000000..430930e91 --- /dev/null +++ b/charts/andi/templates/deployment.yaml @@ -0,0 +1,180 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "helm.fullname" . }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + app.kubernetes.io/name: {{ include "helm.fullname" . }} + helm.sh/chart: {{ include "helm.chart" . }} + app.kubernetes.io/instance: {{ include "helm.fullname" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "helm.fullname" . }} + app.kubernetes.io/instance: {{ include "helm.fullname" . }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "helm.fullname" . }} + app.kubernetes.io/instance: {{ include "helm.fullname" . }} + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: {{ include "helm.fullname" . }} + {{- end }} + containers: + - name: {{ include "helm.fullname" . }} + resources: +{{ toYaml .Values.resources | indent 12 }} + ports: + - containerPort: 80 + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + livenessProbe: + httpGet: + path: /healthcheck + port: 4000 + scheme: HTTP + initialDelaySeconds: 100 + timeoutSeconds: 5 + periodSeconds: 100 + successThreshold: 1 + failureThreshold: 3 + env: + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers | default (include "kafka.brokerservice" .) }} + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: RUN_IN_KUBERNETES + value: "true" + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NODE_ID + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LIVEVIEW_SALT + valueFrom: + secretKeyRef: + name: andi-lv-salt + key: salt + - name: POSTGRES_HOST + value: {{ .Values.postgres.host }} + - name: POSTGRES_DBNAME + value: {{ .Values.postgres.dbname }} + - name: POSTGRES_USER + value: {{ .Values.postgres.user }} + - name: POSTGRES_PASSWORD + {{- if .Values.postgres.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ .Values.postgres.passwordSecret }} + key: {{ .Values.postgres.passwordSecretKey }} + {{- else }} + value: {{ squote .Values.postgres.password }} + {{- end }} + - name: POSTGRES_PORT + value: {{ quote .Values.postgres.port }} + - name: POSTGRES_VERIFY_SNI + value: {{ quote .Values.postgres.verifySNI }} + - name: SECRETS_ENDPOINT + value: {{ .Values.global.vault.endpoint }} + - name: AUTH0_DOMAIN + value: {{ quote .Values.global.auth.auth0_domain }} + - name: ANDI_AUTH0_CLIENT_ID + value: {{ quote .Values.auth.andi_auth0_client_id }} + - name: AUTH_JWT_ISSUER + value: {{ quote .Values.global.auth.jwt_issuer }} + - name: DOCUMENTATION_ROOT + value: {{ quote .Values.documentationRoot }} + - name: ACCESS_LEVEL + value: {{ quote .Values.accessLevel }} + - name: VAULT_ROLE + value: {{ quote .Values.vaultRole | default "andi-role" }} + - name: HOSTED_FILE_BUCKET + value: {{ .Values.s3.hostedFileBucket }} + - name: HOSTED_FILE_REGION + value: {{ .Values.s3.hostedFileRegion }} + - name: AUTH0_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-andi-auth0-client-secret + key: auth0_client_secret + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-andi-aws-credentials + key: aws_access_key_id + - name: AWS_ACCESS_KEY_SECRET + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-andi-aws-credentials + key: aws_access_key_secret + - name: ANDI_LOGO_URL + value: '{{ .Values.theme.logo }}' + - name: ANDI_HEADER_TEXT + value: '{{ .Values.theme.headerText }}' + - name: ANDI_PRIMARY_COLOR + value: '{{ .Values.theme.primaryColor }}' + - name: ANDI_SECONDARY_COLOR + value: '{{ .Values.theme.secondaryColor }}' + - name: ANDI_SUCCESS_COLOR + value: '{{ .Values.theme.successColor }}' + - name: ANDI_ERROR_COLOR + value: '{{ .Values.theme.errorColor }}' + - name: ANDI_FOOTER_LEFT_SIDE_TEXT + value: '{{ .Values.footer.leftSideText }}' + - name: ANDI_FOOTER_LEFT_SIDE_LINK + value: '{{ .Values.footer.leftSideLink }}' + - name: ANDI_FOOTER_RIGHT_LINKS + value: '{{ .Values.footer.rightLinks }}' + - name: CUSTOM_FAV_ICON_URL + value: '{{ .Values.theme.customFavIconUrl }}' + - name: SECURE_COOKIE + value: {{ quote .Values.secureCookie }} + {{ if .Values.aws.s3HostName }} + - name: S3_HOST_NAME + value: {{ .Values.aws.s3HostName }} + - name: S3_PORT + value: {{ quote .Values.aws.s3Port }} + - name: ALLOWED_ORIGIN + value: "{{ .Values.ingress.tls | ternary "https" "http" }}://*.{{ .Values.global.ingress.dnsZone }}" + - name: RAPTOR_URL + value: {{ quote .Values.global.auth.raptor_url }} + - name: REQUIRE_ADMIN_API_KEY + value: {{ quote .Values.global.require_admin_api_key }} + {{ end -}} +{{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} +{{- end }} diff --git a/charts/andi/templates/ingress.yaml b/charts/andi/templates/ingress.yaml new file mode 100644 index 000000000..da5a2b60f --- /dev/null +++ b/charts/andi/templates/ingress.yaml @@ -0,0 +1,38 @@ +{{- if .Values.ingress.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "helm.fullname" . }} + namespace: {{ .Release.Namespace }} + annotations: +{{- if .Values.ingress.annotations }} +{{ toYaml .Values.ingress.annotations | trim | indent 4 }} +{{- end }} +{{- if .Values.global.ingress.annotations }} +{{ toYaml .Values.global.ingress.annotations | trim | indent 4 }} +{{- end }} +spec: + rules: + - host: andi.{{ .Release.Namespace }}.{{ .Values.global.ingress.dnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Chart.Name }} + port: + number: {{ .Values.service.port }} +{{- if ne .Values.accessLevel "private" }} + - host: andi.{{ .Release.Namespace }}.{{ .Values.global.ingress.rootDnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Chart.Name }} + port: + number: {{ .Values.service.port }} +{{- end }} +{{- end }} diff --git a/charts/andi/templates/postgres_service.yaml b/charts/andi/templates/postgres_service.yaml new file mode 100644 index 000000000..16671740e --- /dev/null +++ b/charts/andi/templates/postgres_service.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "helm.fullname" . }}-rds + labels: + component: postgres +spec: + type: ExternalName + externalName: {{ .Values.postgres.host }} diff --git a/charts/andi/templates/rbac.yaml b/charts/andi/templates/rbac.yaml new file mode 100644 index 000000000..07c8dc910 --- /dev/null +++ b/charts/andi/templates/rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "helm.fullname" . }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ include "helm.fullname" . }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ include "helm.fullname" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ include "helm.fullname" . }} +subjects: +- kind: ServiceAccount + name: {{ include "helm.fullname" . }} + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/andi/templates/secrets.yaml b/charts/andi/templates/secrets.yaml new file mode 100644 index 000000000..f6e5e6a89 --- /dev/null +++ b/charts/andi/templates/secrets.yaml @@ -0,0 +1,31 @@ +{{- if .Values.secrets.live_view.enable }} +apiVersion: v1 +kind: Secret +metadata: + name: andi-lv-salt +type: + Opaque +data: + salt: {{ .Values.secrets.live_view.value }} +{{- end }} +--- +{{- if .Values.auth.auth0_client_secret }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-andi-auth0-client-secret +type: Opaque +stringData: + auth0_client_secret: {{ quote .Values.auth.auth0_client_secret }} +{{- end }} +--- +{{- if or (.Values.aws.accessKeyId) (.Values.global.objectStore.accessKey) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-andi-aws-credentials +type: Opaque +stringData: + aws_access_key_id: {{ .Values.global.objectStore.accessKey | default .Values.aws.accessKeyId | quote}} + aws_access_key_secret: {{ .Values.global.objectStore.accessSecret | default .Values.aws.accessKeySecret | quote }} +{{- end }} diff --git a/charts/andi/templates/service.yaml b/charts/andi/templates/service.yaml new file mode 100644 index 000000000..32ccba5e2 --- /dev/null +++ b/charts/andi/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "helm.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "helm.fullname" . }} + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app.kubernetes.io/name: {{ include "helm.fullname" . }} + ports: + - name: http + protocol: TCP + port: {{ .Values.service.port }} + targetPort: {{ .Values.service.targetPort }} + type: {{ .Values.service.type }} \ No newline at end of file diff --git a/charts/andi/values.yaml b/charts/andi/values.yaml new file mode 100644 index 000000000..fbb594eb7 --- /dev/null +++ b/charts/andi/values.yaml @@ -0,0 +1,137 @@ +global: + auth: + jwt_issuer: "" + auth0_domain: "" + raptor_url: "" + kafka: + brokers: streaming-service-kafka-bootstrap:9092 + presto: + url: http://platform-kubernetes-data-platform-presto:8080 + redis: + host: redis.external-services + port: 6379 + passwordSecret: "" + password: "" + sslEnabled: false + require_admin_api_key: false + vault: + # Should match the format {Release Name}-vault:8200 + endpoint: "urban-os-vault:8200" + ingress: + rootDnsZone: localhost + dnsZone: localhost + objectStore: + accessKey: null + accessSecret: null + +replicaCount: 1 + +image: + repository: smartcitiesdata/andi + tag: development + pullPolicy: Always + majorPin: "" + minorPin: "" + +monitoring: + targetPort: 9002 + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true + +nameOverride: "" +fullnameOverride: "" + +service: + type: NodePort + port: 80 + targetPort: 4000 + +secrets: + live_view: + enable: true + value: "devonlyenablefalseanddefineoutofsourceinprod" + +resources: + limits: + memory: 256Mi + cpu: 150m + requests: + memory: 256Mi + cpu: 150m + +postgres: + host: "example.com" + port: "5432" + dbname: "postgres" + user: "postgres" + password: "password" + verifySNI: true + +auth: + andi_auth0_client_id: "" + # if left empty, no secret will be created + # and {{ .Release.Name }}-andi-auth0-client-secret will be referenced + auth0_client_secret: "" + +aws: + ################# + # If these are left empty, no secret will be created. + # An existing {{ .Release.Name }}-andi-aws-credentials secret will be + # referenced instead of utilizing accessKeyId and accessKeySecret to create + # a secret. + ################# + # Overriden by global.objectStore.accessKey if present + accessKeyId: "" + # Overriden by global.objectStore.accessSecret if present + accessKeySecret: "" + ################# + s3HostName: null + s3Port: null + +# The root at which documentation pdfs and other artifacts can be found +documentationRoot: "" + +# This flag controls whether Andi is deployed in Public mode or not. +# Public mode prevents all access to Curator features for security reasons. +# Can be "private" or "public" +accessLevel: "private" + +theme: + # url for the header bar logo + logo: "/images/UrbanOS.svg" + # header bar text + headerText: "Data Submission Tool" + # Color can be any valid css. Examples - "#101010", "rgb(0,0,0)", "red" + primaryColor: "#0F64B3" + secondaryColor: "#1176D4" + successColor: "#008000" + errorColor: "#B80000" + customFavIconUrl: + +footer: + # footer text on left side with links on right side + leftSideText: "© 2023 UrbanOS. All rights reserved." + leftSideLink: "https://github.com/UrbanOS-Public/smartcitiesdata" + rightLinks: '[{"linkText":"Discovery UI", "url":"https://discovery.dev.apps.hsrqs9l3.eastus.aroapp.io/"}, {"linkText":"UrbanOS", "url":"https://github.com/UrbanOS-Public/smartcitiesdata"}]' + +tolerations: + - key: example.run.public-worker + operator: Equal + value: "true" + effect: NoExecute + +s3: + hostedFileBucket: "andi-public-sample-datasets" + hostedFileRegion: "us-west-2" + +# This is the name of the role that ANDI must have to access vault +vaultRole: "andi-role" + +ingress: + tls: true + enabled: true + annotations: + +secureCookie: "false" diff --git a/charts/discovery-api/.helmignore b/charts/discovery-api/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/discovery-api/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/discovery-api/Chart.yaml b/charts/discovery-api/Chart.yaml new file mode 100644 index 000000000..5bb5d7ce9 --- /dev/null +++ b/charts/discovery-api/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +appVersion: "1.0.0-static" +description: A middleware layer to connect data consumers with the data sources +name: discovery-api +version: 1.4.13 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/discovery_api diff --git a/charts/discovery-api/README.md b/charts/discovery-api/README.md new file mode 100644 index 000000000..cf88bc5c0 --- /dev/null +++ b/charts/discovery-api/README.md @@ -0,0 +1,81 @@ +# discovery-api + +![Version: 1.4.13](https://img.shields.io/badge/Version-1.4.13-informational?style=flat-square) ![AppVersion: 1.0.0-static](https://img.shields.io/badge/AppVersion-1.0.0--static-informational?style=flat-square) + +A middleware layer to connect data consumers with the data sources + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| auth.client_id | string | `"1234"` | | +| auth.jwks_endpoint | string | `"https://example.com/.well-known/jwks.json"` | | +| auth.redirect_base_url | string | `"http://localhost"` | | +| auth.user_info_endpoint | string | `"https://example.com/userinfo"` | | +| aws.accessKeyId | string | `""` | | +| aws.accessKeySecret | string | `""` | | +| aws.s3HostName | string | `nil` | | +| aws.s3Port | string | `nil` | | +| elasticsearch.host | string | `"es.example.com"` | | +| elasticsearch.tls | bool | `true` | | +| global.auth.auth0_domain | string | `""` | | +| global.auth.jwt_issuer | string | `""` | | +| global.auth.raptor_url | string | `"http://raptor/api"` | | +| global.buckets.hostedFileBucket | string | `"dataset-bucket"` | | +| global.buckets.region | string | `"us-west-2"` | | +| global.ingress.dnsZone | string | `"localhost"` | | +| global.ingress.rootDnsZone | string | `"localhost"` | | +| global.kafka.brokers | string | `"pipeline-kafka-bootstrap:9092"` | | +| global.objectStore.accessKey | string | `""` | | +| global.objectStore.accessSecret | string | `""` | | +| global.presto.url | string | `"http://platform-kubernetes-data-platform-presto:8080"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| global.require_api_key | bool | `false` | | +| global.subdomains.discoveryApi | string | `""` | | +| global.vault.endpoint | string | `"vault.vault:8200"` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/discovery_api"` | | +| image.tag | string | `"development"` | | +| ingress.annotations | string | `nil` | | +| ingress.enabled | bool | `true` | | +| ldap.account.subdn | string | `"cn=users,cn=accounts"` | | +| ldap.base | string | `"dc=example,dc=com"` | | +| ldap.host | string | `"ldap.example.com"` | | +| ldap.user | string | `"binduser"` | | +| monitoring.targetPort | int | `9002` | | +| nodeSelector | object | `{}` | | +| postgres.dbname | string | `"postgres"` | | +| postgres.host | string | `"example.com"` | | +| postgres.password | string | `"password"` | | +| postgres.port | string | `"5432"` | | +| postgres.user | string | `"postgres"` | | +| postgres.verifySNI | bool | `true` | | +| presto.catalog | string | `"hive"` | | +| presto.schema | string | `"default"` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `1` | | +| resources.limits.cpu | int | `1` | | +| resources.limits.memory | string | `"512Mi"` | | +| resources.requests.cpu | int | `1` | | +| resources.requests.memory | string | `"512Mi"` | | +| secrets.discoveryApiPresignKey | string | `""` | | +| secrets.guardianSecretKey | string | `""` | | +| service.auth_string | string | `""` | | +| service.name | string | `"discovery-api"` | | +| service.port | int | `80` | | +| service.type | string | `"NodePort"` | | +| tolerations | list | `[]` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/discovery-api/templates/_helpers.tpl b/charts/discovery-api/templates/_helpers.tpl new file mode 100644 index 000000000..48901c50e --- /dev/null +++ b/charts/discovery-api/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "chart.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "chart.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "chart.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/discovery-api/templates/deployment.yaml b/charts/discovery-api/templates/deployment.yaml new file mode 100644 index 000000000..271017fe5 --- /dev/null +++ b/charts/discovery-api/templates/deployment.yaml @@ -0,0 +1,144 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: discovery-api + namespace: {{ .Release.Namespace }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + app: discovery-api +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: discovery-api + template: + metadata: + labels: + app: discovery-api + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: discovery-api + {{- end }} + containers: + - name: discovery-api + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + livenessProbe: + httpGet: + path: /healthcheck + port: 4000 + scheme: HTTP + initialDelaySeconds: 100 + timeoutSeconds: 5 + periodSeconds: 100 + successThreshold: 1 + failureThreshold: 3 + resources: +{{ toYaml .Values.resources | indent 10 }} + env: + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers }} + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} + - name: PRESTO_URL + value: {{ .Values.global.presto.url }} + - name: PRESTO_CATALOG + value: {{ .Values.presto.catalog }} + - name: PRESTO_SCHEMA + value: {{ .Values.presto.schema }} + - name: HOST + value: {{ .Values.global.subdomains.discoveryApi }}.{{ .Values.global.ingress.rootDnsZone }} + - name: ALLOWED_ORIGINS + value: {{ .Values.global.ingress.rootDnsZone }},{{ .Values.global.ingress.dnsZone }} + - name: PRESIGN_KEY + valueFrom: + secretKeyRef: + name: discovery-api-presign-key + key: discovery-api-presign-key + - name: GUARDIAN_KEY + valueFrom: + secretKeyRef: + name: guardian-secret-key + key: guardian-secret-key + - name: HOSTED_FILE_BUCKET + value: {{ .Values.global.buckets.hostedFileBucket }} + - name: HOSTED_FILE_REGION + value: {{ .Values.global.buckets.region }} + - name: POSTGRES_HOST + value: {{ .Values.postgres.host }} + - name: POSTGRES_DBNAME + value: {{ .Values.postgres.dbname }} + - name: POSTGRES_USER + value: {{ .Values.postgres.user }} + - name: POSTGRES_PASSWORD + {{- if .Values.postgres.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ .Values.postgres.passwordSecret }} + key: {{ .Values.postgres.passwordSecretKey }} + {{- else }} + value: {{ quote .Values.postgres.password }} + {{- end }} + - name: POSTGRES_PORT + value: {{ quote .Values.postgres.port }} + - name: POSTGRES_VERIFY_SNI + value: {{ quote .Values.postgres.verifySNI }} + - name: AUTH_JWT_ISSUER + value: {{ quote .Values.global.auth.jwt_issuer }} + - name: AUTH_JWKS_ENDPOINT + value: {{ quote .Values.auth.jwks_endpoint }} + - name: AUTH_USER_INFO_ENDPOINT + value: {{ quote .Values.auth.user_info_endpoint }} + - name: AUTH_DOMAIN + value: {{ quote .Values.global.auth.auth0_domain }} + - name: AUTH_CLIENT_ID + value: {{ quote .Values.auth.client_id }} + - name: AUTH_REDIRECT_BASE_URL + value: {{ quote .Values.auth.redirect_base_url }} + - name: ELASTICSEARCH_HOST + value: {{ .Values.elasticsearch.host }} + - name: ELASTICSEARCH_TLS_ENABLED + value: {{ quote .Values.elasticsearch.tls }} + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: RAPTOR_URL + value: {{ quote .Values.global.auth.raptor_url }} + - name: REQUIRE_API_KEY + value: {{ quote .Values.global.require_api_key }} + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-discovery-api-aws-credentials + key: aws_access_key_id + - name: AWS_ACCESS_KEY_SECRET + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-discovery-api-aws-credentials + key: aws_access_key_secret + {{ if .Values.aws.s3HostName }} + - name: S3_HOST_NAME + value: {{ .Values.aws.s3HostName }} + - name: S3_PORT + value: {{ quote .Values.aws.s3Port }} + {{ end -}} diff --git a/charts/discovery-api/templates/ingress.yaml b/charts/discovery-api/templates/ingress.yaml new file mode 100644 index 000000000..6d4cc1026 --- /dev/null +++ b/charts/discovery-api/templates/ingress.yaml @@ -0,0 +1,36 @@ +{{- if .Values.ingress.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: discovery-api + namespace: {{ .Release.Namespace }} + annotations: +{{- if .Values.ingress.annotations }} +{{ toYaml .Values.ingress.annotations | trim | indent 4 }} +{{- end }} +{{- if .Values.global.ingress.annotations }} +{{ toYaml .Values.global.ingress.annotations | trim | indent 4 }} +{{- end }} +spec: + rules: + - host: data.{{ .Release.Namespace }}.{{ .Values.global.ingress.rootDnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Chart.Name }} + port: + number: {{ .Values.service.port }} + - host: data.{{ .Release.Namespace }}.{{ .Values.global.ingress.dnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Chart.Name }} + port: + number: {{ .Values.service.port }} +{{- end }} diff --git a/charts/discovery-api/templates/postgres-service.yaml b/charts/discovery-api/templates/postgres-service.yaml new file mode 100644 index 000000000..1b2b9d8c8 --- /dev/null +++ b/charts/discovery-api/templates/postgres-service.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Service +metadata: + name: discovery-rds + labels: + component: postgres +spec: + type: ExternalName + externalName: {{ .Values.postgres.host }} diff --git a/charts/discovery-api/templates/rbac.yaml b/charts/discovery-api/templates/rbac.yaml new file mode 100644 index 000000000..14b75a88f --- /dev/null +++ b/charts/discovery-api/templates/rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Chart.Name }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ .Chart.Name }} +subjects: +- kind: ServiceAccount + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/discovery-api/templates/secrets.yaml b/charts/discovery-api/templates/secrets.yaml new file mode 100644 index 000000000..f83d33649 --- /dev/null +++ b/charts/discovery-api/templates/secrets.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Secret +metadata: + name: discovery-api-presign-key +type: Opaque +stringData: + discovery-api-presign-key: {{ quote .Values.secrets.discoveryApiPresignKey }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: guardian-secret-key +type: Opaque +stringData: + guardian-secret-key: {{ quote .Values.secrets.guardianSecretKey }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-discovery-api-aws-credentials +type: Opaque +stringData: + {{ if .Values.global.objectStore.accessSecret }} + aws_access_key_secret: {{ quote .Values.global.objectStore.accessSecret }} + {{- else }} + aws_access_key_secret: {{ quote .Values.aws.accessKeySecret }} + {{ end -}} + {{ if .Values.global.objectStore.accessKey }} + aws_access_key_id: {{ quote .Values.global.objectStore.accessKey }} + {{- else }} + aws_access_key_id: {{ quote .Values.aws.accessKeyId }} + {{ end -}} diff --git a/charts/discovery-api/templates/service.yaml b/charts/discovery-api/templates/service.yaml new file mode 100644 index 000000000..dc75008ad --- /dev/null +++ b/charts/discovery-api/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: discovery-api + namespace: {{ .Release.Namespace }} + labels: + app: discovery-api + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app: discovery-api + ports: + - protocol: TCP + port: 80 + targetPort: 4000 + type: "{{ .Values.service.type }}" diff --git a/charts/discovery-api/values.yaml b/charts/discovery-api/values.yaml new file mode 100644 index 000000000..4a792a708 --- /dev/null +++ b/charts/discovery-api/values.yaml @@ -0,0 +1,108 @@ +global: + auth: + jwt_issuer: "" + auth0_domain: "" + raptor_url: "http://raptor/api" + buckets: + region: us-west-2 + hostedFileBucket: "dataset-bucket" + kafka: + brokers: pipeline-kafka-bootstrap:9092 + presto: + url: http://platform-kubernetes-data-platform-presto:8080 + require_api_key: false + redis: + host: redis.external-services + port: 6379 + password: "" + passwordSecret: "" + sslEnabled: false + vault: + endpoint: vault.vault:8200 + ingress: + rootDnsZone: localhost + dnsZone: localhost + objectStore: + accessSecret: "" + accessKey: "" + subdomains: + discoveryApi: "" + +resources: + limits: + memory: 512Mi + cpu: 1 + requests: + memory: 512Mi + cpu: 1 + +replicaCount: 1 + +ingress: + enabled: true + annotations: + +service: + name: discovery-api + type: NodePort + port: 80 + auth_string: "" + +image: + repository: smartcitiesdata/discovery_api + tag: development + pullPolicy: Always + majorPin: "" + minorPin: "" + +monitoring: + targetPort: 9002 + +nodeSelector: {} +tolerations: [] +affinity: {} + +presto: + catalog: "hive" + schema: "default" + +ldap: + host: "ldap.example.com" + base: "dc=example,dc=com" + user: "binduser" + account: + subdn: "cn=users,cn=accounts" + +postgres: + host: "example.com" + port: "5432" + dbname: "postgres" + user: "postgres" + password: "password" + verifySNI: true + +elasticsearch: + host: "es.example.com" + tls: true + +auth: + client_id: "1234" + redirect_base_url: "http://localhost" + jwks_endpoint: "https://example.com/.well-known/jwks.json" + user_info_endpoint: "https://example.com/userinfo" + +secrets: + discoveryApiPresignKey: "" + guardianSecretKey: "" + +aws: + # Overriden by global.objectStore.accessKey if present + accessKeyId: "" + # Overriden by global.objectStore.accessSecret if present + accessKeySecret: "" + s3HostName: null + s3Port: null + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true diff --git a/charts/discovery-streams/.helmignore b/charts/discovery-streams/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/discovery-streams/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/discovery-streams/Chart.yaml b/charts/discovery-streams/Chart.yaml new file mode 100644 index 000000000..21d59a5d4 --- /dev/null +++ b/charts/discovery-streams/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +appVersion: "1.0" +description: Dynamically find kafka topics and makes available corresponding channels on a public websocket +name: discovery-streams +version: 1.1.9 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/discovery_streams diff --git a/charts/discovery-streams/README.md b/charts/discovery-streams/README.md new file mode 100644 index 000000000..20da51afc --- /dev/null +++ b/charts/discovery-streams/README.md @@ -0,0 +1,45 @@ +# discovery-streams + +![Version: 1.1.9](https://img.shields.io/badge/Version-1.1.9-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Dynamically find kafka topics and makes available corresponding channels on a public websocket + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| dashboard.title | string | `"Dashboard Metrics"` | | +| global.auth.raptor_url | string | `"http://raptor/api"` | | +| global.ingress.dnsZone | string | `""` | | +| global.ingress.rootDnsZone | string | `""` | | +| global.kafka.brokers | string | `"pipeline-kafka-bootstrap:9092"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| global.require_api_key | bool | `false` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/discovery_streams"` | | +| image.tag | string | `"development"` | | +| ingress.annotations | string | `nil` | | +| ingress.enabled | bool | `true` | | +| monitoring.targetPort | int | `9002` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `1` | | +| resources.limits.cpu | string | `"1"` | | +| resources.limits.memory | string | `"512Mi"` | | +| resources.requests.cpu | string | `"1"` | | +| resources.requests.memory | string | `"512Mi"` | | +| service.port | int | `80` | | +| service.targetPort | int | `4000` | | +| service.type | string | `"NodePort"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/discovery-streams/templates/NOTES.txt b/charts/discovery-streams/templates/NOTES.txt new file mode 100644 index 000000000..37407cfa3 --- /dev/null +++ b/charts/discovery-streams/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.global.ingress.enabled }} +{{- range .Values.global.ingress.hosts }} + http{{ if $.Values.global.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "helm.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ include "helm.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "helm.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ include "helm.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/charts/discovery-streams/templates/_helpers.tpl b/charts/discovery-streams/templates/_helpers.tpl new file mode 100644 index 000000000..ef6051778 --- /dev/null +++ b/charts/discovery-streams/templates/_helpers.tpl @@ -0,0 +1,39 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default service name for the Kafka Bootstrap endpoint. +*/}} +{{- define "kafka.brokerservice" -}} +{{- printf "%s-%s.%s:%s" .Release.Name "kafka-bootstrap" .Release.Namespace "9092" | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/discovery-streams/templates/deployment.yaml b/charts/discovery-streams/templates/deployment.yaml new file mode 100644 index 000000000..c68d1d169 --- /dev/null +++ b/charts/discovery-streams/templates/deployment.yaml @@ -0,0 +1,73 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + app: {{ .Chart.Name }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ .Chart.Name }} + template: + metadata: + labels: + app: {{ .Chart.Name }} + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: {{ .Chart.Name }} + {{- end }} + imagePullSecrets: + - name: regcred + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 10 }} + env: + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers | default (include "kafka.brokerservice" .) }} + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} +{{- if .Values.global.redis.port }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} +{{- end }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: RUN_IN_KUBERNETES + value: "true" + - name: RAPTOR_URL + value: {{ quote .Values.global.auth.raptor_url }} + - name: REQUIRE_API_KEY + value: {{ quote .Values.global.require_api_key }} + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP diff --git a/charts/discovery-streams/templates/ingress.yaml b/charts/discovery-streams/templates/ingress.yaml new file mode 100644 index 000000000..dee56a7f6 --- /dev/null +++ b/charts/discovery-streams/templates/ingress.yaml @@ -0,0 +1,26 @@ +{{- if .Values.ingress.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + annotations: +{{- if .Values.ingress.annotations }} +{{ toYaml .Values.ingress.annotations | trim | indent 4 }} +{{- end }} +{{- if .Values.global.ingress.annotations }} +{{ toYaml .Values.global.ingress.annotations | trim | indent 4 }} +{{- end }} +spec: + rules: + - host: streams.{{ .Release.Namespace }}.{{ .Values.global.ingress.rootDnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Chart.Name }} + port: + number: {{ .Values.service.port }} +{{- end }} diff --git a/charts/discovery-streams/templates/rbac.yaml b/charts/discovery-streams/templates/rbac.yaml new file mode 100644 index 000000000..14b75a88f --- /dev/null +++ b/charts/discovery-streams/templates/rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Chart.Name }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ .Chart.Name }} +subjects: +- kind: ServiceAccount + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/discovery-streams/templates/service.yaml b/charts/discovery-streams/templates/service.yaml new file mode 100644 index 000000000..a35ff87cc --- /dev/null +++ b/charts/discovery-streams/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ .Chart.Name }} + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app: {{ .Chart.Name }} + ports: + - protocol: TCP + port: {{ .Values.service.port }} + targetPort: {{ .Values.service.targetPort }} + type: {{ .Values.service.type }} diff --git a/charts/discovery-streams/values.yaml b/charts/discovery-streams/values.yaml new file mode 100644 index 000000000..d4dc5a5de --- /dev/null +++ b/charts/discovery-streams/values.yaml @@ -0,0 +1,51 @@ +global: + kafka: + brokers: pipeline-kafka-bootstrap:9092 + require_api_key: false + redis: + host: redis.external-services + password: "" + passwordSecret: "" + port: 6379 + sslEnabled: false + ingress: + dnsZone: "" + rootDnsZone: "" + auth: + raptor_url: "http://raptor/api" + +dashboard: + title: "Dashboard Metrics" + +image: + repository: smartcitiesdata/discovery_streams + tag: development + pullPolicy: Always + majorPin: "" + minorPin: "" + +replicaCount: 1 + +resources: + limits: + memory: 512Mi + cpu: "1" + requests: + memory: 512Mi + cpu: "1" + +monitoring: + targetPort: 9002 + +service: + type: NodePort + port: 80 + targetPort: 4000 + +ingress: + enabled: true + annotations: + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true diff --git a/charts/discovery-ui/.helmignore b/charts/discovery-ui/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/discovery-ui/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/discovery-ui/Chart.yaml b/charts/discovery-ui/Chart.yaml new file mode 100644 index 000000000..47222ba6e --- /dev/null +++ b/charts/discovery-ui/Chart.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +appVersion: "1.0" +description: A helm chart for the discovery ui +name: discovery-ui +version: 1.5.22 +sources: + - https://github.com/UrbanOS-Public/discovery_ui + - https://github.com/UrbanOS-Public/react_discovery_ui diff --git a/charts/discovery-ui/README.md b/charts/discovery-ui/README.md new file mode 100644 index 000000000..dc97bd618 --- /dev/null +++ b/charts/discovery-ui/README.md @@ -0,0 +1,58 @@ +# discovery-ui + +![Version: 1.5.22](https://img.shields.io/badge/Version-1.5.22-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +A helm chart for the discovery ui + +## Source Code + +* +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| env.additional_csp_hosts | string | `""` | | +| env.auth0_audience | string | `""` | | +| env.auth0_domain | string | `""` | | +| env.contribute_host | string | `""` | | +| env.custom_favicon_url | string | `nil` | | +| env.disable_visualizations | bool | `false` | | +| env.disc_api_url | string | `"https://data.example.com"` | | +| env.disc_streams_url | string | `"https://streams.example.com"` | | +| env.disc_ui_url | string | `"https://www.example.com"` | | +| env.discovery_auth0_client_id | string | `""` | | +| env.footer_left_side_link | string | `"https://github.com/UrbanOS-Public/smartcitiesdata"` | | +| env.footer_left_side_text | string | `"© 2023 UrbanOS. All rights reserved."` | | +| env.footer_right_links | string | `"[{\"linkText\":\"UrbanOS\", \"url\":\"https://github.com/UrbanOS-Public/smartcitiesdata\"}]"` | | +| env.gtm_id | string | `""` | | +| env.header_title | string | `"UrbanOS Data Discovery"` | | +| env.logo_url | string | `nil` | | +| env.mapbox_access_token | string | `""` | | +| env.primary_color | string | `"#0F64B3"` | | +| env.regenerate_api_key_ff | bool | `true` | | +| env.streets_tile_layer_url | string | `"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"` | | +| global.auth.auth0_domain | string | `""` | | +| global.ingress.dnsZone | string | `"localhost"` | | +| global.ingress.rootDnsZone | string | `"localhost"` | | +| global.require_api_key | bool | `false` | | +| image.environment | string | `"local"` | | +| image.name | string | `"smartcitiesdata/discovery_ui"` | | +| image.pullPolicy | string | `"Always"` | | +| image.tag | string | `"development"` | | +| ingress.annotations | string | `nil` | | +| ingress.enabled | bool | `true` | | +| nodeSelector | object | `{}` | | +| resources.limits.cpu | string | `"500m"` | | +| resources.limits.memory | string | `"1028Mi"` | | +| resources.requests.cpu | string | `"500m"` | | +| resources.requests.memory | string | `"1028Mi"` | | +| service.name | string | `"discovery-ui"` | | +| service.port | int | `80` | | +| service.type | string | `"NodePort"` | | +| tolerations | list | `[]` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/discovery-ui/templates/_helpers.tpl b/charts/discovery-ui/templates/_helpers.tpl new file mode 100644 index 000000000..48901c50e --- /dev/null +++ b/charts/discovery-ui/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "chart.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "chart.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "chart.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/discovery-ui/templates/configs.yaml b/charts/discovery-ui/templates/configs.yaml new file mode 100644 index 000000000..317928855 --- /dev/null +++ b/charts/discovery-ui/templates/configs.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: discovery-ui-configs +data: + config.js: | + {{ if .Values.env.contribute_host }} + window.CONTRIBUTE_HOST = '{{.Values.env.contribute_host}}' + {{ end -}} + window.GTM_ID = '{{.Values.env.gtm_id}}' + window.DISC_API_URL = '{{.Values.env.disc_api_url}}' + window.DISC_STREAMS_URL = '{{.Values.env.disc_streams_url}}' + window.DISC_UI_URL = '{{.Values.env.disc_ui_url}}' + window.STREETS_TILE_LAYER_URL = '{{.Values.env.streets_tile_layer_url}}' + window.MAPBOX_ACCESS_TOKEN = '{{.Values.env.mapbox_access_token}}' + window.LOGO_URL = '{{.Values.env.logo_url}}' + window.CUSTOM_FAV_ICON_URL = '{{.Values.env.custom_favicon_url}}' + window.FOOTER_LEFT_SIDE_TEXT = '{{.Values.env.footer_left_side_text}}' + window.FOOTER_LEFT_SIDE_LINK = '{{.Values.env.footer_left_side_link}}' + window.FOOTER_RIGHT_LINKS = '{{.Values.env.footer_right_links}}' + window.HEADER_TITLE = '{{.Values.env.header_title}}' + window.AUTH0_DOMAIN = '{{.Values.global.auth.auth0_domain}}' + window.DISCOVERY_AUTH0_CLIENT_ID = '{{.Values.env.discovery_auth0_client_id}}' + window.AUTH0_AUDIENCE = '{{.Values.env.auth0_audience}}' + window.PRIMARY_COLOR = '{{.Values.env.primary_color}}' + window.REQUIRE_API_KEY = '{{.Values.global.require_api_key}}' + window.REGENERATE_API_KEY_FF = '{{.Values.env.regenerate_api_key_ff}}' + window.DISABLE_VISUALIZATIONS = '{{.Values.env.disable_visualizations}}' + nginx-csps.conf: | + add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline' *.googletagmanager.com *.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src *.auth0.com; img-src 'self' *.amazonaws.com *.mapbox.com *.openstreetmap.org {{ .Values.env.additional_csp_hosts }} *.google-analytics.com *.google.com *.doubleclick.net data: blob:; connect-src 'self' {{ .Values.env.additional_csp_hosts }} *.auth0.com *.mapbox.com *.openstreetmap.org *.plot.ly http://localhost:*; worker-src blob:;"; diff --git a/charts/discovery-ui/templates/deployment.yaml b/charts/discovery-ui/templates/deployment.yaml new file mode 100644 index 000000000..1eabeb9cb --- /dev/null +++ b/charts/discovery-ui/templates/deployment.yaml @@ -0,0 +1,40 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app: discovery-ui +spec: + replicas: 1 + selector: + matchLabels: + app: discovery-ui + template: + metadata: + labels: + app: discovery-ui + spec: + imagePullSecrets: + - name: regcred + volumes: + - name: discovery-ui-configs + configMap: + name: discovery-ui-configs + containers: + - name: discovery-ui + image: {{ .Values.image.name }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 10 }} + volumeMounts: + - mountPath: /usr/share/nginx/html/config.js + name: discovery-ui-configs + subPath: config.js + - mountPath: /etc/nginx/conf.d/nginx-csps.conf + name: discovery-ui-configs + subPath: nginx-csps.conf +{{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} +{{- end }} \ No newline at end of file diff --git a/charts/discovery-ui/templates/ingress.yaml b/charts/discovery-ui/templates/ingress.yaml new file mode 100644 index 000000000..47f8a96fd --- /dev/null +++ b/charts/discovery-ui/templates/ingress.yaml @@ -0,0 +1,36 @@ +{{- if .Values.ingress.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + annotations: +{{- if .Values.ingress.annotations }} +{{ toYaml .Values.ingress.annotations | trim | indent 4 }} +{{- end }} +{{- if .Values.global.ingress.annotations }} +{{ toYaml .Values.global.ingress.annotations | trim | indent 4 }} +{{- end }} +spec: + rules: + - host: discovery.{{ .Release.Namespace }}.{{ .Values.global.ingress.rootDnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Chart.Name }} + port: + number: {{ .Values.service.port }} + - host: discovery.{{ .Release.Namespace }}.{{ .Values.global.ingress.dnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ .Chart.Name }} + port: + number: {{ .Values.service.port }} +{{- end }} diff --git a/charts/discovery-ui/templates/service.yaml b/charts/discovery-ui/templates/service.yaml new file mode 100644 index 000000000..492ad3b79 --- /dev/null +++ b/charts/discovery-ui/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app: discovery-ui +spec: + selector: + app: discovery-ui + ports: + - protocol: TCP + port: 80 + targetPort: 8080 + type: "{{ .Values.service.type }}" diff --git a/charts/discovery-ui/values.yaml b/charts/discovery-ui/values.yaml new file mode 100644 index 000000000..15e4fab44 --- /dev/null +++ b/charts/discovery-ui/values.yaml @@ -0,0 +1,63 @@ +global: + auth: + auth0_domain: "" + ingress: + rootDnsZone: localhost + dnsZone: localhost + require_api_key: false + +service: + name: discovery-ui + type: NodePort + port: 80 + +image: + name: smartcitiesdata/discovery_ui + tag: development + environment: "local" + pullPolicy: Always + +env: + # Optional: location for an associated public Andi deployment + # Ex: https://andi.example.com + contribute_host: "" + # Optional: Google Tag Manager ID + gtm_id: "" + disc_ui_url: "https://www.example.com" + disc_api_url: "https://data.example.com" + disc_streams_url: "https://streams.example.com" + streets_tile_layer_url: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" + logo_url: null + header_title: "UrbanOS Data Discovery" + footer_left_side_text: "© 2023 UrbanOS. All rights reserved." + footer_left_side_link: "https://github.com/UrbanOS-Public/smartcitiesdata" + footer_right_links: '[{"linkText":"UrbanOS", "url":"https://github.com/UrbanOS-Public/smartcitiesdata"}]' + primary_color: "#0F64B3" + # url string for the favicon (optional). If used, it is a base64-encoded gzipped version of the icon + custom_favicon_url: null + # omitting mapbox will default plot.ly to use openstreetmap.org + mapbox_access_token: "" + auth0_domain: "" + discovery_auth0_client_id: "" + auth0_audience: "" + additional_csp_hosts: "" + regenerate_api_key_ff: true + disable_visualizations: false + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +resources: + limits: + memory: 1028Mi + cpu: 500m + requests: + memory: 1028Mi + cpu: 500m + +ingress: + enabled: true + annotations: diff --git a/charts/docs/.gitignore b/charts/docs/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/charts/docs/andi-1.0.1.tgz b/charts/docs/andi-1.0.1.tgz new file mode 100644 index 000000000..84e430bd6 Binary files /dev/null and b/charts/docs/andi-1.0.1.tgz differ diff --git a/charts/docs/andi-1.1.0.tgz b/charts/docs/andi-1.1.0.tgz new file mode 100644 index 000000000..c08dbb27c Binary files /dev/null and b/charts/docs/andi-1.1.0.tgz differ diff --git a/charts/docs/andi-1.1.1.tgz b/charts/docs/andi-1.1.1.tgz new file mode 100644 index 000000000..33db19af5 Binary files /dev/null and b/charts/docs/andi-1.1.1.tgz differ diff --git a/charts/docs/andi-1.1.2.tgz b/charts/docs/andi-1.1.2.tgz new file mode 100644 index 000000000..27ba9bab8 Binary files /dev/null and b/charts/docs/andi-1.1.2.tgz differ diff --git a/charts/docs/andi-1.1.3.tgz b/charts/docs/andi-1.1.3.tgz new file mode 100644 index 000000000..886d9586b Binary files /dev/null and b/charts/docs/andi-1.1.3.tgz differ diff --git a/charts/docs/andi-1.2.0.tgz b/charts/docs/andi-1.2.0.tgz new file mode 100644 index 000000000..003cf0f4c Binary files /dev/null and b/charts/docs/andi-1.2.0.tgz differ diff --git a/charts/docs/andi-1.2.1.tgz b/charts/docs/andi-1.2.1.tgz new file mode 100644 index 000000000..c1e005690 Binary files /dev/null and b/charts/docs/andi-1.2.1.tgz differ diff --git a/charts/docs/andi-1.2.2.tgz b/charts/docs/andi-1.2.2.tgz new file mode 100644 index 000000000..ece98d3ba Binary files /dev/null and b/charts/docs/andi-1.2.2.tgz differ diff --git a/charts/docs/andi-1.2.3.tgz b/charts/docs/andi-1.2.3.tgz new file mode 100644 index 000000000..741ae2484 Binary files /dev/null and b/charts/docs/andi-1.2.3.tgz differ diff --git a/charts/docs/andi-1.3.0.tgz b/charts/docs/andi-1.3.0.tgz new file mode 100644 index 000000000..f56627e39 Binary files /dev/null and b/charts/docs/andi-1.3.0.tgz differ diff --git a/charts/docs/andi-1.3.1.tgz b/charts/docs/andi-1.3.1.tgz new file mode 100644 index 000000000..23ebcd542 Binary files /dev/null and b/charts/docs/andi-1.3.1.tgz differ diff --git a/charts/docs/andi-1.4.0.tgz b/charts/docs/andi-1.4.0.tgz new file mode 100644 index 000000000..2a443f97a Binary files /dev/null and b/charts/docs/andi-1.4.0.tgz differ diff --git a/charts/docs/andi-1.4.1.tgz b/charts/docs/andi-1.4.1.tgz new file mode 100644 index 000000000..842a2792a Binary files /dev/null and b/charts/docs/andi-1.4.1.tgz differ diff --git a/charts/docs/andi-1.4.2.tgz b/charts/docs/andi-1.4.2.tgz new file mode 100644 index 000000000..406346609 Binary files /dev/null and b/charts/docs/andi-1.4.2.tgz differ diff --git a/charts/docs/andi-1.4.3.tgz b/charts/docs/andi-1.4.3.tgz new file mode 100644 index 000000000..e97ff5814 Binary files /dev/null and b/charts/docs/andi-1.4.3.tgz differ diff --git a/charts/docs/andi-1.4.4.tgz b/charts/docs/andi-1.4.4.tgz new file mode 100644 index 000000000..2312de8cd Binary files /dev/null and b/charts/docs/andi-1.4.4.tgz differ diff --git a/charts/docs/andi-1.4.5.tgz b/charts/docs/andi-1.4.5.tgz new file mode 100644 index 000000000..f9bc2f7ab Binary files /dev/null and b/charts/docs/andi-1.4.5.tgz differ diff --git a/charts/docs/andi-1.4.6.tgz b/charts/docs/andi-1.4.6.tgz new file mode 100644 index 000000000..0cf70971d Binary files /dev/null and b/charts/docs/andi-1.4.6.tgz differ diff --git a/charts/docs/andi-1.5.0.tgz b/charts/docs/andi-1.5.0.tgz new file mode 100644 index 000000000..9eff57b87 Binary files /dev/null and b/charts/docs/andi-1.5.0.tgz differ diff --git a/charts/docs/andi-1.6.0.tgz b/charts/docs/andi-1.6.0.tgz new file mode 100644 index 000000000..c264debc7 Binary files /dev/null and b/charts/docs/andi-1.6.0.tgz differ diff --git a/charts/docs/andi-1.7.0.tgz b/charts/docs/andi-1.7.0.tgz new file mode 100644 index 000000000..fece11f66 Binary files /dev/null and b/charts/docs/andi-1.7.0.tgz differ diff --git a/charts/docs/andi-1.8.0.tgz b/charts/docs/andi-1.8.0.tgz new file mode 100644 index 000000000..f37058338 Binary files /dev/null and b/charts/docs/andi-1.8.0.tgz differ diff --git a/charts/docs/andi-1.8.1.tgz b/charts/docs/andi-1.8.1.tgz new file mode 100644 index 000000000..0c9ba441f Binary files /dev/null and b/charts/docs/andi-1.8.1.tgz differ diff --git a/charts/docs/andi-1.8.2.tgz b/charts/docs/andi-1.8.2.tgz new file mode 100644 index 000000000..2d769cf40 Binary files /dev/null and b/charts/docs/andi-1.8.2.tgz differ diff --git a/charts/docs/andi-1.8.3.tgz b/charts/docs/andi-1.8.3.tgz new file mode 100644 index 000000000..70a7db56e Binary files /dev/null and b/charts/docs/andi-1.8.3.tgz differ diff --git a/charts/docs/andi-1.8.4.tgz b/charts/docs/andi-1.8.4.tgz new file mode 100644 index 000000000..ec4954a31 Binary files /dev/null and b/charts/docs/andi-1.8.4.tgz differ diff --git a/charts/docs/andi-2.0.0.tgz b/charts/docs/andi-2.0.0.tgz new file mode 100644 index 000000000..356dc525b Binary files /dev/null and b/charts/docs/andi-2.0.0.tgz differ diff --git a/charts/docs/andi-2.0.1.tgz b/charts/docs/andi-2.0.1.tgz new file mode 100644 index 000000000..466d2d8c5 Binary files /dev/null and b/charts/docs/andi-2.0.1.tgz differ diff --git a/charts/docs/andi-2.0.2.tgz b/charts/docs/andi-2.0.2.tgz new file mode 100644 index 000000000..4eaa9c735 Binary files /dev/null and b/charts/docs/andi-2.0.2.tgz differ diff --git a/charts/docs/andi-2.1.0.tgz b/charts/docs/andi-2.1.0.tgz new file mode 100644 index 000000000..ec087dbed Binary files /dev/null and b/charts/docs/andi-2.1.0.tgz differ diff --git a/charts/docs/carpenter-1.0.0.tgz b/charts/docs/carpenter-1.0.0.tgz new file mode 100644 index 000000000..334bf8534 Binary files /dev/null and b/charts/docs/carpenter-1.0.0.tgz differ diff --git a/charts/docs/discovery-api-0.10.0.tgz b/charts/docs/discovery-api-0.10.0.tgz new file mode 100644 index 000000000..30a60ec71 Binary files /dev/null and b/charts/docs/discovery-api-0.10.0.tgz differ diff --git a/charts/docs/discovery-api-0.10.1.tgz b/charts/docs/discovery-api-0.10.1.tgz new file mode 100644 index 000000000..1f23dbe3c Binary files /dev/null and b/charts/docs/discovery-api-0.10.1.tgz differ diff --git a/charts/docs/discovery-api-0.10.2.tgz b/charts/docs/discovery-api-0.10.2.tgz new file mode 100644 index 000000000..163d7fb03 Binary files /dev/null and b/charts/docs/discovery-api-0.10.2.tgz differ diff --git a/charts/docs/discovery-api-0.2.0.tgz b/charts/docs/discovery-api-0.2.0.tgz new file mode 100644 index 000000000..6fcc553de Binary files /dev/null and b/charts/docs/discovery-api-0.2.0.tgz differ diff --git a/charts/docs/discovery-api-0.2.1.tgz b/charts/docs/discovery-api-0.2.1.tgz new file mode 100644 index 000000000..4b583ca93 Binary files /dev/null and b/charts/docs/discovery-api-0.2.1.tgz differ diff --git a/charts/docs/discovery-api-0.3.0.tgz b/charts/docs/discovery-api-0.3.0.tgz new file mode 100644 index 000000000..41bb6b1de Binary files /dev/null and b/charts/docs/discovery-api-0.3.0.tgz differ diff --git a/charts/docs/discovery-api-0.4.0.tgz b/charts/docs/discovery-api-0.4.0.tgz new file mode 100644 index 000000000..27025d6c9 Binary files /dev/null and b/charts/docs/discovery-api-0.4.0.tgz differ diff --git a/charts/docs/discovery-api-0.4.1.tgz b/charts/docs/discovery-api-0.4.1.tgz new file mode 100644 index 000000000..386e0aa42 Binary files /dev/null and b/charts/docs/discovery-api-0.4.1.tgz differ diff --git a/charts/docs/discovery-api-0.4.2.tgz b/charts/docs/discovery-api-0.4.2.tgz new file mode 100644 index 000000000..0d813464a Binary files /dev/null and b/charts/docs/discovery-api-0.4.2.tgz differ diff --git a/charts/docs/discovery-api-0.4.3.tgz b/charts/docs/discovery-api-0.4.3.tgz new file mode 100644 index 000000000..f07ad2caf Binary files /dev/null and b/charts/docs/discovery-api-0.4.3.tgz differ diff --git a/charts/docs/discovery-api-0.4.4.tgz b/charts/docs/discovery-api-0.4.4.tgz new file mode 100644 index 000000000..dbc103fce Binary files /dev/null and b/charts/docs/discovery-api-0.4.4.tgz differ diff --git a/charts/docs/discovery-api-0.5.0.tgz b/charts/docs/discovery-api-0.5.0.tgz new file mode 100644 index 000000000..9b513def6 Binary files /dev/null and b/charts/docs/discovery-api-0.5.0.tgz differ diff --git a/charts/docs/discovery-api-0.6.0.tgz b/charts/docs/discovery-api-0.6.0.tgz new file mode 100644 index 000000000..2adcc03e3 Binary files /dev/null and b/charts/docs/discovery-api-0.6.0.tgz differ diff --git a/charts/docs/discovery-api-0.7.0.tgz b/charts/docs/discovery-api-0.7.0.tgz new file mode 100644 index 000000000..6c53ab095 Binary files /dev/null and b/charts/docs/discovery-api-0.7.0.tgz differ diff --git a/charts/docs/discovery-api-0.8.0.tgz b/charts/docs/discovery-api-0.8.0.tgz new file mode 100644 index 000000000..2b5c0b407 Binary files /dev/null and b/charts/docs/discovery-api-0.8.0.tgz differ diff --git a/charts/docs/discovery-api-0.8.1.tgz b/charts/docs/discovery-api-0.8.1.tgz new file mode 100644 index 000000000..cf2374e07 Binary files /dev/null and b/charts/docs/discovery-api-0.8.1.tgz differ diff --git a/charts/docs/discovery-api-0.8.2.tgz b/charts/docs/discovery-api-0.8.2.tgz new file mode 100644 index 000000000..ba7418afe Binary files /dev/null and b/charts/docs/discovery-api-0.8.2.tgz differ diff --git a/charts/docs/discovery-api-0.9.0.tgz b/charts/docs/discovery-api-0.9.0.tgz new file mode 100644 index 000000000..a30cf1b1f Binary files /dev/null and b/charts/docs/discovery-api-0.9.0.tgz differ diff --git a/charts/docs/discovery-api-1.0.0.tgz b/charts/docs/discovery-api-1.0.0.tgz new file mode 100644 index 000000000..3abe6c28d Binary files /dev/null and b/charts/docs/discovery-api-1.0.0.tgz differ diff --git a/charts/docs/discovery-api-1.1.0.tgz b/charts/docs/discovery-api-1.1.0.tgz new file mode 100644 index 000000000..1ac6f2922 Binary files /dev/null and b/charts/docs/discovery-api-1.1.0.tgz differ diff --git a/charts/docs/discovery-api-1.2.0.tgz b/charts/docs/discovery-api-1.2.0.tgz new file mode 100644 index 000000000..4b44a0e19 Binary files /dev/null and b/charts/docs/discovery-api-1.2.0.tgz differ diff --git a/charts/docs/discovery-streams-0.1.2.tgz b/charts/docs/discovery-streams-0.1.2.tgz new file mode 100644 index 000000000..85df760a6 Binary files /dev/null and b/charts/docs/discovery-streams-0.1.2.tgz differ diff --git a/charts/docs/discovery-streams-0.1.3.tgz b/charts/docs/discovery-streams-0.1.3.tgz new file mode 100644 index 000000000..bb4372aea Binary files /dev/null and b/charts/docs/discovery-streams-0.1.3.tgz differ diff --git a/charts/docs/discovery-streams-0.1.4.tgz b/charts/docs/discovery-streams-0.1.4.tgz new file mode 100644 index 000000000..ae935082f Binary files /dev/null and b/charts/docs/discovery-streams-0.1.4.tgz differ diff --git a/charts/docs/discovery-streams-0.2.0.tgz b/charts/docs/discovery-streams-0.2.0.tgz new file mode 100644 index 000000000..3e7bcf55b Binary files /dev/null and b/charts/docs/discovery-streams-0.2.0.tgz differ diff --git a/charts/docs/discovery-streams-0.2.1.tgz b/charts/docs/discovery-streams-0.2.1.tgz new file mode 100644 index 000000000..5aa9db2ed Binary files /dev/null and b/charts/docs/discovery-streams-0.2.1.tgz differ diff --git a/charts/docs/discovery-streams-0.2.2.tgz b/charts/docs/discovery-streams-0.2.2.tgz new file mode 100644 index 000000000..057436ee1 Binary files /dev/null and b/charts/docs/discovery-streams-0.2.2.tgz differ diff --git a/charts/docs/discovery-streams-0.3.0.tgz b/charts/docs/discovery-streams-0.3.0.tgz new file mode 100644 index 000000000..dcc6893c8 Binary files /dev/null and b/charts/docs/discovery-streams-0.3.0.tgz differ diff --git a/charts/docs/discovery-streams-0.3.1.tgz b/charts/docs/discovery-streams-0.3.1.tgz new file mode 100644 index 000000000..fe8d2033b Binary files /dev/null and b/charts/docs/discovery-streams-0.3.1.tgz differ diff --git a/charts/docs/discovery-streams-1.0.0.tgz b/charts/docs/discovery-streams-1.0.0.tgz new file mode 100644 index 000000000..00447dd76 Binary files /dev/null and b/charts/docs/discovery-streams-1.0.0.tgz differ diff --git a/charts/docs/discovery-ui-0.1.1.tgz b/charts/docs/discovery-ui-0.1.1.tgz new file mode 100644 index 000000000..36ac162e8 Binary files /dev/null and b/charts/docs/discovery-ui-0.1.1.tgz differ diff --git a/charts/docs/discovery-ui-0.1.2.tgz b/charts/docs/discovery-ui-0.1.2.tgz new file mode 100644 index 000000000..628c7f20d Binary files /dev/null and b/charts/docs/discovery-ui-0.1.2.tgz differ diff --git a/charts/docs/discovery-ui-0.2.0.tgz b/charts/docs/discovery-ui-0.2.0.tgz new file mode 100644 index 000000000..a432877cc Binary files /dev/null and b/charts/docs/discovery-ui-0.2.0.tgz differ diff --git a/charts/docs/discovery-ui-0.2.1.tgz b/charts/docs/discovery-ui-0.2.1.tgz new file mode 100644 index 000000000..686049c09 Binary files /dev/null and b/charts/docs/discovery-ui-0.2.1.tgz differ diff --git a/charts/docs/discovery-ui-0.2.2.tgz b/charts/docs/discovery-ui-0.2.2.tgz new file mode 100644 index 000000000..fbebb0d98 Binary files /dev/null and b/charts/docs/discovery-ui-0.2.2.tgz differ diff --git a/charts/docs/discovery-ui-0.2.3.tgz b/charts/docs/discovery-ui-0.2.3.tgz new file mode 100644 index 000000000..a09f8c168 Binary files /dev/null and b/charts/docs/discovery-ui-0.2.3.tgz differ diff --git a/charts/docs/discovery-ui-0.3.0.tgz b/charts/docs/discovery-ui-0.3.0.tgz new file mode 100644 index 000000000..29fbaf964 Binary files /dev/null and b/charts/docs/discovery-ui-0.3.0.tgz differ diff --git a/charts/docs/discovery-ui-0.3.1.tgz b/charts/docs/discovery-ui-0.3.1.tgz new file mode 100644 index 000000000..fd7208576 Binary files /dev/null and b/charts/docs/discovery-ui-0.3.1.tgz differ diff --git a/charts/docs/discovery-ui-0.3.2.tgz b/charts/docs/discovery-ui-0.3.2.tgz new file mode 100644 index 000000000..b689188f4 Binary files /dev/null and b/charts/docs/discovery-ui-0.3.2.tgz differ diff --git a/charts/docs/discovery-ui-0.4.0.tgz b/charts/docs/discovery-ui-0.4.0.tgz new file mode 100644 index 000000000..31c999516 Binary files /dev/null and b/charts/docs/discovery-ui-0.4.0.tgz differ diff --git a/charts/docs/discovery-ui-0.4.1.tgz b/charts/docs/discovery-ui-0.4.1.tgz new file mode 100644 index 000000000..15674b0a2 Binary files /dev/null and b/charts/docs/discovery-ui-0.4.1.tgz differ diff --git a/charts/docs/discovery-ui-0.4.2.tgz b/charts/docs/discovery-ui-0.4.2.tgz new file mode 100644 index 000000000..9db11375a Binary files /dev/null and b/charts/docs/discovery-ui-0.4.2.tgz differ diff --git a/charts/docs/discovery-ui-0.4.3.tgz b/charts/docs/discovery-ui-0.4.3.tgz new file mode 100644 index 000000000..e940e5064 Binary files /dev/null and b/charts/docs/discovery-ui-0.4.3.tgz differ diff --git a/charts/docs/discovery-ui-1.0.0.tgz b/charts/docs/discovery-ui-1.0.0.tgz new file mode 100644 index 000000000..7030de5be Binary files /dev/null and b/charts/docs/discovery-ui-1.0.0.tgz differ diff --git a/charts/docs/estuary-0.1.0.tgz b/charts/docs/estuary-0.1.0.tgz new file mode 100644 index 000000000..7f643754a Binary files /dev/null and b/charts/docs/estuary-0.1.0.tgz differ diff --git a/charts/docs/estuary-0.1.1.tgz b/charts/docs/estuary-0.1.1.tgz new file mode 100644 index 000000000..55d2daa07 Binary files /dev/null and b/charts/docs/estuary-0.1.1.tgz differ diff --git a/charts/docs/estuary-0.1.2.tgz b/charts/docs/estuary-0.1.2.tgz new file mode 100644 index 000000000..3f1c3c45a Binary files /dev/null and b/charts/docs/estuary-0.1.2.tgz differ diff --git a/charts/docs/estuary-0.2.0.tgz b/charts/docs/estuary-0.2.0.tgz new file mode 100644 index 000000000..f5d7602df Binary files /dev/null and b/charts/docs/estuary-0.2.0.tgz differ diff --git a/charts/docs/estuary-0.3.0.tgz b/charts/docs/estuary-0.3.0.tgz new file mode 100644 index 000000000..f7f358bfa Binary files /dev/null and b/charts/docs/estuary-0.3.0.tgz differ diff --git a/charts/docs/estuary-0.3.1.tgz b/charts/docs/estuary-0.3.1.tgz new file mode 100644 index 000000000..e12f8e645 Binary files /dev/null and b/charts/docs/estuary-0.3.1.tgz differ diff --git a/charts/docs/estuary-0.4.0.tgz b/charts/docs/estuary-0.4.0.tgz new file mode 100644 index 000000000..cd1f318a7 Binary files /dev/null and b/charts/docs/estuary-0.4.0.tgz differ diff --git a/charts/docs/estuary-0.4.1.tgz b/charts/docs/estuary-0.4.1.tgz new file mode 100644 index 000000000..e6020ef66 Binary files /dev/null and b/charts/docs/estuary-0.4.1.tgz differ diff --git a/charts/docs/estuary-0.5.0.tgz b/charts/docs/estuary-0.5.0.tgz new file mode 100644 index 000000000..5f0429426 Binary files /dev/null and b/charts/docs/estuary-0.5.0.tgz differ diff --git a/charts/docs/estuary-0.5.1.tgz b/charts/docs/estuary-0.5.1.tgz new file mode 100644 index 000000000..cb80edc8b Binary files /dev/null and b/charts/docs/estuary-0.5.1.tgz differ diff --git a/charts/docs/estuary-0.5.2.tgz b/charts/docs/estuary-0.5.2.tgz new file mode 100644 index 000000000..dce84066a Binary files /dev/null and b/charts/docs/estuary-0.5.2.tgz differ diff --git a/charts/docs/external-services-1.0.0.tgz b/charts/docs/external-services-1.0.0.tgz new file mode 100644 index 000000000..dc6de6b4e Binary files /dev/null and b/charts/docs/external-services-1.0.0.tgz differ diff --git a/charts/docs/flair-2.1.0.tgz b/charts/docs/flair-2.1.0.tgz new file mode 100644 index 000000000..2a4a1b3b0 Binary files /dev/null and b/charts/docs/flair-2.1.0.tgz differ diff --git a/charts/docs/forklift-2.1.0.tgz b/charts/docs/forklift-2.1.0.tgz new file mode 100644 index 000000000..2c4ebdb82 Binary files /dev/null and b/charts/docs/forklift-2.1.0.tgz differ diff --git a/charts/docs/forklift-2.1.1.tgz b/charts/docs/forklift-2.1.1.tgz new file mode 100644 index 000000000..8c4261ce1 Binary files /dev/null and b/charts/docs/forklift-2.1.1.tgz differ diff --git a/charts/docs/forklift-2.2.1.tgz b/charts/docs/forklift-2.2.1.tgz new file mode 100644 index 000000000..a36ac5f9c Binary files /dev/null and b/charts/docs/forklift-2.2.1.tgz differ diff --git a/charts/docs/forklift-2.3.0.tgz b/charts/docs/forklift-2.3.0.tgz new file mode 100644 index 000000000..f3d4870b8 Binary files /dev/null and b/charts/docs/forklift-2.3.0.tgz differ diff --git a/charts/docs/forklift-2.4.0.tgz b/charts/docs/forklift-2.4.0.tgz new file mode 100644 index 000000000..12bbfa953 Binary files /dev/null and b/charts/docs/forklift-2.4.0.tgz differ diff --git a/charts/docs/forklift-2.4.1.tgz b/charts/docs/forklift-2.4.1.tgz new file mode 100644 index 000000000..073ec60fb Binary files /dev/null and b/charts/docs/forklift-2.4.1.tgz differ diff --git a/charts/docs/forklift-2.5.0.tgz b/charts/docs/forklift-2.5.0.tgz new file mode 100644 index 000000000..130957c13 Binary files /dev/null and b/charts/docs/forklift-2.5.0.tgz differ diff --git a/charts/docs/forklift-2.6.0.tgz b/charts/docs/forklift-2.6.0.tgz new file mode 100644 index 000000000..dafee1d4d Binary files /dev/null and b/charts/docs/forklift-2.6.0.tgz differ diff --git a/charts/docs/forklift-2.7.0.tgz b/charts/docs/forklift-2.7.0.tgz new file mode 100644 index 000000000..a8ee793c0 Binary files /dev/null and b/charts/docs/forklift-2.7.0.tgz differ diff --git a/charts/docs/forklift-2.8.0.tgz b/charts/docs/forklift-2.8.0.tgz new file mode 100644 index 000000000..65c265813 Binary files /dev/null and b/charts/docs/forklift-2.8.0.tgz differ diff --git a/charts/docs/forklift-3.0.0.tgz b/charts/docs/forklift-3.0.0.tgz new file mode 100644 index 000000000..e7d78051d Binary files /dev/null and b/charts/docs/forklift-3.0.0.tgz differ diff --git a/charts/docs/forklift-3.0.1.tgz b/charts/docs/forklift-3.0.1.tgz new file mode 100644 index 000000000..6fc22c6e6 Binary files /dev/null and b/charts/docs/forklift-3.0.1.tgz differ diff --git a/charts/docs/forklift-3.1.0.tgz b/charts/docs/forklift-3.1.0.tgz new file mode 100644 index 000000000..2a86cdd2b Binary files /dev/null and b/charts/docs/forklift-3.1.0.tgz differ diff --git a/charts/docs/forklift-3.1.1.tgz b/charts/docs/forklift-3.1.1.tgz new file mode 100644 index 000000000..823d5dfb6 Binary files /dev/null and b/charts/docs/forklift-3.1.1.tgz differ diff --git a/charts/docs/genesis-2.0.1.tgz b/charts/docs/genesis-2.0.1.tgz new file mode 100644 index 000000000..ca6ac4f60 Binary files /dev/null and b/charts/docs/genesis-2.0.1.tgz differ diff --git a/charts/docs/index.yaml b/charts/docs/index.yaml new file mode 100644 index 000000000..7210e4fc6 --- /dev/null +++ b/charts/docs/index.yaml @@ -0,0 +1,2281 @@ +apiVersion: v1 +entries: + andi: + - apiVersion: v1 + created: "2021-07-26T13:19:25.912759-04:00" + description: REST API to allow for dataset definition ingestion + digest: 3dc354952206f101120cefde186b092fe3041342d400c6c0cf63fb12c6b11075 + name: andi + urls: + - andi-2.1.0.tgz + version: 2.1.0 + - apiVersion: v1 + created: "2021-07-19T10:41:28.200088-05:00" + description: REST API to allow for dataset definition ingestion + digest: 38742bfbdbe7c158f56f3378671e5be58c308d06b80dde025264f16d9484e7b9 + name: andi + urls: + - andi-2.0.2.tgz + version: 2.0.2 + - apiVersion: v1 + created: "2021-07-09T14:17:35.769905-05:00" + description: REST API to allow for dataset definition ingestion + digest: 16e86407dbe7971263b5a8cc950b865f54d49ac6e77486b6096b80c43b3bce09 + name: andi + urls: + - andi-2.0.1.tgz + version: 2.0.1 + - apiVersion: v1 + created: "2021-06-02T13:51:20.790811-05:00" + description: REST API to allow for dataset definition ingestion + digest: 3c904bceff7de5931f68ba2b4c9150430b708c1e96e3ebf71c265b23b977de17 + name: andi + urls: + - andi-2.0.0.tgz + version: 2.0.0 + - apiVersion: v1 + created: "2021-05-11T16:13:07.32087-04:00" + description: REST API to allow for dataset definition ingestion + digest: 1cd051fb09b1b02dc566c2be699cedc539721e3690df9a7671003e4d1c8b35ca + name: andi + urls: + - andi-1.8.4.tgz + version: 1.8.4 + - apiVersion: v1 + created: "2021-04-08T14:04:06.470958-04:00" + description: REST API to allow for dataset definition ingestion + digest: 4398708efcdb877779d2a6441edf1390513d712c83ed3bc8fdf68298f469d533 + name: andi + urls: + - andi-1.8.3.tgz + version: 1.8.3 + - apiVersion: v1 + created: "2021-01-07T13:42:10.158723-05:00" + description: REST API to allow for dataset definition ingestion + digest: 7bb53331d022fa73b1e861861ee78c405cdcc5671b2fb584c307350595d4bac3 + name: andi + urls: + - andi-1.8.2.tgz + version: 1.8.2 + - apiVersion: v1 + created: "2020-12-08T09:55:07.813034-05:00" + description: REST API to allow for dataset definition ingestion + digest: 13ec6e1096053c564a8e11cc08498e718abfd7d32d778c3ac0b945d43e20bb15 + name: andi + urls: + - andi-1.8.1.tgz + version: 1.8.1 + - apiVersion: v1 + created: "2020-12-07T11:48:53.549878-05:00" + description: REST API to allow for dataset definition ingestion + digest: a506658c3b379d6dfde91593fa996232d53167aba6f2011d244c02c5a5716e09 + name: andi + urls: + - andi-1.8.0.tgz + version: 1.8.0 + - apiVersion: v1 + created: "2020-12-03T08:24:52.232098-05:00" + description: REST API to allow for dataset definition ingestion + digest: 0ec20e50f60a187d23dc2136620e6eda3d25fcf27067838bb7d9f37237c3cd3e + name: andi + urls: + - andi-1.7.0.tgz + version: 1.7.0 + - apiVersion: v1 + created: "2020-12-01T08:30:09.562321-05:00" + description: REST API to allow for dataset definition ingestion + digest: 5331a7ae034ed7f2e739251914599bc3a7744d8dcb19eac6b455e506bdf711b9 + name: andi + urls: + - andi-1.6.0.tgz + version: 1.6.0 + - apiVersion: v1 + created: "2020-10-22T11:40:17.171415-04:00" + description: REST API to allow for dataset definition ingestion + digest: 90e55b284bb5f21d81198b70c7b15833f07019f6c76b8afba019f6000e8cc062 + name: andi + urls: + - andi-1.5.0.tgz + version: 1.5.0 + - apiVersion: v1 + created: "2020-10-02T13:46:20.303327-04:00" + description: REST API to allow for dataset definition ingestion + digest: 4eae7dff0100b891e02fe38cd5b0fc4b04d1ce22758d2472456be6b74e2b7bb6 + name: andi + urls: + - andi-1.4.6.tgz + version: 1.4.6 + - apiVersion: v1 + created: "2020-09-15T15:52:59.314284-04:00" + description: REST API to allow for dataset definition ingestion + digest: 4dc98e2d99d5c08d054932af9ac8de4bfb4d19932cfc57fe9a25cba3577588a3 + name: andi + urls: + - andi-1.4.5.tgz + version: 1.4.5 + - apiVersion: v1 + created: "2020-09-15T15:17:15.838649-04:00" + description: REST API to allow for dataset definition ingestion + digest: fdf01181f066b205767464a7f61074dd107f3e104fc4c8905f86f6db73e255b3 + name: andi + urls: + - andi-1.4.4.tgz + version: 1.4.4 + - apiVersion: v1 + created: "2020-09-15T14:19:34.016799-04:00" + description: REST API to allow for dataset definition ingestion + digest: f39e4fa53ca870f333e7bf8944ce63515cf0551906e20d8dbf16c7780fc8c9d6 + name: andi + urls: + - andi-1.4.3.tgz + version: 1.4.3 + - apiVersion: v1 + created: "2020-06-12T09:38:53.479842423-04:00" + description: REST API to allow for dataset definition ingestion + digest: a7d7d7d0a5c22e43e87ecd47d18b99eb3325603a141e8bc72f5630e288532a3e + name: andi + urls: + - andi-1.4.2.tgz + version: 1.4.2 + - apiVersion: v1 + created: "2020-06-11T14:15:17.721790163-04:00" + description: REST API to allow for dataset definition ingestion + digest: e98bce4112775a3e63671f705415af7263bad8323ecc3b57fcf16063d2326f54 + name: andi + urls: + - andi-1.4.1.tgz + version: 1.4.1 + - apiVersion: v1 + created: "2020-06-10T15:49:47.360800089-04:00" + description: REST API to allow for dataset definition ingestion + digest: 83532b8401b45a12c2451367ee39351c00f6674bae64b8bed9bc899bdb025518 + name: andi + urls: + - andi-1.4.0.tgz + version: 1.4.0 + - apiVersion: v1 + created: "2020-06-02T14:32:54.431214085-04:00" + description: REST API to allow for dataset definition ingestion + digest: 78eac628bba52b9751f7d687cc438633024c86b6e82f9bb10c71fff4831c79d1 + name: andi + urls: + - andi-1.3.1.tgz + version: 1.3.1 + - apiVersion: v1 + created: "2020-04-15T12:04:37.691153-04:00" + description: REST API to allow for dataset definition ingestion + digest: 49e8ac708330aaed41c1574f9c93c1d2101f0dd2ff80a40bd958fd1c55da4d41 + name: andi + urls: + - andi-1.3.0.tgz + version: 1.3.0 + - apiVersion: v1 + created: "2020-02-10T14:56:12.182537-05:00" + description: REST API to allow for dataset definition ingestion + digest: 6dc9dbb7f65a24b78d41a9ad3e1c0ea3548ef0501fdb32490115fc43b38a0d33 + name: andi + urls: + - andi-1.2.3.tgz + version: 1.2.3 + - apiVersion: v1 + created: "2020-01-27T11:21:27.398806-05:00" + description: REST API to allow for dataset definition ingestion + digest: 1fc9d330a0f0d4adfdd0ea66a59ba6c4229271ddf9a6ec317c84cfca1e00d25b + name: andi + urls: + - andi-1.2.2.tgz + version: 1.2.2 + - apiVersion: v1 + created: "2020-01-24T14:30:32.642748-05:00" + description: REST API to allow for dataset definition ingestion + digest: 7493c8ef27b5ef054ba720559af59d04337eaf7a8124909d4cbb3d259ebd534f + name: andi + urls: + - andi-1.2.1.tgz + version: 1.2.1 + - apiVersion: v1 + created: "2020-01-24T09:38:16.136295-05:00" + description: REST API to allow for dataset definition ingestion + digest: ddd796ead5bbc03fc8aa3402731a8771e2b0064477007492bd6e2ab4417edeb5 + name: andi + urls: + - andi-1.2.0.tgz + version: 1.2.0 + - apiVersion: v1 + created: "2019-10-31T10:40:40.773138-04:00" + description: REST API to allow for dataset definition ingestion + digest: 89965919b438c3d79bf3020d4d820bf9b0138340eeffadbfe11ddb186d6ee946 + name: andi + urls: + - andi-1.1.3.tgz + version: 1.1.3 + - apiVersion: v1 + created: "2019-11-19T16:18:41.444293-05:00" + description: REST API to allow for dataset definition ingestion + digest: ba9b4c8b9d2597f8ee3ed8e930f94cc98ac54d2576692c13f4ebff4ce3d3ce4f + name: andi + urls: + - andi-1.1.2.tgz + version: 1.1.2 + - apiVersion: v1 + created: "2019-10-24T16:17:25.765506-04:00" + description: REST API to allow for dataset definition ingestion + digest: fd12957f7b9374d7938592492312520f348e411f5c576749267619c52721a26b + name: andi + urls: + - andi-1.1.1.tgz + version: 1.1.1 + - apiVersion: v1 + created: "2019-08-06T10:25:46.176264-04:00" + description: REST API to allow for dataset definition ingestion + digest: 5aa94c38e83912cda418215e6ae8f7a263d887851db66a83812379c1ccb7d5e9 + name: andi + urls: + - andi-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-17T08:43:03.913273417-04:00" + description: REST API to allow for dataset definition ingestion + digest: 95d51c3a76f115ccb53e2cd2e37694c60ee92e728a24593b16f44aaf962fc106 + name: andi + urls: + - andi-1.0.1.tgz + version: 1.0.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-17T08:43:03.912184586-04:00" + description: REST API to allow for dataset definition ingestion + digest: 87a558e09dc5ee07fbe8182060aa40e43d2ed1d6055280007cbc372a6d7f1a56 + name: andi + urls: + - andi-1.0.0.tgz + version: 1.0.0 + carpenter: + - apiVersion: v1 + created: "2019-08-08T10:17:35.904303738-04:00" + description: Creates tables for the SmartCitiesData platform + digest: 85da6bf15e5efa208739d3d083b9c87fdae2029d915ef2e0bea39556b510e8fd + name: carpenter + urls: + - carpenter-1.0.0.tgz + version: 1.0.0 + discovery-api: + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2021-08-16T16:19:47.380419-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 298ac91a04cef348e348c81b4184dad9d7c1fc0e2e5ea546bb194ecf6527f752 + name: discovery-api + urls: + - discovery-api-1.2.0.tgz + version: 1.2.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2021-07-26T13:20:02.490527-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 7cebc018ff08e2743be6d81729a80227f90425fc7db05696acf700988e64da68 + name: discovery-api + urls: + - discovery-api-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2021-07-09T14:15:06.904083-05:00" + description: A middleware layer to connect data consumers with the data sources + digest: cf978d6c6238d1e7a7659504f7d8daa6c96f145ac886e3df2937f8bd95768519 + name: discovery-api + urls: + - discovery-api-1.0.0.tgz + version: 1.0.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2021-04-12T11:57:52.646119-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 507542b27f859d91cc336d21a8d20f635d6420780a99f63387f6800d17d8f2ee + name: discovery-api + urls: + - discovery-api-0.10.2.tgz + version: 0.10.2 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-06-03T10:32:23.798414574-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 7b714f8b95deabf2dc7517b5fb70f9368bf8eb2f154515d91f5edb6630414ed7 + name: discovery-api + urls: + - discovery-api-0.10.1.tgz + version: 0.10.1 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-04-27T13:20:55.978787-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 84282d41e93fa4f18074889c564c457db6511064de3fbb39b45b0ede5c33a5b7 + name: discovery-api + urls: + - discovery-api-0.10.0.tgz + version: 0.10.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-03-24T09:37:11.365062699-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 763d9a31db23f6f39689262afb75cde9a2c3ac0af0ecf774d4516612ac09ca6f + name: discovery-api + urls: + - discovery-api-0.9.0.tgz + version: 0.9.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-03-10T14:59:26.649868-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 2687cd5a2abcc0e5a652e38d6b6a6b3823060f5c8acd22b16dcacd4a78922dd6 + name: discovery-api + urls: + - discovery-api-0.8.2.tgz + version: 0.8.2 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-03-10T14:25:57.046463-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: f1d56ba7aa5e6684268cd2641d1769166a2cbe5207f10bf62524d3cb73a2c8af + name: discovery-api + urls: + - discovery-api-0.8.1.tgz + version: 0.8.1 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-03-04T10:00:30.581678-05:00" + description: A middleware layer to connect data consumers with the data sources + digest: d974708643dfd024f9362eba48760f9ded602474980090649dca8b54c12ce70d + name: discovery-api + urls: + - discovery-api-0.8.0.tgz + version: 0.8.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-02-10T12:37:45.57104-05:00" + description: A middleware layer to connect data consumers with the data sources + digest: 7aa9cbc1feb4cd92e7d0495244efa22ea8266eaf98abed0bfa85889e016b5ee8 + name: discovery-api + urls: + - discovery-api-0.7.0.tgz + version: 0.7.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2020-02-10T10:40:44.635631-05:00" + description: A middleware layer to connect data consumers with the data sources + digest: bc12b6f3d300b63ec1a864533a24e5ff72f127d6840676458aef397c02e32afa + name: discovery-api + urls: + - discovery-api-0.6.0.tgz + version: 0.6.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-12-03T10:30:22.898932-05:00" + description: A middleware layer to connect data consumers with the data sources + digest: a0d20a5ceedf024c91a5409de25df462ee9be1ca30c68327702123f49f8f46ba + name: discovery-api + urls: + - discovery-api-0.5.0.tgz + version: 0.5.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-11-11T09:30:24.953952-05:00" + description: A middleware layer to connect data consumers with the data sources + digest: 6a8c4c78dd7c395cb7f3f2fab3c735fee1ea8a93eb0be5086106f91b9e4e3cd8 + name: discovery-api + urls: + - discovery-api-0.4.3.tgz + version: 0.4.3 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-10-14T11:51:58.694727525-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 52f1312abd3eb97055d7a80704ebcbdabb409b77bb25eb3a22fad5e35c7c494e + name: discovery-api + urls: + - discovery-api-0.4.2.tgz + version: 0.4.2 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-09-25T14:05:59.69468-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: c3ea0b7c95c074d3442a7e1b698cd65339cc852fa9fb85df9271821f7cbbfc58 + name: discovery-api + urls: + - discovery-api-0.4.1.tgz + version: 0.4.1 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-09-23T12:51:16.119341-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: d6cb46980abec0d0f30c5b8173f79c600a0d405525f681d41cd79855fe07e5e4 + name: discovery-api + urls: + - discovery-api-0.4.0.tgz + version: 0.4.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-09-23T12:50:36.885011-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: cdc9727e69c8cfc1f920c888fe7bf3b23db62da41db022d98ed0436652e1150e + name: discovery-api + urls: + - discovery-api-0.3.0.tgz + version: 0.3.0 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-08-06T10:57:54.46772333-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 2929f38815547b1c87969eb9aafe60bf122c8c8844a3e57ca0109f8b71abef51 + name: discovery-api + urls: + - discovery-api-0.2.1.tgz + version: 0.2.1 + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-07-16T16:23:37.699742476-04:00" + description: A middleware layer to connect data consumers with the data sources + digest: 42a1507eeeb6d7773d568189b84cdba87f8f821e58f983643682f225cf0c508e + name: discovery-api + urls: + - discovery-api-0.2.0.tgz + version: 0.2.0 + discovery-streams: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-07-09T14:17:28.826869-05:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: 670ada337c00b6feb3533aaec3babbdccef0483d7fc32f035f8a2bc9d8108c0c + name: discovery-streams + urls: + - discovery-streams-1.0.0.tgz + version: 1.0.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-04-08T12:18:00.01316-04:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: d66ba890e5f009d6205cd32995f8960adc0fd7d34eda2d0beb9d9c5fbda2bc14 + name: discovery-streams + urls: + - discovery-streams-0.3.1.tgz + version: 0.3.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-09-14T15:14:19.627932-04:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: 67689d9240803ff58112e39806c13d18456dde0db9c0e1fef09b3697356b2f60 + name: discovery-streams + urls: + - discovery-streams-0.3.0.tgz + version: 0.3.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-06-03T10:32:30.492805045-04:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: 2cacb4478de063771042da803aeb52b2b17ad4fa2c30422fa8a8aaf74c5c1c9b + name: discovery-streams + urls: + - discovery-streams-0.2.2.tgz + version: 0.2.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-01-16T10:35:33.701193-05:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: a486adda7ca32422b1eff5269a8fc1aecc51cca129bf678527090c950b711286 + name: discovery-streams + urls: + - discovery-streams-0.2.1.tgz + version: 0.2.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-12-12T14:56:44.062504-05:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: 0357c54697a3ec4439f7e9731845e60cf8dc001053f8e645a1ef99e20303e169 + name: discovery-streams + urls: + - discovery-streams-0.2.0.tgz + version: 0.2.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-09-18T08:56:42.388497-04:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: 21f17d1bed83cd9af7c30bc6b0d3bde85818c9c8e727420d715d2659f71a93b3 + name: discovery-streams + urls: + - discovery-streams-0.1.4.tgz + version: 0.1.4 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-09-16T14:02:09.143635-04:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: f503a31c002392f28aa908bf19831d4a262694582dc52e09822133992b5a9831 + name: discovery-streams + urls: + - discovery-streams-0.1.3.tgz + version: 0.1.3 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-17T08:43:03.926899729-04:00" + description: Dynamically find kafka topics and makes available corresponding channels on a public websocket + digest: 63bf4e84bf6193da9a87f37e8878f3ac0ee49e693a1bd96f29e8fcdfed8fbef9 + name: discovery-streams + urls: + - discovery-streams-0.1.2.tgz + version: 0.1.2 + discovery-ui: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-07-09T14:17:23.611954-05:00" + description: A helm chart for the discovery ui + digest: 999f47d7bfedd37eea3767b334cdf6138152ebde932d098367e8e1c47479c1f0 + name: discovery-ui + urls: + - discovery-ui-1.0.0.tgz + version: 1.0.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-04-12T11:57:55.362115-04:00" + description: A helm chart for the discovery ui + digest: 2a89c51765535edf52c9c4ca15488042e8a0e74756cf83dcf4772063a3653129 + name: discovery-ui + urls: + - discovery-ui-0.4.3.tgz + version: 0.4.3 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-01-21T09:29:58.940207-05:00" + description: A helm chart for the discovery ui + digest: be63766b23346f47567150970474d349c25f01e44305ea8a0c873849f18b15c3 + name: discovery-ui + urls: + - discovery-ui-0.4.2.tgz + version: 0.4.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-12-03T08:27:46.292595-05:00" + description: A helm chart for the discovery ui + digest: 059105cd22f51d654d903970425100c95a450e8839665ad0067911c5f0e5ff9e + name: discovery-ui + urls: + - discovery-ui-0.4.1.tgz + version: 0.4.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-09-15T15:38:49.208668-04:00" + description: A helm chart for the discovery ui + digest: 5eafe140674cf8b9b3c89621b431636ec82be8616a8913bb9dca270ed923340a + name: discovery-ui + urls: + - discovery-ui-0.4.0.tgz + version: 0.4.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-01-31T09:38:05.698386-05:00" + description: A helm chart for the discovery ui + digest: 89be95c485faad09553798070f6b0d6d2d079d15bd653c67c0895a3cefb335ad + name: discovery-ui + urls: + - discovery-ui-0.3.2.tgz + version: 0.3.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-01-16T10:35:40.206062-05:00" + description: A helm chart for the discovery ui + digest: 44951989f60899deba97f1b4b7cbd3cf5ea4efe63c2b9b0e60d3ce02323dd48a + name: discovery-ui + urls: + - discovery-ui-0.3.1.tgz + version: 0.3.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-01-10T10:30:11.851206-05:00" + description: A helm chart for the discovery ui + digest: e63095d6b093d5c3a2ed9c524d76cbfa0fc07d4d2a8d34d2c4d3beb7712c1496 + name: discovery-ui + urls: + - discovery-ui-0.3.0.tgz + version: 0.3.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-09-26T14:50:26.254629-04:00" + description: A helm chart for the discovery ui + digest: 8aac23502d772964f7487968e992a97797bc9f3441775a265992348dde8841b4 + name: discovery-ui + urls: + - discovery-ui-0.2.3.tgz + version: 0.2.3 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-09-12T10:18:25.831987-04:00" + description: A helm chart for the discovery ui + digest: 03e4e5a101456b27a264dfa040b62b70bd178329c72a3c127096afc31eb4be9e + name: discovery-ui + urls: + - discovery-ui-0.2.2.tgz + version: 0.2.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-09-04T08:56:46.165049-04:00" + description: A helm chart for the discovery ui + digest: 02cb36319d2abb9e61e1b7d1d9113b1f012bbccb460efe368865ef43650fd1ea + name: discovery-ui + urls: + - discovery-ui-0.2.1.tgz + version: 0.2.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-27T12:11:25.402154708-04:00" + description: A helm chart for the discovery ui + digest: dc21382df0f2bed0ead62580f0663f2c9d6d0b6d841be3aa8e8321e146fa5fee + name: discovery-ui + urls: + - discovery-ui-0.2.0.tgz + version: 0.2.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-09T11:28:38.037045495-04:00" + description: A helm chart for the discovery ui + digest: e255e5b95b31d22e2bdc5593913a81dc1baae7a0803918a22c527ad065c2cac7 + name: discovery-ui + urls: + - discovery-ui-0.1.2.tgz + version: 0.1.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-17T09:43:08.720755994-04:00" + description: A helm chart for the discovery ui + digest: 60730467df1df1b2b6f78038b1e37c1ed0c1330acf1f2d57ebc26b322ba32b6b + name: discovery-ui + urls: + - discovery-ui-0.1.1.tgz + version: 0.1.1 + estuary: + - apiVersion: v1 + created: "2021-04-08T14:04:18.745342-04:00" + description: Reads the event stream and stores them in to event_stream table + digest: 7b7a070fb515d7653466f5667d49a5b69cb0ab8add781f4da917ead1400b8669 + name: estuary + urls: + - estuary-0.5.2.tgz + version: 0.5.2 + - apiVersion: v1 + created: "2020-01-30T11:24:34.104351-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 3ec89b76de70abaac924726db749d7b6b3ea0c8c42747df6ca91b13f1e391d74 + name: estuary + urls: + - estuary-0.5.1.tgz + version: 0.5.1 + - apiVersion: v1 + created: "2020-01-29T10:03:13.646471-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 780c3478e01855e5fa8d0f6c389d1a4efbcd0f62848b096fa8ce7d01016ac986 + name: estuary + urls: + - estuary-0.5.0.tgz + version: 0.5.0 + - apiVersion: v1 + created: "2020-01-13T17:19:06.899283422-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: dedcfeb9f6f0a9dea3d7610c8e5a2fbc3606d79cd0bfc261e18b7ba0463c0750 + name: estuary + urls: + - estuary-0.4.1.tgz + version: 0.4.1 + - apiVersion: v1 + created: "2020-01-13T15:13:02.838163-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 8f8a12335c13b5005f5fa77cf54dd3113dd7192157e2874eee88c08dc1e53bda + name: estuary + urls: + - estuary-0.4.0.tgz + version: 0.4.0 + - apiVersion: v1 + created: "2020-01-10T10:25:16.53450892-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 5548136e38ff6397e1e3db84043d36a1374fafd13c196395522a9f4a7e27b069 + name: estuary + urls: + - estuary-0.3.1.tgz + version: 0.3.1 + - apiVersion: v1 + created: "2020-01-10T09:45:31.826799466-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 7bf7c66c8c53ea3c368d44ad3f2a4cba46d7ab41e6e8250d61d85cd4a7c1d2bd + name: estuary + urls: + - estuary-0.3.0.tgz + version: 0.3.0 + - apiVersion: v1 + created: "2020-01-10T09:45:07.389007747-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 713a3b8981fd6a4c36cc5f8cd2a97f019c9d898662be3cf14f05f86692870502 + name: estuary + urls: + - estuary-0.2.0.tgz + version: 0.2.0 + - apiVersion: v1 + created: "2019-12-17T11:24:20.048038-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 32e05bbb8ee22346f13f6e5fee73e5aac75b34519cf18c8575f1075e28080cfe + name: estuary + urls: + - estuary-0.1.2.tgz + version: 0.1.2 + - apiVersion: v1 + created: "2019-12-09T13:29:02.622137-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 43b73f23be5b12cd357051664b948e9e4d9aef141bfbef04688ee5260dd78ca0 + name: estuary + urls: + - estuary-0.1.1.tgz + version: 0.1.1 + - apiVersion: v1 + created: "2019-12-09T13:12:36.723214-05:00" + description: Reads the event stream and stores them in to event_stream table + digest: 532deedfa985b87bd5c378839f41a0ef3ae5849ee6da3381541fd2655c3c2724 + name: estuary + urls: + - estuary-0.1.0.tgz + version: 0.1.0 + external-services: + - apiVersion: v1 + appVersion: 1.0.0 + created: "2019-09-27T10:15:50.10791-04:00" + description: Helm chart for external services + digest: fb24917c26b0edfe54c390c6b516f902546cd37e5fd18a650013cf6591ea65ba + name: external-services + urls: + - external-services-1.0.0.tgz + version: 1.0.0 + flair: + - apiVersion: v1 + appVersion: 1.0.0-static + created: "2019-07-17T12:43:29.135195026-04:00" + description: Watches data on the validated topic and does profiling on its path through the data pipeline. + digest: c859e0c0f26db7c835a94de2a6a998169a117d093a3bbabc11015b8e208ddf70 + name: flair + urls: + - flair-2.1.0.tgz + version: 2.1.0 + forklift: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-22T14:18:29.517276-04:00" + description: Loads data from the transformed topic into Presto + digest: 74b4f53d59a8f61056251d0265118f685f7f85698aaaf038436b9052fc5f00f3 + name: forklift + urls: + - forklift-3.1.1.tgz + version: 3.1.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-21T14:42:51.941008-04:00" + description: Loads data from the transformed topic into Presto + digest: 61eb167551ecdde734fc2bcc08c73ec39e2b480a71461ceb36df022e1eb73903 + name: forklift + urls: + - forklift-3.1.0.tgz + version: 3.1.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-14T09:45:07.444299-05:00" + description: Loads data from the transformed topic into Presto + digest: ecd00f477225666a038168a52182d27a60a33a4f1e6d1cd6c95e5940820e36b3 + name: forklift + urls: + - forklift-3.0.1.tgz + version: 3.0.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-03T13:46:31.716938-05:00" + description: Loads data from the transformed topic into Presto + digest: 987f529e4e9e708e36901dfc22831aca2d0851962ea80d45fb31e26e8a704a3a + name: forklift + urls: + - forklift-3.0.0.tgz + version: 3.0.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-09-24T14:51:00.947689-04:00" + description: Loads data from the transformed topic into Presto + digest: 5b0c677861d047ea676bd619769bea17ccd87fa6d34a9781f5febcfcd4b62b9d + name: forklift + urls: + - forklift-2.8.0.tgz + version: 2.8.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-08-07T13:35:05.098065206-04:00" + description: Loads data from the transformed topic into Presto + digest: 2463585ec0f7768a5d494cbbdd4969501543c56c305e9422f8a361adff0ea1ae + name: forklift + urls: + - forklift-2.7.0.tgz + version: 2.7.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-04-06T16:18:15.045175293-04:00" + description: Loads data from the transformed topic into Presto + digest: 2cb2721d1981576f34b52bf2dfb528a6eaedc12e7fb032023ff353e16fb9dd9c + name: forklift + urls: + - forklift-2.6.0.tgz + version: 2.6.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-02-13T11:01:44.385428-05:00" + description: Loads data from the transformed topic into Presto + digest: 2da955fb72333a9f728d6452ff5789a4c2409f6a80cdbd1941cfc7b4b33a4ca1 + name: forklift + urls: + - forklift-2.5.0.tgz + version: 2.5.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-30T15:31:41.177188754-04:00" + description: Loads data from the transformed topic into Presto + digest: 4d1829b3a54ba603385caea8297d21b42f1d97c4413e8802b9a45dbd77352460 + name: forklift + urls: + - forklift-2.4.0.tgz + version: 2.4.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-21T16:12:26.503173486-04:00" + description: Loads data from the transformed topic into Presto + digest: 5f63bba1add04b38c5345c70d9f24d0a68d2e06d3aebea0a14ee1cb3b8ecabf5 + name: forklift + urls: + - forklift-2.3.0.tgz + version: 2.3.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-02T18:29:31.571774822-04:00" + description: Loads data from the transformed topic into Presto + digest: 8fc8269f5cc64bd1dba93e150ddb07b7a01f69f624c0ead3601097907c8c14fd + name: forklift + urls: + - forklift-2.2.1.tgz + version: 2.2.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-26T10:36:03.83234085-04:00" + description: Loads data from the transformed topic into Presto + digest: d63a4469b796afb6515ccfcce26ed5886c7972646f26d5b56c1c6bb9a61e91c8 + name: forklift + urls: + - forklift-2.1.1.tgz + version: 2.1.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-25T15:04:18.185072769-04:00" + description: Loads data from the transformed topic into Presto + digest: fcd99b18e45289c20c57505e35620cc9517db9fa388cc1adec53dd9e86f32e24 + name: forklift + urls: + - forklift-2.1.0.tgz + version: 2.1.0 + genesis: + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-17T10:55:43.822821076-04:00" + description: Loads data from the transformed topic into Presto + digest: 3666b3dcf5aec92c96b64e3d78c6b12264aa038ce72a9f72f38a09293501b53e + name: genesis + urls: + - genesis-2.0.1.tgz + version: 2.0.1 + kafka: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-21T14:43:06.430655-04:00" + description: A Helm chart for deploying kafka via strimzi + digest: b22177056787aba635c00843e15d9c0e07c03452831523f224020719dcf65fdf + name: kafka + urls: + - kafka-1.0.1.tgz + version: 1.0.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-14T15:01:40.714136-05:00" + description: A Helm chart for deploying kafka via strimzi + digest: c53324bcf5e4a43788c597f2c7b54e29885c34934b9fc0a375dfbf6e87f92605 + name: kafka + urls: + - kafka-1.0.0.tgz + version: 1.0.0 + kubernetes-data-platform: + - apiVersion: v1 + created: "2021-06-21T14:43:12.777301-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: 2e82a1f9eef9dd83a8a79d0fb84da3287c89ae39c74ee6c4fa8c378c217495dd + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + urls: + - kubernetes-data-platform-1.6.0.tgz + version: 1.6.0 + - apiVersion: v1 + created: "2021-04-08T14:04:23.275322-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: c7b819ac364bf9ce2f99cf289faa4da8ec07bf43c67ccd2b04d779a0dff1db8d + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + tillerVersion: '>=2.8.0' + urls: + - kubernetes-data-platform-1.5.4.tgz + version: 1.5.4 + - apiVersion: v1 + created: "2020-09-14T10:50:16.704485-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: 5323987d2f2562e1b9cfb6e458fd4ce02ff054a48d60e61c2bba47eae42a768e + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + tillerVersion: '>=2.8.0' + urls: + - kubernetes-data-platform-1.5.3.tgz + version: 1.5.3 + - apiVersion: v1 + created: "2020-07-27T13:39:00.157308-06:00" + description: Hadoop-less data platform for the Smart City OS + digest: 032e7e91caf60bdf890ef34384eb2214414a91a6dfdf4893f0e19ec869e6e1a6 + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + tillerVersion: '>=2.8.0' + urls: + - kubernetes-data-platform-1.5.2.tgz + version: 1.5.2 + - apiVersion: v1 + created: "2020-07-17T15:24:26.033739-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: 5e72c66a76f9675490dedaf25b98fde2b3c24e2765b6d2b1dda6cec57351d46b + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + tillerVersion: '>=2.8.0' + urls: + - kubernetes-data-platform-1.5.1.tgz + version: 1.5.1 + - apiVersion: v1 + created: "2020-07-17T14:30:52.938554-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: 9fbe4b292946ff62ca803a149887287a7b9310549cd592c63dc6e86233c0c7ed + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + tillerVersion: '>=2.8.0' + urls: + - kubernetes-data-platform-1.5.0.tgz + version: 1.5.0 + - apiVersion: v1 + created: "2020-07-15T14:17:40.227463776-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: d242b7c9758bbad67f3b537e85c68ed3cc9b7d4f90a452058fda646b72e4fcfd + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + tillerVersion: '>=2.8.0' + urls: + - kubernetes-data-platform-1.4.0.tgz + version: 1.4.0 + - apiVersion: v1 + created: "2020-07-15T14:17:20.711435181-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: 31f7e1ccf880c1259bbc8de324cb730f7b2d867cbdf266a729d68ee80d0c7a6b + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + tillerVersion: '>=2.8.0' + urls: + - kubernetes-data-platform-1.3.0.tgz + version: 1.3.0 + - apiVersion: v1 + created: "2019-12-18T09:47:55.912918-05:00" + description: Hadoop-less data platform for the Smart City OS + digest: 71f91fa7576f63440477405b4068da7fbd83c8f87b985d2f52dce70242e1db85 + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + urls: + - kubernetes-data-platform-1.2.2.tgz + version: 1.2.2 + - apiVersion: v1 + created: "2019-12-16T15:14:40.556726-05:00" + description: Hadoop-less data platform for the Smart City OS + digest: d7d2b59537a3c3646505fe4cab6bf697934cf611aa4e584902f29c8ea8a545c4 + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + urls: + - kubernetes-data-platform-1.2.1.tgz + version: 1.2.1 + - apiVersion: v1 + created: "2019-12-16T14:42:56.815633-05:00" + description: Hadoop-less data platform for the Smart City OS + digest: 0914ea146e3b18b0d26a06e09c3d2814615e27852f8aeda017983379648b4774 + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + urls: + - kubernetes-data-platform-1.2.0.tgz + version: 1.2.0 + - apiVersion: v1 + created: "2019-11-08T22:33:39.564976281-05:00" + description: Hadoop-less data platform for the Smart City OS + digest: bf9e5696039bbb5bfd03cf032bf05cb95ab935730f09926c7890388fc93f83c2 + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + urls: + - kubernetes-data-platform-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + created: "2019-07-17T08:43:03.938291188-04:00" + description: Hadoop-less data platform for the Smart City OS + digest: ba465d7bd1dccb7823dfa860001e9f8b459059d40669441583aeca064b8b0e76 + keywords: + - presto + - hive-metastore + - cloud-object-store + - minio + name: kubernetes-data-platform + sources: + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm + urls: + - kubernetes-data-platform-1.0.0.tgz + version: 1.0.0 + micro-service-watchinator: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-05-12T12:03:48.752879-04:00" + description: Cron job to watch microservices and make sure they are alive + digest: 680913defb49080c868173b858140c354de0379a88f46f145e38658107c9d4ef + name: micro-service-watchinator + urls: + - micro-service-watchinator-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-10-02T11:05:06.739733-04:00" + description: Cron job to watch microservices and make sure they are alive + digest: 693486943a95d02cbc8fedef22e22c96b62120ceda5b21d5399dc3a617fbb6de + name: micro-service-watchinator + urls: + - micro-service-watchinator-1.0.1.tgz + version: 1.0.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-09-30T14:26:18.692253-04:00" + description: Cron job to watch microservices and make sure they are alive + digest: 467f16b997754485cd2a2392b20d91dea94e350be75d4f55a30a0527030cb1b2 + name: micro-service-watchinator + urls: + - micro-service-watchinator-1.0.0.tgz + version: 1.0.0 + monitoring: + - apiVersion: v2 + appVersion: "1.0" + created: "2021-08-06T13:56:53.286709-05:00" + dependencies: + - condition: prometheus.enabled + name: prometheus + repository: https://prometheus-community.github.io/helm-charts + version: 14.4.1 + - condition: grafana.enabled + name: grafana + repository: https://grafana.github.io/helm-charts + version: 6.14.1 + description: A combination of the community Prometheus and Grafana charts. + digest: 1625618c4fb1e6874897aa6dc471e802e88b5faa913f84fd7b2478776b074849 + name: monitoring + urls: + - monitoring-1.0.1.tgz + version: 1.0.1 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-08-05T09:10:24.830973-05:00" + dependencies: + - condition: prometheus.enabled + name: prometheus + repository: https://prometheus-community.github.io/helm-charts + version: 14.4.1 + - condition: grafana.enabled + name: grafana + repository: https://grafana.github.io/helm-charts + version: 6.14.1 + description: A combination of the community Prometheus and Grafana charts. + digest: d0fe88d22f9f927551107f73123dfaf25acb632bd31e22900cdbae88256e2cb9 + name: monitoring + urls: + - monitoring-1.0.0.tgz + version: 1.0.0 + odo: + - apiVersion: v1 + created: "2021-07-26T13:19:50.253962-04:00" + description: shapeshifting service + digest: 4d09bf1830264cf91dd6a0e2122a4b59bb3f48fe5117c11988141415f2c7f4f7 + name: odo + urls: + - odo-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + created: "2021-07-08T15:56:30.868265-05:00" + description: shapeshifting service + digest: b2256fd68dd4b59856214d20562860d5c89d1d1e60b00caf3c431d95b046cf6e + name: odo + urls: + - odo-1.0.1.tgz + version: 1.0.1 + - apiVersion: v1 + created: "2021-06-02T13:51:34.077798-05:00" + description: shapeshifting service + digest: 33f7e8c8794806ffc5e4e578bbc53579b13b2a34615ec62d21b53d105a5cb123 + name: odo + urls: + - odo-1.0.0.tgz + version: 1.0.0 + - apiVersion: v1 + created: "2020-08-20T10:23:03.897210957-04:00" + description: shapeshifting service + digest: 70b76123cc5ae1a45aa0d9d284fccb7cbc0d65b13aba6111be70f51992b13ae8 + name: odo + urls: + - odo-0.3.0.tgz + version: 0.3.0 + - apiVersion: v1 + created: "2020-01-27T14:29:22.756013-05:00" + description: shapeshifting service + digest: 62dfa63a2f0c9e36e1226ffcddaf59fa0688c231c9cde062c1444a542517c038 + name: odo + urls: + - odo-0.2.3.tgz + version: 0.2.3 + - apiVersion: v1 + created: "2019-09-09T09:27:22.125262-04:00" + description: shapeshifting service + digest: 11d4b056256eb6270bab8e3703ee382e25f0868352bced164cf9759c429920bd + name: odo + urls: + - odo-0.2.2.tgz + version: 0.2.2 + - apiVersion: v1 + created: "2019-09-04T14:53:52.231640834-04:00" + description: shapeshifting service + digest: 90a827bb72c85010dbaad2af0b2edd332df6918d8e5d1c625a71281aaf2aac41 + name: odo + urls: + - odo-0.2.1.tgz + version: 0.2.1 + - apiVersion: v1 + created: "2019-08-19T17:33:52.314652-04:00" + description: shapeshifting service + digest: 84899232e6a9a4d2f9ec5d1081c579e58ece6e79e7da9c04a7b9e7ea3ac805da + name: odo + urls: + - odo-0.2.0.tgz + version: 0.2.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-25T15:21:03.919055773-04:00" + description: shapeshifting service + digest: baa1be8a7cc099d617620ef0c9dd9e65b6da3dec39ddae839611b77f439aba95 + name: odo + urls: + - odo-0.1.0.tgz + version: 0.1.0 + platform: + - apiVersion: v1 + appVersion: "1.0" + created: "2020-01-16T12:37:55.017592-05:00" + description: Master chart that deploys the data platform. + digest: b46931ea37efbce0355297cc380e574d4fcd5488dfed8db74fabd60fb9ea21f5 + name: platform + urls: + - platform-0.0.4.tgz + version: 0.0.4 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-11-21T10:56:28.447042-05:00" + description: Master chart that deploys the data platform. + digest: 564927370c2200bcd620263db77a4f0bf1e8af766dcfcb0f6d19c1a0f82add90 + name: platform + urls: + - platform-0.0.3.tgz + version: 0.0.3 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-11-11T15:20:39.134892-05:00" + description: Master chart that deploys the data platform. + digest: 871b42df72b19a6cebb9b03eba9b70c7a18ce611c51291228ad200882fcaee1f + name: platform + urls: + - platform-0.0.2.tgz + version: 0.0.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-10-31T11:38:16.303037-04:00" + description: Master chart that deploys the OS. Targets minikube + digest: 60b6a620f908f88bd1a0a0232809546c63c0e4817659b5a48588b9c1204048b1 + name: platform + urls: + - platform-0.0.1.tgz + version: 0.0.1 + raptor: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-09-09T16:25:16.375279-04:00" + description: Authenticate and authorize API users + digest: b0290d5df780457d7b3db3d1ee40ba130ca4a62d6d64db96fbe30e21e0e6b6b4 + name: raptor + urls: + - raptor-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-08-24T14:49:36.513428-04:00" + description: Authenticate and authorize API users + digest: 4f85873db15f868922a3af482cc4eb1a65482697c8bc0aae3bbefb907d0ee6f7 + name: raptor + urls: + - raptor-1.0.0.tgz + version: 1.0.0 + reaper: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-07-26T13:19:45.722092-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 4eafbcff0fe859bc528f601d275a38f89ff5f4cbf14ae58913b05580700d6a7c + name: reaper + urls: + - reaper-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-07-08T15:56:26.573952-05:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 608c6fd19d75bb55fe2807278e36963190a88b019feb3785607731490a149fd2 + name: reaper + urls: + - reaper-1.0.1.tgz + version: 1.0.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-03T15:18:05.785703-05:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: b3f7c435ed0a6780ee6405d01cfaa6c48bd47239104963bd9b6bb3c1befaecfa + name: reaper + urls: + - reaper-1.0.0.tgz + version: 1.0.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-05-12T15:52:29.838611-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 02c0aa5d54ec8976af17d3325dca3296b3d108083405d9a54c3e6f61676c7413 + name: reaper + urls: + - reaper-0.3.3.tgz + version: 0.3.3 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-06-24T16:26:59.480650577-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 981a3b28217f87d52e9bc6e33813ce8ac8696cb6969d05008937445f3cb343b0 + name: reaper + urls: + - reaper-0.3.2.tgz + version: 0.3.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-06-24T15:56:34.185855504-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 1d3a8d44611c945506a99dc51bc5afcbb2a3633aed593327bd78ec6e2a04216c + name: reaper + urls: + - reaper-0.3.1.tgz + version: 0.3.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-06-22T22:23:47.227419432-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: d19b3dd8baad163a28d3995811bb5782048bacda237a4626e0244ad85d84f86a + name: reaper + urls: + - reaper-0.3.0.tgz + version: 0.3.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-04-02T11:49:31.802477054-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 7db122721f012fd9a2b7e8bac2a9478c39c2744858af08552defd60fdcbf0d0a + name: reaper + urls: + - reaper-0.2.0.tgz + version: 0.2.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-03-20T16:09:06.768775-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 5239150ec8dfad6320f78f6c03247e42f5ff8f0de2b6eced78f20b6b5a664388 + name: reaper + urls: + - reaper-0.1.3.tgz + version: 0.1.3 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-01-27T13:15:25.851969-05:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 539395dcac2791b36b16d9761033a898c3b5a054d978c933c3f797a0bc81e2da + name: reaper + urls: + - reaper-0.1.2.tgz + version: 0.1.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-11-19T15:46:47.610453-05:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: e76492a7868c67261bf4a08beae9bf971d016ada1aee58398f4a44d0a90f254e + name: reaper + urls: + - reaper-0.1.1.tgz + version: 0.1.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-17T08:43:03.93962147-04:00" + description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + digest: 0a4e1e99fe4980d431c29b78920b97bd13d889887927b0a9d3bd7f0c289ad69c + name: reaper + urls: + - reaper-0.1.0.tgz + version: 0.1.0 + streisand: + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-17T08:43:03.942124097-04:00" + description: Publishes public streaming data to the public kafka cluster + digest: 0d32486a6f57df65470d16e4a4d93038ae58cceeba91ea40e5c33ad216d99e78 + name: streisand + urls: + - streisand-1.0.0.tgz + version: 1.0.0 + urban-os: + - apiVersion: v2 + appVersion: "1.0" + created: "2021-08-17T15:35:13.278254-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.1.0 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.2.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: vault.enabled + name: vault + repository: https://UrbanOS-Public.github.io/charts + version: 1.3.0 + - condition: monitoring.enabled + name: monitoring + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: elasticsearch.enabled + name: elasticsearch + repository: https://helm.elastic.co + version: 7.14.0 + description: Master chart that deploys the data platform. + digest: b627b1a02871f7584b5461f5d864265d0762a365498b3f42a6c761ae2bb43a34 + name: urban-os + urls: + - urban-os-1.8.0.tgz + version: 1.8.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-08-11T14:07:52.310735-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.1.0 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: vault.enabled + name: vault + repository: https://UrbanOS-Public.github.io/charts + version: 1.3.0 + - condition: monitoring.enabled + name: monitoring + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + description: Master chart that deploys the data platform. + digest: 45c72d536a8e01e6a7ce736444f04dcbf11465bc3165cb2e5082cfd76f3d56f8 + name: urban-os + urls: + - urban-os-1.7.0.tgz + version: 1.7.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-08-06T14:09:37.653055-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.1.0 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: vault.enabled + name: vault + repository: https://UrbanOS-Public.github.io/charts + version: 1.2.0 + - condition: monitoring.enabled + name: monitoring + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + description: Master chart that deploys the data platform. + digest: 3b072bcf1177a4a35e9f4f5a49f2d2aa8dd8ecb1078b7fc8bef93b7aaeaa1cee + name: urban-os + urls: + - urban-os-1.6.1.tgz + version: 1.6.1 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-08-05T10:45:45.384557-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.1.0 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: vault.enabled + name: vault + repository: https://UrbanOS-Public.github.io/charts + version: 1.2.0 + - condition: monitoring.enabled + name: monitoring + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + description: Master chart that deploys the data platform. + digest: 9e2df529862395e4a76c83a9b7c0a39330ea7c083e89b5980605c57704aaf02a + name: urban-os + urls: + - urban-os-1.6.0.tgz + version: 1.6.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-07-26T15:37:34.885381-04:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.1.0 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.1.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: vault.enabled + name: vault + repository: https://UrbanOS-Public.github.io/charts + version: 1.2.0 + description: Master chart that deploys the data platform. + digest: c1fa59c264612070cf41258359cd6521aeefd1709da4f0f627c546b7a7886ea1 + name: urban-os + urls: + - urban-os-1.5.0.tgz + version: 1.5.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-07-22T08:12:21.498216-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.0.2 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: vault.enabled + name: vault + repository: https://UrbanOS-Public.github.io/charts + version: 1.2.0 + description: Master chart that deploys the data platform. + digest: 83bb9dead651ca930d21a293d891b94adbb6c1bbdc66bc78b79f78b56891c507 + name: urban-os + urls: + - urban-os-1.4.0.tgz + version: 1.4.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-07-19T14:36:22.223238-04:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.0.2 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + description: Master chart that deploys the data platform. + digest: c0302e97a4809ec377a218b3d8ce7cd3f847ee78938400aba7a0e2be2f74fa20 + name: urban-os + urls: + - urban-os-1.3.0.tgz + version: 1.3.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-07-09T14:44:12.824144-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.0.1 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + - condition: discovery-api.enabled + name: discovery-api + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-ui.enabled + name: discovery-ui + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: discovery-streams.enabled + name: discovery-streams + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + description: Master chart that deploys the data platform. + digest: ab2f05adb3f662d55dfd3a58c0dfce375855675beed5f1f36445f1a5591cfc37 + name: urban-os + urls: + - urban-os-1.2.0.tgz + version: 1.2.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-06-22T16:24:16.55227-04:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.0.1 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + description: Master chart that deploys the data platform. + digest: 3b7ab2a303bde326fda1bb957ab0b51b6e2e656489a06fe734a158c13c9afef9 + name: urban-os + urls: + - urban-os-1.1.1.tgz + version: 1.1.1 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-06-21T15:52:00.076553-04:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.1.0 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.0.1 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.1 + - condition: kubernetes-data-platform.enabled + name: kubernetes-data-platform + repository: https://UrbanOS-Public.github.io/charts + version: 1.6.0 + description: Master chart that deploys the data platform. + digest: 0f4c7251a8d269497286dccf470f82f7e587a84814260948cc11f8a4a0f4e130 + name: urban-os + urls: + - urban-os-1.1.0.tgz + version: 1.1.0 + - apiVersion: v2 + appVersion: "1.0" + created: "2021-06-14T15:07:35.973107-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.0.1 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.1 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.0.0 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: kafka.enabled + name: kafka + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + description: Master chart that deploys the data platform. + digest: 888ba2d9ec45896a17237c322e22b8027fb93f747a4d531e7b8d74d4a22f82dc + name: urban-os + urls: + - urban-os-1.0.1.tgz + version: 1.0.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-03T15:16:27.400379-05:00" + dependencies: + - condition: forklift.enabled + name: forklift + repository: https://UrbanOS-Public.github.io/charts + version: 3.0.0 + - condition: odo.enabled + name: odo + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: reaper.enabled + name: reaper + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + - condition: valkyrie.enabled + name: valkyrie + repository: https://UrbanOS-Public.github.io/charts + version: 2.6.0 + - condition: andi.enabled + name: andi + repository: https://UrbanOS-Public.github.io/charts + version: 2.0.0 + - condition: external-services.enabled + name: external-services + repository: https://UrbanOS-Public.github.io/charts + version: 1.0.0 + description: Master chart that deploys the data platform. + digest: 9a41a2a9d65c41e17b78749dd44335eb9f7e36905cecd08c08d5ae1f1351d819 + name: urban-os + urls: + - urban-os-1.0.0.tgz + version: 1.0.0 + valkyrie: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-06-14T09:44:55.658944-05:00" + description: Validates data from raw topic and writes it to validated topic + digest: d559a0ec071ef4b2aeb539a233876a9988496c349b11d9680b03e9c460bc2929 + name: valkyrie + urls: + - valkyrie-2.6.1.tgz + version: 2.6.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-07-08T14:29:22.763404038-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: b134742ccb9a89e604ed85c0b21437312bb619ef99be45e879ce4d8682bd2f45 + name: valkyrie + urls: + - valkyrie-2.6.0.tgz + version: 2.6.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-03-31T14:37:43.165749398-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 5653565f9891c333d618db402752378ba6ac7961ee9169dd53edbcefa9d7ab03 + name: valkyrie + urls: + - valkyrie-2.5.2.tgz + version: 2.5.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-03-31T12:28:50.718812641-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 0acf1dcbee87ab192de53b138da6c9d92477be64a8fda0d3f2322e7f6daa6c56 + name: valkyrie + urls: + - valkyrie-2.5.1.tgz + version: 2.5.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-03-31T08:51:29.941919545-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 7e563674344ff9a620193cf687f93a1ebf531d695a27b5400536cde7c393328e + name: valkyrie + urls: + - valkyrie-2.5.0.tgz + version: 2.5.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-03-20T16:09:13.087005-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 6d82cd68e17b608ef80e291e7ac8864e1694c79b4e8238b53dfe02d464ef6914 + name: valkyrie + urls: + - valkyrie-2.4.1.tgz + version: 2.4.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-30T11:22:56.361093-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 986fc4774801840a7df64001e82e9b1943bed3584512517667e268ae2535a7cf + name: valkyrie + urls: + - valkyrie-2.4.0.tgz + version: 2.4.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-22T11:04:47.954927127-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 943eecba980d1cb5e894dc1faa0487348bb02d353953e17592f495abe08335d4 + name: valkyrie + urls: + - valkyrie-2.3.0.tgz + version: 2.3.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-22T09:56:39.376352971-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 088b3642af4d4d04759a5c474375852b8e22716e36fda05132e7f6f4a87a72a5 + name: valkyrie + urls: + - valkyrie-2.2.0.tgz + version: 2.2.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-31T15:26:27.195485663-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: 15b81735af8ccb405d9e1435c6c1134a7c404f9cccf38d2b598cfc435c8a1e66 + name: valkyrie + urls: + - valkyrie-2.1.0.tgz + version: 2.1.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-07-30T13:28:16.421453-04:00" + description: Validates data from raw topic and writes it to validated topic + digest: e0a0ed33cd14032aa44ad8cba3c7d70447f49ae06aa5c9094af0e892c4378231 + name: valkyrie + urls: + - valkyrie-2.0.1.tgz + version: 2.0.1 + vault: + - apiVersion: v1 + appVersion: "1.0" + created: "2021-08-11T14:01:42.93525-05:00" + description: Vault Secret Management + digest: 4f520c3c83041cca3cb56e1cb7e8bf083bec8074d9ef0d312609f3ddd815c1e9 + name: vault + urls: + - vault-1.3.0.tgz + version: 1.3.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-07-22T08:05:47.269674-05:00" + description: Vault Secret Management + digest: 75454c8e1c00fba4c54c4d70539e15dc512968db216196743ff660a37aac2487 + name: vault + urls: + - vault-1.2.0.tgz + version: 1.2.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-07-21T13:23:30.037261-05:00" + description: Vault Secret Management + digest: 92526b0e8b6377ebc2938a08d3eda838fbc8a1dfc144de3ea1d0cf33812f6464 + name: vault + urls: + - vault-1.1.3.tgz + version: 1.1.3 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-05-12T13:25:13.080439-04:00" + description: Vault Secret Management + digest: 22bc6d525e418977204dd1871a05c3dd16fdb8d14c5023b22193dcd37964ecd9 + name: vault + urls: + - vault-1.1.2.tgz + version: 1.1.2 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-05-06T13:38:06.73573-04:00" + description: Vault Secret Management + digest: 1a3c5ba2fcf7f83a1a2e0af26c79bc608feb06e142a226c404f880f988b4ce8b + name: vault + urls: + - vault-1.1.1.tgz + version: 1.1.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2021-05-05T09:44:22.74534-04:00" + description: Vault Secret Management + digest: d1387c72eeee4e06bdfa1bc7d92ac08274180041aa242d43110b134983359547 + name: vault + urls: + - vault-1.1.0.tgz + version: 1.1.0 + - apiVersion: v1 + appVersion: "1.0" + created: "2020-11-11T15:59:38.913819-05:00" + description: Vault Secret Management + digest: 938fd0d675d8cb106539c3a762bfeecb779321f84572b735843893ced275c51b + name: vault + urls: + - vault-1.0.1.tgz + version: 1.0.1 + - apiVersion: v1 + appVersion: "1.0" + created: "2019-09-30T15:32:48.16673-04:00" + description: Vault Secret Management + digest: 27002611f441cbf53027edce80c8d113834f8699da9b8ff92f377975909ba66d + name: vault + urls: + - vault-1.0.0.tgz + version: 1.0.0 + voltron: + - apiVersion: v1 + appVersion: "1.0" + created: "2019-08-07T10:39:53.470155604-04:00" + description: Data transformation service + digest: 576583de8380dfd0fece1eb0adc46eadb302ccce65915c7d604649279d3672c8 + name: voltron + urls: + - voltron-1.0.0.tgz + version: 1.0.0 +generated: "2021-09-09T16:25:16.373784-04:00" diff --git a/charts/docs/kafka-1.0.0.tgz b/charts/docs/kafka-1.0.0.tgz new file mode 100644 index 000000000..5384235af Binary files /dev/null and b/charts/docs/kafka-1.0.0.tgz differ diff --git a/charts/docs/kafka-1.0.1.tgz b/charts/docs/kafka-1.0.1.tgz new file mode 100644 index 000000000..1d74413f9 Binary files /dev/null and b/charts/docs/kafka-1.0.1.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.0.0.tgz b/charts/docs/kubernetes-data-platform-1.0.0.tgz new file mode 100644 index 000000000..194e2ba1e Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.0.0.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.1.0.tgz b/charts/docs/kubernetes-data-platform-1.1.0.tgz new file mode 100644 index 000000000..f4e6969d6 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.1.0.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.1.1.tgz b/charts/docs/kubernetes-data-platform-1.1.1.tgz new file mode 100644 index 000000000..611384f5a Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.1.1.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.1.2.tgz b/charts/docs/kubernetes-data-platform-1.1.2.tgz new file mode 100644 index 000000000..45917b560 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.1.2.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.2.0.tgz b/charts/docs/kubernetes-data-platform-1.2.0.tgz new file mode 100644 index 000000000..3cc3bd5ec Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.2.0.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.2.1.tgz b/charts/docs/kubernetes-data-platform-1.2.1.tgz new file mode 100644 index 000000000..e966d7175 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.2.1.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.2.2.tgz b/charts/docs/kubernetes-data-platform-1.2.2.tgz new file mode 100644 index 000000000..53e62066b Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.2.2.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.3.0.tgz b/charts/docs/kubernetes-data-platform-1.3.0.tgz new file mode 100644 index 000000000..887bfced4 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.3.0.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.4.0.tgz b/charts/docs/kubernetes-data-platform-1.4.0.tgz new file mode 100644 index 000000000..e61cb99f1 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.4.0.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.5.0.tgz b/charts/docs/kubernetes-data-platform-1.5.0.tgz new file mode 100644 index 000000000..2ff0c0cee Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.5.0.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.5.1.tgz b/charts/docs/kubernetes-data-platform-1.5.1.tgz new file mode 100644 index 000000000..efa5e54f2 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.5.1.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.5.2.tgz b/charts/docs/kubernetes-data-platform-1.5.2.tgz new file mode 100644 index 000000000..5f6228603 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.5.2.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.5.3.tgz b/charts/docs/kubernetes-data-platform-1.5.3.tgz new file mode 100644 index 000000000..4fdfcac90 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.5.3.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.5.4.tgz b/charts/docs/kubernetes-data-platform-1.5.4.tgz new file mode 100644 index 000000000..85e31b75c Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.5.4.tgz differ diff --git a/charts/docs/kubernetes-data-platform-1.6.0.tgz b/charts/docs/kubernetes-data-platform-1.6.0.tgz new file mode 100644 index 000000000..58c281e27 Binary files /dev/null and b/charts/docs/kubernetes-data-platform-1.6.0.tgz differ diff --git a/charts/docs/micro-service-watchinator-1.0.0.tgz b/charts/docs/micro-service-watchinator-1.0.0.tgz new file mode 100644 index 000000000..b4487589e Binary files /dev/null and b/charts/docs/micro-service-watchinator-1.0.0.tgz differ diff --git a/charts/docs/micro-service-watchinator-1.0.1.tgz b/charts/docs/micro-service-watchinator-1.0.1.tgz new file mode 100644 index 000000000..ef89238b4 Binary files /dev/null and b/charts/docs/micro-service-watchinator-1.0.1.tgz differ diff --git a/charts/docs/micro-service-watchinator-1.1.0.tgz b/charts/docs/micro-service-watchinator-1.1.0.tgz new file mode 100644 index 000000000..3bb2a0ff7 Binary files /dev/null and b/charts/docs/micro-service-watchinator-1.1.0.tgz differ diff --git a/charts/docs/monitoring-1.0.0.tgz b/charts/docs/monitoring-1.0.0.tgz new file mode 100644 index 000000000..a2d941932 Binary files /dev/null and b/charts/docs/monitoring-1.0.0.tgz differ diff --git a/charts/docs/monitoring-1.0.1.tgz b/charts/docs/monitoring-1.0.1.tgz new file mode 100644 index 000000000..41f9f27f4 Binary files /dev/null and b/charts/docs/monitoring-1.0.1.tgz differ diff --git a/charts/docs/odo-0.1.0.tgz b/charts/docs/odo-0.1.0.tgz new file mode 100644 index 000000000..9442cdb25 Binary files /dev/null and b/charts/docs/odo-0.1.0.tgz differ diff --git a/charts/docs/odo-0.2.0.tgz b/charts/docs/odo-0.2.0.tgz new file mode 100644 index 000000000..767708e37 Binary files /dev/null and b/charts/docs/odo-0.2.0.tgz differ diff --git a/charts/docs/odo-0.2.1.tgz b/charts/docs/odo-0.2.1.tgz new file mode 100644 index 000000000..c43f40917 Binary files /dev/null and b/charts/docs/odo-0.2.1.tgz differ diff --git a/charts/docs/odo-0.2.2.tgz b/charts/docs/odo-0.2.2.tgz new file mode 100644 index 000000000..a7f465ca6 Binary files /dev/null and b/charts/docs/odo-0.2.2.tgz differ diff --git a/charts/docs/odo-0.2.3.tgz b/charts/docs/odo-0.2.3.tgz new file mode 100644 index 000000000..f95f03457 Binary files /dev/null and b/charts/docs/odo-0.2.3.tgz differ diff --git a/charts/docs/odo-0.3.0.tgz b/charts/docs/odo-0.3.0.tgz new file mode 100644 index 000000000..73c502471 Binary files /dev/null and b/charts/docs/odo-0.3.0.tgz differ diff --git a/charts/docs/odo-1.0.0.tgz b/charts/docs/odo-1.0.0.tgz new file mode 100644 index 000000000..9a1c0f7e5 Binary files /dev/null and b/charts/docs/odo-1.0.0.tgz differ diff --git a/charts/docs/odo-1.0.1.tgz b/charts/docs/odo-1.0.1.tgz new file mode 100644 index 000000000..cc53ece9e Binary files /dev/null and b/charts/docs/odo-1.0.1.tgz differ diff --git a/charts/docs/odo-1.1.0.tgz b/charts/docs/odo-1.1.0.tgz new file mode 100644 index 000000000..9c46e6f96 Binary files /dev/null and b/charts/docs/odo-1.1.0.tgz differ diff --git a/charts/docs/platform-0.0.1.tgz b/charts/docs/platform-0.0.1.tgz new file mode 100644 index 000000000..bd4c7305c Binary files /dev/null and b/charts/docs/platform-0.0.1.tgz differ diff --git a/charts/docs/platform-0.0.2.tgz b/charts/docs/platform-0.0.2.tgz new file mode 100644 index 000000000..569733243 Binary files /dev/null and b/charts/docs/platform-0.0.2.tgz differ diff --git a/charts/docs/platform-0.0.3.tgz b/charts/docs/platform-0.0.3.tgz new file mode 100644 index 000000000..dc6414f2e Binary files /dev/null and b/charts/docs/platform-0.0.3.tgz differ diff --git a/charts/docs/platform-0.0.4.tgz b/charts/docs/platform-0.0.4.tgz new file mode 100644 index 000000000..6aedd17e5 Binary files /dev/null and b/charts/docs/platform-0.0.4.tgz differ diff --git a/charts/docs/raptor-1.0.0.tgz b/charts/docs/raptor-1.0.0.tgz new file mode 100644 index 000000000..9744da060 Binary files /dev/null and b/charts/docs/raptor-1.0.0.tgz differ diff --git a/charts/docs/raptor-1.1.0.tgz b/charts/docs/raptor-1.1.0.tgz new file mode 100644 index 000000000..b694102ac Binary files /dev/null and b/charts/docs/raptor-1.1.0.tgz differ diff --git a/charts/docs/reaper-0.1.0.tgz b/charts/docs/reaper-0.1.0.tgz new file mode 100644 index 000000000..160baf41d Binary files /dev/null and b/charts/docs/reaper-0.1.0.tgz differ diff --git a/charts/docs/reaper-0.1.1.tgz b/charts/docs/reaper-0.1.1.tgz new file mode 100644 index 000000000..0abc8e40a Binary files /dev/null and b/charts/docs/reaper-0.1.1.tgz differ diff --git a/charts/docs/reaper-0.1.3.tgz b/charts/docs/reaper-0.1.3.tgz new file mode 100644 index 000000000..4c4b88c89 Binary files /dev/null and b/charts/docs/reaper-0.1.3.tgz differ diff --git a/charts/docs/reaper-0.2.0.tgz b/charts/docs/reaper-0.2.0.tgz new file mode 100644 index 000000000..efb79e4c6 Binary files /dev/null and b/charts/docs/reaper-0.2.0.tgz differ diff --git a/charts/docs/reaper-0.3.0.tgz b/charts/docs/reaper-0.3.0.tgz new file mode 100644 index 000000000..21eb806e4 Binary files /dev/null and b/charts/docs/reaper-0.3.0.tgz differ diff --git a/charts/docs/reaper-0.3.1.tgz b/charts/docs/reaper-0.3.1.tgz new file mode 100644 index 000000000..f0ac5f6d1 Binary files /dev/null and b/charts/docs/reaper-0.3.1.tgz differ diff --git a/charts/docs/reaper-0.3.2.tgz b/charts/docs/reaper-0.3.2.tgz new file mode 100644 index 000000000..2affcda51 Binary files /dev/null and b/charts/docs/reaper-0.3.2.tgz differ diff --git a/charts/docs/reaper-0.3.3.tgz b/charts/docs/reaper-0.3.3.tgz new file mode 100644 index 000000000..a6c746f94 Binary files /dev/null and b/charts/docs/reaper-0.3.3.tgz differ diff --git a/charts/docs/reaper-1.0.0.tgz b/charts/docs/reaper-1.0.0.tgz new file mode 100644 index 000000000..b9f0a6f6a Binary files /dev/null and b/charts/docs/reaper-1.0.0.tgz differ diff --git a/charts/docs/reaper-1.0.1.tgz b/charts/docs/reaper-1.0.1.tgz new file mode 100644 index 000000000..2f2e9a92c Binary files /dev/null and b/charts/docs/reaper-1.0.1.tgz differ diff --git a/charts/docs/reaper-1.1.0.tgz b/charts/docs/reaper-1.1.0.tgz new file mode 100644 index 000000000..5abc6601e Binary files /dev/null and b/charts/docs/reaper-1.1.0.tgz differ diff --git a/charts/docs/streisand-1.0.0.tgz b/charts/docs/streisand-1.0.0.tgz new file mode 100644 index 000000000..7cccea2db Binary files /dev/null and b/charts/docs/streisand-1.0.0.tgz differ diff --git a/charts/docs/urban-os-1.0.0.tgz b/charts/docs/urban-os-1.0.0.tgz new file mode 100644 index 000000000..ed2c1b31c Binary files /dev/null and b/charts/docs/urban-os-1.0.0.tgz differ diff --git a/charts/docs/urban-os-1.0.1.tgz b/charts/docs/urban-os-1.0.1.tgz new file mode 100644 index 000000000..b0441be61 Binary files /dev/null and b/charts/docs/urban-os-1.0.1.tgz differ diff --git a/charts/docs/urban-os-1.1.0.tgz b/charts/docs/urban-os-1.1.0.tgz new file mode 100644 index 000000000..93e3516e6 Binary files /dev/null and b/charts/docs/urban-os-1.1.0.tgz differ diff --git a/charts/docs/urban-os-1.1.1.tgz b/charts/docs/urban-os-1.1.1.tgz new file mode 100644 index 000000000..1f5a75a71 Binary files /dev/null and b/charts/docs/urban-os-1.1.1.tgz differ diff --git a/charts/docs/urban-os-1.2.0.tgz b/charts/docs/urban-os-1.2.0.tgz new file mode 100644 index 000000000..085c4c571 Binary files /dev/null and b/charts/docs/urban-os-1.2.0.tgz differ diff --git a/charts/docs/urban-os-1.3.0.tgz b/charts/docs/urban-os-1.3.0.tgz new file mode 100644 index 000000000..96f48ec83 Binary files /dev/null and b/charts/docs/urban-os-1.3.0.tgz differ diff --git a/charts/docs/urban-os-1.4.0.tgz b/charts/docs/urban-os-1.4.0.tgz new file mode 100644 index 000000000..7014b6668 Binary files /dev/null and b/charts/docs/urban-os-1.4.0.tgz differ diff --git a/charts/docs/urban-os-1.5.0.tgz b/charts/docs/urban-os-1.5.0.tgz new file mode 100644 index 000000000..18873f2d8 Binary files /dev/null and b/charts/docs/urban-os-1.5.0.tgz differ diff --git a/charts/docs/urban-os-1.6.0.tgz b/charts/docs/urban-os-1.6.0.tgz new file mode 100644 index 000000000..bad29f64c Binary files /dev/null and b/charts/docs/urban-os-1.6.0.tgz differ diff --git a/charts/docs/urban-os-1.6.1.tgz b/charts/docs/urban-os-1.6.1.tgz new file mode 100644 index 000000000..c65ca81c4 Binary files /dev/null and b/charts/docs/urban-os-1.6.1.tgz differ diff --git a/charts/docs/urban-os-1.7.0.tgz b/charts/docs/urban-os-1.7.0.tgz new file mode 100644 index 000000000..d0ae1f59f Binary files /dev/null and b/charts/docs/urban-os-1.7.0.tgz differ diff --git a/charts/docs/urban-os-1.8.0.tgz b/charts/docs/urban-os-1.8.0.tgz new file mode 100644 index 000000000..e02704537 Binary files /dev/null and b/charts/docs/urban-os-1.8.0.tgz differ diff --git a/charts/docs/valkyrie-2.0.1.tgz b/charts/docs/valkyrie-2.0.1.tgz new file mode 100644 index 000000000..b22554aba Binary files /dev/null and b/charts/docs/valkyrie-2.0.1.tgz differ diff --git a/charts/docs/valkyrie-2.1.0.tgz b/charts/docs/valkyrie-2.1.0.tgz new file mode 100644 index 000000000..58c028f60 Binary files /dev/null and b/charts/docs/valkyrie-2.1.0.tgz differ diff --git a/charts/docs/valkyrie-2.2.0.tgz b/charts/docs/valkyrie-2.2.0.tgz new file mode 100644 index 000000000..59d28d043 Binary files /dev/null and b/charts/docs/valkyrie-2.2.0.tgz differ diff --git a/charts/docs/valkyrie-2.3.0.tgz b/charts/docs/valkyrie-2.3.0.tgz new file mode 100644 index 000000000..36cc4e5d8 Binary files /dev/null and b/charts/docs/valkyrie-2.3.0.tgz differ diff --git a/charts/docs/valkyrie-2.4.0.tgz b/charts/docs/valkyrie-2.4.0.tgz new file mode 100644 index 000000000..312cd4f4d Binary files /dev/null and b/charts/docs/valkyrie-2.4.0.tgz differ diff --git a/charts/docs/valkyrie-2.4.1.tgz b/charts/docs/valkyrie-2.4.1.tgz new file mode 100644 index 000000000..e01746bc0 Binary files /dev/null and b/charts/docs/valkyrie-2.4.1.tgz differ diff --git a/charts/docs/valkyrie-2.5.0.tgz b/charts/docs/valkyrie-2.5.0.tgz new file mode 100644 index 000000000..664d2316b Binary files /dev/null and b/charts/docs/valkyrie-2.5.0.tgz differ diff --git a/charts/docs/valkyrie-2.5.1.tgz b/charts/docs/valkyrie-2.5.1.tgz new file mode 100644 index 000000000..54c433491 Binary files /dev/null and b/charts/docs/valkyrie-2.5.1.tgz differ diff --git a/charts/docs/valkyrie-2.5.2.tgz b/charts/docs/valkyrie-2.5.2.tgz new file mode 100644 index 000000000..03a035ba2 Binary files /dev/null and b/charts/docs/valkyrie-2.5.2.tgz differ diff --git a/charts/docs/valkyrie-2.6.0.tgz b/charts/docs/valkyrie-2.6.0.tgz new file mode 100644 index 000000000..3c24d4d18 Binary files /dev/null and b/charts/docs/valkyrie-2.6.0.tgz differ diff --git a/charts/docs/valkyrie-2.6.1.tgz b/charts/docs/valkyrie-2.6.1.tgz new file mode 100644 index 000000000..975d34fc2 Binary files /dev/null and b/charts/docs/valkyrie-2.6.1.tgz differ diff --git a/charts/docs/vault-1.0.0.tgz b/charts/docs/vault-1.0.0.tgz new file mode 100644 index 000000000..09d854b07 Binary files /dev/null and b/charts/docs/vault-1.0.0.tgz differ diff --git a/charts/docs/vault-1.0.1.tgz b/charts/docs/vault-1.0.1.tgz new file mode 100644 index 000000000..ebe16e72f Binary files /dev/null and b/charts/docs/vault-1.0.1.tgz differ diff --git a/charts/docs/vault-1.1.0.tgz b/charts/docs/vault-1.1.0.tgz new file mode 100644 index 000000000..e9f59fbbc Binary files /dev/null and b/charts/docs/vault-1.1.0.tgz differ diff --git a/charts/docs/vault-1.1.1.tgz b/charts/docs/vault-1.1.1.tgz new file mode 100644 index 000000000..807ed5707 Binary files /dev/null and b/charts/docs/vault-1.1.1.tgz differ diff --git a/charts/docs/vault-1.1.2.tgz b/charts/docs/vault-1.1.2.tgz new file mode 100644 index 000000000..68010e8a4 Binary files /dev/null and b/charts/docs/vault-1.1.2.tgz differ diff --git a/charts/docs/vault-1.1.3.tgz b/charts/docs/vault-1.1.3.tgz new file mode 100644 index 000000000..865ded078 Binary files /dev/null and b/charts/docs/vault-1.1.3.tgz differ diff --git a/charts/docs/vault-1.2.0.tgz b/charts/docs/vault-1.2.0.tgz new file mode 100644 index 000000000..3def01f90 Binary files /dev/null and b/charts/docs/vault-1.2.0.tgz differ diff --git a/charts/docs/vault-1.3.0.tgz b/charts/docs/vault-1.3.0.tgz new file mode 100644 index 000000000..cbbd0c517 Binary files /dev/null and b/charts/docs/vault-1.3.0.tgz differ diff --git a/charts/docs/voltron-1.0.0.tgz b/charts/docs/voltron-1.0.0.tgz new file mode 100644 index 000000000..6e6f67ddb Binary files /dev/null and b/charts/docs/voltron-1.0.0.tgz differ diff --git a/charts/estuary/.helmignore b/charts/estuary/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/estuary/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/estuary/Chart.yaml b/charts/estuary/Chart.yaml new file mode 100644 index 000000000..fdfc0bad6 --- /dev/null +++ b/charts/estuary/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +description: Reads the event stream and stores them in to event_stream table +name: estuary +version: 0.5.5 +deprecated: true \ No newline at end of file diff --git a/charts/estuary/README.md b/charts/estuary/README.md new file mode 100644 index 000000000..947307489 --- /dev/null +++ b/charts/estuary/README.md @@ -0,0 +1,45 @@ +# estuary + +> **:exclamation: This Helm Chart is deprecated!** + +![Version: 0.5.5](https://img.shields.io/badge/Version-0.5.5-informational?style=flat-square) + +Reads the event stream and stores them in to event_stream table + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| compactionSchedule | string | `nil` | | +| estuary.data_topic | string | `"event-stream"` | | +| estuary.dlq_topic | string | `"streaming-dead-letters"` | | +| fullnameOverride | string | `""` | | +| fullnameOverride | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/estuary"` | | +| image.tag | string | `"development"` | | +| ingress.certificateARN | string | `""` | | +| ingress.dnsZone | string | `"localhost"` | | +| ingress.enabled | bool | `false` | | +| ingress.scheme | string | `""` | | +| ingress.securityGroups | string | `""` | | +| ingress.subnets | string | `""` | | +| kafka.brokers | string | `"streaming-service-kafka-bootstrap.streaming-prime:9092"` | | +| nameOverride | string | `""` | | +| nameOverride | string | `""` | | +| nodeSelector | object | `{}` | | +| presto.table_name | string | `"event_stream"` | | +| presto.url | string | `"http://kdp-kubernetes-data-platform-presto.kdp:8080"` | | +| presto.user | string | `"estuary"` | | +| replicaCount | int | `1` | | +| resources | object | `{}` | | +| secrets.live_view.enable | bool | `true` | | +| secrets.live_view.value | string | `"devonlyenablefalseanddefineoutofsourceinprod"` | | +| service.port | int | `80` | | +| service.targetPort | int | `4000` | | +| service.type | string | `"NodePort"` | | +| tolerations | list | `[]` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/estuary/templates/_helpers.tpl b/charts/estuary/templates/_helpers.tpl new file mode 100644 index 000000000..466bf927b --- /dev/null +++ b/charts/estuary/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/estuary/templates/deployment.yaml b/charts/estuary/templates/deployment.yaml new file mode 100644 index 000000000..f32423fc5 --- /dev/null +++ b/charts/estuary/templates/deployment.yaml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "helm.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + helm.sh/chart: {{ include "helm.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 4000 + env: + - name: PRESTO_URL + value: {{ .Values.presto.url }} + - name: PRESTO_USER + value: {{ .Values.presto.user }} + - name: TABLE_NAME + value: {{ .Values.presto.table_name }} + - name: KAFKA_BROKERS + value: {{ .Values.kafka.brokers }} + - name: DATA_TOPIC + value: {{ .Values.estuary.data_topic }} + - name: DLQ_TOPIC + value: {{ .Values.estuary.dlq_topic }} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NODE_ID + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LIVEVIEW_SALT + valueFrom: + secretKeyRef: + name: estuary-lv-salt + key: salt + {{ if .Values.compactionSchedule }} + - name: COMPACTION_SCHEDULE + value: {{.Values.compactionSchedule | quote }} + {{ end -}} + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/charts/estuary/templates/ingress.yaml b/charts/estuary/templates/ingress.yaml new file mode 100644 index 000000000..9a304afd5 --- /dev/null +++ b/charts/estuary/templates/ingress.yaml @@ -0,0 +1,21 @@ +apiVersion: networking.k8s.io/v1beta1 +kind: Ingress +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + annotations: +{{- if .Values.ingress.annotations }} +{{ toYaml .Values.ingress.annotations | trim | indent 4 }} +{{- end }} +spec: + backend: + serviceName: {{ include "helm.name" . }} + servicePort: {{ .Values.service.port }} + rules: + - host: estuary.{{ .Values.ingress.dnsZone }} + http: + paths: + - path: /* + backend: + serviceName: redirect + servicePort: use-annotation diff --git a/charts/estuary/templates/secrets.yaml b/charts/estuary/templates/secrets.yaml new file mode 100644 index 000000000..afa5be44e --- /dev/null +++ b/charts/estuary/templates/secrets.yaml @@ -0,0 +1,10 @@ +{{- if .Values.secrets.live_view.enable }} +apiVersion: v1 +kind: Secret +metadata: + name: estuary-lv-salt +type: + Opaque +data: + salt: {{ .Values.secrets.live_view.value }} +{{- end }} diff --git a/charts/estuary/templates/service.yaml b/charts/estuary/templates/service.yaml new file mode 100644 index 000000000..b4fbbac32 --- /dev/null +++ b/charts/estuary/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} +spec: + selector: + app.kubernetes.io/name: {{ include "helm.name" . }} + ports: + - name: http + port: 80 + targetPort: 4000 + protocol: TCP + type: NodePort diff --git a/charts/estuary/values.yaml b/charts/estuary/values.yaml new file mode 100644 index 000000000..0e634c14e --- /dev/null +++ b/charts/estuary/values.yaml @@ -0,0 +1,50 @@ +presto: + user: "estuary" + url: "http://kdp-kubernetes-data-platform-presto.kdp:8080" + table_name: event_stream + +kafka: + #comma delimited list of kafka seed brokers + brokers: streaming-service-kafka-bootstrap.streaming-prime:9092 + +estuary: + data_topic: event-stream + dlq_topic: streaming-dead-letters + +image: + repository: smartcitiesdata/estuary + tag: development + pullPolicy: Always + +# defaults to be overridden by user +replicaCount: 1 +nameOverride: "" +fullnameOverride: "" +resources: {} +nodeSelector: {} +tolerations: [] +affinity: {} + +# Dataset compaction is off by default. If it is needed, set compactionSchedule to a valid cron string such as "00 01 * * *" (This will run compaction nightly at 1:00am) +compactionSchedule: null + +nameOverride: "" +fullnameOverride: "" + +service: + type: NodePort + port: 80 + targetPort: 4000 + +secrets: + live_view: + enable: true + value: "devonlyenablefalseanddefineoutofsourceinprod" + +ingress: + enabled: false + scheme: "" + subnets: "" + securityGroups: "" + certificateARN: "" + dnsZone: "localhost" diff --git a/charts/external-services/Chart.yaml b/charts/external-services/Chart.yaml new file mode 100644 index 000000000..6dfa0caec --- /dev/null +++ b/charts/external-services/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0.0" +description: Helm chart for external services. This is an optional abstraction layer for external dependencies such as redis. +name: external-services +version: 1.0.7 diff --git a/charts/external-services/README.md b/charts/external-services/README.md new file mode 100644 index 000000000..d2aa9e58b --- /dev/null +++ b/charts/external-services/README.md @@ -0,0 +1,20 @@ +# external-services + +![Version: 1.0.7](https://img.shields.io/badge/Version-1.0.7-informational?style=flat-square) ![AppVersion: 1.0.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) + +Helm chart for external services. This is an optional abstraction layer for external dependencies such as redis. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| enabled | bool | `true` | | +| services[0].hostname | string | `"redis.example.com"` | | +| services[0].name | string | `"redis"` | | +| services[1].hostname | string | `"ldap.example.com"` | | +| services[1].name | string | `"ldap"` | | +| services[2].hostname | string | `"postgres.example.com"` | | +| services[2].name | string | `"postgres"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/external-services/templates/service.yaml b/charts/external-services/templates/service.yaml new file mode 100644 index 000000000..b610b604f --- /dev/null +++ b/charts/external-services/templates/service.yaml @@ -0,0 +1,12 @@ +{{ if .Values.enabled }} +{{- range $service := .Values.services }} +kind: "Service" +apiVersion: "v1" +metadata: + name: {{ $service.name }} +spec: + type: ExternalName + externalName: {{ $service.hostname }} +--- +{{- end }} +{{- end }} diff --git a/charts/external-services/values.yaml b/charts/external-services/values.yaml new file mode 100644 index 000000000..a1e00217e --- /dev/null +++ b/charts/external-services/values.yaml @@ -0,0 +1,8 @@ +enabled: true +services: + - hostname: redis.example.com + name: redis + - hostname: ldap.example.com + name: ldap + - hostname: postgres.example.com + name: postgres diff --git a/charts/flair/Chart.yaml b/charts/flair/Chart.yaml new file mode 100644 index 000000000..421cd50f9 --- /dev/null +++ b/charts/flair/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +appVersion: "1.0.0-static" +description: Watches data on the validated topic and does profiling on its path through the data pipeline. +name: flair +version: 2.1.3 +deprecated: true \ No newline at end of file diff --git a/charts/flair/README.md b/charts/flair/README.md new file mode 100644 index 000000000..fcf6f3a6a --- /dev/null +++ b/charts/flair/README.md @@ -0,0 +1,32 @@ +# flair + +> **:exclamation: This Helm Chart is deprecated!** + +![Version: 2.1.3](https://img.shields.io/badge/Version-2.1.3-informational?style=flat-square) ![AppVersion: 1.0.0-static](https://img.shields.io/badge/AppVersion-1.0.0--static-informational?style=flat-square) + +Watches data on the validated topic and does profiling on its path through the data pipeline. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| flair.data_topic | string | `"streaming-persisted"` | | +| flair.dlq_topic | string | `"streaming-dead-letters"` | | +| fullnameOverride | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/flair"` | | +| image.tag | string | `"development"` | | +| kafka.brokers | string | `"data-broker:9092"` | | +| kafka.strimziCluster | string | `"streaming-service"` | | +| localstack.enabled | bool | `false` | | +| nameOverride | string | `""` | | +| nodeSelector | object | `{}` | | +| presto.url | string | `"http://presto-endpoint:8080"` | | +| presto.user | string | `"flair"` | | +| redis.host | string | `"flair-redis-master"` | | +| replicaCount | int | `1` | | +| tolerations | list | `[]` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/flair/templates/_helpers.tpl b/charts/flair/templates/_helpers.tpl new file mode 100644 index 000000000..466bf927b --- /dev/null +++ b/charts/flair/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/flair/templates/deployment.yaml b/charts/flair/templates/deployment.yaml new file mode 100644 index 000000000..fe144a146 --- /dev/null +++ b/charts/flair/templates/deployment.yaml @@ -0,0 +1,60 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "helm.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + helm.sh/chart: {{ include "helm.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: KAFKA_BROKERS + value: {{ .Values.kafka.brokers }} + - name: PRESTO_URL + value: {{ .Values.presto.url }} + - name: PRESTO_USER + value: {{.Values.presto.user}} + - name: REDIS_HOST + value: {{ .Values.redis.host }} + - name: DLQ_TOPIC + value: {{ .Values.flair.dlq_topic }} + - name: DATA_TOPIC + value: {{ .Values.flair.data_topic }} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/charts/flair/values.yaml b/charts/flair/values.yaml new file mode 100644 index 000000000..d1715fee3 --- /dev/null +++ b/charts/flair/values.yaml @@ -0,0 +1,31 @@ +replicaCount: 1 + +image: + repository: smartcitiesdata/flair + tag: development + pullPolicy: Always + +localstack: + enabled: false + +kafka: + #comma delimited list of kafka seed brokers + brokers: data-broker:9092 + strimziCluster: streaming-service # http://strimzi.io/docs/0.4.0/#_topic_configmap + +nameOverride: "" +fullnameOverride: "" +nodeSelector: {} +tolerations: [] +affinity: {} + +flair: + dlq_topic: streaming-dead-letters + data_topic: streaming-persisted + +presto: + user: "flair" + url: http://presto-endpoint:8080 + +redis: + host: flair-redis-master diff --git a/charts/forklift/.helmignore b/charts/forklift/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/forklift/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/forklift/Chart.yaml b/charts/forklift/Chart.yaml new file mode 100644 index 000000000..eaea26e84 --- /dev/null +++ b/charts/forklift/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +appVersion: "1.0" +description: Loads data from the transformed topic into Presto +name: forklift +version: 3.1.15 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/forklift diff --git a/charts/forklift/README.md b/charts/forklift/README.md new file mode 100644 index 000000000..0eace887e --- /dev/null +++ b/charts/forklift/README.md @@ -0,0 +1,51 @@ +# forklift + +![Version: 3.1.15](https://img.shields.io/badge/Version-3.1.15-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Loads data from the transformed topic into Presto + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| aws.s3HostName | string | `nil` | | +| aws.s3Port | string | `nil` | | +| fullnameOverride | string | `""` | | +| global.kafka.brokers | string | `"streaming-service-kafka-bootstrap:9092"` | | +| global.objectStore.accessKey | string | `nil` | | +| global.objectStore.accessSecret | string | `nil` | | +| global.presto.url | string | `"http://platform-kubernetes-data-platform-presto:8080"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/forklift"` | | +| image.tag | string | `"development"` | | +| kafka.dataTopicPrefix | string | `"transformed"` | | +| kafka.outputTopic | string | `"streaming-persisted"` | | +| kdp.user | string | `"forklift"` | | +| monitoring.targetPort | int | `9002` | | +| nameOverride | string | `""` | | +| nodeSelector | object | `{}` | | +| overwrite_mode | bool | `false` | | +| profiling_enabled | bool | `false` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `1` | | +| resources.limits.cpu | string | `"500m"` | | +| resources.limits.memory | string | `"1Gi"` | | +| resources.requests.cpu | string | `"500m"` | | +| resources.requests.memory | string | `"1Gi"` | | +| service.type | string | `"ClusterIP"` | | +| tolerations | list | `[]` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/forklift/templates/_helpers.tpl b/charts/forklift/templates/_helpers.tpl new file mode 100644 index 000000000..466bf927b --- /dev/null +++ b/charts/forklift/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/forklift/templates/deployment.yaml b/charts/forklift/templates/deployment.yaml new file mode 100644 index 000000000..2062aa8a4 --- /dev/null +++ b/charts/forklift/templates/deployment.yaml @@ -0,0 +1,118 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "helm.fullname" . }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + helm.sh/chart: {{ include "helm.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: {{ .Chart.Name }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 9001 + - containerPort: 4369 + env: + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers }} + - name: PRESTO_URL + value: {{ .Values.global.presto.url }} + - name: RUN_IN_KUBERNETES + value: "true" + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} + - name: DATA_TOPIC_PREFIX + value: {{.Values.kafka.dataTopicPrefix}} + - name: OUTPUT_TOPIC + value: {{.Values.kafka.outputTopic}} + - name: PRESTO_USER + value: {{.Values.kdp.user}} + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: PROFILING_ENABLED + value: {{ .Values.profiling_enabled | quote }} + - name: OVERWRITE_MODE + value: {{ .Values.overwrite_mode | quote }} + {{ if .Values.global.objectStore.accessKey }} + - name: AWS_ACCESS_KEY_ID + value: {{ .Values.global.objectStore.accessKey }} + {{ end -}} + {{ if .Values.global.objectStore.accessSecret }} + - name: AWS_SECRET_ACCESS_KEY + value: {{ .Values.global.objectStore.accessSecret }} + {{ end -}} + {{ if .Values.aws.s3HostName }} + - name: S3_HOST_NAME + value: {{ .Values.aws.s3HostName }} + - name: S3_PORT + value: {{ .Values.aws.s3Port | quote }} + {{ end -}} + {{ if .Values.global.buckets.hiveStorageBucket }} + - name: S3_WRITER_BUCKET + value: {{ .Values.global.buckets.hiveStorageBucket }} + {{ end -}} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NODE_ID + valueFrom: + fieldRef: + fieldPath: metadata.name + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/charts/forklift/templates/rbac.yaml b/charts/forklift/templates/rbac.yaml new file mode 100644 index 000000000..14b75a88f --- /dev/null +++ b/charts/forklift/templates/rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Chart.Name }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ .Chart.Name }} +subjects: +- kind: ServiceAccount + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/forklift/templates/service.yaml b/charts/forklift/templates/service.yaml new file mode 100644 index 000000000..f7594a3bd --- /dev/null +++ b/charts/forklift/templates/service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app.kubernetes.io/name: {{ include "helm.name" . }} + ports: + - name: erlang-vm + protocol: TCP + port: 9001 + targetPort: 9001 + - name: epmd + protocol: TCP + port: 4369 + targetPort: 4369 + type: {{ .Values.service.type }} diff --git a/charts/forklift/values.yaml b/charts/forklift/values.yaml new file mode 100644 index 000000000..7c0ca3b4d --- /dev/null +++ b/charts/forklift/values.yaml @@ -0,0 +1,65 @@ +global: + kafka: + brokers: streaming-service-kafka-bootstrap:9092 + presto: + url: http://platform-kubernetes-data-platform-presto:8080 + redis: + port: 6379 + host: redis.external-services + password: "" + passwordSecret: "" + sslEnabled: false + objectStore: + accessKey: null + accessSecret: null + +resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 500m + memory: 1Gi + +replicaCount: 1 + +image: + repository: smartcitiesdata/forklift + tag: development + pullPolicy: Always + majorPin: "" + minorPin: "" + +service: + type: ClusterIP + +kafka: + #comma delimited list of kafka seed brokers + dataTopicPrefix: "transformed" + outputTopic: "streaming-persisted" + +aws: + s3HostName: null + s3Port: null + +nameOverride: "" +fullnameOverride: "" +nodeSelector: {} +tolerations: [] +affinity: {} + +kdp: + user: "forklift" + +monitoring: + targetPort: 9002 + +profiling_enabled: false + +# When enabled, forklift doesn't retain any past records for a dataset. +# New records replace what was previously stored. +overwrite_mode: false + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true diff --git a/charts/kafka/Chart.lock b/charts/kafka/Chart.lock new file mode 100644 index 000000000..b887d99a8 --- /dev/null +++ b/charts/kafka/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: strimzi-kafka-operator + repository: http://strimzi.io/charts/ + version: 0.31.1 +digest: sha256:d490e1670d0884a6419573fac6051c10b1cb367ece53939db2d55a3f244ffb29 +generated: "2023-01-25T16:21:16.765437-06:00" diff --git a/charts/kafka/Chart.yaml b/charts/kafka/Chart.yaml new file mode 100644 index 000000000..bb1696368 --- /dev/null +++ b/charts/kafka/Chart.yaml @@ -0,0 +1,13 @@ +apiVersion: v2 +appVersion: "1.0" +description: A Helm chart for deploying kafka via strimzi +name: kafka +version: 1.2.27 +sources: + - https://github.com/strimzi/strimzi-kafka-operator + - https://github.com/apache/kafka +dependencies: + - name: strimzi-kafka-operator + version: 0.31.1 + repository: http://strimzi.io/charts/ + condition: strimzi-kafka-operator.enabled diff --git a/charts/kafka/README.md b/charts/kafka/README.md new file mode 100644 index 000000000..5c4bca1bf --- /dev/null +++ b/charts/kafka/README.md @@ -0,0 +1,58 @@ +# kafka + +![Version: 1.2.27](https://img.shields.io/badge/Version-1.2.27-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +A Helm chart for deploying kafka via strimzi + +## Source Code + +* +* + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| http://strimzi.io/charts/ | strimzi-kafka-operator | 0.31.1 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| kafka.broker | string | `"pipeline-kafka-bootstrap:9092"` | | +| kafka.defaultPartitions | int | `1` | | +| kafka.defaultReplicas | int | `3` | | +| kafka.resources.limits.cpu | string | `"1400m"` | | +| kafka.resources.limits.memory | string | `"12500M"` | | +| kafka.resources.requests.cpu | string | `"1400m"` | | +| kafka.resources.requests.memory | string | `"12500M"` | | +| kafka.storageSize | string | `"100Gi"` | | +| kafka.topics[0].name | string | `"streaming-persisted"` | | +| kafka.topics[1].name | string | `"streaming-dead-letters"` | | +| kafka.topics[2].name | string | `"event-stream"` | | +| kafka.version | string | `"2.6.2"` | | +| kafkaExporter.enabled | bool | `true` | | +| limitRange.enabled | bool | `true` | | +| rbac.enabled | bool | `true` | | +| resizeHook.enabled | bool | `true` | | +| scraper.cron | string | `"*/10 * * * *"` | | +| scraper.enabled | bool | `false` | | +| scraper.endpoint | string | `"kafka-exporter:9308/metrics"` | | +| scraper.image | string | `"alpine:latest"` | | +| scraper.serviceAccount | string | `"default"` | | +| strimzi-kafka-operator.enabled | bool | `true` | | +| strimzi-kafka-operator.resources.limits.cpu | string | `"500m"` | | +| strimzi-kafka-operator.resources.requests.cpu | string | `"100m"` | | +| tlsSidecar.resources.limits.cpu | string | `"100m"` | | +| tlsSidecar.resources.limits.memory | string | `"128Mi"` | | +| tlsSidecar.resources.requests.cpu | string | `"100m"` | | +| tlsSidecar.resources.requests.memory | string | `"128Mi"` | | +| tolerations | list | `[]` | | +| zookeeper.resources.limits.cpu | string | `"100m"` | | +| zookeeper.resources.limits.memory | string | `"512Mi"` | | +| zookeeper.resources.requests.cpu | string | `"100m"` | | +| zookeeper.resources.requests.memory | string | `"512Mi"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/kafka/templates/kafka-exporter/deployment.yaml b/charts/kafka/templates/kafka-exporter/deployment.yaml new file mode 100644 index 000000000..462142071 --- /dev/null +++ b/charts/kafka/templates/kafka-exporter/deployment.yaml @@ -0,0 +1,46 @@ +{{- if .Values.kafkaExporter.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafka-exporter + labels: + app.kubernetes.io/name: kafka-exporter + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: kafka-exporter + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: kafka-exporter + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + containers: + - name: kafka-exporter + ports: + - containerPort: 9308 + image: "danielqsj/kafka-exporter:v1.4.1" + livenessProbe: + httpGet: + path: /healthz + port: 9308 + scheme: HTTP + initialDelaySeconds: 100 + timeoutSeconds: 9 + periodSeconds: 30 + successThreshold: 1 + failureThreshold: 1 + args: ["--kafka.server={{ .Values.kafka.broker }}"] + imagePullPolicy: IfNotPresent + resources: + limits: + memory: 1Gi + cpu: 500m + requests: + memory: 512Mi + cpu: 300m +{{- end }} diff --git a/charts/kafka/templates/kafka-exporter/scraper.yaml b/charts/kafka/templates/kafka-exporter/scraper.yaml new file mode 100644 index 000000000..14307bde5 --- /dev/null +++ b/charts/kafka/templates/kafka-exporter/scraper.yaml @@ -0,0 +1,38 @@ +{{- if .Values.scraper.enabled }} + +apiVersion: batch/v1 +kind: CronJob +metadata: + name: kafka-scraper-cron +spec: + schedule: "{{ .Values.scraper.cron }}" + concurrencyPolicy: Forbid + jobTemplate: + spec: + backoffLimit: 0 + template: + spec: + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + restartPolicy: Never + serviceAccount: "{{ .Values.scraper.serviceAccount }}" + containers: + - name: kafka-scraper + image: "{{ .Values.scraper.image }}" + imagePullPolicy: Always + resources: + limits: + memory: 100Mi + cpu: 100m + requests: + memory: 100Mi + cpu: 100m + command: + - "wget" + - "-qO-" + - "{{ .Values.scraper.endpoint }}" + +{{- end }} diff --git a/charts/kafka/templates/kafka-exporter/service.yaml b/charts/kafka/templates/kafka-exporter/service.yaml new file mode 100644 index 000000000..4f4509e25 --- /dev/null +++ b/charts/kafka/templates/kafka-exporter/service.yaml @@ -0,0 +1,19 @@ +{{- if .Values.kafkaExporter.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: kafka-exporter + labels: + app.kubernetes.io/name: kafka-exporter + annotations: + prometheus.io/port: "9308" + prometheus.io/scrape: "true" +spec: + selector: + app.kubernetes.io/name: kafka-exporter + ports: + - name: http + port: 9308 + protocol: TCP + type: NodePort +{{- end }} \ No newline at end of file diff --git a/charts/kafka/templates/kafka-patcher.yaml b/charts/kafka/templates/kafka-patcher.yaml new file mode 100644 index 000000000..904b3bea1 --- /dev/null +++ b/charts/kafka/templates/kafka-patcher.yaml @@ -0,0 +1,31 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kafka-patcher +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kafka-patcher +rules: + - apiGroups: [""] + resources: + - persistentvolumeclaims + verbs: + - get + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kafka-patcher-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kafka-patcher +subjects: +- kind: ServiceAccount + name: kafka-patcher + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/kafka/templates/kafka.yml b/charts/kafka/templates/kafka.yml new file mode 100644 index 000000000..866af68c1 --- /dev/null +++ b/charts/kafka/templates/kafka.yml @@ -0,0 +1,59 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: Kafka +metadata: + name: pipeline +spec: + kafka: + version: {{ .Values.kafka.version }} + replicas: {{ .Values.kafka.defaultReplicas }} + listeners: + - name: plain + port: 9092 + type: internal + tls: false + config: + num.partitions: 30 + default.replication.factor: {{ .Values.kafka.defaultReplicas }} + offsets.topic.replication.factor: {{ .Values.kafka.defaultReplicas }} + transaction.state.log.replication.factor: {{ .Values.kafka.defaultReplicas }} + transaction.state.log.min.isr: {{ .Values.kafka.defaultReplicas }} + auto.create.topics.enable: false + storage: + type: persistent-claim + size: {{ .Values.kafka.storageSize }} + deleteClaim: false + readinessProbe: + initialDelaySeconds: 30 + timeoutSeconds: 45 + livenessProbe: + initialDelaySeconds: 30 + timeoutSeconds: 45 + resources: +{{ toYaml .Values.kafka.resources | indent 6 }} + rack: + topologyKey: "kubernetes.io/hostname" + zookeeper: + replicas: {{ .Values.kafka.defaultReplicas }} + readinessProbe: + initialDelaySeconds: 30 + timeoutSeconds: 45 + livenessProbe: + initialDelaySeconds: 30 + timeoutSeconds: 45 + storage: + type: persistent-claim + size: 1Gi + deleteClaim: false + resources: +{{ toYaml .Values.zookeeper.resources | indent 6 }} + entityOperator: + topicOperator: + resources: + requests: + cpu: "200m" + memory: 512Mi + limits: + cpu: "200m" + memory: 512Mi + tlsSidecar: +{{ toYaml .Values.tlsSidecar | indent 6 }} diff --git a/charts/kafka/templates/resize-hook.yaml b/charts/kafka/templates/resize-hook.yaml new file mode 100644 index 000000000..70e7a6705 --- /dev/null +++ b/charts/kafka/templates/resize-hook.yaml @@ -0,0 +1,36 @@ +{{- if .Values.resizeHook.enabled }} +apiVersion: batch/v1 +kind: Job +metadata: + name: "{{.Release.Name}}" + labels: + app.kubernetes.io/managed-by: {{.Release.Service | quote }} + app.kubernetes.io/instance: {{.Release.Name | quote }} + helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}" + annotations: + # This is what defines this resource as a hook. Without this line, the + # job is considered part of the release. + "helm.sh/hook": post-upgrade + "helm.sh/hook-weight": "-5" + "helm.sh/hook-delete-policy": "before-hook-creation" +spec: + template: + metadata: + name: "{{.Release.Name}}" + labels: + app.kubernetes.io/managed-by: {{.Release.Service | quote }} + app.kubernetes.io/instance: {{.Release.Name | quote }} + helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}" + spec: + restartPolicy: Never + serviceAccount: kafka-patcher + containers: + - name: post-install-job + image: "bitnami/kubectl:1.12.7" + command: + - /bin/bash + - -c + args: + # This iterates over the pvcs generated for Kafka and patches them with a new size if applicable. + - "seq 0 $(expr {{ .Values.kafka.defaultReplicas }} - 1) | xargs -n1 -I \"{}\" kubectl patch pvc data-pipeline-kafka-{} -p '{\"spec\":{\"resources\":{\"requests\":{\"storage\":\"{{ .Values.kafka.storageSize }}\"}}}}'" +{{- end }} diff --git a/charts/kafka/templates/resource-limits.yml b/charts/kafka/templates/resource-limits.yml new file mode 100644 index 000000000..25c83a68a --- /dev/null +++ b/charts/kafka/templates/resource-limits.yml @@ -0,0 +1,15 @@ +{{- if .Values.limitRange.enabled }} +apiVersion: v1 +kind: LimitRange +metadata: + name: default-limitrange +spec: + limits: + - default: + memory: 128Mi + cpu: 100m + defaultRequest: + memory: 128Mi + cpu: 100m + type: Container +{{- end }} diff --git a/charts/kafka/templates/topics.yaml b/charts/kafka/templates/topics.yaml new file mode 100644 index 000000000..2c61832bd --- /dev/null +++ b/charts/kafka/templates/topics.yaml @@ -0,0 +1,19 @@ +{{- range $topic := .Values.kafka.topics }} +--- +apiVersion: kafka.strimzi.io/v1beta1 +kind: KafkaTopic +metadata: + name: {{ $topic.name }} + namespace: {{ $.Release.Namespace }} + labels: + strimzi.io/cluster: pipeline +spec: + partitions: {{ $topic.partitions | default $.Values.kafka.defaultPartitions }} + replicas: {{ $topic.replicas | default $.Values.kafka.defaultReplicas }} +{{- if $topic.config }} + config: +{{ toYaml $topic.config | indent 4 }} +{{- else }} + config: {} +{{- end }} +{{- end }} diff --git a/charts/kafka/values.yaml b/charts/kafka/values.yaml new file mode 100644 index 000000000..0848edabc --- /dev/null +++ b/charts/kafka/values.yaml @@ -0,0 +1,73 @@ +kafka: + version: 2.6.2 + broker: pipeline-kafka-bootstrap:9092 + storageSize: 100Gi + defaultPartitions: 1 + # Adjusting defaultReplicas: https://github.com/Datastillery/charts/issues/312 + defaultReplicas: 3 + topics: + - name: streaming-persisted + - name: streaming-dead-letters + - name: event-stream + resources: + requests: + cpu: 1400m + memory: 12500M + limits: + cpu: 1400m + memory: 12500M + +scraper: + enabled: false + cron: "*/10 * * * *" + image: "alpine:latest" + endpoint: kafka-exporter:9308/metrics + serviceAccount: default + +zookeeper: + resources: + requests: + cpu: 100m + memory: 512Mi + limits: + cpu: 100m + memory: 512Mi + +# https://github.com/strimzi/strimzi-kafka-operator/blob/main/helm-charts/helm3/strimzi-kafka-operator/values.yaml +# This installs the strimzi operator, which requires CRDs to be manually installed +# to function. https://github.com/strimzi/strimzi-kafka-operator/issues/7147#issuecomment-1270844173 +strimzi-kafka-operator: + enabled: true + resources: + limits: + cpu: 500m + requests: + cpu: 100m + +tlsSidecar: + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 100m + memory: 128Mi + +tolerations: [] + +affinity: {} + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true + +resizeHook: + # Create a Job to auto scale kafka sizes after initial install + enabled: true + +limitRange: + # Create a custom limit range + enabled: true + +kafkaExporter: + enabled: true diff --git a/charts/kubernetes-data-platform/.helmignore b/charts/kubernetes-data-platform/.helmignore new file mode 100644 index 000000000..3f939ae2a --- /dev/null +++ b/charts/kubernetes-data-platform/.helmignore @@ -0,0 +1,29 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +# Infrastructure cruft +.terraform/ +terraform.tfstate.d/ +terraform/ +shared/ +*.plan +Jenkinsfile +images/ diff --git a/charts/kubernetes-data-platform/Chart.yaml b/charts/kubernetes-data-platform/Chart.yaml new file mode 100644 index 000000000..ba510eadf --- /dev/null +++ b/charts/kubernetes-data-platform/Chart.yaml @@ -0,0 +1,15 @@ +name: kubernetes-data-platform +apiVersion: v1 +description: Hadoop-less data platform for the Smart City OS +version: 1.7.5 +keywords: + - presto + - hive-metastore + - cloud-object-store + - minio +sources: + - https://github.com/UrbanOS-Public/kdp + - https://github.com/prestodb/presto + - https://github.com/apache/hive + - https://github.com/minio/minio + - https://github.com/helm/helm diff --git a/charts/kubernetes-data-platform/README.md b/charts/kubernetes-data-platform/README.md new file mode 100644 index 000000000..2ecaffe0b --- /dev/null +++ b/charts/kubernetes-data-platform/README.md @@ -0,0 +1,116 @@ +# kubernetes-data-platform + +![Version: 1.7.5](https://img.shields.io/badge/Version-1.7.5-informational?style=flat-square) + +Hadoop-less data platform for the Smart City OS + +## Source Code + +* +* +* +* +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| global.buckets.hiveStorageBucket | string | `"placeholderName"` | | +| global.environment | string | `"sandbox"` | | +| global.ingress.annotations | object | `{}` | | +| global.objectStore.accessKey | string | `"accessKey"` | | +| global.objectStore.accessSecret | string | `"accessSecret"` | | +| hook.container.image | string | `"alpine"` | | +| hook.container.tag | string | `"3.8"` | | +| metastore.allowDropTable | bool | `false` | | +| metastore.deploy.container.image | string | `"smartcitiesdata/metastore"` | | +| metastore.deploy.container.pullPolicy | string | `"Always"` | | +| metastore.deploy.container.resources.limits.cpu | int | `2` | | +| metastore.deploy.container.resources.limits.memory | string | `"1.5Gi"` | | +| metastore.deploy.container.resources.requests.cpu | int | `2` | | +| metastore.deploy.container.resources.requests.memory | string | `"1.5Gi"` | | +| metastore.deploy.container.tag | string | `"0.11.1"` | | +| metastore.deploy.replicas | int | `1` | | +| metastore.deploy.updateStrategy.rollingUpdate.maxSurge | int | `1` | | +| metastore.deploy.updateStrategy.rollingUpdate.maxUnavailable | int | `1` | | +| metastore.deploy.updateStrategy.type | string | `"RollingUpdate"` | | +| metastore.jvm.gcMethod.g1.heapRegionSize | string | `"32M"` | | +| metastore.jvm.gcMethod.type | string | `"UseG1GC"` | | +| metastore.jvm.maxHeapSize | string | `"768M"` | | +| metastore.service.port | int | `9083` | | +| metastore.service.type | string | `"ClusterIP"` | | +| metastore.timeout | string | `"1m"` | | +| metastore.warehouseDir | string | `"hive-s3"` | | +| minio.deploy.container.image | string | `"minio/minio"` | | +| minio.deploy.container.pullPolicy | string | `"IfNotPresent"` | | +| minio.deploy.container.tag | string | `"RELEASE.2019-01-16T21-44-08Z"` | | +| minio.deploy.replicas | int | `1` | | +| minio.deploy.updateStrategy.rollingUpdate.maxSurge | int | `1` | | +| minio.deploy.updateStrategy.rollingUpdate.maxUnavailable | int | `1` | | +| minio.deploy.updateStrategy.type | string | `"RollingUpdate"` | | +| minio.enable | bool | `true` | | +| minio.externalMinio | bool | `false` | | +| minio.gateway.enable | bool | `false` | | +| minio.gateway.type | string | `"azure"` | | +| minio.googleCredentials.client_email | string | `""` | | +| minio.googleCredentials.client_id | string | `""` | | +| minio.googleCredentials.client_x509_cert_url | string | `""` | | +| minio.googleCredentials.private_key | string | `""` | | +| minio.googleCredentials.private_key_id | string | `""` | | +| minio.googleCredentials.project_id | string | `""` | | +| minio.ingress.enable | bool | `true` | | +| minio.service.port | int | `9000` | | +| minio.service.type | string | `"NodePort"` | | +| minio.storage.mode | string | `"ReadWriteOnce"` | | +| minio.storage.size | string | `"5Gi"` | | +| postgres.db.name | string | `"metastore"` | | +| postgres.db.password | string | `"password123"` | | +| postgres.db.user | string | `"hive"` | | +| postgres.deploy.container.image | string | `"postgres"` | | +| postgres.deploy.container.pullPolicy | string | `"IfNotPresent"` | | +| postgres.deploy.container.tag | string | `"11.1-alpine"` | | +| postgres.deploy.replicas | int | `1` | | +| postgres.deploy.updateStrategy.rollingUpdate.maxSurge | int | `1` | | +| postgres.deploy.updateStrategy.rollingUpdate.maxUnavailable | int | `1` | | +| postgres.deploy.updateStrategy.type | string | `"RollingUpdate"` | | +| postgres.enable | bool | `true` | | +| postgres.service.port | int | `5432` | | +| postgres.service.type | string | `"ClusterIP"` | | +| postgres.storage.mode | string | `"ReadWriteOnce"` | | +| postgres.storage.persist | bool | `false` | | +| postgres.storage.size | string | `"5Gi"` | | +| postgres.tls.enable | bool | `false` | | +| postgres.tls.mode | string | `"verify-full"` | | +| postgres.tls.rootCertPath | string | `"/etc/ssl/certs/ca-certificates.crt"` | | +| presto.deploy.container.image | string | `"smartcitiesdata/presto"` | | +| presto.deploy.container.pullPolicy | string | `"Always"` | | +| presto.deploy.container.resources.limits.cpu | int | `2` | | +| presto.deploy.container.resources.limits.memory | string | `"2Gi"` | | +| presto.deploy.container.resources.requests.cpu | int | `1` | | +| presto.deploy.container.resources.requests.memory | string | `"2Gi"` | | +| presto.deploy.container.tag | string | `"0.11.3"` | | +| presto.deploy.deployPrometheusExporter | bool | `false` | | +| presto.deploy.replicas | int | `1` | | +| presto.deploy.updateStrategy.rollingUpdate.maxSurge | int | `1` | | +| presto.deploy.updateStrategy.rollingUpdate.maxUnavailable | int | `1` | | +| presto.deploy.updateStrategy.type | string | `"RollingUpdate"` | | +| presto.deploy.useJmxExporter | bool | `false` | | +| presto.environment | string | `"production"` | | +| presto.ingress.annotations."alb.ingress.kubernetes.io/healthcheck-path" | string | `"/v1/cluster"` | | +| presto.ingress.enable | bool | `false` | | +| presto.jvm.gcMethod.g1.heapRegionSize | string | `"32M"` | | +| presto.jvm.gcMethod.type | string | `"UseG1GC"` | | +| presto.jvm.maxHeapSize | string | `"1536M"` | | +| presto.logLevel | string | `"INFO"` | | +| presto.query.heapHeadroomPerNode | string | `"0.75GB"` | | +| presto.query.maxMemory | string | `"1GB"` | | +| presto.query.maxMemoryPerNode | string | `"0.5GB"` | | +| presto.query.maxTotalMemoryPerNode | string | `"0.6GB"` | | +| presto.service.port | int | `8080` | | +| presto.service.type | string | `"NodePort"` | | +| presto.task.writerCount | int | `1` | | +| presto.workers | int | `0` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/kubernetes-data-platform/templates/_helpers.tpl b/charts/kubernetes-data-platform/templates/_helpers.tpl new file mode 100644 index 000000000..6f9fb3e82 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/_helpers.tpl @@ -0,0 +1,51 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "kdp.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a fully qualified presto name. +*/}} +{{- define "kdp.presto.fullname" -}} +{{- printf "%s-%s" .Chart.Name "presto" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a fully qualified metastore name. +*/}} +{{- define "kdp.metastore.fullname" -}} +{{- printf "%s-%s" .Chart.Name "metastore" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a fully qualified hive name. +*/}} +{{- define "kdp.hive.fullname" -}} +{{- printf "%s-%s" .Chart.Name "hive" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a fully qualified postgres name. +*/}} +{{- define "kdp.postgres.fullname" -}} +{{- printf "%s-%s" .Chart.Name "postgres" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a fully qualified minio name. +*/}} +{{- define "kdp.minio.fullname" -}} +{{- printf "%s-%s" .Chart.Name "minio" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a common label block +*/}} +{{- define "kdp.labels" -}} +environment: {{ .Values.global.environment }} +release: {{ .Release.Name }} +source: helm +{{- end -}} diff --git a/charts/kubernetes-data-platform/templates/metastore/configs.yaml b/charts/kubernetes-data-platform/templates/metastore/configs.yaml new file mode 100644 index 000000000..5c744808d --- /dev/null +++ b/charts/kubernetes-data-platform/templates/metastore/configs.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.metastore.fullname" . }}-metastore-configs + labels: + component: presto +{{ include "kdp.labels" . | indent 4 }} +data: + jmx_exporter_config.yaml: | + {} \ No newline at end of file diff --git a/charts/kubernetes-data-platform/templates/metastore/deployment.yaml b/charts/kubernetes-data-platform/templates/metastore/deployment.yaml new file mode 100644 index 000000000..eac81ce90 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/metastore/deployment.yaml @@ -0,0 +1,84 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "kdp.metastore.fullname" . }} + labels: + component: metastore +{{ include "kdp.labels" . | indent 4 }} +spec: + selector: + matchLabels: + component: metastore +{{ include "kdp.labels" . | indent 6 }} + replicas: {{ .Values.metastore.deploy.replicas }} + strategy: +{{ toYaml .Values.metastore.deploy.updateStrategy | trim | indent 4 }} + template: + metadata: + annotations: + checksum/core-site-configmap: {{ include (print $.Template.BasePath "/shared-configs/core-site.yaml") . | sha256sum }} + checksum/metastore-site-configmap: {{ include (print $.Template.BasePath "/metastore/metastore-site.yaml") . | sha256sum }} + prometheus.io/port: "8181" + prometheus.io/scrape: "true" + labels: + component: metastore +{{ include "kdp.labels" . | indent 8 }} + spec: + initContainers: + - name: init-schema + image: {{ .Values.metastore.deploy.container.image }}:{{ .Values.metastore.deploy.container.tag }} + imagePullPolicy: {{ .Values.metastore.deploy.container.pullPolicy }} + resources: +{{ toYaml .Values.metastore.deploy.container.resources | indent 10 }} + command: + - /bin/bash + - -c + args: + - /opt/hive-metastore/bin/schematool -dbType postgres -validate || /opt/hive-metastore/bin/schematool -dbType postgres -initSchema + volumeMounts: + - mountPath: /opt/hive-metastore/conf/metastore-site.xml + name: metastore-site + subPath: metastore-site.xml + containers: + - name: metastore + image: {{ .Values.metastore.deploy.container.image }}:{{ .Values.metastore.deploy.container.tag }} + imagePullPolicy: {{ .Values.metastore.deploy.container.pullPolicy }} + command: + - /opt/hive-metastore/bin/start-metastore + ports: + - containerPort: {{ .Values.metastore.service.port }} + name: metastore + volumeMounts: + - mountPath: /opt/hive-metastore/conf/metastore-site.xml + name: metastore-site + subPath: metastore-site.xml + - mountPath: /opt/hadoop/etc/hadoop/core-site.xml + name: core-site + subPath: core-site.xml + - mountPath: /opt/hive-metastore/jmx_exporter_config.yaml + name: metastore-configs + subPath: jmx_exporter_config.yaml + env: + - name: HADOOP_OPTS + value: > + -server + -Xmx{{ .Values.metastore.jvm.maxHeapSize }} + -XX:+{{ .Values.metastore.jvm.gcMethod.type }} + -XX:G1HeapRegionSize={{ .Values.metastore.jvm.gcMethod.g1.heapRegionSize }} + -XX:+UseGCOverheadLimit + -XX:+ExplicitGCInvokesConcurrent + -XX:+HeapDumpOnOutOfMemoryError + -XX:+ExitOnOutOfMemoryError + -javaagent:/opt/hive-metastore/jmx_exporter.jar=8181:/opt/hive-metastore/jmx_exporter_config.yaml + resources: +{{ toYaml .Values.metastore.deploy.container.resources | indent 10 }} + volumes: + - name: metastore-site + configMap: + name: {{ template "kdp.metastore.fullname" . }}-config + - name: core-site + configMap: + name: {{ template "kdp.name" . }}-core-site + - name: metastore-configs + configMap: + name: {{ template "kdp.metastore.fullname" . }}-metastore-configs diff --git a/charts/kubernetes-data-platform/templates/metastore/metastore-site.yaml b/charts/kubernetes-data-platform/templates/metastore/metastore-site.yaml new file mode 100644 index 000000000..ffbbb0349 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/metastore/metastore-site.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.metastore.fullname" . }}-config + labels: + component: metastore +{{ include "kdp.labels" . | indent 4 }} +data: + metastore-site.xml: |- + + + + + metastore.thrift.uris + thrift://{{ template "kdp.metastore.fullname" . }}:{{ .Values.metastore.service.port }} + + + metastore.warehouse.dir + s3a://{{ .Values.global.buckets.hiveStorageBucket }}/{{ .Values.metastore.warehouseDir }} + + + metastore.task.threads.always + org.apache.hadoop.hive.metastore.events.EventCleanerTask,org.apache.hadoop.hive.metastore.MaterializationsCacheCleanerTask + + + metastore.expression.proxy + org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy + + + javax.jdo.option.ConnectionURL + {{- $fullname := include "kdp.postgres.fullname" . -}} + {{- $hostname := default $fullname .Values.postgres.service.externalAddress -}} + jdbc:postgresql://{{ $hostname }}/{{ .Values.postgres.db.name }}?ssl={{ .Values.postgres.tls.enable }}&sslmode={{ .Values.postgres.tls.mode }}&sslrootcert={{ .Values.postgres.tls.rootCertPath }} + + + javax.jdo.option.ConnectionDriverName + org.postgresql.Driver + + + javax.jdo.option.ConnectionUserName + {{ .Values.postgres.db.user }} + + + javax.jdo.option.ConnectionPassword + {{ .Values.postgres.db.password }} + + + metastore.metastore.event.db.notification.api.auth + false + + diff --git a/charts/kubernetes-data-platform/templates/metastore/service.yaml b/charts/kubernetes-data-platform/templates/metastore/service.yaml new file mode 100644 index 000000000..3700eacba --- /dev/null +++ b/charts/kubernetes-data-platform/templates/metastore/service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kdp.metastore.fullname" . }} + labels: + component: metastore +{{ include "kdp.labels" . | indent 4 }} +spec: + type: {{ .Values.metastore.service.type }} + ports: + - port: {{ .Values.metastore.service.port }} + targetPort: metastore + name: metastore + selector: + component: metastore +{{ include "kdp.labels" . | indent 4 }} diff --git a/charts/kubernetes-data-platform/templates/minio/create-bucket-job.yaml b/charts/kubernetes-data-platform/templates/minio/create-bucket-job.yaml new file mode 100644 index 000000000..0158e427c --- /dev/null +++ b/charts/kubernetes-data-platform/templates/minio/create-bucket-job.yaml @@ -0,0 +1,35 @@ +{{- if and .Values.minio.enable (not .Values.minio.gateway.enable) -}} +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "kdp.minio.fullname" . }}-init + labels: + component: minio +{{ include "kdp.labels" . | indent 4 }} + annotations: + "helm.sh/hook": post-install + "helm.sh/hook-delete-policy": hook-succeeded +spec: + template: + metadata: + labels: + component: minio +{{ include "kdp.labels" . | indent 8 }} + spec: + restartPolicy: Never + containers: + - name: create-bucket-job + image: "{{ .Values.hook.container.image }}:{{ .Values.hook.container.tag }}" + command: + - "/bin/sh" + args: + - "/create_bucket.sh" + volumeMounts: + - mountPath: /create_bucket.sh + name: create-bucket + subPath: create_bucket.sh + volumes: + - name: create-bucket + configMap: + name: {{ template "kdp.minio.fullname" . }}-init +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/minio/create-bucket-script.yaml b/charts/kubernetes-data-platform/templates/minio/create-bucket-script.yaml new file mode 100644 index 000000000..4b7d6cdc2 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/minio/create-bucket-script.yaml @@ -0,0 +1,20 @@ +{{- if and .Values.minio.enable (not .Values.minio.gateway.enable) -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.minio.fullname" . }}-init + labels: + component: minio +{{ include "kdp.labels" . | indent 4 }} +data: + create_bucket.sh: | + #!/bin/sh + + wget https://dl.minio.io/client/mc/release/linux-amd64/mc -P /usr/bin/ + chmod a+x /usr/bin/mc + + sleep 10 + mc config host add kdp http://{{ template "kdp.minio.fullname" . }}:{{ .Values.minio.service.port }} {{ .Values.global.objectStore.accessKey }} {{ .Values.global.objectStore.accessSecret }} + mc mb kdp/{{ .Values.global.buckets.hiveStorageBucket }} + mc policy public kdp/{{ .Values.global.buckets.hiveStorageBucket }} +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/minio/deployment.yaml b/charts/kubernetes-data-platform/templates/minio/deployment.yaml new file mode 100644 index 000000000..c363bfcbf --- /dev/null +++ b/charts/kubernetes-data-platform/templates/minio/deployment.yaml @@ -0,0 +1,68 @@ +{{- if .Values.minio.enable -}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "kdp.minio.fullname" . }} + labels: + component: minio +{{ include "kdp.labels" . | indent 4 }} +spec: + selector: + matchLabels: + component: minio +{{ include "kdp.labels" . | indent 6 }} + replicas: {{ .Values.minio.deploy.replicas }} + strategy: +{{ toYaml .Values.minio.deploy.updateStrategy | trim | indent 4 }} + template: + metadata: + labels: + component: minio +{{ include "kdp.labels" . | indent 8 }} + spec: + containers: + - name: minio + image: {{ .Values.minio.deploy.container.image }}:{{ .Values.minio.deploy.container.tag }} + imagePullPolicy: {{ .Values.minio.deploy.container.pullPolicy }} + command: + - minio + args: + {{ if .Values.minio.gateway.enable }} + - gateway + - {{ .Values.minio.gateway.type }} + {{ else }} + - server + - /data + {{ end }} + env: + - name: MINIO_ACCESS_KEY + value: {{ .Values.global.objectStore.accessKey }} + - name: MINIO_SECRET_KEY + value: {{ .Values.global.objectStore.accessSecret }} + {{ if eq .Values.minio.gateway.type "gcs" }} + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /data/config.json + {{ end }} + ports: + - containerPort: {{ .Values.minio.service.port }} + name: minio + {{ if eq .Values.minio.gateway.type "gcs" }} + volumeMounts: + - mountPath: /data/config.json + name: google-credentials + subPath: config.json + volumes: + - name: google-credentials + configMap: + name: google-credentials + {{ end }} + {{ if not .Values.minio.gateway.enable }} + volumeMounts: + - mountPath: /data + name: cloud-storage + volumes: + - name: cloud-storage + persistentVolumeClaim: + claimName: {{ template "kdp.minio.fullname" . }}-storage + {{- end }} +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/minio/google-creds.yaml b/charts/kubernetes-data-platform/templates/minio/google-creds.yaml new file mode 100644 index 000000000..44a158024 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/minio/google-creds.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: google-credentials +data: + config.json: | + { + "type": "service_account", + "project_id": "{{ .Values.minio.googleCredentials.project_id }}", + "private_key_id": "{{ .Values.minio.googleCredentials.private_key_id }}", + "private_key": "{{ .Values.minio.googleCredentials.private_key }}", + "client_email": "{{ .Values.minio.googleCredentials.client_email }}", + "client_id": "{{ .Values.minio.googleCredentials.client_id }}", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "{{ .Values.minio.googleCredentials.client_x509_cert_url }}" + } diff --git a/charts/kubernetes-data-platform/templates/minio/ingress.yaml b/charts/kubernetes-data-platform/templates/minio/ingress.yaml new file mode 100644 index 000000000..c1ff94bff --- /dev/null +++ b/charts/kubernetes-data-platform/templates/minio/ingress.yaml @@ -0,0 +1,35 @@ +{{- if .Values.minio.enable -}} +{{- if .Values.minio.ingress.enable -}} +{{- $serviceName := include "kdp.minio.fullname" . }} +{{- $servicePort := .Values.minio.service.port -}} +apiVersion: networking.k8s.io/v1beta1 +kind: Ingress +metadata: + annotations: +{{- if .Values.minio.ingress.annotations }} +{{ toYaml .Values.minio.ingress.annotations | trim | indent 4 }} +{{- end }} +{{- if .Values.global.ingress.annotations }} +{{ toYaml .Values.global.ingress.annotations | trim | indent 4 }} +{{- end }} + name: {{ template "kdp.minio.fullname" . }} + labels: + component: minio +{{ include "kdp.labels" . | indent 4 }} +spec: + backend: + serviceName: {{ $serviceName }} + servicePort: {{ $servicePort }} + rules: +{{- range .Values.minio.ingress.hosts }} +{{- $url := splitList "/" . }} + - host: {{ first $url }} + http: + paths: + - path: /{{ rest $url | join "/" }} + backend: + serviceName: {{ default $serviceName $.Values.minio.ingress.serviceName }} + servicePort: {{ default $servicePort $.Values.minio.ingress.servicePort }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/minio/pvc.yaml b/charts/kubernetes-data-platform/templates/minio/pvc.yaml new file mode 100644 index 000000000..c4b763dd1 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/minio/pvc.yaml @@ -0,0 +1,17 @@ +{{- if .Values.minio.enable -}} +{{ if not .Values.minio.gateway.enable }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ template "kdp.minio.fullname" . }}-storage + labels: + component: minio +{{ include "kdp.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.minio.storage.mode }} + resources: + requests: + storage: {{ .Values.minio.storage.size }} +{{ end }} +{{- end}} diff --git a/charts/kubernetes-data-platform/templates/minio/service.yaml b/charts/kubernetes-data-platform/templates/minio/service.yaml new file mode 100644 index 000000000..8918f2445 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/minio/service.yaml @@ -0,0 +1,18 @@ +{{- if .Values.minio.enable -}} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kdp.minio.fullname" . }} + labels: + component: minio +{{ include "kdp.labels" . | indent 4 }} +spec: + type: {{ .Values.minio.service.type }} + ports: + - port: {{ .Values.minio.service.port }} + targetPort: minio + name: minio + selector: + component: minio +{{ include "kdp.labels" . | indent 4 }} +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/postgres/deployment.yaml b/charts/kubernetes-data-platform/templates/postgres/deployment.yaml new file mode 100644 index 000000000..0819e2d86 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/postgres/deployment.yaml @@ -0,0 +1,50 @@ +{{- if .Values.postgres.enable -}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "kdp.postgres.fullname" . }} + labels: + component: postgres +{{ include "kdp.labels" . | indent 4 }} +spec: + selector: + matchLabels: + component: postgres +{{ include "kdp.labels" . | indent 6 }} + replicas: {{ .Values.postgres.deploy.replicas }} + strategy: +{{ toYaml .Values.postgres.deploy.updateStrategy | trim | indent 4 }} + template: + metadata: + labels: + component: postgres +{{ include "kdp.labels" . | indent 8 }} + spec: + containers: + - name: postgres + image: {{ .Values.postgres.deploy.container.image }}:{{ .Values.postgres.deploy.container.tag }} + imagePullPolicy: {{ .Values.postgres.deploy.container.pullPolicy }} + env: + - name: POSTGRES_PASSWORD + value: {{ .Values.postgres.db.password }} + ports: + - containerPort: {{ .Values.postgres.service.port }} + name: postgres + volumeMounts: + - mountPath: /docker-entrypoint-initdb.d/init.sql + name: postgres-init + subPath: init.sql +{{- if .Values.postgres.storage.persist }} + - mountPath: /var/lib/postgres/data + name: postgres-data +{{- end }} + volumes: + - name: postgres-init + configMap: + name: {{ template "kdp.postgres.fullname" . }}-init +{{- if .Values.postgres.storage.persist }} + - name: postgres-data + persistentVolumeClaim: + claimName: {{ template "kdp.postgres.fullname" . }}-storage +{{- end }} +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/postgres/init-config.yaml b/charts/kubernetes-data-platform/templates/postgres/init-config.yaml new file mode 100644 index 000000000..b528bac3d --- /dev/null +++ b/charts/kubernetes-data-platform/templates/postgres/init-config.yaml @@ -0,0 +1,14 @@ +{{- if .Values.postgres.enable -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.postgres.fullname" . }}-init + labels: + component: postgres +{{ include "kdp.labels" . | indent 4 }} +data: + init.sql: |- + CREATE DATABASE {{ .Values.postgres.db.name }}; + CREATE USER {{ .Values.postgres.db.user }} WITH PASSWORD '{{ .Values.postgres.db.password }}'; + GRANT ALL PRIVILEGES ON DATABASE {{ .Values.postgres.db.name }} TO {{ .Values.postgres.db.user }}; +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/postgres/pvc.yaml b/charts/kubernetes-data-platform/templates/postgres/pvc.yaml new file mode 100644 index 000000000..b24c2c777 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/postgres/pvc.yaml @@ -0,0 +1,17 @@ +{{- if .Values.postgres.enable -}} +{{- if .Values.postgres.storage.persist -}} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ template "kdp.postgres.fullname" . }}-storage + labels: + component: postgres +{{ include "kdp.labels" . | indent 4 }} +spec: + accessModes: + - {{ .Values.postgres.storage.mode }} + resources: + requests: + storage: {{ .Values.postgres.storage.size }} +{{- end }} +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/postgres/service.yaml b/charts/kubernetes-data-platform/templates/postgres/service.yaml new file mode 100644 index 000000000..100bf35e2 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/postgres/service.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kdp.postgres.fullname" . }} + labels: + component: postgres +{{ include "kdp.labels" . | indent 4 }} +spec: +{{- if .Values.postgres.service.externalAddress }} + type: ExternalName + externalName: {{ .Values.postgres.service.externalAddress }} +{{- else }} + type: {{ .Values.postgres.service.type }} + ports: + - port: {{ .Values.postgres.service.port }} + targetPort: postgres + name: postgres + selector: + component: postgres +{{ include "kdp.labels" . | indent 4 }} +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/presto/coordinator-config.yaml b/charts/kubernetes-data-platform/templates/presto/coordinator-config.yaml new file mode 100644 index 000000000..a7c48fbe4 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/presto/coordinator-config.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.presto.fullname" . }}-coordinator + labels: + component: presto + role: coordinator +{{ include "kdp.labels" . | indent 4 }} +data: + config.properties: | + coordinator=true +{{- if gt (int .Values.presto.workers) 0 }} + node-scheduler.include-coordinator=false +{{- else }} + node-scheduler.include-coordinator=true +{{- end }} + http-server.http.port={{ .Values.presto.service.port }} + query.max-memory={{ .Values.presto.query.maxMemory }} + query.max-memory-per-node={{ .Values.presto.query.maxMemoryPerNode }} + query.max-total-memory-per-node={{ .Values.presto.query.maxTotalMemoryPerNode }} + memory.heap-headroom-per-node={{ .Values.presto.query.heapHeadroomPerNode }} + discovery-server.enabled=true + discovery.uri=http://{{ template "kdp.presto.fullname" . }}:{{ .Values.presto.service.port }} + task.writer-count={{ .Values.presto.task.writerCount }} diff --git a/charts/kubernetes-data-platform/templates/presto/coordinator-deployment.yaml b/charts/kubernetes-data-platform/templates/presto/coordinator-deployment.yaml new file mode 100644 index 000000000..b4e122431 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/presto/coordinator-deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "kdp.presto.fullname" . }}-coord + labels: + component: presto + role: coordinator +{{ include "kdp.labels" . | indent 4 }} +spec: + selector: + matchLabels: + component: presto + role: coordinator +{{ include "kdp.labels" . | indent 6 }} + replicas: {{ .Values.presto.deploy.replicas }} + strategy: +{{ toYaml .Values.presto.deploy.updateStrategy | trim | indent 4 }} + template: + metadata: + annotations: + checksum/coordinator-configmap: {{ include (print $.Template.BasePath "/presto/coordinator-config.yaml") . | sha256sum }} + checksum/common-configmap: {{ include (print $.Template.BasePath "/presto/presto-configs.yaml") . | sha256sum }} + checksum/core-site-configmap: {{ include (print $.Template.BasePath "/shared-configs/core-site.yaml") . | sha256sum }} + prometheus.io/port: "8181" + prometheus.io/scrape: "true" + labels: + component: presto + role: coordinator +{{ include "kdp.labels" . | indent 8 }} + spec: + containers: + - name: presto-coordinator + image: {{ .Values.presto.deploy.container.image }}:{{ .Values.presto.deploy.container.tag }} + imagePullPolicy: {{ .Values.presto.deploy.container.pullPolicy }} + volumeMounts: + - mountPath: /presto/etc/node.properties + name: presto-configs + subPath: node.properties + - mountPath: /presto/etc/jvm.config + name: presto-configs + subPath: jvm.config + - mountPath: /presto/etc/config.properties + name: coordinator-config + subPath: config.properties + - mountPath: /presto/etc/log.properties + name: presto-configs + subPath: log.properties + - mountPath: /presto/etc/catalog/hive.properties + name: presto-configs + subPath: hive.properties + - mountPath: /etc/hadoop/conf/core-site.xml + name: core-site + subPath: core-site.xml + - mountPath: /presto/etc/jmx_exporter_config.yaml + name: presto-configs + subPath: jmx_exporter_config.yaml + ports: + - name: http-coord + containerPort: {{ .Values.presto.service.port }} + - name: jmx-exporter + containerPort: 8181 + livenessProbe: + httpGet: + path: /v1/cluster + port: http-coord + failureThreshold: 12 + readinessProbe: + httpGet: + path: /v1/cluster + port: http-coord + resources: +{{ toYaml .Values.presto.deploy.container.resources | indent 10 }} +{{- if .Values.presto.deploy.deployPrometheusExporter }} + - name: presto-exporter + image: yahoojapan/presto-exporter:master + imagePullPolicy: {{ .Values.presto.deploy.container.pullPolicy }} + ports: + - name: metric-port + containerPort: 9483 + livenessProbe: + httpGet: + path: /metrics + port: metric-port + readinessProbe: + httpGet: + path: /metrics + port: metric-port +{{- end }} + volumes: + - name: presto-configs + configMap: + name: {{ template "kdp.presto.fullname" . }}-configs + - name: coordinator-config + configMap: + name: {{ template "kdp.presto.fullname" . }}-coordinator + - name: core-site + configMap: + name: {{ template "kdp.name" . }}-core-site diff --git a/charts/kubernetes-data-platform/templates/presto/ingress.yaml b/charts/kubernetes-data-platform/templates/presto/ingress.yaml new file mode 100644 index 000000000..9888cb59e --- /dev/null +++ b/charts/kubernetes-data-platform/templates/presto/ingress.yaml @@ -0,0 +1,29 @@ +{{- if .Values.presto.ingress.enable -}} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: +{{- if .Values.presto.ingress.annotations }} +{{ toYaml .Values.presto.ingress.annotations | trim | indent 4 }} +{{- end }} +{{- if .Values.global.ingress.annotations }} +{{ toYaml .Values.global.ingress.annotations | trim | indent 4 }} +{{- end }} + name: {{ template "kdp.presto.fullname" . }} + labels: + component: presto + role: coordinator +{{ include "kdp.labels" . | indent 4 }} +spec: + rules: + - host: presto.{{ .Release.Namespace }}.{{ .Values.global.ingress.dnsZone }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ include "kdp.presto.fullname" . }} + port: + number: {{ .Values.presto.service.port }} +{{- end }} \ No newline at end of file diff --git a/charts/kubernetes-data-platform/templates/presto/presto-configs.yaml b/charts/kubernetes-data-platform/templates/presto/presto-configs.yaml new file mode 100644 index 000000000..3440306a9 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/presto/presto-configs.yaml @@ -0,0 +1,53 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.presto.fullname" . }}-configs + labels: + component: presto +{{ include "kdp.labels" . | indent 4 }} +data: + node.properties: | + node.environment=production + node.data-dir=/presto/etc/data + + jvm.config: | + -server + -Xmx{{ .Values.presto.jvm.maxHeapSize }} + -XX:+{{ .Values.presto.jvm.gcMethod.type }} + -XX:G1HeapRegionSize={{ .Values.presto.jvm.gcMethod.g1.heapRegionSize }} + -XX:+UseGCOverheadLimit + -XX:+ExplicitGCInvokesConcurrent + -XX:+HeapDumpOnOutOfMemoryError + -XX:+ExitOnOutOfMemoryError +{{- if .Values.presto.deploy.useJmxExporter }} + -javaagent:/presto/jmx_exporter.jar=8181:/presto/etc/jmx_exporter_config.yaml +{{- end }} + jmx_exporter_config.yaml: | + {} + + log.properties: | + com.facebook.presto={{ .Values.presto.logLevel }} + + hive.properties: | + connector.name=hive-hadoop2 + hive.metastore.uri=thrift://{{ template "kdp.metastore.fullname" . }}:{{ .Values.metastore.service.port }} + hive.metastore.username={{ .Values.postgres.db.user }} + hive.config.resources=/etc/hadoop/conf/core-site.xml + hive.metastore-timeout={{ .Values.metastore.timeout }} + hive.allow-drop-table={{ .Values.metastore.allowDropTable }} + hive.allow-rename-table={{ .Values.metastore.allowDropTable }} + hive.allow-drop-column={{ .Values.metastore.allowDropTable }} + hive.allow-rename-column={{ .Values.metastore.allowDropTable }} + hive.allow-add-column={{ .Values.metastore.allowDropTable }} +{{- if and .Values.global.objectStore.accessKey .Values.global.objectStore.accessSecret }} + hive.s3.aws-access-key={{ .Values.global.objectStore.accessKey }} + hive.s3.aws-secret-key={{ .Values.global.objectStore.accessSecret }} +{{- end }} + hive.s3.path-style-access=true +{{- if .Values.minio.enable }} + hive.s3.endpoint=http://{{ template "kdp.minio.fullname" . }}:{{ .Values.minio.service.port }} + hive.s3.ssl.enabled=false +{{- else if .Values.minio.externalMinio }} + hive.s3.endpoint=http://{{ .Values.minio.service.name }}:{{ .Values.minio.service.port }} + hive.s3.ssl.enabled=false +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/presto/service.yaml b/charts/kubernetes-data-platform/templates/presto/service.yaml new file mode 100644 index 000000000..7d859cc29 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/presto/service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kdp.presto.fullname" . }} + labels: + component: presto + role: coordinator +{{ include "kdp.labels" . | indent 4 }} + annotations: + prometheus.io/port: "9483" + prometheus.io/scrape: "true" +spec: + type: {{ .Values.presto.service.type }} + ports: + - port: {{ .Values.presto.service.port }} + targetPort: http-coord + name: http-coord + - port: 9483 + targetPort: metric-port + name: metric-port + selector: + component: presto + role: coordinator +{{ include "kdp.labels" . | indent 4 }} diff --git a/charts/kubernetes-data-platform/templates/presto/worker-config.yaml b/charts/kubernetes-data-platform/templates/presto/worker-config.yaml new file mode 100644 index 000000000..4a2a27dc9 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/presto/worker-config.yaml @@ -0,0 +1,23 @@ +{{- if gt (int .Values.presto.workers) 0 -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.presto.fullname" . }}-worker + labels: + component: presto + role: worker +{{ include "kdp.labels" . | indent 4 }} +data: + config.properties: | + coordinator=false + http-server.http.port={{ .Values.presto.service.port }} + query.max-memory={{ .Values.presto.query.maxMemory }} + query.max-memory-per-node={{ .Values.presto.query.maxMemoryPerNode }} + query.max-total-memory-per-node={{ .Values.presto.query.maxTotalMemoryPerNode }} + discovery.uri=http://{{ template "kdp.presto.fullname" . }}:{{ .Values.presto.service.port }} + memory.heap-headroom-per-node={{ .Values.presto.query.heapHeadroomPerNode }} + task.writer-count={{ .Values.presto.task.writerCount }} + health_check.sh: | + #!/bin/bash + curl --silent {{ template "kdp.presto.fullname" . }}:{{ .Values.presto.service.port }}/v1/node | tr "," "\n" | grep --silent $(hostname -i) +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/presto/worker-deployment.yaml b/charts/kubernetes-data-platform/templates/presto/worker-deployment.yaml new file mode 100644 index 000000000..7b89f0fba --- /dev/null +++ b/charts/kubernetes-data-platform/templates/presto/worker-deployment.yaml @@ -0,0 +1,91 @@ +{{- if gt (int .Values.presto.workers) 0 -}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "kdp.presto.fullname" . }}-worker + labels: + component: presto + role: worker +{{ include "kdp.labels" . | indent 4 }} +spec: + selector: + matchLabels: + component: presto + role: worker +{{ include "kdp.labels" . | indent 6 }} + replicas: {{ .Values.presto.workers }} + strategy: +{{ toYaml .Values.presto.deploy.updateStrategy | trim | indent 4 }} + template: + metadata: + annotations: + checksum/worker-configmap: {{ include (print $.Template.BasePath "/presto/worker-config.yaml") . | sha256sum }} + checksum/common-configmap: {{ include (print $.Template.BasePath "/presto/presto-configs.yaml") . | sha256sum }} + checksum/core-site-configmap: {{ include (print $.Template.BasePath "/shared-configs/core-site.yaml") . | sha256sum }} + prometheus.io/port: "8181" + prometheus.io/scrape: "true" + labels: + component: presto + role: worker +{{ include "kdp.labels" . | indent 8 }} + spec: + containers: + - name: presto-worker + image: {{ .Values.presto.deploy.container.image }}:{{ .Values.presto.deploy.container.tag }} + imagePullPolicy: {{ .Values.presto.deploy.container.pullPolicy }} + volumeMounts: + - mountPath: /presto/etc/node.properties + name: presto-configs + subPath: node.properties + - mountPath: /presto/etc/jvm.config + name: presto-configs + subPath: jvm.config + - mountPath: /presto/etc/jmx_exporter_config.yaml + name: presto-configs + subPath: jmx_exporter_config.yaml + - mountPath: /presto/etc/config.properties + name: worker-config + subPath: config.properties + - mountPath: /presto/etc/log.properties + name: presto-configs + subPath: log.properties + - mountPath: /presto/etc/health_check.sh + name: worker-config + subPath: health_check.sh + - mountPath: /presto/etc/catalog/hive.properties + name: presto-configs + subPath: hive.properties + - mountPath: /etc/hadoop/conf/core-site.xml + name: core-site + subPath: core-site.xml + ports: + - name: jmx-exporter + containerPort: 8181 + livenessProbe: + exec: + command: + - /bin/bash + - /presto/etc/health_check.sh + initialDelaySeconds: 10 + periodSeconds: 25 + failureThreshold: 12 + readinessProbe: + exec: + command: + - /bin/bash + - /presto/etc/health_check.sh + initialDelaySeconds: 5 + periodSeconds: 10 + resources: +{{ toYaml .Values.presto.deploy.container.resources | indent 10 }} + volumes: + - name: presto-configs + configMap: + name: {{ template "kdp.presto.fullname" . }}-configs + - name: worker-config + configMap: + name: {{ template "kdp.presto.fullname" . }}-worker + - name: core-site + configMap: + name: {{ template "kdp.name" . }}-core-site +{{- end }} diff --git a/charts/kubernetes-data-platform/templates/shared-configs/core-site.yaml b/charts/kubernetes-data-platform/templates/shared-configs/core-site.yaml new file mode 100644 index 000000000..5060dfff9 --- /dev/null +++ b/charts/kubernetes-data-platform/templates/shared-configs/core-site.yaml @@ -0,0 +1,85 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "kdp.name" . }}-core-site + labels: + component: hadoop +{{ include "kdp.labels" . | indent 4 }} +data: + core-site.xml: |- + + + + + + fs.defaultFS + s3a://{{ .Values.global.buckets.hiveStorageBucket }} + true + + +{{- if .Values.minio.enable -}} + + fs.s3a.endpoint + http://{{ template "kdp.minio.fullname" . }}:{{ .Values.minio.service.port }} + +{{- else if .Values.minio.externalMinio }} + + fs.s3a.endpoint + http://{{ .Values.minio.service.name }}:{{ .Values.minio.service.port }} + +{{- end }} + +{{- if and .Values.global.objectStore.accessKey .Values.global.objectStore.accessSecret }} + + fs.s3a.access.key + {{ .Values.global.objectStore.accessKey }} + + + fs.s3a.secret.key + {{ .Values.global.objectStore.accessSecret }} + +{{- else }} + + fs.s3a.aws.credentials.provider + + com.amazonaws.auth.InstanceProfileCredentialsProvider + + +{{- end }} + + + fs.s3a.impl + org.apache.hadoop.fs.s3a.S3AFileSystem + + + + fs.AbstractFileSystem.s3a.imp + org.apache.hadoop.fs.s3a.S3A + + + + fs.trash.interval + 4320 + + + + fs.s3a.fast.upload + true + + + + fs.s3a.fast.upload.buffer + disk + + + + fs.s3a.multipart.size + 67108864 + + + + fs.s3a.path.style.access + true + + + diff --git a/charts/kubernetes-data-platform/values.yaml b/charts/kubernetes-data-platform/values.yaml new file mode 100644 index 000000000..ecfa0e305 --- /dev/null +++ b/charts/kubernetes-data-platform/values.yaml @@ -0,0 +1,152 @@ +presto: + workers: 0 + service: + type: NodePort + port: 8080 + logLevel: INFO + environment: production + query: + maxMemory: 1GB + maxMemoryPerNode: 0.5GB + maxTotalMemoryPerNode: 0.6GB + heapHeadroomPerNode: 0.75GB + task: + writerCount: 1 + jvm: + maxHeapSize: 1536M # look for environment specific values + gcMethod: + type: UseG1GC + g1: + heapRegionSize: 32M + deploy: + replicas: 1 + container: + image: smartcitiesdata/presto + tag: 0.11.3 + pullPolicy: Always + resources: + limits: + memory: 2Gi # look for environment specific values + cpu: 2 # look for environment specific values + requests: + memory: 2Gi # look for environment specific values + cpu: 1 # look for environment specific values + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + deployPrometheusExporter: false + useJmxExporter: false + ingress: + enable: false + annotations: + alb.ingress.kubernetes.io/healthcheck-path: /v1/cluster + +metastore: + jvm: + maxHeapSize: 768M + gcMethod: + type: UseG1GC + g1: + heapRegionSize: 32M + allowDropTable: false + timeout: 1m + service: + type: ClusterIP + port: 9083 + warehouseDir: hive-s3 + deploy: + replicas: 1 + container: + image: smartcitiesdata/metastore + tag: 0.11.1 + pullPolicy: Always + resources: + limits: + memory: 1.5Gi + cpu: 2 + requests: + memory: 1.5Gi + cpu: 2 + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 +postgres: + enable: true + db: + name: metastore + user: hive + password: password123 + tls: + enable: false + mode: verify-full + rootCertPath: /etc/ssl/certs/ca-certificates.crt + service: + type: ClusterIP + port: 5432 + storage: + persist: false + size: 5Gi + mode: ReadWriteOnce + deploy: + replicas: 1 + container: + image: postgres + tag: 11.1-alpine + pullPolicy: IfNotPresent + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + +minio: + enable: true + externalMinio: false + gateway: + enable: false + type: azure + googleCredentials: + project_id: '' + private_key_id: '' + private_key: '' + client_email: '' + client_id: '' + client_x509_cert_url: '' + storage: + mode: ReadWriteOnce + size: 5Gi + service: + type: NodePort + port: 9000 + deploy: + replicas: 1 + container: + image: minio/minio + tag: RELEASE.2019-01-16T21-44-08Z + pullPolicy: IfNotPresent + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + ingress: + enable: true + +hook: + container: + image: alpine + tag: '3.8' + +global: + ingress: + annotations: {} + environment: sandbox + objectStore: + accessKey: accessKey + accessSecret: accessSecret + buckets: + hiveStorageBucket: placeholderName diff --git a/charts/micro-service-watchinator/Chart.yaml b/charts/micro-service-watchinator/Chart.yaml new file mode 100644 index 000000000..8c2764702 --- /dev/null +++ b/charts/micro-service-watchinator/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +appVersion: "1.0" +description: Cron job to watch microservices and make sure they are alive +name: micro-service-watchinator +version: 1.1.4 +deprecated: true \ No newline at end of file diff --git a/charts/micro-service-watchinator/README.md b/charts/micro-service-watchinator/README.md new file mode 100644 index 000000000..9e3e88cce --- /dev/null +++ b/charts/micro-service-watchinator/README.md @@ -0,0 +1,24 @@ +# micro-service-watchinator + +> **:exclamation: This Helm Chart is deprecated!** + +![Version: 1.1.4](https://img.shields.io/badge/Version-1.1.4-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Cron job to watch microservices and make sure they are alive + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| CONSUMER_URI | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/micro-service-watchinator"` | | +| image.tag | string | `"latest"` | | +| metrics.port | int | `4002` | | +| namespace | string | `"watchinator"` | | +| replicaCount | int | `1` | | +| resourceLimits.cpu | string | `"100m"` | | +| resourceLimits.memory | string | `"128Mi"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/micro-service-watchinator/templates/_helpers.tpl b/charts/micro-service-watchinator/templates/_helpers.tpl new file mode 100644 index 000000000..fbd25f623 --- /dev/null +++ b/charts/micro-service-watchinator/templates/_helpers.tpl @@ -0,0 +1,10 @@ +{{/* vim: set filetype=mustache: */}} + +{{- define "watchinator.resources" -}} +limits: + memory: {{ .Values.resourceLimits.memory }} + cpu: {{ .Values.resourceLimits.cpu }} +requests: + memory: {{ .Values.resourceLimits.memory }} + cpu: {{ .Values.resourceLimits.cpu }} +{{- end -}} diff --git a/charts/micro-service-watchinator/templates/deployment.yaml b/charts/micro-service-watchinator/templates/deployment.yaml new file mode 100644 index 000000000..73736c6ed --- /dev/null +++ b/charts/micro-service-watchinator/templates/deployment.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ .Chart.Name }} + template: + metadata: + labels: + app: {{ .Chart.Name }} + annotations: + prometheus.io/port: "{{ .Values.metrics.port }}" + prometheus.io/scrape: "true" + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: CONSUMER_URI + value: {{ .Values.CONSUMER_URI }} + ports: + - containerPort: {{ .Values.metrics.port }} diff --git a/charts/micro-service-watchinator/values.yaml b/charts/micro-service-watchinator/values.yaml new file mode 100644 index 000000000..366902284 --- /dev/null +++ b/charts/micro-service-watchinator/values.yaml @@ -0,0 +1,13 @@ +replicaCount: 1 +CONSUMER_URI: "" +metrics: + port: 4002 +resourceLimits: + cpu: 100m + memory: 128Mi + +namespace: watchinator +image: + repository: smartcitiesdata/micro-service-watchinator + tag: latest + pullPolicy: Always diff --git a/charts/monitoring/Chart.lock b/charts/monitoring/Chart.lock new file mode 100644 index 000000000..f6e8df710 --- /dev/null +++ b/charts/monitoring/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: prometheus + repository: https://prometheus-community.github.io/helm-charts + version: 19.6.1 +- name: grafana + repository: https://grafana.github.io/helm-charts + version: 6.50.8 +digest: sha256:700047aee694cf3a3c22679cac60e5ee8d1611e8f9eaa2c436270e0c3c16d041 +generated: "2023-03-01T16:49:30.800529-06:00" diff --git a/charts/monitoring/Chart.yaml b/charts/monitoring/Chart.yaml new file mode 100644 index 000000000..8fe73f88c --- /dev/null +++ b/charts/monitoring/Chart.yaml @@ -0,0 +1,15 @@ +apiVersion: v2 +appVersion: "1.0" +description: "A combination of the community Prometheus and Grafana charts." +name: monitoring +version: 1.1.8 + +dependencies: + - name: prometheus + version: 19.6.1 + repository: https://prometheus-community.github.io/helm-charts + condition: prometheus.enabled + - name: grafana + version: 6.50.8 + repository: https://grafana.github.io/helm-charts + condition: grafana.enabled diff --git a/charts/monitoring/README.md b/charts/monitoring/README.md new file mode 100644 index 000000000..d725804d6 --- /dev/null +++ b/charts/monitoring/README.md @@ -0,0 +1,173 @@ +# monitoring + +![Version: 1.1.8](https://img.shields.io/badge/Version-1.1.8-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +A combination of the community Prometheus and Grafana charts. + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| https://grafana.github.io/helm-charts | grafana | 6.50.8 | +| https://prometheus-community.github.io/helm-charts | prometheus | 19.6.1 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| adminDeploy | bool | `true` | | +| global.ingress.annotations | object | `{}` | | +| grafana.admin.existingSecret | string | `"manual-grafana-secrets"` | | +| grafana.admin.passwordKey | string | `"grafana-admin-password"` | | +| grafana.admin.userKey | string | `"grafana-admin-username"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".apiVersion | int | `1` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].disableDeletion | bool | `false` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].editable | bool | `true` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].folder | string | `""` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].name | string | `"default"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].options.path | string | `"/var/lib/grafana/dashboards/default"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].orgId | int | `1` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].type | string | `"file"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[1].disableDeletion | bool | `false` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[1].editable | bool | `true` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[1].folder | string | `""` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[1].name | string | `"kube"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[1].options.path | string | `"/var/lib/grafana/dashboards/kube"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[1].orgId | int | `1` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[1].type | string | `"file"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[2].disableDeletion | bool | `false` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[2].editable | bool | `true` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[2].folder | string | `""` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[2].name | string | `"urbanos"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[2].options.path | string | `"/var/lib/grafana/dashboards/urbanos"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[2].orgId | int | `1` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[2].type | string | `"file"` | | +| grafana.dashboards.kube.kube-cluster.datasource | string | `"Prometheus"` | | +| grafana.dashboards.kube.kube-cluster.gnetId | int | `6873` | | +| grafana.dashboards.kube.kube-cluster.revision | int | `2` | | +| grafana.dashboards.kube.kube-namespace.datasource | string | `"Prometheus"` | | +| grafana.dashboards.kube.kube-namespace.gnetId | int | `6876` | | +| grafana.dashboards.kube.kube-namespace.revision | int | `2` | | +| grafana.dashboards.kube.kube-pods.datasource | string | `"Prometheus"` | | +| grafana.dashboards.kube.kube-pods.gnetId | int | `6879` | | +| grafana.dashboards.kube.kube-pods.revision | int | `1` | | +| grafana.dashboards.kube.kube-prometheus.datasource | string | `"Prometheus"` | | +| grafana.dashboards.kube.kube-prometheus.gnetId | int | `2` | | +| grafana.dashboards.kube.kube-prometheus.revision | int | `2` | | +| grafana.dashboards.urbanos.urban-os-kafka-exporter.datasource | string | `"Prometheus"` | | +| grafana.dashboards.urbanos.urban-os-kafka-exporter.gnetId | int | `14809` | | +| grafana.dashboards.urbanos.urban-os-kafka-exporter.revision | int | `1` | | +| grafana.dashboards.urbanos.urban-os-kube-all-nodes.datasource | string | `"Prometheus"` | | +| grafana.dashboards.urbanos.urban-os-kube-all-nodes.gnetId | int | `14810` | | +| grafana.dashboards.urbanos.urban-os-kube-all-nodes.revision | int | `1` | | +| grafana.dashboards.urbanos.urban-os-overview.datasource | string | `"Prometheus"` | | +| grafana.dashboards.urbanos.urban-os-overview.gnetId | int | `14806` | | +| grafana.dashboards.urbanos.urban-os-overview.revision | int | `1` | | +| grafana.dashboards.urbanos.urban-os-phoenix-api-metrics.datasource | string | `"Prometheus"` | | +| grafana.dashboards.urbanos.urban-os-phoenix-api-metrics.gnetId | int | `14811` | | +| grafana.dashboards.urbanos.urban-os-phoenix-api-metrics.revision | int | `1` | | +| grafana.dashboards.urbanos.urban-os-pipeline-health.datasource | string | `"Prometheus"` | | +| grafana.dashboards.urbanos.urban-os-pipeline-health.gnetId | int | `14805` | | +| grafana.dashboards.urbanos.urban-os-pipeline-health.revision | int | `1` | | +| grafana.datasources."datasources.yaml".apiVersion | int | `1` | | +| grafana.datasources."datasources.yaml".datasources[0].access | string | `"proxy"` | | +| grafana.datasources."datasources.yaml".datasources[0].isDefault | bool | `true` | | +| grafana.datasources."datasources.yaml".datasources[0].name | string | `"Prometheus"` | | +| grafana.datasources."datasources.yaml".datasources[0].type | string | `"prometheus"` | | +| grafana.datasources."datasources.yaml".datasources[0].url | string | `"http://monitoring-prometheus-server"` | | +| grafana.fullnameOverride | string | `"monitoring-grafana"` | | +| grafana.rbac.namespaced | bool | `true` | | +| grafana.securityContext.fsGroup | int | `1000` | | +| grafana.securityContext.runAsGroup | int | `1000` | | +| grafana.securityContext.runAsUser | int | `1000` | | +| grafana.service.enabled | bool | `true` | | +| grafana.service.type | string | `"NodePort"` | | +| grafana.serviceAccount.create | bool | `false` | | +| grafana.serviceAccount.name | string | `"default"` | | +| grafana.sidecar.dashboards.enabled | bool | `true` | | +| grafanaIngress.annotations | object | `{}` | | +| prometheus.kube-state-metrics.enabled | bool | `false` | | +| prometheus.prometheus-pushgateway.enabled | bool | `false` | | +| prometheus.server.fullnameOverride | string | `"monitoring-prometheus-server"` | | +| prometheus.server.namespaces[0] | string | `nil` | | +| prometheus.server.resources.limits.cpu | string | `"500m"` | | +| prometheus.server.resources.limits.memory | string | `"1Gi"` | | +| prometheus.server.resources.requests.cpu | string | `"250m"` | | +| prometheus.server.resources.requests.memory | string | `"500Mi"` | | +| prometheus.server.securityContext.fsGroup | int | `1000` | | +| prometheus.server.securityContext.runAsGroup | int | `1000` | | +| prometheus.server.securityContext.runAsUser | int | `1000` | | +| prometheus.server.useExistingClusterRoleName | string | `"prometheus-admin-cluster-role"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[0].name | string | `"Sites"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[0].rules[0].alert | string | `"SiteDown"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[0].rules[0].annotations.description | string | `"{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 2 minutes."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[0].rules[0].annotations.summary | string | `"Instance {{ $labels.instance }} down"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[0].rules[0].expr | string | `"probe_success == 0"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[0].rules[0].for | string | `"2m"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[0].rules[0].labels.severity | string | `"error"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[1].name | string | `"api_status"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[1].rules[0].alert | string | `"APIStatusDown"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[1].rules[0].annotations.description | string | `"{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[1].rules[0].annotations.summary | string | `"Instance {{ $labels.instance }} down"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[1].rules[0].expr | string | `"probe_success == 0"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[1].rules[0].for | string | `"1m"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[1].rules[0].labels.severity | string | `"error"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[2].name | string | `"api_response"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[2].rules[0].alert | string | `"APIResponseTime"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[2].rules[0].annotations.description | string | `"{{ $labels.instance }} of job {{ $labels.job }} is taking more than 3 seconds."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[2].rules[0].annotations.summary | string | `"Instance {{ $labels.instance }} is taking longer response time"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[2].rules[0].expr | string | `"probe_duration_seconds > 3"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[2].rules[0].for | string | `"1m"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[2].rules[0].labels.severity | string | `"error"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].name | string | `"K8S_Nodes"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[0].alert | string | `"LowMemory"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[0].annotations.description | string | `"{{ $labels.instance }} has {{ $value }} percent memory left."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[0].annotations.summary | string | `"Low Memory on Instance {{ $labels.instance }}"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[0].expr | string | `"(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100) < 20"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[0].for | string | `"5m"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[0].labels.severity | string | `"warning"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[1].alert | string | `"LowDisk"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[1].annotations.description | string | `"{{ $labels.instance }} has {{ $value }} percent disk left."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[1].annotations.summary | string | `"Low Disk on Instance {{ $labels.instance }}"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[1].expr | string | `"(node_filesystem_avail_bytes{device=~\"/dev/.*\"} / node_filesystem_size_bytes{device=~\"/dev/.*\"} * 100) < 15"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[1].for | string | `"5m"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[1].labels.severity | string | `"warning"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[2].alert | string | `"LowClusterCPU"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[2].annotations.description | string | `"Kubernetes cluster has {{ $value }} cores left. New deployments and cron jobs may fail to launch."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[2].annotations.summary | string | `"Kubernetes cluster low on CPU cores"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[2].expr | string | `"(cluster:capacity_cpu:sum - cluster:guarantees_cpu:sum) < 1"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[2].labels.severity | string | `"warning"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[3].alert | string | `"LowClusterMemory"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[3].annotations.description | string | `"Kubernetes cluster has {{ $value | humanize }} memory left. New deployments and cron jobs may fail to launch."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[3].annotations.summary | string | `"Kubernetes cluster has less than {{ 1000000000.0 | humanize }} memory available"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[3].expr | string | `"(cluster:capacity_memory_bytes:sum - cluster:guarantees_memory_bytes:sum) < 1000000000"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[3].labels.severity | string | `"warning"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[4].alert | string | `"NotReady"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[4].annotations.description | string | `"{{ $labels.node }} is not ready"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[4].annotations.summary | string | `"Status not Ready on Node {{ $labels.node }}"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[4].expr | string | `"kube_node_status_condition{condition=\"Ready\", status=\"true\"} != 1"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[3].rules[4].labels.severity | string | `"error"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[4].name | string | `"consumer_group_event_stream_lag"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[4].rules[0].alert | string | `"ConsumerGroupEventStreamLag"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[4].rules[0].annotations.description | string | `"The lag for consumer group {{ $labels.consumergroup }} is {{ humanize $value }}."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[4].rules[0].annotations.summary | string | `"Consumer Group lag for topic {{ $labels.topic }} is greater than 10,000"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[4].rules[0].expr | string | `"pipeline:event_stream:lag > 10000"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[4].rules[0].labels.severity | string | `"warning"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[5].name | string | `"low_disk_space"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[5].rules[0].alert | string | `"LowDiskSpace"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[5].rules[0].annotations.description | string | `"Low disk space for Server {{ $labels.persistentvolumeclaim }}, only {{ $value | printf \"%.2f\" }}% space is left."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[5].rules[0].annotations.summary | string | `"Server disk space is below 15%"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[5].rules[0].expr | string | `"(kubelet_volume_stats_available_bytes / kubelet_volume_stats_capacity_bytes * 100) < 15"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[5].rules[0].labels.severity | string | `"warning"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[6].name | string | `"rule_failure"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[6].rules[0].alert | string | `"RuleFailure"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[6].rules[0].annotations.description | string | `"One of the recording rules defined in Prometheus has failed to execute. This is often due to issues with info metrics, but may have other causes. Look at the rules section of the Prometheus interface for more info."` | | +| prometheus.serverFiles."alerting_rules.yml".groups[6].rules[0].annotations.summary | string | `"Prometheus has failed to precalculate one or more metrics"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[6].rules[0].expr | string | `"rate(prometheus_rule_evaluation_failures_total{rule_group=~\".*rules.*\"}[2m]) > 0"` | | +| prometheus.serverFiles."alerting_rules.yml".groups[6].rules[0].labels.severity | string | `"warning"` | | +| prometheus.serviceAccounts.server.create | bool | `false` | | +| prometheus.serviceAccounts.server.name | string | `"default"` | | +| prometheusIngress.annotations | object | `{}` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/monitoring/templates/clusterrole.yaml b/charts/monitoring/templates/clusterrole.yaml new file mode 100644 index 000000000..68ed98c4b --- /dev/null +++ b/charts/monitoring/templates/clusterrole.yaml @@ -0,0 +1,32 @@ +{{- if .Values.adminDeploy }} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: "{{ .Values.prometheus.server.useExistingClusterRoleName }}" +rules: + - apiGroups: + - "" + resources: + - pods + - services + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: prometheus-cluster-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: "{{ .Values.prometheus.server.useExistingClusterRoleName }}" +subjects: + - kind: ServiceAccount + name: "{{ .Values.prometheus.serviceAccounts.server.name }}" + namespace: "{{ index .Values.prometheus.server.namespaces 0 }}" + +{{- end }} diff --git a/charts/monitoring/values.yaml b/charts/monitoring/values.yaml new file mode 100644 index 000000000..3a0f9e94c --- /dev/null +++ b/charts/monitoring/values.yaml @@ -0,0 +1,399 @@ +# optional annotation overrides +global: + ingress: + annotations: {} + +# A place to define a healthcheck path or other grafana specific annotations +grafanaIngress: + annotations: {} + +# A place to define a healthcheck path or other prometheus specific +# annotations +prometheusIngress: + annotations: {} + +# Adds the CulsterRole needed for prometheus to the deploment. See clusterrole.yaml. Can disable this and have an admin create the resources in templates/clusterole.yaml +adminDeploy: true + +grafana: + fullnameOverride: monitoring-grafana + admin: + existingSecret: "manual-grafana-secrets" + userKey: grafana-admin-username + passwordKey: grafana-admin-password + datasources: + datasources.yaml: + apiVersion: 1 + datasources: + - name: Prometheus + type: prometheus + url: http://monitoring-prometheus-server + access: proxy + isDefault: true + rbac: + namespaced: true + serviceAccount: + create: false + name: default + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + service: + enabled: true + type: NodePort + sidecar: + dashboards: + enabled: true + + dashboardProviders: + dashboardproviders.yaml: + apiVersion: 1 + providers: + - name: "default" + orgId: 1 + folder: "" + type: file + disableDeletion: false + editable: true + options: + path: /var/lib/grafana/dashboards/default + - name: "kube" + orgId: 1 + folder: "" + type: file + disableDeletion: false + editable: true + options: + path: /var/lib/grafana/dashboards/kube + - name: "urbanos" + orgId: 1 + folder: "" + type: file + disableDeletion: false + editable: true + options: + path: /var/lib/grafana/dashboards/urbanos + dashboards: + kube: + kube-prometheus: + gnetId: 2 + revision: 2 + datasource: Prometheus + kube-namespace: + gnetId: 6876 + revision: 2 + datasource: Prometheus + kube-cluster: + gnetId: 6873 + revision: 2 + datasource: Prometheus + kube-pods: + gnetId: 6879 + revision: 1 + datasource: Prometheus + urbanos: + urban-os-pipeline-health: + gnetId: 14805 + revision: 1 + datasource: Prometheus + urban-os-overview: + gnetId: 14806 + revision: 1 + datasource: Prometheus + urban-os-kube-all-nodes: + gnetId: 14810 + revision: 1 + datasource: Prometheus + urban-os-kafka-exporter: + gnetId: 14809 + revision: 1 + datasource: Prometheus + urban-os-phoenix-api-metrics: + gnetId: 14811 + revision: 1 + datasource: Prometheus + # Additional deployment specific dashboards may be + # added under the "default" provider: + # default: + # custom-dashboard-name: + # gnetId: 14811 (dashboard id from https://grafana.com/grafana/dashboards) + # revision: 1 + # datasource: Prometheus + +prometheus: + serviceAccounts: + server: + create: false + name: default + + server: + namespaces: + - #enter namespace here to limit prometheus from searching all namespaces + useExistingClusterRoleName: prometheus-admin-cluster-role + fullnameOverride: monitoring-prometheus-server + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + resources: + limits: + memory: 1Gi + cpu: 500m + requests: + memory: 500Mi + cpu: 250m + + serverFiles: + # + # Below is the urban-os recommended prometheus.yml file (updated March 8th, 2023) + # It limits the scrape jobs to just the microservices, rather than getting more kubernetes metadata. + # By default, prometheus will locate far more endpoints. If that fits your needs / memory constraits, feel free to leave it. However, if getting OOM errors, consider using this config instead. + # + # BE SURE TO POPULATE REQUIRED NAMESPACE IF USING THIS CONFIG. + # + # prometheus.yml: + # scrape_configs: + # - job_name: prometheus + # static_configs: + # - targets: + # - localhost:9090 + + # - job_name: "kubernetes-service-endpoints" + # honor_labels: true + + # kubernetes_sd_configs: + # - role: endpoints + + # relabel_configs: + # - source_labels: + # [__meta_kubernetes_service_annotation_prometheus_io_scrape] + # action: keep + # regex: true + # - source_labels: + # [ + # __meta_kubernetes_service_annotation_prometheus_io_scrape_slow, + # ] + # action: drop + # regex: true + # - source_labels: + # [__meta_kubernetes_service_annotation_prometheus_io_scheme] + # action: replace + # target_label: __scheme__ + # regex: (https?) + # - source_labels: + # [__meta_kubernetes_service_annotation_prometheus_io_path] + # action: replace + # target_label: __metrics_path__ + # regex: (.+) + # - source_labels: + # [ + # __address__, + # __meta_kubernetes_service_annotation_prometheus_io_port, + # ] + # action: replace + # target_label: __address__ + # regex: (.+?)(?::\d+)?;(\d+) + # replacement: $1:$2 + # - action: labelmap + # regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + # replacement: __param_$1 + # - action: labelmap + # regex: __meta_kubernetes_service_label_(.+) + # - source_labels: [__meta_kubernetes_namespace] + # action: keep + # regex: dev #namespace + # target_label: namespace + # - source_labels: [__meta_kubernetes_service_name] + # action: replace + # target_label: service + # - source_labels: [__meta_kubernetes_pod_node_name] + # action: replace + # target_label: node + + # - job_name: "kubernetes-service-endpoints-slow" + # honor_labels: true + + # scrape_interval: 5m + # scrape_timeout: 30s + + # kubernetes_sd_configs: + # - role: endpoints + + # relabel_configs: + # - source_labels: + # [ + # __meta_kubernetes_service_annotation_prometheus_io_scrape_slow, + # ] + # action: keep + # regex: true + # - source_labels: + # [__meta_kubernetes_service_annotation_prometheus_io_scheme] + # action: replace + # target_label: __scheme__ + # regex: (https?) + # - source_labels: + # [__meta_kubernetes_service_annotation_prometheus_io_path] + # action: replace + # target_label: __metrics_path__ + # regex: (.+) + # - source_labels: + # [ + # __address__, + # __meta_kubernetes_service_annotation_prometheus_io_port, + # ] + # action: replace + # target_label: __address__ + # regex: (.+?)(?::\d+)?;(\d+) + # replacement: $1:$2 + # - action: labelmap + # regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + # replacement: __param_$1 + # - action: labelmap + # regex: __meta_kubernetes_service_label_(.+) + # - source_labels: [__meta_kubernetes_namespace] + # action: keep + # regex: dev #namespace + # target_label: namespace + # - source_labels: [__meta_kubernetes_service_name] + # action: replace + # target_label: service + # - source_labels: [__meta_kubernetes_pod_node_name] + # action: replace + # target_label: node + + # - job_name: "kubernetes-services" + # honor_labels: true + + # metrics_path: /probe + # params: + # module: [http_2xx] + + # kubernetes_sd_configs: + # - role: service + + # relabel_configs: + # - source_labels: + # [__meta_kubernetes_service_annotation_prometheus_io_probe] + # action: keep + # regex: true + # - source_labels: [__address__] + # target_label: __param_target + # - target_label: __address__ + # replacement: blackbox + # - source_labels: [__param_target] + # target_label: instance + # - action: labelmap + # regex: __meta_kubernetes_service_label_(.+) + # - source_labels: [__meta_kubernetes_namespace] + # action: keep + # regex: dev #namespace + # target_label: namespace + # - source_labels: [__meta_kubernetes_service_name] + # target_label: service + + alerting_rules.yml: + groups: + # Blackbox probe + - name: Sites + rules: + - alert: SiteDown + expr: probe_success == 0 + for: 2m + labels: + severity: error + annotations: + description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 2 minutes." + summary: "Instance {{ $labels.instance }} down" + - name: api_status + rules: + - alert: APIStatusDown + expr: probe_success == 0 + for: 1m + labels: + severity: error + annotations: + description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes." + summary: "Instance {{ $labels.instance }} down" + - name: api_response + rules: + - alert: APIResponseTime + expr: probe_duration_seconds > 3 + for: 1m + labels: + severity: error + annotations: + description: "{{ $labels.instance }} of job {{ $labels.job }} is taking more than 3 seconds." + summary: "Instance {{ $labels.instance }} is taking longer response time" + - name: K8S_Nodes + rules: + - alert: LowMemory + expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100) < 20 + for: 5m + labels: + severity: warning + annotations: + description: "{{ $labels.instance }} has {{ $value }} percent memory left." + summary: "Low Memory on Instance {{ $labels.instance }}" + - alert: LowDisk + expr: (node_filesystem_avail_bytes{device=~"/dev/.*"} / node_filesystem_size_bytes{device=~"/dev/.*"} * 100) < 15 + for: 5m + labels: + severity: warning + annotations: + description: "{{ $labels.instance }} has {{ $value }} percent disk left." + summary: "Low Disk on Instance {{ $labels.instance }}" + - alert: LowClusterCPU + expr: (cluster:capacity_cpu:sum - cluster:guarantees_cpu:sum) < 1 + labels: + severity: warning + annotations: + description: "Kubernetes cluster has {{ $value }} cores left. New deployments and cron jobs may fail to launch." + summary: "Kubernetes cluster low on CPU cores" + - alert: LowClusterMemory + expr: (cluster:capacity_memory_bytes:sum - cluster:guarantees_memory_bytes:sum) < 1000000000 #1GB + labels: + severity: warning + annotations: + description: "Kubernetes cluster has {{ $value | humanize }} memory left. New deployments and cron jobs may fail to launch." + summary: "Kubernetes cluster has less than {{ 1000000000.0 | humanize }} memory available" + - alert: NotReady + annotations: + description: "{{ $labels.node }} is not ready" + summary: "Status not Ready on Node {{ $labels.node }}" + expr: kube_node_status_condition{condition="Ready", status="true"} != 1 + labels: + severity: error + - name: consumer_group_event_stream_lag + rules: + - alert: ConsumerGroupEventStreamLag + expr: pipeline:event_stream:lag > 10000 + labels: + severity: warning + annotations: + summary: "Consumer Group lag for topic {{ $labels.topic }} is greater than 10,000" + description: "The lag for consumer group {{ $labels.consumergroup }} is {{ humanize $value }}." + - name: low_disk_space + rules: + - alert: LowDiskSpace + expr: (kubelet_volume_stats_available_bytes / kubelet_volume_stats_capacity_bytes * 100) < 15 + labels: + severity: warning + annotations: + summary: "Server disk space is below 15%" + description: 'Low disk space for Server {{ $labels.persistentvolumeclaim }}, only {{ $value | printf "%.2f" }}% space is left.' + - name: rule_failure + rules: + - alert: RuleFailure + expr: rate(prometheus_rule_evaluation_failures_total{rule_group=~".*rules.*"}[2m]) > 0 + labels: + severity: warning + annotations: + summary: "Prometheus has failed to precalculate one or more metrics" + description: "One of the recording rules defined in Prometheus has failed to execute. This is often due to issues with info metrics, but may have other causes. Look at the rules section of the Prometheus interface for more info." + + prometheus-pushgateway: + enabled: false + + kube-state-metrics: + enabled: false diff --git a/charts/performancetesting/.helmignore b/charts/performancetesting/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/charts/performancetesting/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/performancetesting/Chart.yaml b/charts/performancetesting/Chart.yaml new file mode 100644 index 000000000..5afd1441c --- /dev/null +++ b/charts/performancetesting/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: performancetesting +description: Cronjob for executing the system test image on cadence +type: application +version: 0.1.9 +icon: https://github.com/UrbanOS-Public diff --git a/charts/performancetesting/README.md b/charts/performancetesting/README.md new file mode 100644 index 000000000..977efe310 --- /dev/null +++ b/charts/performancetesting/README.md @@ -0,0 +1,26 @@ +# performancetesting + +![Version: 0.1.9](https://img.shields.io/badge/Version-0.1.9-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) + +Cronjob for executing the system test image on cadence + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| endpoints.ANDI_URL | string | `""` | | +| endpoints.API_KEY | string | `""` | | +| endpoints.DISCOVERY_URL | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"quay.io/urbanos/perfomancetesting"` | | +| image.tag | string | `"development"` | | +| namespace | string | `"dev"` | | +| resources.limits.cpu | string | `"500m"` | | +| resources.limits.memory | string | `"1Gi"` | | +| resources.requests.cpu | string | `"300m"` | | +| resources.requests.memory | string | `"512Mi"` | | +| restartPolicy | string | `"Never"` | | +| schedule | string | `"0 1 * * 1"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/performancetesting/templates/NOTES.txt b/charts/performancetesting/templates/NOTES.txt new file mode 100644 index 000000000..6f54f1872 --- /dev/null +++ b/charts/performancetesting/templates/NOTES.txt @@ -0,0 +1,8 @@ +Thank you for installing {{ .Chart.Name }}. + +Your release is named {{ .Release.Name }}. + +To learn more about the release, try: + + $ helm status {{ .Release.Name }} + $ helm get all {{ .Release.Name }} diff --git a/charts/performancetesting/templates/cron.yaml b/charts/performancetesting/templates/cron.yaml new file mode 100644 index 000000000..557fb5dec --- /dev/null +++ b/charts/performancetesting/templates/cron.yaml @@ -0,0 +1,41 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: {{ .Chart.Name }}-cron + namespace: {{ .Values.namespace }} + labels: + app.kubernetes.io/name: performancetest +spec: + schedule: "{{ .Values.schedule }}" + concurrencyPolicy: Forbid + suspend: false + jobTemplate: + spec: + template: + spec: + containers: + - name: {{ .Chart.Name }}-cron + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: + requests: + memory: {{ .Values.resources.requests.memory }} + cpu: {{ .Values.resources.requests.cpu }} + limits: + memory: {{ .Values.resources.limits.memory }} + cpu: {{ .Values.resources.limits.cpu }} + env: + - name: ANDI_URL + value: {{ .Values.endpoints.ANDI_URL }} + - name: DISCOVERY_URL + value: {{ .Values.endpoints.DISCOVERY_URL }} + - name: API_KEY + value: {{ .Values.endpoints.API_KEY }} + volumeMounts: + - mountPath: /app/results + name: pvc-cron + restartPolicy: {{ .Values.restartPolicy }} + volumes: + - name: pvc-cron + persistentVolumeClaim: + claimName: pvc-performancetesting \ No newline at end of file diff --git a/charts/performancetesting/templates/pvc.yaml b/charts/performancetesting/templates/pvc.yaml new file mode 100644 index 000000000..2bedcad20 --- /dev/null +++ b/charts/performancetesting/templates/pvc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-performancetesting + namespace: {{ .Values.namespace }} +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi \ No newline at end of file diff --git a/charts/performancetesting/values.yaml b/charts/performancetesting/values.yaml new file mode 100644 index 000000000..05a342701 --- /dev/null +++ b/charts/performancetesting/values.yaml @@ -0,0 +1,18 @@ +namespace: dev +schedule: "0 1 * * 1" #It runs At 1:00 every Monday +image: + repository: quay.io/urbanos/perfomancetesting + pullPolicy: Always #This parameter is set "Always" due to the updates of the image + tag: development +resources: #jar file is running with a flag -Xmx1024m + requests: + memory: 512Mi + cpu: 300m + limits: + memory: 1Gi + cpu: 500m +endpoints: + ANDI_URL: "" + DISCOVERY_URL: "" + API_KEY: "" +restartPolicy: Never \ No newline at end of file diff --git a/charts/persistence/Chart.lock b/charts/persistence/Chart.lock new file mode 100644 index 000000000..262e7fe38 --- /dev/null +++ b/charts/persistence/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: trino + repository: https://trinodb.github.io/charts/ + version: 0.8.0 +digest: sha256:74b61ec4059aa2d1b653557b8da29d25933706e2527ac9c4d394c1e9afbbbe3e +generated: "2023-05-19T15:07:51.3443903-04:00" diff --git a/charts/persistence/Chart.yaml b/charts/persistence/Chart.yaml new file mode 100644 index 000000000..74b1ba3eb --- /dev/null +++ b/charts/persistence/Chart.yaml @@ -0,0 +1,11 @@ +name: persistence +apiVersion: v2 +description: Data persistence for UrbanOS using Trino and the Hive Metastore +version: 1.0.10 +sources: + - https://github.com/trinodb/trino + - https://github.com/minio/operator +dependencies: + - name: trino + version: 0.8.0 + repository: https://trinodb.github.io/charts/ diff --git a/charts/persistence/README.md b/charts/persistence/README.md new file mode 100644 index 000000000..dbb763d44 --- /dev/null +++ b/charts/persistence/README.md @@ -0,0 +1,55 @@ +# persistence + +![Version: 1.0.10](https://img.shields.io/badge/Version-1.0.10-informational?style=flat-square) + +Data persistence for UrbanOS using Trino and the Hive Metastore + +## Source Code + +* +* + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| https://trinodb.github.io/charts/ | trino | 0.8.0 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| global.buckets.hiveStorageBucket | string | `"presto-hive-storage"` | | +| global.objectStore.accessKey | string | `"example-key"` | | +| global.objectStore.accessSecret | string | `"example-secret"` | | +| global.objectStore.hiveStoragePath | string | `"hive-s3"` | | +| global.objectStore.host | string | `"minio"` | | +| global.objectStore.port | int | `80` | | +| metastore.image.repository | string | `"quay.io/cloudservices/ubi-hive"` | | +| metastore.image.tag | string | `"3.1.2-metastore-009"` | | +| metastore.postgres.host | string | `"postgres"` | | +| metastore.postgres.name | string | `"metastore"` | | +| metastore.postgres.password | string | `"example"` | | +| metastore.postgres.passwordSecret | string | `nil` | | +| metastore.postgres.passwordSecretKey | string | `nil` | | +| metastore.postgres.port | int | `5432` | | +| metastore.postgres.user | string | `"padmin"` | | +| metastore.rbac.enabled | bool | `true` | | +| metastore.resources.limits.cpu | int | `1` | | +| metastore.resources.limits.memory | string | `"2Gi"` | | +| metastore.resources.requests.cpu | int | `1` | | +| metastore.resources.requests.memory | string | `"2Gi"` | | +| trino.additionalCatalogs.hive | string | `"connector.name=hive-hadoop2\nhive.metastore.uri=thrift://hive-metastore:8000\nhive.metastore.username=padmin\nhive.metastore-timeout=360m\nhive.allow-drop-table=true\nhive.allow-rename-table=true\nhive.allow-drop-column=true\nhive.allow-rename-column=true\nhive.allow-add-column=true\nhive.s3.aws-access-key=EXAMPLE\nhive.s3.aws-secret-key=EXAMPLE\nhive.s3.path-style-access=true\nhive.s3.endpoint=http://minio:80\nhive.s3.ssl.enabled=false\n"` | | +| trino.coordinator.resources.limits.cpu | int | `1` | | +| trino.coordinator.resources.limits.memory | string | `"2Gi"` | | +| trino.coordinator.resources.requests.cpu | int | `1` | | +| trino.coordinator.resources.requests.memory | string | `"2Gi"` | | +| trino.serviceAccount.create | bool | `true` | | +| trino.serviceAccount.name | string | `"trino"` | | +| trino.worker.resources.limits.cpu | int | `1` | | +| trino.worker.resources.limits.memory | string | `"2Gi"` | | +| trino.worker.resources.requests.cpu | int | `1` | | +| trino.worker.resources.requests.memory | string | `"2Gi"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/persistence/templates/metastore-deployment.yaml b/charts/persistence/templates/metastore-deployment.yaml new file mode 100644 index 000000000..9e75d8898 --- /dev/null +++ b/charts/persistence/templates/metastore-deployment.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hive-metastore + labels: + app: hive-metastore +spec: + replicas: 1 + selector: + matchLabels: + app: hive-metastore + template: + metadata: + labels: + app: hive-metastore + spec: + {{- if .Values.metastore.rbac.enabled }} + serviceAccountName: hive-metastore + {{- end }} + containers: + - name: hive-metastore + image: {{ .Values.metastore.image.repository }}:{{ .Values.metastore.image.tag }} + ports: + - containerPort: 8000 + env: + - name: HOSTNAME + value: hive-metastore + - name: HIVE_LOGLEVEL + value: DEBUG + {{- with .Values.global.objectStore }} + - name: S3_HOST + value: {{ .host }} + - name: S3_PORT + value: {{ quote .port }} + - name: S3_ACCESS_KEY + value: {{ .accessKey }} + - name: S3_SECRET + value: {{ .accessSecret }} + - name: S3_BUCKET_PATH + value: {{ .hiveStoragePath }} + {{- end }} + - name: S3_BUCKET_NAME + value: {{ .Values.global.buckets.hiveStorageBucket }} + {{- with .Values.metastore.postgres }} + - name: DATABASE_USER + value: {{ .user }} + - name: DATABASE_PASSWORD + {{- if .passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ .passwordSecret }} + key: {{ .passwordSecretKey }} + {{- else }} + value: {{ .password }} + {{- end }} + - name: POSTGRES_SQL_SERVICE_HOST + value: {{ .host }} + - name: POSTGRES_SQL_SERVICE_PORT + value: {{ quote .port }} + - name: DATABASE_NAME + value: {{ .name }} + {{- end }} + resources: +{{ toYaml .Values.metastore.resources | indent 10 }} \ No newline at end of file diff --git a/charts/persistence/templates/metastore-rbac.yaml b/charts/persistence/templates/metastore-rbac.yaml new file mode 100644 index 000000000..cbf6b3a66 --- /dev/null +++ b/charts/persistence/templates/metastore-rbac.yaml @@ -0,0 +1,19 @@ +{{- if .Values.metastore.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: hive-metastore +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: hive-metastore +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: anyuid +subjects: +- kind: ServiceAccount + name: hive-metastore + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/persistence/templates/metastore-service.yaml b/charts/persistence/templates/metastore-service.yaml new file mode 100644 index 000000000..05753142e --- /dev/null +++ b/charts/persistence/templates/metastore-service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: hive-metastore + labels: + component: metastore +spec: + type: ClusterIP + ports: + - port: 8000 + targetPort: 8000 + name: hive-metastore + selector: + app: hive-metastore \ No newline at end of file diff --git a/charts/persistence/values.yaml b/charts/persistence/values.yaml new file mode 100644 index 000000000..33f40af13 --- /dev/null +++ b/charts/persistence/values.yaml @@ -0,0 +1,73 @@ +global: + buckets: + hiveStorageBucket: presto-hive-storage + objectStore: + host: minio + port: 80 + accessKey: example-key + accessSecret: example-secret + # metastore will create this folder in the hiveStorageBucket. + # do not create it yourself or that will cause ownership conflict. + hiveStoragePath: hive-s3 + +metastore: + image: + repository: quay.io/cloudservices/ubi-hive + tag: 3.1.2-metastore-009 + rbac: + enabled: true + postgres: + user: padmin + password: example + passwordSecret: null + passwordSecretKey: null + host: postgres + port: 5432 + name: metastore + resources: + limits: + memory: 2Gi + cpu: 1 + requests: + memory: 2Gi + cpu: 1 + +trino: + serviceAccount: + create: true + name: trino + + coordinator: + resources: + limits: + memory: 2Gi + cpu: 1 + requests: + memory: 2Gi + cpu: 1 + + worker: + resources: + limits: + memory: 2Gi + cpu: 1 + requests: + memory: 2Gi + cpu: 1 + + additionalCatalogs: + hive: | + connector.name=hive-hadoop2 + hive.metastore.uri=thrift://hive-metastore:8000 + hive.metastore.username=padmin + hive.metastore-timeout=360m + hive.allow-drop-table=true + hive.allow-rename-table=true + hive.allow-drop-column=true + hive.allow-rename-column=true + hive.allow-add-column=true + hive.s3.aws-access-key=EXAMPLE + hive.s3.aws-secret-key=EXAMPLE + hive.s3.path-style-access=true + hive.s3.endpoint=http://minio:80 + hive.s3.ssl.enabled=false diff --git a/charts/raptor/.helmignore b/charts/raptor/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/raptor/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/raptor/Chart.yaml b/charts/raptor/Chart.yaml new file mode 100644 index 000000000..264b8beb9 --- /dev/null +++ b/charts/raptor/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +appVersion: "1.0" +description: Authenticate and authorize API users +name: raptor +version: 1.1.12 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/raptor diff --git a/charts/raptor/README.md b/charts/raptor/README.md new file mode 100644 index 000000000..83a435fd5 --- /dev/null +++ b/charts/raptor/README.md @@ -0,0 +1,41 @@ +# raptor + +![Version: 1.1.12](https://img.shields.io/badge/Version-1.1.12-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Authenticate and authorize API users + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| auth.auth0_client_secret | string | `""` | | +| auth.raptor_auth0_client_id | string | `""` | | +| global.auth.auth0_domain | string | `""` | | +| global.kafka.brokers | string | `"pipeline-kafka-bootstrap:9092"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/raptor"` | | +| image.tag | string | `"development"` | | +| monitoring.targetPort | int | `9002` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `1` | | +| resources.limits.cpu | string | `"1"` | | +| resources.limits.memory | string | `"512Mi"` | | +| resources.requests.cpu | string | `"1"` | | +| resources.requests.memory | string | `"512Mi"` | | +| service.port | int | `80` | | +| service.targetPort | int | `4000` | | +| service.type | string | `"NodePort"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/raptor/templates/_helpers.tpl b/charts/raptor/templates/_helpers.tpl new file mode 100644 index 000000000..ef6051778 --- /dev/null +++ b/charts/raptor/templates/_helpers.tpl @@ -0,0 +1,39 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default service name for the Kafka Bootstrap endpoint. +*/}} +{{- define "kafka.brokerservice" -}} +{{- printf "%s-%s.%s:%s" .Release.Name "kafka-bootstrap" .Release.Namespace "9092" | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/raptor/templates/deployment.yaml b/charts/raptor/templates/deployment.yaml new file mode 100644 index 000000000..d55027685 --- /dev/null +++ b/charts/raptor/templates/deployment.yaml @@ -0,0 +1,86 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + app: {{ .Chart.Name }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ .Chart.Name }} + template: + metadata: + labels: + app: {{ .Chart.Name }} + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: {{ .Chart.Name }} + {{- end }} + imagePullSecrets: + - name: regcred + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + livenessProbe: + httpGet: + path: /healthcheck + port: 4000 + scheme: HTTP + initialDelaySeconds: 100 + timeoutSeconds: 5 + periodSeconds: 100 + successThreshold: 1 + failureThreshold: 3 + resources: +{{ toYaml .Values.resources | indent 10 }} + env: + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers | default (include "kafka.brokerservice" .) }} + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} + - name: RUN_IN_KUBERNETES + value: "true" + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: AUTH0_DOMAIN + value: {{ quote .Values.global.auth.auth0_domain }} + - name: RAPTOR_AUTH0_CLIENT_ID + value: {{ quote .Values.auth.raptor_auth0_client_id }} + - name: AUTH0_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-raptor-auth0-client-secret + key: auth0_client_secret diff --git a/charts/raptor/templates/rbac.yaml b/charts/raptor/templates/rbac.yaml new file mode 100644 index 000000000..14b75a88f --- /dev/null +++ b/charts/raptor/templates/rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Chart.Name }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ .Chart.Name }} +subjects: +- kind: ServiceAccount + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/raptor/templates/secrets.yaml b/charts/raptor/templates/secrets.yaml new file mode 100644 index 000000000..19cb8726d --- /dev/null +++ b/charts/raptor/templates/secrets.yaml @@ -0,0 +1,9 @@ +{{- if .Values.auth.auth0_client_secret }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-raptor-auth0-client-secret +type: Opaque +stringData: + auth0_client_secret: {{ quote .Values.auth.auth0_client_secret }} +{{- end }} \ No newline at end of file diff --git a/charts/raptor/templates/service.yaml b/charts/raptor/templates/service.yaml new file mode 100644 index 000000000..a35ff87cc --- /dev/null +++ b/charts/raptor/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ .Chart.Name }} + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app: {{ .Chart.Name }} + ports: + - protocol: TCP + port: {{ .Values.service.port }} + targetPort: {{ .Values.service.targetPort }} + type: {{ .Values.service.type }} diff --git a/charts/raptor/values.yaml b/charts/raptor/values.yaml new file mode 100644 index 000000000..bb9506763 --- /dev/null +++ b/charts/raptor/values.yaml @@ -0,0 +1,46 @@ +global: + kafka: + brokers: pipeline-kafka-bootstrap:9092 + redis: + host: redis.external-services + port: 6379 + password: "" + passwordSecret: "" + sslEnabled: false + auth: + auth0_domain: "" + +image: + repository: smartcitiesdata/raptor + tag: development + pullPolicy: Always + majorPin: "" + minorPin: "" + +replicaCount: 1 + +auth: + raptor_auth0_client_id: "" + # if left empty, no secret will be created + # and {{ .Release.Name }}-andi-auth0-client-secret will be referenced + auth0_client_secret: "" + +resources: + limits: + memory: 512Mi + cpu: "1" + requests: + memory: 512Mi + cpu: "1" + +monitoring: + targetPort: 9002 + +service: + type: NodePort + port: 80 + targetPort: 4000 + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true diff --git a/charts/reaper/.helmignore b/charts/reaper/.helmignore new file mode 100644 index 000000000..f239b2a89 --- /dev/null +++ b/charts/reaper/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +# Terraform stuff +terraform.state.d/ +.terraform/ \ No newline at end of file diff --git a/charts/reaper/Chart.yaml b/charts/reaper/Chart.yaml new file mode 100644 index 000000000..f6d038057 --- /dev/null +++ b/charts/reaper/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +appVersion: "1.0" +description: Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic +name: reaper +version: 1.2.9 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/reaper diff --git a/charts/reaper/README.md b/charts/reaper/README.md new file mode 100644 index 000000000..0ec27122f --- /dev/null +++ b/charts/reaper/README.md @@ -0,0 +1,49 @@ +# reaper + +![Version: 1.2.9](https://img.shields.io/badge/Version-1.2.9-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Elixir producer-consumer. Retrieves streamed data, and loads it onto a Kafka topic + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| aws.accessKeyId | string | `""` | | +| aws.accessKeySecret | string | `""` | | +| dlqTopic | string | `"streaming-dead-letters"` | | +| global.buckets.hiveStorageBucket | string | `"example-hive-bucket"` | | +| global.buckets.hostedFileBucket | string | `"example-file-bucket"` | | +| global.buckets.region | string | `"us-west-2"` | | +| global.kafka.brokers | string | `"streaming-service-kafka-bootstrap:9092"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| global.vault.endpoint | string | `"urban-os-vault:8200"` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/reaper"` | | +| image.tag | string | `"1.0.1"` | | +| metadata.labels | string | `nil` | | +| monitoring.targetPort | int | `9002` | | +| outputTopicPrefix | string | `"raw"` | | +| profiling_enabled | bool | `false` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `1` | | +| resources.limits.cpu | string | `"300m"` | | +| resources.limits.ephemeral-storage | string | `"15G"` | | +| resources.limits.memory | string | `"1Gi"` | | +| resources.requests.cpu | string | `"300m"` | | +| resources.requests.ephemeral-storage | string | `"15G"` | | +| resources.requests.memory | string | `"1Gi"` | | +| service.port | int | `9092` | | +| service.type | string | `"ClusterIP"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/reaper/templates/_helpers.tpl b/charts/reaper/templates/_helpers.tpl new file mode 100644 index 000000000..f2103aed8 --- /dev/null +++ b/charts/reaper/templates/_helpers.tpl @@ -0,0 +1,39 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "reaper.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "reaper.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "reaper.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default service name for the Kafka Bootstrap endpoint. +*/}} +{{- define "kafka.brokerservice" -}} +{{- printf "%s-%s.%s:%s" .Release.Name "kafka-bootstrap" .Release.Namespace "9092" | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/reaper/templates/deployment.yaml b/charts/reaper/templates/deployment.yaml new file mode 100644 index 000000000..d60fc06da --- /dev/null +++ b/charts/reaper/templates/deployment.yaml @@ -0,0 +1,102 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + helm.sh/chart: {{ include "reaper.chart" . }} + app.kubernetes.io/name: {{ include "reaper.name" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "reaper.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "reaper.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: {{ .Chart.Name }} + {{- end }} + imagePullSecrets: + - name: regcred + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: +{{ toYaml .Values.resources | indent 10 }} + ports: + - containerPort: 9001 + - containerPort: 4369 + volumeMounts: + - mountPath: /downloads + name: download-dir + env: + - name: OUTPUT_TOPIC_PREFIX + value: {{ .Values.outputTopicPrefix }} + - name: DLQ_TOPIC + value: {{ .Values.dlqTopic }} + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers | default (include "kafka.brokerservice" .) }} + - name: RUN_IN_KUBERNETES + value: "true" + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} + - name: SECRETS_ENDPOINT + value: {{ .Values.global.vault.endpoint }} + - name: HOSTED_FILE_BUCKET + value: {{ .Values.global.buckets.hostedFileBucket }} + - name: AWS_REGION + value: {{ .Values.global.buckets.region }} + - name: PROFILING_ENABLED + value: {{ .Values.profiling_enabled | quote }} + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-reaper-aws-credentials + key: aws_access_key_id + - name: AWS_ACCESS_KEY_SECRET + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-reaper-aws-credentials + key: aws_access_key_secret + volumes: + - name: download-dir + emptyDir: {} diff --git a/charts/reaper/templates/rbac.yaml b/charts/reaper/templates/rbac.yaml new file mode 100644 index 000000000..21b2080fa --- /dev/null +++ b/charts/reaper/templates/rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Chart.Name }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ .Chart.Name }} +subjects: +- kind: ServiceAccount + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} +{{ end }} \ No newline at end of file diff --git a/charts/reaper/templates/secrets.yaml b/charts/reaper/templates/secrets.yaml new file mode 100644 index 000000000..248837bca --- /dev/null +++ b/charts/reaper/templates/secrets.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-reaper-aws-credentials +type: Opaque +stringData: + aws_access_key_secret: {{ quote .Values.aws.accessKeySecret }} + aws_access_key_id: {{ quote .Values.aws.accessKeyId }} \ No newline at end of file diff --git a/charts/reaper/templates/service.yaml b/charts/reaper/templates/service.yaml new file mode 100644 index 000000000..b2e44f15a --- /dev/null +++ b/charts/reaper/templates/service.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ include "reaper.name" . }} + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app.kubernetes.io/name: {{ include "reaper.name" . }} + ports: + - name: metrics + protocol: TCP + port: {{ .Values.service.port }} + targetPort: reaper + - name: erlang-vm + protocol: TCP + port: 9001 + targetPort: 9001 + - name: epmd + protocol: TCP + port: 4369 + targetPort: 4369 + type: {{ .Values.service.type }} diff --git a/charts/reaper/values.yaml b/charts/reaper/values.yaml new file mode 100644 index 000000000..dca2e9eff --- /dev/null +++ b/charts/reaper/values.yaml @@ -0,0 +1,55 @@ +global: + buckets: + region: us-west-2 + hostedFileBucket: "example-file-bucket" + hiveStorageBucket: "example-hive-bucket" + kafka: + brokers: streaming-service-kafka-bootstrap:9092 + redis: + host: redis.external-services + port: 6379 + password: "" + passwordSecret: "" + sslEnabled: false + vault: + # Should match the format {Release Name}-vault:8200 + endpoint: "urban-os-vault:8200" + +outputTopicPrefix: raw +dlqTopic: streaming-dead-letters +replicaCount: 1 +metadata: + labels: +image: + repository: smartcitiesdata/reaper + tag: 1.0.1 + pullPolicy: Always + majorPin: "" + minorPin: "" + +service: + port: 9092 + type: ClusterIP + +profiling_enabled: false + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true + +resources: + limits: + memory: 1Gi + cpu: 300m + ephemeral-storage: 15G + requests: + memory: 1Gi + cpu: 300m + ephemeral-storage: 15G + +monitoring: + targetPort: 9002 + +aws: + accessKeyId: "" + accessKeySecret: "" diff --git a/charts/sauron/Chart.yaml b/charts/sauron/Chart.yaml new file mode 100644 index 000000000..43810a430 --- /dev/null +++ b/charts/sauron/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +appVersion: "1.0" +description: Cron jobs that watch remote deployments and images, issuing cluster commands as needed to update. +name: sauron +version: 0.0.18 diff --git a/charts/sauron/Dockerfile b/charts/sauron/Dockerfile new file mode 100644 index 000000000..54e3f1ca3 --- /dev/null +++ b/charts/sauron/Dockerfile @@ -0,0 +1,33 @@ +FROM ubuntu:latest + +ENV PATH="${PATH}:~/.local/bin" + +#Install curl and jq +RUN apt-get update && apt-get install -y \ + curl \ + wget \ + jq \ + git \ + vim + +#Install kubectl +RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \ + chmod +x kubectl && \ + mv ./kubectl /usr/local/bin && \ + echo $(kubectl version --client) + +#install npm and newman +RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - &&\ + apt-get install -y nodejs + +RUN npm install -g newman +ADD "./newman" /usr/local/bin + +#Install Helm +RUN wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz && \ + tar xvf helm-*-linux-amd64.tar.gz && \ + mv linux-amd64/helm /usr/local/bin + +#Install Kustomize +RUN curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash && \ + mv ./kustomize /usr/local/bin diff --git a/charts/sauron/README.md b/charts/sauron/README.md new file mode 100644 index 000000000..717a4aef7 --- /dev/null +++ b/charts/sauron/README.md @@ -0,0 +1,36 @@ +# sauron + +![Version: 0.0.18](https://img.shields.io/badge/Version-0.0.18-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Cron jobs that watch remote deployments and images, issuing cluster commands as needed to update. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| config.cron | string | `"*/10 * * * *"` | | +| config.image | string | `"smartcitiesdata/sauron:0.0.8"` | | +| config.managedReleaseName | string | `"urban-os"` | | +| global.objectStore.accessKey | list | `[]` | | +| global.objectStore.accessSecret | list | `[]` | | +| remoteDeployment.gitHttpsCloneUrl | string | `"https://github.com//.git"` | | +| remoteDeployment.postRendererFromRepoRoot | string | `""` | | +| remoteDeployment.proxyAccountPAT | string | `""` | | +| remoteDeployment.secrets.andi.auth.auth0_client_secret | string | `""` | | +| remoteDeployment.secrets.andi.postgres.password | string | `""` | | +| remoteDeployment.secrets.discovery-api.postgres.password | string | `""` | | +| remoteDeployment.secrets.discovery-api.secrets.discoveryApiPresignKey | string | `""` | | +| remoteDeployment.secrets.discovery-api.secrets.guardianSecretKey | string | `""` | | +| remoteDeployment.secrets.minio.base64UserAccessKey | string | `""` | | +| remoteDeployment.secrets.minio.base64UserSecretKey | string | `""` | | +| remoteDeployment.secrets.minio.endpoint | string | `"http://minio:80"` | | +| remoteDeployment.secrets.minio.rootPassword | string | `""` | | +| remoteDeployment.secrets.minio.rootUserName | string | `""` | | +| remoteDeployment.secrets.persistence.metastore.postgres.password | string | `""` | | +| remoteDeployment.secrets.persistence.trino.enabled | bool | `true` | | +| remoteDeployment.secrets.raptor.auth.auth0_client_secret | string | `""` | | +| remoteDeployment.targetBranch | string | `"main"` | | +| remoteDeployment.valuesFileFromRepoRoot | string | `"./envs/dev/values.yaml"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/sauron/newman/README.md b/charts/sauron/newman/README.md new file mode 100644 index 000000000..03ee5cd08 --- /dev/null +++ b/charts/sauron/newman/README.md @@ -0,0 +1,64 @@ +# Newman Tests +## What is this + +These tests work via newman, a postman cli. It makes a series of calls to our services and runs tests against the calls. + +Newman Tests run against production and goes from Andi Org creation through Discovery API retrieval. The number of failures goes to the terminal, and test results are saved to a file called "results" so the failures can be examined + +## To Import to Postman + +- Download and Install Postman - https://www.postman.com/downloads/ +- Import the file `e2e_test.postman_collection.json` (done with `Command + O` on Mac) +- Manipulate calls, see tests by clicking on each call. +- Check the pre-script for each call, they all add delays when running the full suite to allow time for the calls to make it through the system +- Also check the environment variables for the entire collection to change where the suite is run against (i.e. against local, or a new environment) + +## To Run the suite +- Enter Sauron (in environment or locally) + - Find the name of a previously run sauron cron pod - i.e: +```shell +oc debug sauron-cron-27900780--1-847ds +``` +- Enter VPN (if local) +- navigate to /usr/local/bin +- Specify your postman environment vars and your output file: +```shell +newman run e2e_test.postman_collection.json --insecure --delay-request 2000 \ + --reporters json --reporter-json-export {path_to_output_file}.json --env-var "andi_url={andi_url} discovery_url={discovery_url} api_key={api_key}" +``` + +- Once completed, extract any errors from the results file: +```shell +./extract_errors.sh {path_to_results_file}.json +``` + + +## What all is done + +Makes the following calls and asserts against them +- Org Create +- Dataset Create +- Ingestion Create (hits https://raw.githubusercontent.com/bmitchinson/json-endpoint/main/meters_ingestionA.json) +- Ingestion Publish +- Discovery API Get (checks results from that ingestion) +- Ingestion Delete +- Dataset Delete + +Other features of this suite - +- Waiting appropriate time per call +- Tests against each call checking the status and returned value +- Randomly assigning guids to Ingestion and Dataset to avoid conflict +- Runs in Sauron in order to be within the Cluster +- Easily able to be ported to locally by importing to postman + +## Possible Additions +- xml data +- csv data +- monitoring topics throughout the process to see where failures happen +- org cleanup (no way to delete orgs currently exists) +- alerts on failure +- adding it to the sauron cron +- adding to other environments, currently hardcoded to values for a single environment +- clearer failure logs (i.e. not having to enter the results file and finding them) +- speed up runtime by having kafka run batches more frequently (currently takes about 3 minutes, could easily be cut down to a single minute if kafka was snappier) + diff --git a/charts/sauron/newman/e2e_test.postman_collection.json b/charts/sauron/newman/e2e_test.postman_collection.json new file mode 100644 index 000000000..5fe17879d --- /dev/null +++ b/charts/sauron/newman/e2e_test.postman_collection.json @@ -0,0 +1,429 @@ +{ + "info": { + "_postman_id": "dc4e428d-baea-4c40-85bc-f10fb7dd3257", + "name": "e2e_test", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Organization - Create", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "// no-op since an org could have been created before this test run.", + "// This is because, at time of writing, there is not a way to delete orgs. So this call either makes the org or 500s", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "pm.collectionVariables.unset(\"ingestion_id\")", + "pm.collectionVariables.unset(\"dataset_id\")" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"dataJsonUrl\": \"\",\n \"description\": \"An organization created to test from ANDI to Discovery\",\n \"dn\": null,\n \"homepage\": \"\",\n \"id\": \"8189cca2-7288-11ed-a1eb-0242ac120003\",\n \"logoUrl\": \"\",\n \"orgName\": \"urbanos_end_to_end_testing_org\",\n \"orgTitle\": \"UrbanOS End To End Testing Org\",\n \"version\": \"0.1\"\n}" + }, + "url": { + "raw": "{{andi_url}}/api/v1/organization", + "host": [ + "{{andi_url}}" + ], + "path": [ + "api", + "v1", + "organization" + ] + } + }, + "response": [] + }, + { + "name": "Dataset - Create", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Dataset create returns 201\", function() {", + " response_body = pm.response.json()", + " pm.expect(pm.response, `Did not have status 201. Status: ${pm.response.status}, Body: ${JSON.stringify(response_body)}`).to.have.status(201);", + " pm.expect(response_body[\"id\"]).to.exist;", + " pm.collectionVariables.set(\"dataset_id\", response_body[\"id\"])", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(() => {}, 2000)" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": " {\n \"business\": {\n \"authorEmail\": null,\n \"authorName\": null,\n \"benefitRating\": 1.0,\n \"categories\": null,\n \"conformsToUri\": null,\n \"contactEmail\": \"test@urbanos.test\",\n \"contactName\": \"Test Name\",\n \"dataTitle\": \"End-to-End Testing Dataset\",\n \"describedByMimeType\": null,\n \"describedByUrl\": null,\n \"description\": \"A dataset created by End to End testing\",\n \"homepage\": \"\",\n \"issuedDate\": \"2020-10-01T02:01:39.213382Z\",\n \"keywords\": [],\n \"language\": null,\n \"license\": \"https://creativecommons.org/licenses/by/4.0/\",\n \"modifiedDate\": \"2021-08-25T10:01:08.540140Z\",\n \"orgTitle\": \"UrbanOS End To End Testing Org\",\n \"parentDataset\": null,\n \"publishFrequency\": \"Monthly\",\n \"referenceUrls\": null,\n \"rights\": \"\",\n \"riskRating\": 0.0,\n \"spatial\": null,\n \"temporal\": null\n },\n \"technical\": {\n \"allow_duplicates\": true,\n \"authBody\": {},\n \"authBodyEncodeMethod\": null,\n \"authHeaders\": {},\n \"authUrl\": null,\n \"cadence\": \"never\",\n \"credentials\": false,\n \"dataName\": \"endtoenddata\",\n \"orgId\": \"8189cca2-7288-11ed-a1eb-0242ac120003\",\n \"orgName\": \"urbanos_end_to_end_testing_org\",\n \"private\": false,\n \"protocol\": null,\n \"schema\": [\n {\n \"name\": \"status\",\n \"type\": \"string\"\n }\n ],\n \"sourceHeaders\": {},\n \"sourceQueryParams\": {},\n \"sourceType\": \"ingest\",\n \"sourceUrl\": \"\",\n \"systemName\": \"\"\n },\n \"version\": \"0.6\"\n }", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{andi_url}}/api/v1/dataset", + "host": [ + "{{andi_url}}" + ], + "path": [ + "api", + "v1", + "dataset" + ] + } + }, + "response": [] + }, + { + "name": "Ingestion - Create", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Ingestion create returns 201\", function() {", + " response_body = pm.response.json()", + " pm.expect(pm.response, `Did not have status 201. Status: ${pm.response.status}, Body: ${JSON.stringify(response_body)}`).to.have.status(201);", + "", + " pm.expect(response_body[\"id\"]).to.exist;", + " pm.collectionVariables.set(\"ingestion_id\", response_body[\"id\"])", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(() => {}, 2000)", + "", + "pm.expect(pm.collectionVariables.get(\"dataset_id\"), \"Could not obtain dataset_id from collection variables\").to.exist;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"End To End Testing Ingestion\",\n \"allow_duplicates\": true,\n \"cadence\": \"*/15 * * * * *\",\n \"extractSteps\": [\n {\n \"assigns\": {},\n \"context\": {\n \"action\": \"GET\",\n \"body\": {},\n \"headers\": {},\n \"protocol\": null,\n \"queryParams\": {},\n \"url\": \"https://raw.githubusercontent.com/bmitchinson/json-endpoint/main/meters_ingestionA.json\"\n },\n \"sequence\": 2,\n \"type\": \"http\"\n }\n ],\n \"schema\": [\n {\n \"biased\": \"No\",\n \"demographic\": \"None\",\n \"description\": \"\",\n \"masked\": \"N/A\",\n \"name\": \"status\",\n \"pii\": \"None\",\n \"sequence\": 5,\n \"subSchema\": [],\n \"type\": \"string\"\n }\n ],\n \"sourceFormat\": \"application/json\",\n \"targetDataset\": \"{{dataset_id}}\",\n \"topLevelSelector\": null,\n \"transformations\": []\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{andi_url}}/api/v1/ingestion", + "host": [ + "{{andi_url}}" + ], + "path": [ + "api", + "v1", + "ingestion" + ] + } + }, + "response": [] + }, + { + "name": "Ingestion - Publish", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Ingestion Publish returns 200\", function() {", + " pm.expect(pm.response, `Did not have status 200. Status: ${pm.response.status}, Body: ${JSON.stringify(response_body)}`).to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(() => {}, 2000)", + "", + "pm.expect(pm.collectionVariables.get(\"ingestion_id\"), \"Ingestion ID is not set.\").to.exist;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{andi_url}}/api/v1/ingestion/publish?id={{ingestion_id}}", + "host": [ + "{{andi_url}}" + ], + "path": [ + "api", + "v1", + "ingestion", + "publish" + ], + "query": [ + { + "key": "id", + "value": "{{ingestion_id}}" + } + ] + } + }, + "response": [] + }, + { + "name": "Discovery API Result", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Fetching Discovery API data returns 200\", function() {", + " pm.expect(pm.response, `Did not have status 200. Response: ${JSON.stringify(pm.response)}`).to.have.status(200);", + "});", + "", + "pm.test(\"Discovery API returns info for a parking meter\", function() {", + " pm.expect(pm.response.json()[0].status).to.exist;", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(() => {}, 150000)", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "api_key", + "value": "{{api_key}}", + "type": "default" + } + ], + "url": { + "raw": "{{discovery_url}}/api/v1/organization/urbanos_end_to_end_testing_org/dataset/endtoenddata/query?limit=1&_format=json", + "host": [ + "{{discovery_url}}" + ], + "path": [ + "api", + "v1", + "organization", + "urbanos_end_to_end_testing_org", + "dataset", + "endtoenddata", + "query" + ], + "query": [ + { + "key": "limit", + "value": "1" + }, + { + "key": "_format", + "value": "json" + } + ] + } + }, + "response": [] + }, + { + "name": "Ingestion - Delete", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Ingestion Delete returns 200\", function() {", + " response_body = pm.response.json()", + " pm.expect(pm.response, `Did not have status 200. Status: ${pm.response.status}, Body: ${JSON.stringify(response_body)}`).to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(() => {}, 1000)", + "", + "pm.expect(pm.collectionVariables.get(\"ingestion_id\"), \"Ingestion ID is not set.\").to.exist;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{andi_url}}/api/v1/ingestion/delete?id={{ingestion_id}}", + "host": [ + "{{andi_url}}" + ], + "path": [ + "api", + "v1", + "ingestion", + "delete" + ], + "query": [ + { + "key": "id", + "value": "{{ingestion_id}}" + } + ] + } + }, + "response": [] + }, + { + "name": "Dataset - Delete", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Dataset Delete returns 200\", function() {", + " response_body = pm.response.json()", + " pm.expect(pm.response, `Did not have status 200. Status: ${pm.response.status}, Body: ${JSON.stringify(response_body)}`).to.have.status(200);", + "});", + "", + "pm.collectionVariables.unset(\"ingestion_id\")", + "pm.collectionVariables.unset(\"dataset_id\")" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(() => {}, 1000)", + "", + "pm.expect(pm.collectionVariables.get(\"dataset_id\"), \"Could not obtain dataset_id from collection variables\").to.exist;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{andi_url}}/api/v1/dataset/delete?id={{dataset_id}}", + "host": [ + "{{andi_url}}" + ], + "path": [ + "api", + "v1", + "dataset", + "delete" + ], + "query": [ + { + "key": "id", + "value": "{{dataset_id}}" + } + ] + } + }, + "response": [] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "exec": [ + "const uuid = require('uuid')", + "", + "if(!pm.collectionVariables.has(\"ingestion_id\")) {", + " pm.collectionVariables.set(\"ingestion_id\", uuid.v4())", + "}", + "", + "if(!pm.collectionVariables.has(\"dataset_id\")) {", + " pm.collectionVariables.set(\"dataset_id\", uuid.v4())", + "}" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "variable": [ + { + "key": "ingestion_id", + "value": "" + }, + { + "key": "dataset_id", + "value": "" + } + ] +} \ No newline at end of file diff --git a/charts/sauron/newman/example.postman_environment.json b/charts/sauron/newman/example.postman_environment.json new file mode 100644 index 000000000..08c86bb6b --- /dev/null +++ b/charts/sauron/newman/example.postman_environment.json @@ -0,0 +1,27 @@ +{ + "id": "f777e00a-759c-4f31-beae-c9e97d300807", + "name": "Local", + "values": [ + { + "key": "andi_url", + "value": "http://localhost:4000", + "type": "default", + "enabled": true + }, + { + "key": "discovery_url", + "value": "http://localhost:4001", + "type": "default", + "enabled": true + }, + { + "key": "api_key", + "value": "", + "type": "default", + "enabled": true + } + ], + "_postman_variable_scope": "environment", + "_postman_exported_at": "2023-01-27T15:46:50.017Z", + "_postman_exported_using": "Postman/9.31.0" +} \ No newline at end of file diff --git a/charts/sauron/newman/extract_errors.sh b/charts/sauron/newman/extract_errors.sh new file mode 100755 index 000000000..d801dc3a3 --- /dev/null +++ b/charts/sauron/newman/extract_errors.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +RESULTS_FILE=$1 +if [[ $RESULTS_FILE == "" ]]; then + echo "Empty results file location. Please provide the location of a results file when running this script. EX: ./extract_errors.sh /sauron/results_123.json" + exit 1 +fi +ERROR_OUTPUT_FILE=${RESULTS_FILE}_errors.json + +TOTAL_TESTS=$(jq .run.stats.assertions.total "$RESULTS_FILE") +echo "Total E2E TEST: $TOTAL_TESTS" +FAILURES=$(jq .run.stats.assertions.failed "$RESULTS_FILE") +if [[ $FAILURES -gt 0 ]]; then + cat "$RESULTS_FILE" | jq '.run.executions | map(.assertions) | flatten(2) | map(select(.error != null))' > "$ERROR_OUTPUT_FILE" + + cat "$ERROR_OUTPUT_FILE" + echo "E2E TEST FAILURES: $FAILURES" +else + echo "All E2E Tests Passed!" +fi + + diff --git a/charts/sauron/templates/cron.yaml b/charts/sauron/templates/cron.yaml new file mode 100644 index 000000000..45c414992 --- /dev/null +++ b/charts/sauron/templates/cron.yaml @@ -0,0 +1,122 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: {{ .Chart.Name }}-cron +spec: + schedule: "{{ .Values.config.cron }}" + concurrencyPolicy: Forbid + jobTemplate: + spec: + backoffLimit: 0 + template: + spec: + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + restartPolicy: Never + serviceAccount: updater-cron + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.config.image }} + imagePullPolicy: Always + resources: + limits: + memory: 1Gi + cpu: 500m + requests: + memory: 512Mi + cpu: 300m + env: + - name: GIT_HTTPS_CLONE_URL + value: {{ .Values.remoteDeployment.gitHttpsCloneUrl }} + - name: TARGET_BRANCH + value: {{ .Values.remoteDeployment.targetBranch }} + - name: RELEASE_NAME + value: {{ .Release.Name }} + - name: NAMESPACE + value: {{ .Release.Namespace }} + - name: VALUES_FILE_FROM_REPO_ROOT + value: {{ .Values.remoteDeployment.valuesFileFromRepoRoot }} + - name: POST_RENDERER_FROM_REPO_ROOT + value: {{ .Values.remoteDeployment.postRendererFromRepoRoot }} + - name: MANAGED_RELEASE_NAME + value: {{ .Values.config.managedReleaseName }} + {{ if .Values.global.objectStore.accessKey -}} + - name: GLOBAL_OBJECTSTORE_ACCESSKEY + value: "{{ .Values.global.objectStore.accessKey }}" + {{ end -}} + {{- if .Values.global.objectStore.accessSecret -}} + - name: GLOBAL_OBJECTSTORE_ACCESSSECRET + value: "{{ .Values.global.objectStore.accessSecret }}" + {{ end -}} + {{- if .Values.remoteDeployment.secrets.raptor.auth.auth0_client_secret -}} + - name: RAPTOR_AUTH0_CLIENT_SECRET + value: "{{ .Values.remoteDeployment.secrets.raptor.auth.auth0_client_secret }}" + {{ end -}} + {{- if .Values.remoteDeployment.secrets.andi.postgres.password -}} + - name: ANDI_POSTGRES_PASSWORD + value: "{{ .Values.remoteDeployment.secrets.andi.postgres.password }}" + {{ end -}} + {{- if .Values.remoteDeployment.secrets.andi.auth.auth0_client_secret -}} + - name: ANDI_AUTH0_CLIENT_SECRET + value: "{{ .Values.remoteDeployment.secrets.andi.auth.auth0_client_secret }}" + {{ end -}} + {{- if index .Values.remoteDeployment.secrets "discovery-api" "secrets" "discoveryApiPresignKey" -}} + - name: DISCOVERY_API_PRESIGN_KEY + value: "{{ index .Values.remoteDeployment.secrets "discovery-api" "secrets" "discoveryApiPresignKey" }}" + {{ end -}} + {{- if index .Values.remoteDeployment.secrets "discovery-api" "secrets" "guardianSecretKey" -}} + - name: DISCOVERY_API_GUARDIAN_KEY + value: "{{ index .Values.remoteDeployment.secrets "discovery-api" "secrets" "guardianSecretKey" }}" + {{ end -}} + {{- if index .Values.remoteDeployment.secrets "discovery-api" "postgres" "password" -}} + - name: DISCOVERY_API_POSTGRES_PASSWORD + value: "{{ index .Values.remoteDeployment.secrets "discovery-api" "postgres" "password" }}" + {{ end -}} + {{- if .Values.remoteDeployment.secrets.persistence.metastore.postgres.password -}} + - name: PERSISTENCE_POSTGRES_PASSWORD + value: "{{ .Values.remoteDeployment.secrets.persistence.metastore.postgres.password }}" + {{ end -}} + {{- if .Values.remoteDeployment.proxyAccountPAT -}} + - name: SAURON_PROXY_PAT + value: "{{ .Values.remoteDeployment.proxyAccountPAT }}" + {{ end -}} + {{- if .Values.remoteDeployment.secrets.minio.endpoint -}} + - name: MINIO_ENDPOINT + value: "{{ .Values.remoteDeployment.secrets.minio.endpoint }}" + {{ end -}} + {{- if .Values.remoteDeployment.secrets.minio.rootUserName -}} + - name: MINIO_ROOT_USERNAME + value: "{{ .Values.remoteDeployment.secrets.minio.rootUserName }}" + {{ end -}} + {{- if .Values.remoteDeployment.secrets.minio.rootPassword -}} + - name: MINIO_ROOT_PASSWORD + value: "{{ .Values.remoteDeployment.secrets.minio.rootPassword }}" + {{ end }} + command: + - "/bin/bash" + - "-c" + - "/usr/local/bin/image_patch_update_script.sh && /usr/local/bin/deployment_update_script.sh" + volumeMounts: + - mountPath: /usr/local/bin/image_patch_update_script.sh + name: sauron-commands + subPath: image_patch_update_script.sh + - mountPath: /usr/local/bin/deployment_update_script.sh + name: sauron-commands + subPath: deployment_update_script.sh + - mountPath: /home + name: home + - name: sauron-state + mountPath: /sauron + volumes: + - name: sauron-commands + configMap: + name: sauron-commands + defaultMode: 0777 + - name: home + emptyDir: { } + - name: sauron-state + persistentVolumeClaim: + claimName: {{ .Release.Name }}-{{ .Chart.Name }} diff --git a/charts/sauron/templates/pvc.yaml b/charts/sauron/templates/pvc.yaml new file mode 100644 index 000000000..7df461f7b --- /dev/null +++ b/charts/sauron/templates/pvc.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }} +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10M diff --git a/charts/sauron/templates/sauron-commands.yaml b/charts/sauron/templates/sauron-commands.yaml new file mode 100644 index 000000000..9b019a657 --- /dev/null +++ b/charts/sauron/templates/sauron-commands.yaml @@ -0,0 +1,277 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: sauron-commands +data: + image_patch_update_script.sh: | + #!/bin/bash + + image_auto_update() { + APP_NAME=$1 + echo "APP_NAME:" + printf "%s \n\n" "$APP_NAME" + + REPOSITORY=smartcitiesdata/$APP_NAME + echo "REPOSITORY:" + printf "%s \n\n" "$REPOSITORY" + + TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPOSITORY:pull" | jq -r .token) + printf "TOKEN Length: %s \n\n" "${#TOKEN}" + + # Replace _ with - to conform to kubernetes standards + KUBERNETES_FORMATTED_APP_NAME=${APP_NAME//_/-} + + POD_NAME=$(kubectl get pods | grep -m1 "$KUBERNETES_FORMATTED_APP_NAME" | cut -d ' ' -f 1) + echo "POD_NAME:" + printf "%s \n\n" "$POD_NAME" + + POD_IMAGE_TAG=$(kubectl get pod --namespace="$NAMESPACE" "$POD_NAME" -o json | jq '.status.containerStatuses[] | .image ' | cut -d ':' -f 2 | sed 's/"//g' | tr -d '[:space:]') + echo "POD_IMAGE_TAG:" + printf "%s \n\n" "$POD_IMAGE_TAG" + + if [[ $POD_IMAGE_TAG == "development" ]]; then + + ALL_TAGS=$(curl --location --request GET "https://hub.docker.com/v2/namespaces/smartcitiesdata/repositories/$APP_NAME/tags" | jq '.results | map(.name)') + echo "ALL TAGS:" + printf "%s \n\n" "$ALL_TAGS" + + DEPLOYMENT_NAME=$(kubectl get deployments | grep -m1 "$KUBERNETES_FORMATTED_APP_NAME" | cut -d ' ' -f 1) + echo "DEPLOYMENT_NAME:" + echo "$DEPLOYMENT_NAME" + + MAJOR=$(kubectl get deployment $DEPLOYMENT_NAME -o jsonpath='{.metadata.annotations}' | jq '."docker.major"' | sed 's/"//g') + echo "MAJOR:" + printf "%s \n\n" "$MAJOR" + + MINOR=$(kubectl get deployment $DEPLOYMENT_NAME -o jsonpath='{.metadata.annotations}' | jq '."docker.minor"' | sed 's/"//g') + echo "MINOR:" + printf "%s \n\n" "$MINOR" + + MATCHED_TAGS=$(echo "$ALL_TAGS" | jq "map(match(\"$MAJOR\\\.$MINOR\\\.([0-9]+)\"))") + VALID_TAGS=$(echo "$MATCHED_TAGS" | jq "map(.string)") + echo "VALID_TAGS:" + printf "%s \n\n" "$VALID_TAGS" + + LATEST_PATCH_VERSION=$(echo "$MATCHED_TAGS" | jq "map(.captures) | flatten(1) | map(.string | tonumber) | max") + echo "LATEST_PATCH_VERSION:" + printf "%s \n\n" "$LATEST_PATCH_VERSION" + + TARGET_REMOTE_DIGEST=$(curl -s -D - -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" https://index.docker.io/v2/$REPOSITORY/manifests/$MAJOR.$MINOR.$LATEST_PATCH_VERSION | grep docker-content-digest | cut -d ' ' -f 2 | tr -d '[:space:]') + echo "TARGET_REMOTE_DIGEST:" + echo "$TARGET_REMOTE_DIGEST" + TARGET_REMOTE_DIGEST_LENGTH=${#TARGET_REMOTE_DIGEST} + printf "Length: %s \n\n" "$TARGET_REMOTE_DIGEST_LENGTH" + if [[ $TARGET_REMOTE_DIGEST_LENGTH != 71 ]]; then + echo "TARGET_REMOTE_DIGEST is not valid. Skipping this repo." + printf "\n\n\n\n\n" + return + fi + + DEVELOPMENT_REMOTE_DIGEST=$(curl -s -D - -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" https://index.docker.io/v2/$REPOSITORY/manifests/development | grep docker-content-digest | cut -d ' ' -f 2 | tr -d '[:space:]') + echo "DEVELOPMENT_REMOTE_DIGEST:" + echo "$DEVELOPMENT_REMOTE_DIGEST" + DEVELOPMENT_REMOTE_DIGEST_LENGTH=${#DEVELOPMENT_REMOTE_DIGEST} + + printf "Length: %s \n\n" "$DEVELOPMENT_REMOTE_DIGEST_LENGTH" + if [[ $DEVELOPMENT_REMOTE_DIGEST_LENGTH != 71 ]]; then + echo "DEVELOPMENT_REMOTE_DIGEST is not valid. Skipping this repo." + printf "\n\n\n\n\n" + return + fi + + CURRENT_DIGEST=$(kubectl get pod --namespace="$NAMESPACE" $POD_NAME -o json | jq '.status.containerStatuses[] | .imageID ' | cut -d '@' -f 2 | sed 's/"//g' | tr -d '[:space:]') + echo "CURRENT_DIGEST:" + echo "$CURRENT_DIGEST" + CURRENT_DIGEST_LENGTH=${#CURRENT_DIGEST} + printf "Length: %s \n\n" "$CURRENT_DIGEST_LENGTH" + if [[ $CURRENT_DIGEST_LENGTH != 71 ]]; then + echo "CURRENT_DIGEST is invalid. Skipping this repo." + printf "\n\n\n\n\n" + return + fi + + if [[ $CURRENT_DIGEST != "$DEVELOPMENT_REMOTE_DIGEST" ]]; then + echo "Pod $POD_NAME is not up-to-date." + if [[ $TARGET_REMOTE_DIGEST == "$DEVELOPMENT_REMOTE_DIGEST" ]]; then + echo "Newest patch of this Major/Minor matches development. Restarting deployment to trigger update" + + kubectl rollout restart "deployment/$DEPLOYMENT_NAME" + printf "\n\n\n\n\n" + else + echo "Latest patch version does not match development. This most likely means development has had a major/minor version update." + echo "Major/Minor updates indicate a chart value change. Please adjust your deployment manually and update the Major/Minor for this auto-updater pod." + echo "Skipping deployment restart." + printf "\n\n\n\n\n" + fi + else + echo "Pod $POD_NAME is already updated to development." + echo "Skipping deployment restart." + printf "\n\n\n\n\n" + fi + + else + echo "Pod $POD_NAME is not running development tag. Skipping docker image auto-updates." + printf "\n\n\n\n\n" + fi + } + + image_auto_update alchemist + image_auto_update andi + image_auto_update discovery_api + image_auto_update discovery_streams + image_auto_update forklift + image_auto_update raptor + image_auto_update reaper + image_auto_update valkyrie + + deployment_update_script.sh: | + #!/bin/bash + + HOME=/home + + re="^https:\/\/github.com\/(.+)\/(.+).git*$" + + if [[ "$GIT_HTTPS_CLONE_URL" =~ $re ]]; then + USER=${BASH_REMATCH[1]} + echo "User: $USER" + printf "\n\n" + + REPO=${BASH_REMATCH[2]} + echo "Repo: $REPO" + printf "\n\n" + fi + + echo "Target Branch: $TARGET_BRANCH" + printf "\n\n" + TARGET_DEPLOYMENT_SHA=$(curl \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer $SAURON_PROXY_PAT" \ + "https://api.github.com/repos/$USER/$REPO/branches/$TARGET_BRANCH" | jq '.commit.sha' | sed 's/"//g' ) + printf "TARGET_DEPLOYMENT_SHA: %s \n\n" "$TARGET_DEPLOYMENT_SHA" + + if [[ $TARGET_DEPLOYMENT_SHA == null ]]; then + echo "Target Deployment Sha is not valid. Exiting. + exit 0 + fi + + if [[ $TARGET_DEPLOYMENT_SHA == "" ]]; then + echo "Target Deployment Sha is not valid. Exiting. + exit 0 + fi + + touch /sauron/current_deployment_sha.txt + CURRENT_DEPLOYMENT_SHA=$(cat /sauron/current_deployment_sha.txt) + printf "CURRENT_DEPLOYMENT_SHA: %s \n\n" "$CURRENT_DEPLOYMENT_SHA" + + if [[ $CURRENT_DEPLOYMENT_SHA != "$TARGET_DEPLOYMENT_SHA" ]]; then + echo "Github SHA used for the current deployment does not match the SHA of the configured target branch." + echo "Deploying with content from configured target branch." + printf "gitHttpsCloneUrl: %s" "$GIT_HTTPS_CLONE_URL" + printf "Target branch: %s" "$TARGET_BRANCH" + + echo "Moving to /home in order to have user permissions for github." + cd /home + pwd + + echo "Cloning github repo. This uses the provided proxy account pat." + echo "The proxy account pat needs to have permissions to read/write to the remote deployment repo" + printf "\n\n" + git clone "https://${SAURON_PROXY_PAT}:x-oauth-basic@github.com/${USER}/${REPO}.git" + cd "$REPO" || exit 0 + git checkout "$TARGET_BRANCH" + printf "\n\n" + + {{ if .Values.remoteDeployment.secrets.persistence.trino.enabled }} + # the below secrets were unable to be templated in properly through + # just the values file, due to errors with string quotes, + # so this is a workaround to apply them as their own file, skipping template + # parsing. + echo "Creating hive_catalog.yaml patch file. Will list the folder post-creation for verification." + cat << EOT > hive_catalog.yaml + persistence: + trino: + additionalCatalogs: + hive: | + connector.name=hive-hadoop2 + hive.metastore.uri=thrift://hive-metastore:8000 + hive.metastore.username=padmin + hive.metastore-timeout=360m + hive.allow-drop-table=true + hive.allow-rename-table=true + hive.allow-drop-column=true + hive.allow-rename-column=true + hive.allow-add-column=true + hive.s3.aws-access-key=$GLOBAL_OBJECTSTORE_ACCESSKEY + hive.s3.aws-secret-key=$GLOBAL_OBJECTSTORE_ACCESSSECRET + hive.s3.path-style-access=true + hive.s3.endpoint=$MINIO_ENDPOINT + hive.s3.ssl.enabled=false + EOT + {{ end -}} + ls -lh + + if [[ -s "$VALUES_FILE_FROM_REPO_ROOT" ]]; then + echo "Adding urbanos repo to helm charts" + printf "\n\n" + helm repo add urbanos https://urbanos-public.github.io/charts/ + helm repo update + helm search repo urbanos + + echo "Performing a helm deployment with the following values:" + printf "Namespace: %s \n" "$NAMESPACE" + printf "Values file location: %s \n" "$(realpath $VALUES_FILE_FROM_REPO_ROOT)" + printf "\n\n" + + cat << EOT > secrets.yaml + global: + objectStore: + accessKey: "{{ if .Values.global.objectStore.accessKey }}$GLOBAL_OBJECTSTORE_ACCESSKEY{{ end }}" + accessSecret: "{{ if .Values.global.objectStore.accessSecret }}$GLOBAL_OBJECTSTORE_ACCESSSECRET{{ end }}" + andi: + auth: + auth0_client_secret: "{{ if .Values.remoteDeployment.secrets.andi.auth.auth0_client_secret }}$ANDI_AUTH0_CLIENT_SECRET{{ end }}" + postgres: + password: "{{ if .Values.remoteDeployment.secrets.andi.postgres.password }}$ANDI_POSTGRES_PASSWORD{{ end }}" + discovery-api: + secrets: + discoveryApiPresignKey: "{{ if index .Values.remoteDeployment.secrets "discovery-api" "secrets" "discoveryApiPresignKey" }}$DISCOVERY_API_PRESIGN_KEY{{ end }}" + guardianSecretKey: "{{ if index .Values.remoteDeployment.secrets "discovery-api" "secrets" "guardianSecretKey" }}$DISCOVERY_API_GUARDIAN_KEY{{ end }}" + postgres: + password: "{{ if index .Values.remoteDeployment.secrets "discovery-api" "postgres" "password" }}$DISCOVERY_API_POSTGRES_PASSWORD{{ end }}" + persistence: + metastore: + postgres: + password: "{{ if .Values.remoteDeployment.secrets.persistence.metastore.postgres.password }}$PERSISTENCE_POSTGRES_PASSWORD{{ end }}" + raptor: + auth: + auth0_client_secret: "{{ if .Values.remoteDeployment.secrets.raptor.auth.auth0_client_secret }}$RAPTOR_AUTH0_CLIENT_SECRET{{ end }}" + secrets: + minio: + base64UserAccessKey: "{{ if .Values.global.objectStore.accessKey }}$GLOBAL_OBJECTSTORE_ACCESSKEY{{ end }}" + base64UserSecretKey: "{{ if .Values.global.objectStore.accessSecret }}$GLOBAL_OBJECTSTORE_ACCESSSECRET{{ end }}" + rootUserName: "{{ if .Values.remoteDeployment.secrets.minio.rootUserName }}$MINIO_ROOT_USERNAME{{ end }}" + rootPassword: "{{ if .Values.remoteDeployment.secrets.minio.rootPassword }}$MINIO_ROOT_PASSWORD{{ end }}" + EOT + + echo "Updating sauron state to new deployment SHA" + echo $TARGET_DEPLOYMENT_SHA > /sauron/current_deployment_sha.txt + + printf "Using post-renderer from remoteDeployment repo root relative path: %s" "$POST_RENDERER_FROM_REPO_ROOT" + + echo "Deploying urban-os charts" + helm upgrade --install $MANAGED_RELEASE_NAME urbanos/urban-os --namespace="$NAMESPACE" --values="$VALUES_FILE_FROM_REPO_ROOT" --values=secrets.yaml {{ if .Values.remoteDeployment.secrets.persistence.trino.enabled }}--values=hive_catalog.yaml {{ end }}{{ if .Values.remoteDeployment.postRendererFromRepoRoot }}--post-renderer=$POST_RENDERER_FROM_REPO_ROOT {{ end }} + + else + echo "Values file could not be found or is empty. Skipping deployment." + printf "Configured file path from repo root: %s \n\n\n" "$VALUES_FILE_FROM_REPO_ROOT" + fi + + else + echo "Current deployment SHA matches the SHA of the configured target branch. Skipping deployment." + fi + + + + + + diff --git a/charts/sauron/templates/service.yaml b/charts/sauron/templates/service.yaml new file mode 100644 index 000000000..5eba1d9cb --- /dev/null +++ b/charts/sauron/templates/service.yaml @@ -0,0 +1,50 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: updater-cron +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: cluster-sauron-role +rules: + - apiGroups: ["*"] + resources: ["*"] + verbs: ["*"] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: sauron-role +rules: + - apiGroups: ["*"] + resources: ["*"] + verbs: ["*"] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: sauron-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: sauron-role +subjects: +- kind: ServiceAccount + name: updater-cron + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: cluster-sauron-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-sauron-role +subjects: +- kind: ServiceAccount + name: updater-cron + namespace: {{ .Release.Namespace }} diff --git a/charts/sauron/values.yaml b/charts/sauron/values.yaml new file mode 100644 index 000000000..586210d2b --- /dev/null +++ b/charts/sauron/values.yaml @@ -0,0 +1,49 @@ +global: + objectStore: + accessKey: [ ] + accessSecret: [ ] + +config: + cron: "*/10 * * * *" + image: "smartcitiesdata/sauron:0.0.8" + managedReleaseName: "urban-os" + +remoteDeployment: + gitHttpsCloneUrl: "https://github.com//.git" + targetBranch: "main" + valuesFileFromRepoRoot: "./envs/dev/values.yaml" + postRendererFromRepoRoot: "" + proxyAccountPAT: "" + secrets: + andi: + postgres: + password: "" + auth: + auth0_client_secret: "" + + persistence: + metastore: + postgres: + password: "" + + trino: + enabled: true + + raptor: + auth: + auth0_client_secret: "" + + discovery-api: + secrets: + discoveryApiPresignKey: "" + guardianSecretKey: "" + postgres: + password: "" + + minio: + #This endpoint is only needed in here because we have to apply it post-render via environment variables for the hive-catalog workaround + endpoint: "http://minio:80" + base64UserAccessKey: "" + base64UserSecretKey: "" + rootUserName: "" + rootPassword: "" diff --git a/charts/urban-os/Chart.lock b/charts/urban-os/Chart.lock new file mode 100644 index 000000000..496594022 --- /dev/null +++ b/charts/urban-os/Chart.lock @@ -0,0 +1,60 @@ +dependencies: +- name: alchemist + repository: file://../alchemist + version: 1.0.6 +- name: andi + repository: file://../andi + version: 2.3.19 +- name: discovery-api + repository: file://../discovery-api + version: 1.4.13 +- name: discovery-streams + repository: file://../discovery-streams + version: 1.1.9 +- name: discovery-ui + repository: file://../discovery-ui + version: 1.5.22 +- name: elasticsearch + repository: https://helm.elastic.co + version: 7.17.3 +- name: external-services + repository: file://../external-services + version: 1.0.7 +- name: forklift + repository: file://../forklift + version: 3.1.15 +- name: kafka + repository: file://../kafka + version: 1.2.27 +- name: kubernetes-data-platform + repository: file://../kubernetes-data-platform + version: 1.7.5 +- name: persistence + repository: file://../persistence + version: 1.0.10 +- name: monitoring + repository: file://../monitoring + version: 1.1.8 +- name: raptor + repository: file://../raptor + version: 1.1.12 +- name: reaper + repository: file://../reaper + version: 1.2.9 +- name: valkyrie + repository: file://../valkyrie + version: 2.6.9 +- name: vault + repository: https://helm.releases.hashicorp.com + version: 0.27.0 +- name: operator + repository: https://operator.min.io/ + version: 5.0.12 +- name: tenant + repository: https://operator.min.io/ + version: 5.0.12 +- name: performancetesting + repository: file://../performancetesting + version: 0.1.9 +digest: sha256:bd490744007c2b46cdda3bb27bc6be0ae0da6937d6fa11c80a4f9e0d3afdef15 +generated: "2024-03-07T13:40:34.049754-05:00" diff --git a/charts/urban-os/Chart.yaml b/charts/urban-os/Chart.yaml new file mode 100644 index 000000000..234acf824 --- /dev/null +++ b/charts/urban-os/Chart.yaml @@ -0,0 +1,85 @@ +apiVersion: v2 +appVersion: "1.0" +description: Master chart that deploys the UrbanOS platform. See the individual dependency readmes for configuration options. +name: urban-os +version: 1.13.59 + +dependencies: + - name: alchemist + repository: file://../alchemist + condition: alchemist.enabled + version: ">= 1.0.0" + - name: andi + repository: file://../andi + condition: andi.enabled + version: ">= 1.0.0" + - name: discovery-api + repository: file://../discovery-api + condition: discovery-api.enabled + version: ">= 1.0.0" + - name: discovery-streams + repository: file://../discovery-streams + condition: discovery-streams.enabled + version: ">= 1.0.0" + - name: discovery-ui + repository: file://../discovery-ui + condition: discovery-ui.enabled + version: ">= 1.0.0" + - name: elasticsearch + version: 7.17.3 + repository: https://helm.elastic.co + condition: elasticsearch.enabled + - name: external-services + repository: file://../external-services + condition: external-services.enabled + version: ">= 1.0.0" + - name: forklift + repository: file://../forklift + condition: forklift.enabled + version: ">= 1.0.0" + - name: kafka + repository: file://../kafka + condition: kafka.enabled + version: ">= 1.0.0" + - name: kubernetes-data-platform + repository: file://../kubernetes-data-platform + condition: kubernetes-data-platform.enabled + version: ">= 1.0.0" + - name: persistence + repository: file://../persistence + condition: persistence.enabled + version: ">= 1.0.0" + - name: monitoring + repository: file://../monitoring + condition: monitoring.enabled + version: ">= 1.0.0" + - name: raptor + repository: file://../raptor + condition: raptor.enabled + version: ">= 1.0.0" + - name: reaper + repository: file://../reaper + condition: reaper.enabled + version: ">= 1.0.0" + - name: valkyrie + repository: file://../valkyrie + condition: valkyrie.enabled + version: ">= 1.0.0" + - name: vault + repository: https://helm.releases.hashicorp.com + condition: vault.enabled + version: "0.27.0" + - name: operator + version: 5.0.12 + repository: https://operator.min.io/ + condition: minio-operator.enabled + alias: minio-operator + - name: tenant + version: 5.0.12 + repository: https://operator.min.io/ + condition: minio-tenant.enabled + alias: minio-tenant + - name: performancetesting + version: ">= 0.0.0" + repository: file://../performancetesting + condition: performancetesting.enabled diff --git a/charts/urban-os/README.md b/charts/urban-os/README.md new file mode 100644 index 000000000..93440fdf2 --- /dev/null +++ b/charts/urban-os/README.md @@ -0,0 +1,142 @@ +# urban-os + +![Version: 1.13.59](https://img.shields.io/badge/Version-1.13.59-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Master chart that deploys the UrbanOS platform. See the individual dependency readmes for configuration options. + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| file://../alchemist | alchemist | >= 1.0.0 | +| file://../andi | andi | >= 1.0.0 | +| file://../discovery-api | discovery-api | >= 1.0.0 | +| file://../discovery-streams | discovery-streams | >= 1.0.0 | +| file://../discovery-ui | discovery-ui | >= 1.0.0 | +| file://../external-services | external-services | >= 1.0.0 | +| file://../forklift | forklift | >= 1.0.0 | +| file://../kafka | kafka | >= 1.0.0 | +| file://../kubernetes-data-platform | kubernetes-data-platform | >= 1.0.0 | +| file://../monitoring | monitoring | >= 1.0.0 | +| file://../performancetesting | performancetesting | >= 0.0.0 | +| file://../persistence | persistence | >= 1.0.0 | +| file://../raptor | raptor | >= 1.0.0 | +| file://../reaper | reaper | >= 1.0.0 | +| file://../valkyrie | valkyrie | >= 1.0.0 | +| https://helm.elastic.co | elasticsearch | 7.17.3 | +| https://helm.releases.hashicorp.com | vault | 0.27.0 | +| https://operator.min.io/ | minio-operator(operator) | 5.0.12 | +| https://operator.min.io/ | minio-tenant(tenant) | 5.0.12 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| alchemist | object | `{"enabled":true}` | See dependent chart for configuration details | +| andi | object | `{"enabled":true,"fullnameOverride":"andi"}` | See dependent chart for configuration details | +| discovery-api | object | `{"elasticsearch":{"host":"elasticsearch-master:9200","tls":false},"enabled":true}` | See dependent chart for configuration details | +| discovery-api.elasticsearch.host | string | `"elasticsearch-master:9200"` | This is the default location of the chart-provided elasticsearch instance | +| discovery-api.elasticsearch.tls | bool | `false` | Set this to true to require the api to connect to elasticsearch via https. TLS must be configured on the elasticsearch cluster | +| discovery-streams | object | `{"enabled":true}` | See dependent chart for configuration details | +| discovery-ui | object | `{"enabled":true}` | See dependent chart for configuration details | +| elasticsearch | object | `{"enabled":true,"replicas":2}` | By default, the urbanOS chart stands up its own elasticsearch instance. Disable this if you plan to provide your own. TLS will be disabled by default, but can be configured using the chart documentation below https://github.com/elastic/helm-charts/tree/master/elasticsearch#configuration | +| forklift | object | `{"enabled":true,"fullnameOverride":"forklift"}` | See dependent chart for configuration details | +| global.auth.auth0_domain | string | `""` | | +| global.auth.jwt_issuer | string | `""` | | +| global.auth.raptor_url | string | `""` | | +| global.buckets.hiveStorageBucket | string | `""` | Required. Bucket that extracted data is written to. *Note*: Bucket names are globally unique in S3 or cluster unique in Minio | +| global.buckets.hostedFileBucket | string | `""` | Required. Bucket to store Host type datasets. *Note*: Bucket names are globally unique in S3 or cluster unique in Minio | +| global.buckets.region | string | `"us-west-2"` | S3 Bucket region. Ignored when using Minio | +| global.ingress | object | `{"dnsZone":"localhost","rootDnsZone":"localhost"}` | Common ingress configuration | +| global.ingress.dnsZone | string | `"localhost"` | Domain name for the platform | +| global.ingress.rootDnsZone | string | `"localhost"` | Root domain name for the platform. Often the same as `dnsZone` | +| global.kafka.brokers | string | `"pipeline-kafka-bootstrap:9092"` | This is the default url for the kafka cluster deployed with the chart. Override this if you are using an external kafka cluster. | +| global.objectStore | object | `{"accessKey":[],"accessSecret":[],"hiveStoragePath":"","host":"","port":80}` | Connection info for connecting to s3 for the persistence layer | +| global.presto.url | string | `"http://kubernetes-data-platform-presto:8080"` | This is the default url that presto is deployed to with the chart. Override this if you are using an external presto cluster. | +| global.redis.host | string | `"redis.external-services"` | The url to a Redis instance. *Note*: Most apps in the platform require access to a Redis instance, and one is not currently included in the chart. | +| global.redis.password | string | `""` | | +| global.require_admin_api_key | bool | `false` | | +| global.require_api_key | bool | `false` | Determines whether a user is required to log in in order to see public data in the discovery suite | +| global.subdomains.andi | string | `"andi"` | | +| global.subdomains.discoveryApi | string | `"data"` | | +| global.subdomains.discoveryUi | string | `"discovery"` | | +| global.subdomains.raptor | string | `"raptor"` | | +| global.subdomains.share | string | `"sharedata"` | | +| global.vault.endpoint | string | `"vault:8200"` | A url to a vault instance. Reaper and Andi use vault to read and store secrets for dataset ingestion. *Note*: Currently, only the provided vault chart works with UrbanOS | +| kafka.enabled | bool | `true` | | +| kubernetes-data-platform.enabled | bool | `false` | | +| kubernetes-data-platform.metastore.allowDropTable | bool | `true` | | +| kubernetes-data-platform.metastore.timeout | string | `"360m"` | | +| kubernetes-data-platform.minio.enable | bool | `false` | Minio is an experimental way to gain platform independence from S3 | +| kubernetes-data-platform.postgres.db.name | string | `"metastore"` | | +| kubernetes-data-platform.postgres.db.user | string | `"metastore"` | | +| kubernetes-data-platform.postgres.enable | bool | `false` | Include in-cluster postgres for the metastore | +| kubernetes-data-platform.postgres.tls.enable | bool | `true` | | +| kubernetes-data-platform.postgres.tls.mode | string | `"verify-full"` | | +| kubernetes-data-platform.postgres.tls.rootCertPath | string | `"/etc/ssl/certs/ca-certificates.crt"` | | +| kubernetes-data-platform.presto.deploy.container.resources | object | `{"limits":{"cpu":2,"memory":"2Gi"},"requests":{"cpu":1,"memory":"2Gi"}}` | Resource configuration for the presto workers | +| kubernetes-data-platform.presto.deployPrometheusExporter | bool | `true` | | +| kubernetes-data-platform.presto.jvm.maxHeapSize | string | `"1536M"` | Heap size for the presto workers, should be relative to available resources | +| kubernetes-data-platform.presto.task.writerCount | int | `1` | | +| kubernetes-data-platform.presto.useJmxExporter | bool | `true` | | +| kubernetes-data-platform.presto.workers | int | `2` | | +| minio-operator.enabled | bool | `true` | | +| minio-operator.operator.replicaCount | int | `1` | | +| minio-operator.operator.resources.limits.cpu | string | `"200m"` | | +| minio-operator.operator.resources.limits.ephemeral-storage | string | `"500Mi"` | | +| minio-operator.operator.resources.limits.memory | string | `"256Mi"` | | +| minio-operator.operator.resources.requests.cpu | string | `"200m"` | | +| minio-operator.operator.resources.requests.ephemeral-storage | string | `"500Mi"` | | +| minio-operator.operator.resources.requests.memory | string | `"256Mi"` | | +| minio-tenant.enabled | bool | `true` | | +| minio-tenant.tenant.buckets[0].name | string | `"presto-hive-storage"` | | +| minio-tenant.tenant.certificate.requestAutoCert | bool | `false` | | +| minio-tenant.tenant.configuration.name | string | `"minio1-env-configuration"` | | +| minio-tenant.tenant.env[0].name | string | `"MINIO_BROWSER_LOGIN_ANIMATION"` | | +| minio-tenant.tenant.env[0].value | string | `"off"` | | +| minio-tenant.tenant.exposeServices.console | bool | `true` | | +| minio-tenant.tenant.exposeServices.minio | bool | `true` | | +| minio-tenant.tenant.name | string | `"minio1"` | | +| minio-tenant.tenant.pools[0].affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchExpressions[0].key | string | `"v1.min.io/tenant"` | | +| minio-tenant.tenant.pools[0].affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchExpressions[0].operator | string | `"In"` | | +| minio-tenant.tenant.pools[0].affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchExpressions[0].values[0] | string | `"minio1"` | | +| minio-tenant.tenant.pools[0].affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchExpressions[1].key | string | `"v1.min.io/pool"` | | +| minio-tenant.tenant.pools[0].affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchExpressions[1].operator | string | `"In"` | | +| minio-tenant.tenant.pools[0].affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchExpressions[1].values[0] | string | `"pool-0"` | | +| minio-tenant.tenant.pools[0].affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].topologyKey | string | `"kubernetes.io/hostname"` | | +| minio-tenant.tenant.pools[0].name | string | `"pool-0"` | | +| minio-tenant.tenant.pools[0].resources.limits.cpu | string | `"500m"` | | +| minio-tenant.tenant.pools[0].resources.limits.memory | string | `"2Gi"` | | +| minio-tenant.tenant.pools[0].resources.requests.cpu | string | `"500m"` | | +| minio-tenant.tenant.pools[0].resources.requests.memory | string | `"2Gi"` | | +| minio-tenant.tenant.pools[0].servers | int | `1` | | +| minio-tenant.tenant.pools[0].storageClassName | string | `"standard"` | | +| minio-tenant.tenant.pools[0].volumesPerServer | int | `4` | | +| minio-tenant.tenant.users[0].name | string | `"tenant-user-0"` | | +| monitoring | object | `{"enabled":false}` | By default monitoring is disabled as it is optional, but we recommend it be enabled for production deployments | +| performancetesting.enabled | bool | `false` | | +| performancetesting.endpoints.ANDI_URL | string | `""` | | +| performancetesting.endpoints.API_KEY | string | `""` | | +| performancetesting.endpoints.DISCOVERY_URL | string | `""` | | +| persistence.enabled | bool | `true` | | +| raptor | object | `{"enabled":true,"fullnameOverride":"raptor"}` | See dependent chart for configuration details | +| reaper | object | `{"enabled":true,"fullnameOverride":"reaper"}` | See dependent chart for configuration details | +| secrets.minio.base64UserAccessKey | string | `"inject-during-deployment"` | | +| secrets.minio.base64UserSecretKey | string | `"inject-during-deployment"` | | +| secrets.minio.rootPassword | string | `"inject-during-deployment"` | | +| secrets.minio.rootUserName | string | `"inject-during-deployment"` | | +| valkyrie | object | `{"enabled":true,"fullnameOverride":"valkyrie","replicaCount":1}` | See dependent chart for configuration details | +| vault.global.openshift | bool | `true` | | +| vault.injector.resources.limits.cpu | string | `"250m"` | | +| vault.injector.resources.limits.memory | string | `"256Mi"` | | +| vault.injector.resources.requests.cpu | string | `"250m"` | | +| vault.injector.resources.requests.memory | string | `"256Mi"` | | +| vault.server.ha.enabled | bool | `true` | | +| vault.server.ha.raft.enabled | bool | `true` | | +| vault.server.resources.limits.cpu | string | `"250m"` | | +| vault.server.resources.limits.memory | string | `"256Mi"` | | +| vault.server.resources.requests.cpu | string | `"250m"` | | +| vault.server.resources.requests.memory | string | `"256Mi"` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/urban-os/templates/auth0-config.yaml b/charts/urban-os/templates/auth0-config.yaml new file mode 100644 index 000000000..d32ce6f5e --- /dev/null +++ b/charts/urban-os/templates/auth0-config.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: auth0-config +data: + auth0.config: | + { + "domain": {{ quote .Values.global.auth.auth0_domain }}, + "clientId": {{ quote .Values.global.auth.auth0_management_client_id }}, + "clients": { + "Discovery": { + {{- $localhost := "http://localhost:9001" -}} + {{- $localhost_two := "http://localhost:9002" -}} + {{- $uiInternal := print "https://" .Values.global.subdomains.discoveryUi "." .Values.global.ingress.dnsZone -}} + {{- $uiExternal := print "https://" .Values.global.subdomains.discoveryUi "." .Values.global.ingress.rootDnsZone -}} + {{- $apiInternal := print "https://" .Values.global.subdomains.discoveryApi "." .Values.global.ingress.dnsZone -}} + {{- $apiExternal := print "https://" .Values.global.subdomains.discoveryApi "." .Values.global.ingress.rootDnsZone -}} + "callbacks": "[\"{{ $localhost }}/oauth\", \"{{ $localhost_two }}/oauth\", \"{{ $uiInternal }}/oauth\", \"{{ $uiExternal }}/oauth\", \"{{ $apiInternal }}/tableau/connector.html\", \"{{ $apiExternal }}/tableau/connector.html\"]", + "allowedLogoutUrls": "[\"{{ $localhost }}/oauth\", \"{{ $localhost_two }}/oauth\", \"{{ $uiInternal }}/oauth\", \"{{ $uiExternal }}/oauth\"]", + "allowedOrigins": "[\"{{ $localhost }}\", \"{{ $localhost_two }}\", \"{{ $uiInternal }}\", \"{{ $uiExternal }}\",\"{{ $apiInternal }}\", \"{{ $apiExternal }}\"]", + "webOrigins": "[\"{{ $localhost }}\", \"{{ $localhost_two }}\", \"{{ $uiInternal }}\", \"{{ $uiExternal }}\", \"{{ $apiInternal }}\", \"{{ $apiExternal }}\"]", + "name": "UrbanOS", + "type": "spa" + }, + "ANDI": { + {{- $andiProtocol := ternary "https://" "http://" .Values.andi.ingress.tls -}} + {{- $nipio := "https://127.0.0.1.nip.io:4443" -}} + {{- $andiInternal := print $andiProtocol .Values.global.subdomains.andi "." .Values.global.ingress.dnsZone -}} + {{- $andiExternal := print $andiProtocol .Values.global.subdomains.andi "." .Values.global.ingress.rootDnsZone -}} + {{- $shareDataInternal := print $andiProtocol .Values.global.subdomains.share "." .Values.global.ingress.dnsZone -}} + {{- $shareDataExternal := print $andiProtocol .Values.global.subdomains.share "." .Values.global.ingress.rootDnsZone -}} + "callbacks": "[\"{{ $nipio }}/auth/auth0/callback\", \"{{ $andiInternal }}/auth/auth0/callback\", \"{{ $andiExternal }}/auth/auth0/callback\", \"{{ $shareDataInternal }}/auth/auth0/callback\", \"{{ $shareDataExternal }}/auth/auth0/callback\"]", + "allowedLogoutUrls": "[\"{{ $nipio }}/auth/auth0\", \"{{ $andiInternal }}/auth/auth0\", \"{{ $andiExternal }}/auth/auth0\", \"{{ $shareDataInternal }}/auth/auth0\", \"{{ $shareDataExternal }}/auth/auth0\"]", + "allowedOrigins": "[\"{{ $nipio }}\", \"{{ $andiInternal }}\", \"{{ $andiExternal }}\", \"{{ $shareDataInternal }}\", \"{{ $shareDataExternal }}\"]", + "webOrigins": "[\"{{ $nipio }}\", \"{{ $andiInternal }}\", \"{{ $andiExternal }}\", \"{{ $shareDataInternal }}\", \"{{ $shareDataExternal }}\"]", + "name": "ANDI", + "type": "regular_web" + }, + "Raptor": { + {{- $localhost := "http://localhost:4002" -}} + {{- $raptorInternal := print "https://" .Values.global.subdomains.raptor "." .Values.global.ingress.dnsZone -}} + {{- $raptorExternal := print "https://" .Values.global.subdomains.raptor "." .Values.global.ingress.rootDnsZone -}} + "name": "Raptor", + "type": "non_interactive", + "allowedOrigins": "[\"{{ $localhost }}\", \"{{ $raptorInternal }}\", \"{{ $raptorExternal }}\"]", + "webOrigins": "[\"{{ $localhost }}\", \"{{ $raptorInternal }}\", \"{{ $raptorExternal }}\"]" + } + }, + "errorUrl": "{{ $uiExternal }}/oauth/error", + "enabledClients": ["UrbanOS", "ANDI Dev", "Auth0 Management"] + } diff --git a/charts/urban-os/templates/minio-secrets.yaml b/charts/urban-os/templates/minio-secrets.yaml new file mode 100644 index 000000000..b35db46c1 --- /dev/null +++ b/charts/urban-os/templates/minio-secrets.yaml @@ -0,0 +1,22 @@ +{{- if index .Values "minio-tenant" "enabled" }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ index .Values "minio-tenant" "tenant" "users" 0 "name" }} + namespace: {{ .Release.Namespace }} +type: Opaque +data: + CONSOLE_ACCESS_KEY: {{ .Values.secrets.minio.base64UserAccessKey }} + CONSOLE_SECRET_KEY: {{ .Values.secrets.minio.base64UserSecretKey }} +--- +kind: Secret +apiVersion: v1 +metadata: + name: {{ index .Values "minio-tenant" "tenant" "configuration" "name" }} + namespace: {{ .Release.Namespace }} +type: Opaque +stringData: + config.env: |- + export MINIO_ROOT_USER={{ .Values.secrets.minio.rootUserName | quote }} + export MINIO_ROOT_PASSWORD={{ .Values.secrets.minio.rootPassword | quote }} +{{- end }} diff --git a/charts/urban-os/urban-os-1.13.45.tgz b/charts/urban-os/urban-os-1.13.45.tgz new file mode 100644 index 000000000..5a9e8def2 Binary files /dev/null and b/charts/urban-os/urban-os-1.13.45.tgz differ diff --git a/charts/urban-os/values.yaml b/charts/urban-os/values.yaml new file mode 100644 index 000000000..1195e8ce9 --- /dev/null +++ b/charts/urban-os/values.yaml @@ -0,0 +1,269 @@ +global: + auth: + jwt_issuer: "" + auth0_domain: "" + raptor_url: "" + buckets: + # -- S3 Bucket region. Ignored when using Minio + region: "us-west-2" + # -- Required. Bucket to store Host type datasets. *Note*: Bucket names are globally unique in S3 or cluster unique in Minio + hostedFileBucket: "" + # -- Required. Bucket that extracted data is written to. *Note*: Bucket names are globally unique in S3 or cluster unique in Minio + hiveStorageBucket: "" + kafka: + # -- This is the default url for the kafka cluster deployed with the chart. Override this if you are using an external kafka cluster. + brokers: pipeline-kafka-bootstrap:9092 + presto: + # -- This is the default url that presto is deployed to with the chart. Override this if you are using an external presto cluster. + url: http://kubernetes-data-platform-presto:8080 + # -- Determines whether a user is required to log in in order to see public data in the discovery suite + require_api_key: false + require_admin_api_key: false + redis: + # -- The url to a Redis instance. *Note*: Most apps in the platform require access to a Redis instance, and one is not currently included in the chart. + host: redis.external-services + password: "" + vault: + # -- A url to a vault instance. Reaper and Andi use vault to read and store secrets for dataset ingestion. *Note*: Currently, only the provided vault chart works with UrbanOS + endpoint: vault:8200 + # -- Common ingress configuration + ingress: + # -- Domain name for the platform + dnsZone: "localhost" + # -- Root domain name for the platform. Often the same as `dnsZone` + rootDnsZone: "localhost" + # -- Connection info for connecting to s3 for the persistence layer + objectStore: + host: "" + port: 80 + accessKey: [] + accessSecret: [] + hiveStoragePath: "" + subdomains: + andi: "andi" + share: "sharedata" + discoveryApi: "data" + discoveryUi: "discovery" + raptor: "raptor" + + +# -- See dependent chart for configuration details +alchemist: + enabled: true + + +# -- See dependent chart for configuration details +andi: + fullnameOverride: andi + enabled: true + + +# -- See dependent chart for configuration details +discovery-api: + enabled: true + elasticsearch: + # -- This is the default location of the chart-provided elasticsearch instance + host: elasticsearch-master:9200 + # -- Set this to true to require the api to connect to elasticsearch via https. + # TLS must be configured on the elasticsearch cluster + tls: false + + +# -- See dependent chart for configuration details +discovery-streams: + enabled: true + + +# -- See dependent chart for configuration details +discovery-ui: + enabled: true + + +# -- By default, the urbanOS chart stands up its own elasticsearch instance. +# Disable this if you plan to provide your own. +# TLS will be disabled by default, but can be configured using the chart +# documentation below +# https://github.com/elastic/helm-charts/tree/master/elasticsearch#configuration +elasticsearch: + enabled: true + replicas: 2 + + +# -- See dependent chart for configuration details +forklift: + fullnameOverride: forklift + enabled: true + + +kafka: + enabled: true + + +kubernetes-data-platform: + enabled: false + presto: + workers: 2 + jvm: + # -- Heap size for the presto workers, should be relative to available resources + maxHeapSize: 1536M + deploy: + container: + # -- Resource configuration for the presto workers + resources: + limits: + memory: 2Gi + cpu: 2 + requests: + memory: 2Gi + cpu: 1 + task: + writerCount: 1 + deployPrometheusExporter: true + useJmxExporter: true + metastore: + allowDropTable: true + timeout: 360m + postgres: + # -- Include in-cluster postgres for the metastore + enable: false + db: + name: metastore + user: metastore + tls: + enable: true + mode: verify-full + rootCertPath: /etc/ssl/certs/ca-certificates.crt + minio: + # -- Minio is an experimental way to gain platform independence from S3 + enable: false + + +minio-operator: + enabled: true + operator: + replicaCount: 1 + resources: + requests: + cpu: 200m + memory: 256Mi + ephemeral-storage: 500Mi + limits: + cpu: 200m + memory: 256Mi + ephemeral-storage: 500Mi + +minio-tenant: + enabled: true + tenant: + env: + - name: MINIO_BROWSER_LOGIN_ANIMATION + value: "off" + name: minio1 + configuration: + name: minio1-env-configuration + buckets: + - name: "presto-hive-storage" + exposeServices: + console: true + minio: true + pools: + - affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: v1.min.io/tenant + operator: In + values: + - minio1 + - key: v1.min.io/pool + operator: In + values: + - pool-0 + topologyKey: kubernetes.io/hostname + name: pool-0 + servers: 1 + storageClassName: standard + volumesPerServer: 4 + resources: + limits: + memory: 2Gi + cpu: 500m + requests: + memory: 2Gi + cpu: 500m + certificate: + requestAutoCert: false + users: + - name: tenant-user-0 + +# -- By default monitoring is disabled as it is optional, +# but we recommend it be enabled for production deployments +monitoring: + enabled: false + + +persistence: + enabled: true + + +# -- See dependent chart for configuration details +raptor: + fullnameOverride: raptor + enabled: true + + +# -- See dependent chart for configuration details +reaper: + fullnameOverride: reaper + enabled: true + + +secrets: + minio: + base64UserAccessKey: "inject-during-deployment" + base64UserSecretKey: "inject-during-deployment" + rootUserName: "inject-during-deployment" + rootPassword: "inject-during-deployment" + + +vault: + global: + openshift: true + + server: + resources: + limits: + memory: 256Mi + cpu: 250m + requests: + memory: 256Mi + cpu: 250m + + ha: + enabled: true + raft: + enabled: true + + injector: + resources: + limits: + memory: 256Mi + cpu: 250m + requests: + memory: 256Mi + cpu: 250m + + +# -- See dependent chart for configuration details +valkyrie: + fullnameOverride: valkyrie + enabled: true + replicaCount: 1 + +performancetesting: + enabled: false + endpoints: + ANDI_URL: "" + DISCOVERY_URL: "" + API_KEY: "" \ No newline at end of file diff --git a/charts/valkyrie/.helmignore b/charts/valkyrie/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/charts/valkyrie/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/valkyrie/Chart.yaml b/charts/valkyrie/Chart.yaml new file mode 100644 index 000000000..61ef04fce --- /dev/null +++ b/charts/valkyrie/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +appVersion: "1.0" +description: Validates data from raw topic and writes it to validated topic +name: valkyrie +version: 2.6.9 +sources: + - https://github.com/UrbanOS-Public/smartcitiesdata/tree/master/apps/valkyrie diff --git a/charts/valkyrie/README.md b/charts/valkyrie/README.md new file mode 100644 index 000000000..0189c1e17 --- /dev/null +++ b/charts/valkyrie/README.md @@ -0,0 +1,47 @@ +# valkyrie + +![Version: 2.6.9](https://img.shields.io/badge/Version-2.6.9-informational?style=flat-square) ![AppVersion: 1.0](https://img.shields.io/badge/AppVersion-1.0-informational?style=flat-square) + +Validates data from raw topic and writes it to validated topic + +## Source Code + +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| fullnameOverride | string | `""` | | +| global.kafka.brokers | string | `"streaming-service-kafka-bootstrap:9092"` | | +| global.redis.host | string | `"redis.external-services"` | | +| global.redis.password | string | `""` | | +| global.redis.passwordSecret | string | `""` | | +| global.redis.port | int | `6379` | | +| global.redis.sslEnabled | bool | `false` | | +| image.majorPin | string | `""` | | +| image.minorPin | string | `""` | | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"smartcitiesdata/valkyrie"` | | +| image.tag | string | `"development"` | | +| kafka.dlqTopic | string | `"streaming-dead-letters"` | | +| kafka.inputTopicPrefix | string | `"raw"` | | +| kafka.outputTopicPrefix | string | `"transformed"` | | +| localstack.enabled | bool | `false` | | +| monitoring.targetPort | int | `9002` | | +| nameOverride | string | `""` | | +| nodeSelector | object | `{}` | | +| processor_stages | int | `1` | | +| profiling_enabled | bool | `false` | | +| rbac.enabled | bool | `true` | | +| replicaCount | int | `2` | | +| resources.limits.cpu | string | `"300m"` | | +| resources.limits.memory | string | `"512Mi"` | | +| resources.requests.cpu | string | `"300m"` | | +| resources.requests.memory | string | `"512Mi"` | | +| service.type | string | `"ClusterIP"` | | +| tolerations | list | `[]` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/charts/valkyrie/templates/_helpers.tpl b/charts/valkyrie/templates/_helpers.tpl new file mode 100644 index 000000000..466bf927b --- /dev/null +++ b/charts/valkyrie/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- 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 "helm.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "helm.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/valkyrie/templates/cluster-rbac.yaml b/charts/valkyrie/templates/cluster-rbac.yaml new file mode 100644 index 000000000..14b75a88f --- /dev/null +++ b/charts/valkyrie/templates/cluster-rbac.yaml @@ -0,0 +1,32 @@ +{{- if .Values.rbac.enabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Chart.Name }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Chart.Name }} +rules: + - apiGroups: [""] + resources: + - endpoints + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ .Chart.Name }} +subjects: +- kind: ServiceAccount + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/valkyrie/templates/deployment.yaml b/charts/valkyrie/templates/deployment.yaml new file mode 100644 index 000000000..063cac786 --- /dev/null +++ b/charts/valkyrie/templates/deployment.yaml @@ -0,0 +1,94 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "helm.fullname" . }} + {{- if or .Values.image.majorPin .Values.image.minorPin }} + annotations: + {{- if .Values.image.majorPin }} + docker.major: "{{ .Values.image.majorPin }}" + {{- end }} + {{- if .Values.image.minorPin }} + docker.minor: "{{ .Values.image.minorPin }}" + {{- end }} + {{- end }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + helm.sh/chart: {{ include "helm.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + {{- if .Values.rbac.enabled }} + serviceAccountName: {{ .Chart.Name }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 9001 + - containerPort: 4369 + env: + - name: KAFKA_BROKERS + value: {{ .Values.global.kafka.brokers }} + - name: RUN_IN_KUBERNETES + value: "true" + - name: INPUT_TOPIC_PREFIX + value: {{.Values.kafka.inputTopicPrefix}} + - name: OUTPUT_TOPIC_PREFIX + value: {{.Values.kafka.outputTopicPrefix}} + - name: DLQ_TOPIC + value: {{.Values.kafka.dlqTopic}} + - name: REDIS_HOST + value: {{ .Values.global.redis.host }} + - name: REDIS_PORT + value: {{ quote .Values.global.redis.port }} + - name: REDIS_PASSWORD +{{- if .Values.global.redis.passwordSecret }} + valueFrom: + secretKeyRef: + name: {{ quote .Values.global.redis.passwordSecret }} + key: {{ .Values.global.redis.passwordSecretKey | default .Values.global.redis.passwordSecret | quote }} +{{- else }} + value: {{ .Values.global.redis.password }} +{{- end }} + - name: REDIS_SSL + value: {{ quote .Values.global.redis.sslEnabled }} + - name: PROCESSOR_STAGES + value: {{ .Values.processor_stages | quote }} + - name: PROFILING_ENABLED + value: {{ .Values.profiling_enabled | quote }} + - name: METRICS_PORT + value: {{ quote .Values.monitoring.targetPort }} + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/charts/valkyrie/templates/service.yaml b/charts/valkyrie/templates/service.yaml new file mode 100644 index 000000000..82027671d --- /dev/null +++ b/charts/valkyrie/templates/service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ include "helm.name" . }} + annotations: + prometheus.io/port: "{{ .Values.monitoring.targetPort }}" + prometheus.io/scrape: "true" +spec: + selector: + app.kubernetes.io/name: {{ include "helm.name" . }} + ports: + - name: erlang-vm + protocol: TCP + port: 9001 + targetPort: 9001 + - name: epmd + protocol: TCP + port: 4369 + targetPort: 4369 + type: {{ .Values.service.type }} diff --git a/charts/valkyrie/values.yaml b/charts/valkyrie/values.yaml new file mode 100644 index 000000000..5b974cf96 --- /dev/null +++ b/charts/valkyrie/values.yaml @@ -0,0 +1,62 @@ +global: + kafka: + brokers: streaming-service-kafka-bootstrap:9092 + redis: + host: redis.external-services + port: 6379 + password: "" + passwordSecret: "" + sslEnabled: false + +replicaCount: 2 + +image: + repository: smartcitiesdata/valkyrie + tag: development + pullPolicy: Always + majorPin: "" + minorPin: "" + +service: + type: ClusterIP + +# monitoring: +# targetPort: 4000 +# If running locally on Minikube, set to true to deploy an AWS localstack instance +# https://github.com/localstack/localstack +localstack: + enabled: false + +kafka: + #comma delimited list of kafka seed brokersß + inputTopicPrefix: "raw" + outputTopicPrefix: "transformed" + dlqTopic: "streaming-dead-letters" + +nameOverride: "" +fullnameOverride: "" + +processor_stages: 1 + +profiling_enabled: false + +resources: + limits: + cpu: 300m + memory: 512Mi + requests: + cpu: 300m + memory: 512Mi + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +monitoring: + targetPort: 9002 + +rbac: + # Create a ServiceAccount or use default ServiceAccount if set as false + enabled: true