From c31a0f6e5c6463a56490c1bcba91c07097123066 Mon Sep 17 00:00:00 2001 From: Denis Prokharhcyk Date: Tue, 27 Sep 2022 00:49:51 +0300 Subject: [PATCH 1/6] feat(issue-433): update terraform deploy --- deploy/k8s/aks-namespaces.tf | 65 --------------- .../k8s/charts/o2bionics-webapp/.helmignore | 23 ------ deploy/k8s/charts/o2bionics-webapp/Chart.yaml | 24 ------ .../o2bionics-webapp/templates/NOTES.txt | 22 ----- .../o2bionics-webapp/templates/_helpers.tpl | 62 -------------- .../templates/deployment.yaml | 61 -------------- .../o2bionics-webapp/templates/hpa.yaml | 28 ------- .../o2bionics-webapp/templates/ingress.yaml | 61 -------------- .../o2bionics-webapp/templates/service.yaml | 15 ---- .../templates/serviceaccount.yaml | 12 --- .../templates/tests/test-connection.yaml | 15 ---- .../k8s/charts/o2bionics-webapp/values.yaml | 82 ------------------- deploy/k8s/charts/test-app/.helmignore | 23 ------ deploy/k8s/charts/test-app/Chart.yaml | 24 ------ .../k8s/charts/test-app/templates/NOTES.txt | 22 ----- .../charts/test-app/templates/_helpers.tpl | 62 -------------- .../charts/test-app/templates/deployment.yaml | 61 -------------- deploy/k8s/charts/test-app/templates/hpa.yaml | 28 ------- .../charts/test-app/templates/ingress.yaml | 61 -------------- .../charts/test-app/templates/service.yaml | 15 ---- .../test-app/templates/serviceaccount.yaml | 12 --- .../templates/tests/test-connection.yaml | 15 ---- deploy/k8s/charts/test-app/values.yaml | 82 ------------------- deploy/k8s/dns-zones.tf | 28 ------- deploy/k8s/helm_release_o2bionics_webapp.tf | 12 --- deploy/k8s/helm_release_testapp.tf | 11 --- deploy/k8s/k8s-cluster.tf | 27 ------ deploy/k8s/k8s_acr.tf | 12 --- deploy/k8s/main.tf | 4 - deploy/k8s/monitoring.tf | 82 ------------------- deploy/k8s/providers.tf | 36 -------- deploy/k8s/release_external_dns.tf | 13 --- deploy/k8s/terraform.tfvars | 9 -- deploy/k8s/varribles.tf | 39 --------- 34 files changed, 1148 deletions(-) delete mode 100644 deploy/k8s/aks-namespaces.tf delete mode 100644 deploy/k8s/charts/o2bionics-webapp/.helmignore delete mode 100644 deploy/k8s/charts/o2bionics-webapp/Chart.yaml delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/NOTES.txt delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/_helpers.tpl delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/deployment.yaml delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/hpa.yaml delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/ingress.yaml delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/service.yaml delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/serviceaccount.yaml delete mode 100644 deploy/k8s/charts/o2bionics-webapp/templates/tests/test-connection.yaml delete mode 100644 deploy/k8s/charts/o2bionics-webapp/values.yaml delete mode 100644 deploy/k8s/charts/test-app/.helmignore delete mode 100644 deploy/k8s/charts/test-app/Chart.yaml delete mode 100644 deploy/k8s/charts/test-app/templates/NOTES.txt delete mode 100644 deploy/k8s/charts/test-app/templates/_helpers.tpl delete mode 100644 deploy/k8s/charts/test-app/templates/deployment.yaml delete mode 100644 deploy/k8s/charts/test-app/templates/hpa.yaml delete mode 100644 deploy/k8s/charts/test-app/templates/ingress.yaml delete mode 100644 deploy/k8s/charts/test-app/templates/service.yaml delete mode 100644 deploy/k8s/charts/test-app/templates/serviceaccount.yaml delete mode 100644 deploy/k8s/charts/test-app/templates/tests/test-connection.yaml delete mode 100644 deploy/k8s/charts/test-app/values.yaml delete mode 100644 deploy/k8s/dns-zones.tf delete mode 100644 deploy/k8s/helm_release_o2bionics_webapp.tf delete mode 100644 deploy/k8s/helm_release_testapp.tf delete mode 100644 deploy/k8s/k8s-cluster.tf delete mode 100644 deploy/k8s/k8s_acr.tf delete mode 100644 deploy/k8s/main.tf delete mode 100644 deploy/k8s/monitoring.tf delete mode 100644 deploy/k8s/providers.tf delete mode 100644 deploy/k8s/release_external_dns.tf delete mode 100644 deploy/k8s/terraform.tfvars delete mode 100644 deploy/k8s/varribles.tf diff --git a/deploy/k8s/aks-namespaces.tf b/deploy/k8s/aks-namespaces.tf deleted file mode 100644 index fbc4dffd..00000000 --- a/deploy/k8s/aks-namespaces.tf +++ /dev/null @@ -1,65 +0,0 @@ - -resource "kubernetes_namespace" "prod" { - metadata { - annotations = { - name = "prod" - } - - labels = { - Environment = "Production" - } - name = "prod" - } -} - -resource "kubernetes_namespace" "dev" { - metadata { - annotations = { - name = "dev" - } - - labels = { - Environment = "Development" - } - name = "dev" - } -} - -resource "kubernetes_namespace" "tst" { - metadata { - annotations = { - name = "tst" - } - - labels = { - Environment = "Test" - } - name = "tst" - } -} - -resource "kubernetes_namespace" "staging" { - metadata { - annotations = { - name = "staging" - } - - labels = { - Environment = "Staging" - } - name = "staging" - } -} - -resource "kubernetes_namespace" "devops" { - metadata { - annotations = { - name = "devops" - } - - labels = { - Environment = "Devops" - } - name = "devops" - } -} \ No newline at end of file diff --git a/deploy/k8s/charts/o2bionics-webapp/.helmignore b/deploy/k8s/charts/o2bionics-webapp/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# 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/deploy/k8s/charts/o2bionics-webapp/Chart.yaml b/deploy/k8s/charts/o2bionics-webapp/Chart.yaml deleted file mode 100644 index 6d00c107..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: o2bionics-webapp -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/NOTES.txt b/deploy/k8s/charts/o2bionics-webapp/templates/NOTES.txt deleted file mode 100644 index 85e67098..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "o2bionics-webapp.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 --namespace {{ .Release.Namespace }} svc -w {{ include "o2bionics-webapp.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "o2bionics-webapp.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - 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.kubernetes.io/name={{ include "o2bionics-webapp.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/_helpers.tpl b/deploy/k8s/charts/o2bionics-webapp/templates/_helpers.tpl deleted file mode 100644 index 0937933e..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "o2bionics-webapp.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 "o2bionics-webapp.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 "o2bionics-webapp.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "o2bionics-webapp.labels" -}} -helm.sh/chart: {{ include "o2bionics-webapp.chart" . }} -{{ include "o2bionics-webapp.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "o2bionics-webapp.selectorLabels" -}} -app.kubernetes.io/name: {{ include "o2bionics-webapp.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "o2bionics-webapp.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "o2bionics-webapp.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/deployment.yaml b/deploy/k8s/charts/o2bionics-webapp/templates/deployment.yaml deleted file mode 100644 index 05a1a3db..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/deployment.yaml +++ /dev/null @@ -1,61 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "o2bionics-webapp.fullname" . }} - labels: - {{- include "o2bionics-webapp.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "o2bionics-webapp.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "o2bionics-webapp.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "o2bionics-webapp.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: http - containerPort: 80 - protocol: TCP - livenessProbe: - httpGet: - path: / - port: http - readinessProbe: - httpGet: - path: / - port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/hpa.yaml b/deploy/k8s/charts/o2bionics-webapp/templates/hpa.yaml deleted file mode 100644 index c7c20b61..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "o2bionics-webapp.fullname" . }} - labels: - {{- include "o2bionics-webapp.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "o2bionics-webapp.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/ingress.yaml b/deploy/k8s/charts/o2bionics-webapp/templates/ingress.yaml deleted file mode 100644 index 1b74c0c8..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "o2bionics-webapp.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "o2bionics-webapp.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/service.yaml b/deploy/k8s/charts/o2bionics-webapp/templates/service.yaml deleted file mode 100644 index 4d986541..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "o2bionics-webapp.fullname" . }} - labels: - {{- include "o2bionics-webapp.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "o2bionics-webapp.selectorLabels" . | nindent 4 }} diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/serviceaccount.yaml b/deploy/k8s/charts/o2bionics-webapp/templates/serviceaccount.yaml deleted file mode 100644 index 1afa2cf7..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "o2bionics-webapp.serviceAccountName" . }} - labels: - {{- include "o2bionics-webapp.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/deploy/k8s/charts/o2bionics-webapp/templates/tests/test-connection.yaml b/deploy/k8s/charts/o2bionics-webapp/templates/tests/test-connection.yaml deleted file mode 100644 index adbc1c79..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "o2bionics-webapp.fullname" . }}-test-connection" - labels: - {{- include "o2bionics-webapp.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "o2bionics-webapp.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/deploy/k8s/charts/o2bionics-webapp/values.yaml b/deploy/k8s/charts/o2bionics-webapp/values.yaml deleted file mode 100644 index c78095ac..00000000 --- a/deploy/k8s/charts/o2bionics-webapp/values.yaml +++ /dev/null @@ -1,82 +0,0 @@ -# Default values for o2bionics-webapp. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: nginx - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 80 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/deploy/k8s/charts/test-app/.helmignore b/deploy/k8s/charts/test-app/.helmignore deleted file mode 100644 index 0e8a0eb3..00000000 --- a/deploy/k8s/charts/test-app/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# 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/deploy/k8s/charts/test-app/Chart.yaml b/deploy/k8s/charts/test-app/Chart.yaml deleted file mode 100644 index 9f0654b7..00000000 --- a/deploy/k8s/charts/test-app/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: test-app -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/deploy/k8s/charts/test-app/templates/NOTES.txt b/deploy/k8s/charts/test-app/templates/NOTES.txt deleted file mode 100644 index 2c0f109e..00000000 --- a/deploy/k8s/charts/test-app/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "test-app.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 --namespace {{ .Release.Namespace }} svc -w {{ include "test-app.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "test-app.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - 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.kubernetes.io/name={{ include "test-app.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/deploy/k8s/charts/test-app/templates/_helpers.tpl b/deploy/k8s/charts/test-app/templates/_helpers.tpl deleted file mode 100644 index 77d474ef..00000000 --- a/deploy/k8s/charts/test-app/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "test-app.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 "test-app.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 "test-app.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "test-app.labels" -}} -helm.sh/chart: {{ include "test-app.chart" . }} -{{ include "test-app.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "test-app.selectorLabels" -}} -app.kubernetes.io/name: {{ include "test-app.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "test-app.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "test-app.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/deploy/k8s/charts/test-app/templates/deployment.yaml b/deploy/k8s/charts/test-app/templates/deployment.yaml deleted file mode 100644 index 69bfe12c..00000000 --- a/deploy/k8s/charts/test-app/templates/deployment.yaml +++ /dev/null @@ -1,61 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "test-app.fullname" . }} - labels: - {{- include "test-app.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "test-app.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "test-app.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "test-app.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: http - containerPort: 80 - protocol: TCP - livenessProbe: - httpGet: - path: / - port: http - readinessProbe: - httpGet: - path: / - port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/deploy/k8s/charts/test-app/templates/hpa.yaml b/deploy/k8s/charts/test-app/templates/hpa.yaml deleted file mode 100644 index 7350552f..00000000 --- a/deploy/k8s/charts/test-app/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "test-app.fullname" . }} - labels: - {{- include "test-app.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "test-app.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/deploy/k8s/charts/test-app/templates/ingress.yaml b/deploy/k8s/charts/test-app/templates/ingress.yaml deleted file mode 100644 index 4538b070..00000000 --- a/deploy/k8s/charts/test-app/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "test-app.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "test-app.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/deploy/k8s/charts/test-app/templates/service.yaml b/deploy/k8s/charts/test-app/templates/service.yaml deleted file mode 100644 index fc4e49fe..00000000 --- a/deploy/k8s/charts/test-app/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "test-app.fullname" . }} - labels: - {{- include "test-app.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "test-app.selectorLabels" . | nindent 4 }} diff --git a/deploy/k8s/charts/test-app/templates/serviceaccount.yaml b/deploy/k8s/charts/test-app/templates/serviceaccount.yaml deleted file mode 100644 index 8dcb158f..00000000 --- a/deploy/k8s/charts/test-app/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "test-app.serviceAccountName" . }} - labels: - {{- include "test-app.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/deploy/k8s/charts/test-app/templates/tests/test-connection.yaml b/deploy/k8s/charts/test-app/templates/tests/test-connection.yaml deleted file mode 100644 index f7bc8d10..00000000 --- a/deploy/k8s/charts/test-app/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "test-app.fullname" . }}-test-connection" - labels: - {{- include "test-app.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "test-app.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/deploy/k8s/charts/test-app/values.yaml b/deploy/k8s/charts/test-app/values.yaml deleted file mode 100644 index faf2089c..00000000 --- a/deploy/k8s/charts/test-app/values.yaml +++ /dev/null @@ -1,82 +0,0 @@ -# Default values for test-app. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: nginx - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 80 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/deploy/k8s/dns-zones.tf b/deploy/k8s/dns-zones.tf deleted file mode 100644 index 6d82f2c1..00000000 --- a/deploy/k8s/dns-zones.tf +++ /dev/null @@ -1,28 +0,0 @@ -# resource "azurerm_dns_zone" "primary" { -# name = "o2bus.com" -# resource_group_name = var.aks_group_name - -# tags = { -# "type_product" = "Saas" -# "product" = "O2NextGen Platform" -# } -# } - -# # resource "azurerm_dns_a_record" "o2bus_com" { -# # name = "www" -# # zone_name = azurerm_dns_zone.primary.name -# # resource_group_name = azurerm_dns_zone.primary.resource_group_name -# # ttl = 300 -# # records = ["10.0.180.17"] #load balancer ip -# # } - -# resource "azurerm_dns_zone" "second" { -# name = "prf-cent.com" -# resource_group_name = var.aks_group_name - -# tags = { -# "type" = "client" -# "type_product" = "Saas" -# "product" = "O2NextGen Platform" -# } -# } diff --git a/deploy/k8s/helm_release_o2bionics_webapp.tf b/deploy/k8s/helm_release_o2bionics_webapp.tf deleted file mode 100644 index 41d19c88..00000000 --- a/deploy/k8s/helm_release_o2bionics_webapp.tf +++ /dev/null @@ -1,12 +0,0 @@ -# resource "helm_release" "o2bionicswebappdev" { -# name = "o2bionics-webapp" -# repository = "./charts" -# namespace = "dev" -# chart = "o2bionics-webapp" -# } -# resource "helm_release" "o2bionicswebappprod" { -# name = "o2bionics-webapp" -# repository = "./charts" -# namespace = "prod" -# chart = "o2bionics-webapp" -# } diff --git a/deploy/k8s/helm_release_testapp.tf b/deploy/k8s/helm_release_testapp.tf deleted file mode 100644 index 1c89ba95..00000000 --- a/deploy/k8s/helm_release_testapp.tf +++ /dev/null @@ -1,11 +0,0 @@ -# resource "helm_release" "testapp" { -# name = "test-app" -# repository = "./charts" -# namespace = "dev" -# chart = "test-app" -# } - -# resource "helm_release" "example" { -# name = "redis" -# chart = "bitnami/redis" -# } diff --git a/deploy/k8s/k8s-cluster.tf b/deploy/k8s/k8s-cluster.tf deleted file mode 100644 index 79512e3c..00000000 --- a/deploy/k8s/k8s-cluster.tf +++ /dev/null @@ -1,27 +0,0 @@ -resource "azurerm_kubernetes_cluster" "k8s" { - name = var.aks_cluster_name - resource_group_name = var.aks_group_name - location = var.aks_group_location - dns_prefix = var.aks_dns_prefix - - default_node_pool { - name = "system" - node_count = var.aks_node_count - vm_size = var.aks_vm_size - type = "VirtualMachineScaleSets" - enable_auto_scaling = false - } - identity { - type = "SystemAssigned" - } - # network_profile { - # load_balancer_sku = "Standard" - # network_plugin = "kubenet" # azure (CNI) - # } - - tags = { - Environment = "Production" - Product = "O2NextGen Platform" - } -} - diff --git a/deploy/k8s/k8s_acr.tf b/deploy/k8s/k8s_acr.tf deleted file mode 100644 index 02c58fa1..00000000 --- a/deploy/k8s/k8s_acr.tf +++ /dev/null @@ -1,12 +0,0 @@ -resource "azurerm_role_assignment" "role_acrpull" { - scope = azurerm_container_registry.acr.id - role_definition_name = "AcrPull" - principal_id = azurerm_kubernetes_cluster.k8s.kubelet_identity.0.object_id -} -resource "azurerm_container_registry" "acr" { - name = "o2nextgen" - resource_group_name = var.aks_group_name - location = var.aks_group_location - sku = "Standard" - admin_enabled = false -} diff --git a/deploy/k8s/main.tf b/deploy/k8s/main.tf deleted file mode 100644 index 17dc7368..00000000 --- a/deploy/k8s/main.tf +++ /dev/null @@ -1,4 +0,0 @@ -resource "azurerm_resource_group" "rg" { - name = var.aks_group_name - location = var.aks_group_location -} diff --git a/deploy/k8s/monitoring.tf b/deploy/k8s/monitoring.tf deleted file mode 100644 index 603a4534..00000000 --- a/deploy/k8s/monitoring.tf +++ /dev/null @@ -1,82 +0,0 @@ - -# resource "helm_release" "pod_identity" { -# name = "pod-identity" -# repository = "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts" -# chart = "aad-pod-identity" -# namespace = "kube-system" -# } - -# https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx -# resource "helm_release" "nginx_ingress_controller" { -# name = "nginx-ingress-controller" -# repository = "https://kubernetes.github.io/ingress-nginx" -# chart = "ingress-nginx" -# version = "4.1.3" -# namespace = "ingress" -# create_namespace = "true" - -# set { -# name = "controller.service.type" -# value = "LoadBalancer" -# } -# set { -# name = "controller.autoscaling.enabled" -# value = "true" -# } -# set { -# name = "controller.autoscaling.minReplicas" -# value = "1" -# } -# set { -# name = "controller.autoscaling.maxReplicas" -# value = "2" -# } -# } - -# # https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack -# resource "helm_release" "prometheusstack" { -# name = "prometheus-stack" -# repository = "https://prometheus-community.github.io/helm-charts" -# chart = "kube-prometheus-stack" -# namespace = "monitoring" -# create_namespace = true - -# set { -# name = "grafana.ingress.enabled" -# value = "true" -# } -# set { -# name = "grafana.ingress.ingressClassName" -# value = "nginx" -# } -# set { -# name = "grafana.ingress.path" -# value = "/(.*)" # "/grafana2/?(.*)" -# } -# # annotations: -# # nginx.ingress.kubernetes.io/ssl-redirect: "false" -# # nginx.ingress.kubernetes.io/use-regex: "true" -# # nginx.ingress.kubernetes.io/rewrite-target: /$1 -# set { -# name = "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect" -# value = "false" -# type = "string" -# } -# set { -# name = "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex" -# value = "true" -# type = "string" -# } -# set { -# name = "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target" -# value = "/$1" -# } -# set { -# name = "grafana.adminUser" -# value = var.grafana_admin_user -# } -# set { -# name = "grafana.adminPassword" -# value = var.grafana_admin_password -# } -# } diff --git a/deploy/k8s/providers.tf b/deploy/k8s/providers.tf deleted file mode 100644 index 0522ba11..00000000 --- a/deploy/k8s/providers.tf +++ /dev/null @@ -1,36 +0,0 @@ -# Configure the Microsoft Azure Provider -provider "azurerm" { - features {} -} - -provider "kubernetes" { - host = azurerm_kubernetes_cluster.k8s.kube_config.0.host - client_certificate = base64decode(azurerm_kubernetes_cluster.k8s.kube_config.0.client_certificate) - client_key = base64decode(azurerm_kubernetes_cluster.k8s.kube_config.0.client_key) - cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.k8s.kube_config.0.cluster_ca_certificate) -} - -# We strongly recommend using the required_providers block to set the -# Azure Provider source and version being used -terraform { - required_providers { - azurerm = { - source = "hashicorp/azurerm" - version = "=3.0.0" - } - kubernetes = { - source = "kubernetes" - version = "=2.8.0" - } - helm = { - source = "hashicorp/helm" - version = ">= 2.5.1" - } - } -} -provider "helm" { - kubernetes { - config_path = "~/.kube/config" - } -} - diff --git a/deploy/k8s/release_external_dns.tf b/deploy/k8s/release_external_dns.tf deleted file mode 100644 index 5fcd36c9..00000000 --- a/deploy/k8s/release_external_dns.tf +++ /dev/null @@ -1,13 +0,0 @@ -# ########## -# # data sources -# ########################## -# data "azurerm_client_config" "current" {} - - -# resource "helm_release" "extdns" { -# name = "external-dns" -# repository = "https://charts.bitnami.com/bitnami" -# chart = "external-dns" -# namespace = "external-dns" -# create_namespace = true -# } diff --git a/deploy/k8s/terraform.tfvars b/deploy/k8s/terraform.tfvars deleted file mode 100644 index f8a334de..00000000 --- a/deploy/k8s/terraform.tfvars +++ /dev/null @@ -1,9 +0,0 @@ -aks_cluster_name = "o2nextgen-aks" -aks_group_name = "aks-prods" -aks_group_location = "WestUS3" -aks_dns_prefix = "o2ngaks" -aks_vm_size = "Standard_D2_v2" -aks_node_count = 1 - -grafana_admin_user = "grafana" -grafana_admin_password = "grafana-pass" \ No newline at end of file diff --git a/deploy/k8s/varribles.tf b/deploy/k8s/varribles.tf deleted file mode 100644 index f88ed365..00000000 --- a/deploy/k8s/varribles.tf +++ /dev/null @@ -1,39 +0,0 @@ -variable "aks_group_name" { - type = string - description = "Resourse group for AKS cluster" -} - -variable "aks_group_location" { - type = string - description = "Resourse group location for AKS cluster" -} - -variable "aks_dns_prefix" { - type = string - description = "DNS prefix for AKS Cluster" -} - -variable "aks_vm_size" { - type = string - description = "Name VM for AKS Cluster" -} - - -variable "aks_node_count" { - type = number - description = "Node count for AKS Cluster" -} -variable "aks_cluster_name" { - type = string - description = "AKS Cluster Name" -} - -variable "grafana_admin_user" { - type = string - description = "Admin user to access Grafana dashboard" -} - -variable "grafana_admin_password" { - type = string - description = "Admin password to access Grafana dashboard" -} From 98da8086d7b7aa0dd78ad7f88e1de30ba7f1a3e2 Mon Sep 17 00:00:00 2001 From: Denis Prokharhcyk Date: Wed, 28 Sep 2022 12:55:51 +0300 Subject: [PATCH 2/6] feat(issue-433): update terraform deploy --- .../azure/terraform/delete-infastructure.sh | 13 + .../clouds/azure/terraform/deploy-commands.sh | 45 + .../azure/terraform/deploy-infastructure.sh | 55 + .../clouds/azure/terraform/main.tf | 597 ++ .../azure/terraform/recreate-infastructure.sh | 44 + .../clouds/azure/terraform/terraform.tfstate | 1542 ++++ .../azure/terraform/terraform.tfstate.backup | 1472 ++++ .../clouds/azure/terraform/terraform.tfvars | 10 + .../clouds/azure/terraform/tfplan | Bin 0 -> 52167 bytes .../clouds/azure/terraform/tfplan.json | 7081 +++++++++++++++++ .../clouds/azure/terraform/tls-issuer.sh | 91 + .../clouds/azure/terraform/variables.tf | 39 + .../helm_charts/o2bus-webapp/.helmignore | 23 + .../helm_charts/o2bus-webapp/Chart.yaml | 24 + .../o2bus-webapp/templates/NOTES.txt | 22 + .../o2bus-webapp/templates/_helpers.tpl | 62 + .../o2bus-webapp/templates/deployment.yaml | 61 + .../o2bus-webapp/templates/hpa.yaml | 28 + .../o2bus-webapp/templates/ingress.yaml | 61 + .../o2bus-webapp/templates/service.yaml | 15 + .../templates/serviceaccount.yaml | 12 + .../templates/tests/test-connection.yaml | 15 + .../helm_charts/o2bus-webapp/values.yaml | 83 + .../helm_charts/o2nextgen-auth/.helmignore | 23 + .../helm_charts/o2nextgen-auth/Chart.yaml | 24 + .../o2nextgen-auth/templates/NOTES.txt | 22 + .../o2nextgen-auth/templates/_helpers.tpl | 62 + .../o2nextgen-auth/templates/deployment.yaml | 61 + .../o2nextgen-auth/templates/hpa.yaml | 28 + .../o2nextgen-auth/templates/ingress.yaml | 61 + .../o2nextgen-auth/templates/service.yaml | 15 + .../templates/serviceaccount.yaml | 12 + .../templates/tests/test-connection.yaml | 15 + .../helm_charts/o2nextgen-auth/values.yaml | 89 + 34 files changed, 11807 insertions(+) create mode 100644 deploy/release-deploy/clouds/azure/terraform/delete-infastructure.sh create mode 100644 deploy/release-deploy/clouds/azure/terraform/deploy-commands.sh create mode 100644 deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh create mode 100644 deploy/release-deploy/clouds/azure/terraform/main.tf create mode 100644 deploy/release-deploy/clouds/azure/terraform/recreate-infastructure.sh create mode 100644 deploy/release-deploy/clouds/azure/terraform/terraform.tfstate create mode 100644 deploy/release-deploy/clouds/azure/terraform/terraform.tfstate.backup create mode 100644 deploy/release-deploy/clouds/azure/terraform/terraform.tfvars create mode 100644 deploy/release-deploy/clouds/azure/terraform/tfplan create mode 100644 deploy/release-deploy/clouds/azure/terraform/tfplan.json create mode 100644 deploy/release-deploy/clouds/azure/terraform/tls-issuer.sh create mode 100644 deploy/release-deploy/clouds/azure/terraform/variables.tf create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/.helmignore create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/.helmignore create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml diff --git a/deploy/release-deploy/clouds/azure/terraform/delete-infastructure.sh b/deploy/release-deploy/clouds/azure/terraform/delete-infastructure.sh new file mode 100644 index 00000000..6384eac6 --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/delete-infastructure.sh @@ -0,0 +1,13 @@ + +# initialize terraform Azure modules +terraform init + +# delete the infra +terraform destroy -auto-approve + +# cleanup files +rm terraform.tfstate +rm terraform.tfstate.backup +rm tfplan +rm tfplan.json +rm -r .terraform/ \ No newline at end of file diff --git a/deploy/release-deploy/clouds/azure/terraform/deploy-commands.sh b/deploy/release-deploy/clouds/azure/terraform/deploy-commands.sh new file mode 100644 index 00000000..8cc32aa1 --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/deploy-commands.sh @@ -0,0 +1,45 @@ +# make sure terraform CLI is installed +terraform + +# format the tf files +terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan -out tfplan + +# show the tfplan file +terraform show -json tfplan +terraform show -json tfplan >> tfplan.json + +# Format tfplan.json file +terraform show -json tfplan | jq '.' > tfplan.json + +# show only the changes +cat tfplan.json | jq -r '(.resource_changes[] | [.change.actions[], .type, .change.after.name]) | @tsv' +cat tfplan.json | jq '[.resource_changes[] | {type: .type, name: .change.after.name, actions: .change.actions[]}]' + +# apply the infra changes +terraform apply tfplan + + +read -t 240 -p "Press [Enter] key to start remove all resources..." + + +# initialize terraform Azure modules +terraform init + +# delete the infra +terraform destroy -auto-approve + +# cleanup files +rm terraform.tfstate +rm terraform.tfstate.backup +rm tfplan +rm tfplan.json +rm -r .terraform/ \ No newline at end of file diff --git a/deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh b/deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh new file mode 100644 index 00000000..2552da0c --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh @@ -0,0 +1,55 @@ +# make sure terraform CLI is installed +terraform + +# format the tf files +terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan -out tfplan + +# show the tfplan file +terraform show -json tfplan +terraform show -json tfplan >> tfplan.json + +# Format tfplan.json file +terraform show -json tfplan | jq '.' > tfplan.json + +# show only the changes +cat tfplan.json | jq -r '(.resource_changes[] | [.change.actions[], .type, .change.after.name]) | @tsv' +cat tfplan.json | jq '[.resource_changes[] | {type: .type, name: .change.after.name, actions: .change.actions[]}]' + +# apply the infra changes +terraform apply tfplan + +# connect to AKS cluster +az aks get-credentials --name o2nextgen-aks --resource-group o2bionics-products --overwrite-existing + +# cluster authN & authZ is needed, so this won't work +kubectl get nodes + +# connect with kubelogin and Azure CLI identity +kubelogin convert-kubeconfig -l azurecli + +# now this works after auth using kubelogin +kubectl get nodes +# NAME STATUS ROLES AGE VERSION +# aks-systempool-15239186-vmss000000 Ready agent 7m30s v1.23.5 +# aks-systempool-15239186-vmss000001 Ready agent 7m40s v1.23.5 + +# now lets check if Terraform succeeded to create the namespace +kubectl get ns +# NAME STATUS AGE +# apps-namespace Active 6m48s +# default Active 8m55s +# kube-node-lease Active 8m58s +# kube-public Active 8m58s +# kube-system Active 8m58s + +kubectl get deploy -A +kubectl get all --all-namespaces \ No newline at end of file diff --git a/deploy/release-deploy/clouds/azure/terraform/main.tf b/deploy/release-deploy/clouds/azure/terraform/main.tf new file mode 100644 index 00000000..ec506329 --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/main.tf @@ -0,0 +1,597 @@ +# Configure the Microsoft Azure Provider +provider "azurerm" { + features {} +} + +provider "helm" { + kubernetes { + host = azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.host + client_certificate = base64decode(azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.client_certificate) + client_key = base64decode(azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.client_key) + cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.cluster_ca_certificate) + } +} + +provider "kubernetes" { + host = azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.host + client_certificate = base64decode(azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.client_certificate) + client_key = base64decode(azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.client_key) + cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.o2nextgen-aks.kube_config.0.cluster_ca_certificate) +} + +# # Configure the Azure Active Directory Provider +# provider "azuread" { +# tenant_id = "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" +# } +# provider "azuread" { +# # NOTE: Environment Variables can also be used for Service Principal authentication +# # Terraform also supports authenticating via the Azure CLI too. +# # see here for more info: http://terraform.io/docs/providers/azuread/index.html + +# # subscription_id = "..." +# # client_id = "..." +# # client_secret = "..." +# # tenant_id = "..." +# } +# Configure the Azure Active Directory Provider +provider "azuread" { + # subscription_id="f1404c6e-2728-40ae-9cd2-fee75bde4c04" + tenant_id = "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" +} + +provider "tls" {} +# We strongly recommend using the required_providers block to set the +# Azure Provider source and version being used +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">= 3.0.0" + } + kubernetes = { + source = "kubernetes" + version = "=2.8.0" + } + helm = { + source = "hashicorp/helm" + version = ">= 2.5.1" + } + azuread = { + source = "hashicorp/azuread" + version = "~> 2.15.0" + } + random = { + source = "hashicorp/random" + } + time = { + source = "hashicorp/time" + } + } +} + + +# Retrieve domain information +data "azuread_domains" "example" { + only_initial = true +} + +# ========================================== RESOURCE ========================================== +resource "azurerm_resource_group" "aks-resource-group" { + name = var.k8s_resource_group + location = var.k8s_location +} + +# ========================================== K8S ========================================== +resource "azurerm_kubernetes_cluster" "o2nextgen-aks" { + name = var.k8s_cluster_name + resource_group_name = var.k8s_resource_group + location = var.k8s_location + dns_prefix = var.k8s_dns_prefix + + default_node_pool { + name = "system" + node_count = var.k8s_node_count + vm_size = var.k8s_vm_size + type = "VirtualMachineScaleSets" + enable_auto_scaling = false + } + identity { + type = "SystemAssigned" + } + # network_profile { + # load_balancer_sku = "Standard" + # network_plugin = "kubenet" # azure (CNI) + # } + + tags = { + Environment = "Production" + Product = "O2NextGen Platform" + } + + depends_on = [ + azurerm_resource_group.aks-resource-group + ] +} + + +# ========================================== ACR ========================================== +# ========================================================================================= +resource "azurerm_role_assignment" "role-acrpull" { + scope = azurerm_container_registry.o2nextgen-aks-acr.id + role_definition_name = "AcrPull" + principal_id = azurerm_kubernetes_cluster.o2nextgen-aks.kubelet_identity.0.object_id + depends_on = [ + azurerm_container_registry.o2nextgen-aks-acr + ] +} +resource "azurerm_container_registry" "o2nextgen-aks-acr" { + name = "o2nextgen" + resource_group_name = var.k8s_resource_group + location = var.k8s_location + sku = "Standard" + admin_enabled = false + depends_on = [ + azurerm_kubernetes_cluster.o2nextgen-aks + ] +} + +# ============================= AKS PREP - DNS ZONE in AKS ================================ +# ========================================================================================= +resource "azurerm_dns_zone" "primary-dns-zone" { + depends_on = [ + azurerm_kubernetes_cluster.o2nextgen-aks + ] + name = "o2bus.com" + resource_group_name = var.k8s_resource_group + + tags = { + "type_product" = "Saas" + "product" = "O2NextGen Platform" + } +} +# resource "azurerm_dns_zone" "second-dns-zone" { +# depends_on = [ +# azurerm_kubernetes_cluster.o2nextgen-aks +# ] +# name = "prf-cent.com" +# resource_group_name = var.k8s_resource_group + +# tags = { +# "type" = "client" +# "type_product" = "Saas" +# "product" = "O2NextGen Platform" +# } +# } + + +# resource "azuread_application" "example" { +# display_name = "sp-external-dns" +# owners = [data.azuread_client_config.current.object_id] +# } +# resource "azuread_service_principal" "sp-external-dns" { +# principal_id = azuread_service_principal.sp-external-dns.template_id +# } + +# current subscription +data "azurerm_subscription" "current" {} + +# # current client +data "azuread_client_config" "current" {} + +output "current_subscription_display_name" { + value = data.azurerm_subscription.current.display_name +} + +output "object_id" { + value = data.azuread_client_config.current.object_id +} + +# Create an application +resource "azuread_application" "example" { + depends_on = [ + azurerm_dns_zone.primary-dns-zone + ] + display_name = "External-DNS-SP" + owners = [data.azuread_client_config.current.object_id] +} + +# # Create a service principal +# resource "azuread_service_principal" "example" { +# application_id = azuread_application.example.application_id +# owners = [data.azuread_client_config.current.object_id] +# } + +# Create Service Principal linked to the Application +resource "azuread_service_principal" "current" { + application_id = azuread_application.example.application_id + app_role_assignment_required = false + owners = [data.azuread_client_config.current.object_id] +} + +# # Create role assignment for Service Principal +# resource "azurerm_role_assignment" "contributor" { +# scope = data.azurerm_subscription.current.id +# role_definition_name = "Contributor" +# principal_id = azuread_service_principal.current.id +# } + +# # # Generate random string to be used for Service Principal password +# resource "random_string" "password" { +# length = 32 +# special = true +# } +resource "azuread_application_password" "current" { + application_object_id = azuread_application.example.object_id +} +# resource "time_rotating" "example" { +# rotation_days = 7 +# } +# # Create Service Principal password +# resource "azuread_service_principal_password" "main" { +# service_principal_id = azuread_service_principal.current.object_id +# rotate_when_changed = { +# rotation = time_rotating.example.id +# } +# } + +# Create role assignment for service principal +# https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment +resource "azurerm_role_assignment" "current" { + scope = data.azurerm_subscription.current.id + role_definition_name = "Contributor" + + # When assigning to a SP, use the object_id, not the appId + # see: https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-cli + principal_id = azuread_service_principal.current.object_id +} + +# Create role assignment for service principal +resource "azurerm_role_assignment" "main" { + scope = azurerm_dns_zone.primary-dns-zone.id + role_definition_name = "DNS Zone Contributor" + principal_id = azuread_service_principal.current.object_id +} + +# Create role assignment for service principal +resource "azurerm_role_assignment" "reader" { + scope = azurerm_resource_group.aks-resource-group.id + role_definition_name = "Reader" + principal_id = azuread_service_principal.current.object_id +} + +output "display_name" { + value = azuread_service_principal.current.display_name +} + +output "client_id" { + value = azuread_application.example.application_id +} + +output "client_secret" { + value = azuread_application_password.current.value + sensitive = true +} + + +# # Generate a private key +# resource "tls_private_key" "example" { +# algorithm = "RSA" +# rsa_bits = 2048 +# } + +# # Generate a self signed certificate +# resource "tls_self_signed_cert" "example" { +# private_key_pem = tls_private_key.example.private_key_pem + +# subject { +# common_name = azuread_application.example.display_name +# organization = "O2 Bionics LLC" +# } + +# allowed_uses = ["client_auth", "server_auth"] +# validity_period_hours = 8760 +# } + +# # Create Application certificate (client certificate) +# resource "azuread_application_certificate" "example" { +# application_object_id = azuread_application.example.object_id +# type = "AsymmetricX509Cert" +# end_date_relative = "4320h" # expire in 6 months +# value = tls_self_signed_cert.example.cert_pem +# } + +# # Create Application password (client secret) +# resource "azuread_application_password" "example" { +# application_object_id = azuread_application.example.object_id +# end_date_relative = "4320h" # expire in 6 months +# } +# output "account_id" { +# value = data.azurerm_client_config.current.service_principal_application_id +# } + +# resource "azuread_application" "example" { +# display_name = "External-DNS-SP" +# owners = [data.azurerm_client_config.current.object_id] +# } + +# resource "azuread_service_principal" "example" { +# application_id = azuread_application.example.application_id +# app_role_assignment_required = false +# owners = [data.azurerm_client_config.current.object_id] +# } + +# data "azuread_application_template" "example" { +# display_name = "External-DNS-SP" +# } + +# resource "azuread_application" "example" { +# display_name = "sp-external-dns" +# template_id = data.azuread_application_template.example.template_id +# } + +# resource "azuread_service_principal" "example" { +# application_id = azuread_application.example.application_id +# use_existing = true +# } + +# resource "azurerm_role_assignment" "role-secret-officer" { +# role_definition_name = "Key Vault Secrets Officer" +# principal_id = data.azurerm_client_config.current.object_id +# scope = azurerm_key_vault.keyvault.id +# } +# ============================= MONITORING TOOLS ========================================== +# ========================================================================================= +resource "helm_release" "aad-pod-identity" { + depends_on = [ + azurerm_resource_group.aks-resource-group, + azurerm_kubernetes_cluster.o2nextgen-aks, + azurerm_container_registry.o2nextgen-aks-acr + ] + name = "aad-pod-identity" + repository = "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts" + chart = "aad-pod-identity" + namespace = "kube-system" +} + +# https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx +resource "helm_release" "nginx-ingress-controller" { + name = "nginx-ingress-controller" + repository = "https://kubernetes.github.io/ingress-nginx" + chart = "ingress-nginx" + version = "4.1.3" + namespace = "ingress" + create_namespace = "true" + + set { + name = "controller.service.type" + value = "LoadBalancer" + } + set { + name = "controller.autoscaling.enabled" + value = "true" + } + set { + name = "controller.autoscaling.minReplicas" + value = "1" + } + set { + name = "controller.autoscaling.maxReplicas" + value = "2" + } +} + +# https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack +resource "helm_release" "prometheus-stack" { + depends_on = [ + helm_release.nginx-ingress-controller + ] + name = "prometheus-stack" + repository = "https://prometheus-community.github.io/helm-charts" + chart = "kube-prometheus-stack" + namespace = "monitoring" + create_namespace = true + + set { + name = "grafana.ingress.enabled" + value = "true" + } + set { + name = "grafana.ingress.ingressClassName" + value = "nginx" + } + set { + name = "grafana.ingress.path" + value = "/(.*)" # "/grafana2/?(.*)" + } + # annotations: + # nginx.ingress.kubernetes.io/ssl-redirect: "false" + # nginx.ingress.kubernetes.io/use-regex: "true" + # nginx.ingress.kubernetes.io/rewrite-target: /$1 + set { + name = "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect" + value = "false" + type = "string" + } + set { + name = "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex" + value = "true" + type = "string" + } + set { + name = "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target" + value = "/$1" + } + set { + name = "grafana.adminUser" + value = var.grafana_admin_user + } + set { + name = "grafana.adminPassword" + value = var.grafana_admin_password + } +} + +resource "helm_release" "external-dns" { + depends_on = [ + azurerm_dns_zone.primary-dns-zone + ] + name = "external-dns" + repository = "https://charts.bitnami.com/bitnami" + chart = "external-dns" + namespace = "external-dns" + create_namespace = true + + set { + name = "txtOwnerId" + value = var.k8s_cluster_name + } + set { + name = "provider" + value = "azure" + } + set { + name = "logLevel" + value = "debug" + } + set { + name = "policy" + value = "sync" + } + # set { + # name = "domainFilters" + # value = "{$azurerm_dns_zone.primary-dns-zone.name}" + # } + set { + name = "azure.resourceGroup" + value = var.k8s_resource_group //"AzureDNS" //var.k8s_resource_group //"AzureDNS" // + } + set { + name = "azure.tenantId" + value = data.azuread_client_config.current.tenant_id + } + set { + name = "azure.subscriptionId" + value = data.azurerm_subscription.current.id + } + set { + name = "azure.aadClientId" + value = azuread_application.example.application_id + } + set { + name = "azure.aadClientSecret" + value = azuread_application_password.current.value + } + # --set txtOwnerId=$AZ_AKS_NAME \ + # --set provider=azure \ + # --set azure.resourceGroup=$AZ_DNS_GROUP \ + # --set txtOwnerId=$AZ_AKS_NAME \ + # --set azure.tenantId=$AZ_TENANT_ID \ + # --set azure.subscriptionId=$AZ_SUBSCRIPTION_ID \ + # --set azure.aadClientId=$SP_CLIENT_ID \ + # --set azure.aadClientSecret="$SP_CLIENT_SECRET" \ + # --set azure.cloud=AzurePublicCloud \ + # --set policy=sync \ + # --set domainFilters={$DOMAIN_NAME} + +} +resource "helm_release" "cert-manager" { + name = "cert-manager" + namespace = "cert-manager" + repository = "https://charts.jetstack.io" + chart = "cert-manager" + version = "1.6.1" + create_namespace = true + set { + name = "installCRDs" + value = "true" + } + # set { + # name = "domainFilters" + # value = "o2bus.com" + # } +} +# ============================= AKS PREP - Namespaces in AKS ============================== +# ========================================================================================= +resource "kubernetes_namespace" "prod" { + metadata { + annotations = { + name = "apps-prod" + } + + labels = { + Environment = "Production" + } + name = "apps-prod" + } +} + +resource "kubernetes_namespace" "dev" { + metadata { + annotations = { + name = "apps-dev" + } + + labels = { + Environment = "Development" + } + name = "apps-dev" + } +} + +resource "kubernetes_namespace" "tst" { + metadata { + annotations = { + name = "apps-tst" + } + + labels = { + Environment = "Test" + } + name = "apps-tst" + } +} + +resource "kubernetes_namespace" "staging" { + metadata { + annotations = { + name = "apps-staging" + } + + labels = { + Environment = "Staging" + } + name = "apps-staging" + } +} + +resource "kubernetes_namespace" "devops" { + metadata { + annotations = { + name = "apps-devops" + } + + labels = { + Environment = "Devops" + } + name = "apps-devops" + } +} + + + +# ============================= INSTALL APPLICATION ======================================= +# ========================================================================================= +resource "helm_release" "o2nextgen-auth" { + name = "o2nextgen-auth" + namespace = "apps-prod" + repository = "../../../helm_charts" + chart = "o2nextgen-auth" +} +resource "helm_release" "o2bus-webapp" { + name = "o2bus-webapp" + namespace = "apps-prod" + repository = "../../../helm_charts" + chart = "o2bus-webapp" +} + + diff --git a/deploy/release-deploy/clouds/azure/terraform/recreate-infastructure.sh b/deploy/release-deploy/clouds/azure/terraform/recreate-infastructure.sh new file mode 100644 index 00000000..1ac4d41d --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/recreate-infastructure.sh @@ -0,0 +1,44 @@ + +# initialize terraform Azure modules +terraform init + +# delete the infra +terraform destroy -auto-approve + +# cleanup files +rm terraform.tfstate +rm terraform.tfstate.backup +rm tfplan +rm tfplan.json +rm -r .terraform/ + + +# make sure terraform CLI is installed +terraform + +# format the tf files +terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan -out tfplan + +# show the tfplan file +terraform show -json tfplan +terraform show -json tfplan >> tfplan.json + +# Format tfplan.json file +terraform show -json tfplan | jq '.' > tfplan.json + +# show only the changes +cat tfplan.json | jq -r '(.resource_changes[] | [.change.actions[], .type, .change.after.name]) | @tsv' +cat tfplan.json | jq '[.resource_changes[] | {type: .type, name: .change.after.name, actions: .change.actions[]}]' + +# apply the infra changes +terraform apply tfplan + diff --git a/deploy/release-deploy/clouds/azure/terraform/terraform.tfstate b/deploy/release-deploy/clouds/azure/terraform/terraform.tfstate new file mode 100644 index 00000000..8dd4ccb8 --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/terraform.tfstate @@ -0,0 +1,1542 @@ +{ + "version": 4, + "terraform_version": "1.2.9", + "serial": 58, + "lineage": "63489a0a-daf7-a393-1b70-f5d769dd6fa6", + "outputs": { + "client_id": { + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "type": "string" + }, + "client_secret": { + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb", + "type": "string", + "sensitive": true + }, + "current_subscription_display_name": { + "value": "paid-subscription", + "type": "string" + }, + "display_name": { + "value": "External-DNS-SP", + "type": "string" + }, + "object_id": { + "value": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "type": "string" + } + }, + "resources": [ + { + "mode": "data", + "type": "azuread_client_config", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "client_id": "04b07795-8ddb-461a-bbee-02f9e1bf7b46", + "id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6-04b07795-8ddb-461a-bbee-02f9e1bf7b46-ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "object_id": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "timeouts": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "data", + "type": "azuread_domains", + "name": "example", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "admin_managed": null, + "domains": [ + { + "admin_managed": true, + "authentication_type": "Managed", + "default": true, + "domain_name": "o2bionicshotmail.onmicrosoft.com", + "initial": true, + "root": true, + "supported_services": [ + "Email", + "OfficeCommunicationsOnline" + ], + "verified": true + } + ], + "id": "domains#f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6#ZFYJzSzr82ymyVfK_gF6i8a-KPM=", + "include_unverified": null, + "only_default": null, + "only_initial": true, + "only_root": null, + "supports_services": null, + "timeouts": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "data", + "type": "azurerm_subscription", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "display_name": "paid-subscription", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "location_placement_id": "Public_2014-09-01", + "quota_id": "PayAsYouGo_2014-09-01", + "spending_limit": "Off", + "state": "Enabled", + "subscription_id": "f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "tags": {}, + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "timeouts": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "managed", + "type": "azuread_application", + "name": "example", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "api": [ + { + "known_client_applications": [], + "mapped_claims_enabled": false, + "oauth2_permission_scope": [], + "requested_access_token_version": 1 + } + ], + "app_role": [], + "app_role_ids": {}, + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "device_only_auth_enabled": false, + "disabled_by_microsoft": "\u003cnil\u003e", + "display_name": "External-DNS-SP", + "fallback_public_client_enabled": false, + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "group_membership_claims": [], + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "identifier_uris": [], + "logo_image": "", + "logo_url": "", + "marketing_url": "", + "oauth2_permission_scope_ids": {}, + "oauth2_post_response_required": false, + "object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "prevent_duplicate_names": false, + "privacy_statement_url": "", + "public_client": [ + { + "redirect_uris": [] + } + ], + "publisher_domain": "o2bionicshotmail.onmicrosoft.com", + "required_resource_access": [], + "sign_in_audience": "AzureADMyOrg", + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "support_url": "", + "tags": [], + "template_id": "", + "terms_of_service_url": "", + "timeouts": null, + "web": [ + { + "homepage_url": "", + "implicit_grant": [ + { + "access_token_issuance_enabled": false, + "id_token_issuance_enabled": false + } + ], + "logout_url": "", + "redirect_uris": [] + } + ] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJyZWFkIjozMDAwMDAwMDAwMDAsInVwZGF0ZSI6NjAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", + "dependencies": [ + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azuread_application_password", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "application_object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "display_name": null, + "end_date": "2024-09-27T23:44:40Z", + "end_date_relative": null, + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9/password/6c924c19-e789-4549-a35a-b09cfc673d66", + "key_id": "6c924c19-e789-4549-a35a-b09cfc673d66", + "rotate_when_changed": null, + "start_date": "2022-09-27T23:44:40Z", + "timeouts": null, + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo5MDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJyZWFkIjozMDAwMDAwMDAwMDAsInVwZGF0ZSI6MzAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", + "dependencies": [ + "azuread_application.example", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azuread_service_principal", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "account_enabled": true, + "alternative_names": [], + "app_role_assignment_required": false, + "app_role_ids": {}, + "app_roles": [], + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "application_tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "description": "", + "display_name": "External-DNS-SP", + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "features": [ + { + "custom_single_sign_on_app": false, + "enterprise_application": false, + "gallery_application": false, + "visible_to_users": true + } + ], + "homepage_url": "", + "id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "login_url": "", + "logout_url": "", + "notes": "", + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "object_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "preferred_single_sign_on_mode": "", + "redirect_uris": [], + "saml_metadata_url": "", + "saml_single_sign_on": [ + { + "relay_state": "" + } + ], + "service_principal_names": [], + "sign_in_audience": "AzureADMyOrg", + "tags": [], + "timeouts": null, + "type": "Application", + "use_existing": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJyZWFkIjozMDAwMDAwMDAwMDAsInVwZGF0ZSI6NjAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_container_registry", + "name": "o2nextgen-aks-acr", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 2, + "attributes": { + "admin_enabled": false, + "admin_password": "", + "admin_username": "", + "anonymous_pull_enabled": false, + "data_endpoint_enabled": false, + "encryption": [ + { + "enabled": false, + "identity_client_id": "", + "key_vault_key_id": "" + } + ], + "export_policy_enabled": true, + "georeplications": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "identity": [], + "location": "westus3", + "login_server": "o2nextgen.azurecr.io", + "name": "o2nextgen", + "network_rule_bypass_option": "AzureServices", + "network_rule_set": [], + "public_network_access_enabled": true, + "quarantine_policy_enabled": false, + "resource_group_name": "o2bionics-products", + "retention_policy": [ + { + "days": 7, + "enabled": false + } + ], + "sku": "Standard", + "tags": {}, + "timeouts": null, + "trust_policy": [ + { + "enabled": false + } + ], + "zone_redundancy_enabled": false + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIyIn0=", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_dns_zone", + "name": "primary-dns-zone", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "max_number_of_record_sets": 10000, + "name": "o2bus.com", + "name_servers": [ + "ns1-32.azure-dns.com.", + "ns2-32.azure-dns.net.", + "ns3-32.azure-dns.org.", + "ns4-32.azure-dns.info." + ], + "number_of_record_sets": 4, + "resource_group_name": "o2bionics-products", + "soa_record": [ + { + "email": "azuredns-hostmaster.microsoft.com", + "expire_time": 2419200, + "fqdn": "o2bus.com.", + "host_name": "ns1-32.azure-dns.com.", + "minimum_ttl": 300, + "refresh_time": 3600, + "retry_time": 300, + "serial_number": 1, + "tags": {}, + "ttl": 3600 + } + ], + "tags": { + "product": "O2NextGen Platform", + "type_product": "Saas" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_kubernetes_cluster", + "name": "o2nextgen-aks", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 2, + "attributes": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "automatic_channel_upgrade": "", + "azure_active_directory_role_based_access_control": [], + "azure_policy_enabled": false, + "default_node_pool": [ + { + "capacity_reservation_group_id": "", + "enable_auto_scaling": false, + "enable_host_encryption": false, + "enable_node_public_ip": false, + "fips_enabled": false, + "host_group_id": "", + "kubelet_config": [], + "kubelet_disk_type": "OS", + "linux_os_config": [], + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_count": 1, + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "only_critical_addons_enabled": false, + "orchestrator_version": "", + "os_disk_size_gb": 128, + "os_disk_type": "Managed", + "os_sku": "Ubuntu", + "pod_subnet_id": "", + "proximity_placement_group_id": "", + "tags": {}, + "type": "VirtualMachineScaleSets", + "ultra_ssd_enabled": false, + "upgrade_settings": [], + "vm_size": "Standard_D2_v2", + "vnet_subnet_id": "", + "zones": [] + } + ], + "disk_encryption_set_id": "", + "dns_prefix": "aks", + "dns_prefix_private_cluster": "", + "edge_zone": "", + "enable_pod_security_policy": false, + "fqdn": "aks-62baec49.hcp.westus3.azmk8s.io", + "http_application_routing_enabled": false, + "http_application_routing_zone_name": "", + "http_proxy_config": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerService/managedClusters/o2nextgen-aks", + "identity": [ + { + "identity_ids": [], + "principal_id": "673d7ee5-59e9-4177-893a-154bf2411e58", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "type": "SystemAssigned" + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "host": "https://aks-62baec49.hcp.westus3.azmk8s.io:443", + "password": "85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf", + "username": "clusterUser_o2bionics-products_o2nextgen-aks" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://aks-62baec49.hcp.westus3.azmk8s.io:443\n name: o2nextgen-aks\ncontexts:\n- context:\n cluster: o2nextgen-aks\n user: clusterUser_o2bionics-products_o2nextgen-aks\n name: o2nextgen-aks\ncurrent-context: o2nextgen-aks\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_o2bionics-products_o2nextgen-aks\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf\n", + "kubelet_identity": [ + { + "client_id": "a7b1e297-2eb0-4fc0-acea-0b7dd9ac7ec6", + "object_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "user_assigned_identity_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.ManagedIdentity/userAssignedIdentities/o2nextgen-aks-agentpool" + } + ], + "kubernetes_version": "1.23.8", + "linux_profile": [], + "local_account_disabled": false, + "location": "westus3", + "maintenance_window": [], + "microsoft_defender": [], + "name": "o2nextgen-aks", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "ip_versions": [ + "IPv4" + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.Network/publicIPAddresses/a671c948-31c9-41d8-9f2d-73edf7531002" + ], + "idle_timeout_in_minutes": 0, + "managed_outbound_ip_count": 1, + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [], + "outbound_ports_allocated": 0 + } + ], + "load_balancer_sku": "standard", + "nat_gateway_profile": [], + "network_mode": "", + "network_plugin": "kubenet", + "network_policy": "", + "outbound_type": "loadBalancer", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_o2bionics-products_o2nextgen-aks_westus3", + "oidc_issuer_enabled": false, + "oidc_issuer_url": "", + "oms_agent": [], + "open_service_mesh_enabled": false, + "portal_fqdn": "aks-62baec49.portal.hcp.westus3.azmk8s.io", + "private_cluster_enabled": false, + "private_cluster_public_fqdn_enabled": false, + "private_dns_zone_id": "", + "private_fqdn": "", + "public_network_access_enabled": true, + "resource_group_name": "o2bionics-products", + "role_based_access_control_enabled": true, + "run_command_enabled": true, + "service_principal": [], + "sku_tier": "Free", + "tags": { + "Environment": "Production", + "Product": "O2NextGen Platform" + }, + "timeouts": null, + "windows_profile": [] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIyIn0=", + "dependencies": [ + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-resource-group", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "location": "westus3", + "name": "o2bionics-products", + "tags": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleAssignments/a964cad9-e2af-c584-abeb-260ba07b73d4", + "name": "a964cad9-e2af-c584-abeb-260ba07b73d4", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", + "role_definition_name": "Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current", + "data.azurerm_subscription.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "main", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com/providers/Microsoft.Authorization/roleAssignments/1e321e91-e008-911f-1259-daaa91498ded", + "name": "1e321e91-e008-911f-1259-daaa91498ded", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/befefa01-2a29-4197-83a8-272ff33ce314", + "role_definition_name": "DNS Zone Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "reader", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Authorization/roleAssignments/2790a8c2-19c3-bd19-676e-be62e078963a", + "name": "2790a8c2-19c3-bd19-676e-be62e078963a", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", + "role_definition_name": "Reader", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "role-acrpull", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen/providers/Microsoft.Authorization/roleAssignments/88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "name": "88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "principal_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d", + "role_definition_name": "AcrPull", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azurerm_container_registry.o2nextgen-aks-acr", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "aad-pod-identity", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "aad-pod-identity", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "aad-pod-identity", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.8.12", + "chart": "aad-pod-identity", + "name": "aad-pod-identity", + "namespace": "kube-system", + "revision": 1, + "values": "null", + "version": "4.1.13" + } + ], + "name": "aad-pod-identity", + "namespace": "kube-system", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.13", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_container_registry.o2nextgen-aks-acr", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "cert-manager", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "cert-manager", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "cert-manager", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1.6.1", + "chart": "cert-manager", + "name": "cert-manager", + "namespace": "cert-manager", + "revision": 1, + "values": "{\"installCRDs\":true}", + "version": "v1.6.1" + } + ], + "name": "cert-manager", + "namespace": "cert-manager", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.jetstack.io", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "installCRDs", + "type": "", + "value": "true" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "v1.6.1", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "external-dns", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "external-dns", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "external-dns", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.12.2", + "chart": "external-dns", + "name": "external-dns", + "namespace": "external-dns", + "revision": 1, + "values": "{\"azure\":{\"aadClientId\":\"4acf4b9b-9507-44ae-83ff-43a8b0a2d45e\",\"aadClientSecret\":\"xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb\",\"resourceGroup\":\"o2bionics-products\",\"subscriptionId\":\"/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04\",\"tenantId\":\"f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6\"},\"logLevel\":\"debug\",\"policy\":\"sync\",\"provider\":\"azure\",\"txtOwnerId\":\"o2nextgen-aks\"}", + "version": "6.10.0" + } + ], + "name": "external-dns", + "namespace": "external-dns", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.bitnami.com/bitnami", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "azure.aadClientId", + "type": "", + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e" + }, + { + "name": "azure.aadClientSecret", + "type": "", + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + { + "name": "azure.resourceGroup", + "type": "", + "value": "o2bionics-products" + }, + { + "name": "azure.subscriptionId", + "type": "", + "value": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04" + }, + { + "name": "azure.tenantId", + "type": "", + "value": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" + }, + { + "name": "logLevel", + "type": "", + "value": "debug" + }, + { + "name": "policy", + "type": "", + "value": "sync" + }, + { + "name": "provider", + "type": "", + "value": "azure" + }, + { + "name": "txtOwnerId", + "type": "", + "value": "o2nextgen-aks" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "6.10.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [ + [ + { + "type": "get_attr", + "value": "set" + } + ] + ], + "private": "bnVsbA==", + "dependencies": [ + "azuread_application.example", + "azuread_application_password.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current", + "data.azurerm_subscription.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "nginx-ingress-controller", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "ingress-nginx", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "nginx-ingress-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.2.1", + "chart": "ingress-nginx", + "name": "nginx-ingress-controller", + "namespace": "ingress", + "revision": 1, + "values": "{\"controller\":{\"autoscaling\":{\"enabled\":true,\"maxReplicas\":2,\"minReplicas\":1},\"service\":{\"type\":\"LoadBalancer\"}}}", + "version": "4.1.3" + } + ], + "name": "nginx-ingress-controller", + "namespace": "ingress", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://kubernetes.github.io/ingress-nginx", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "controller.autoscaling.enabled", + "type": "", + "value": "true" + }, + { + "name": "controller.autoscaling.maxReplicas", + "type": "", + "value": "2" + }, + { + "name": "controller.autoscaling.minReplicas", + "type": "", + "value": "1" + }, + { + "name": "controller.service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.3", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "o2bus-webapp", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "o2bus-webapp", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "o2bus-webapp", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.16.0", + "chart": "o2bus-webapp", + "name": "o2bus-webapp", + "namespace": "apps-prod", + "revision": 1, + "values": "{}", + "version": "0.1.0" + } + ], + "name": "o2bus-webapp", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "o2nextgen-auth", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "o2nextgen-auth", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "o2nextgen-auth", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.16.0", + "chart": "o2nextgen-auth", + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "revision": 1, + "values": "null", + "version": "0.1.0" + } + ], + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "prometheus-stack", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "kube-prometheus-stack", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "prometheus-stack", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.59.1", + "chart": "kube-prometheus-stack", + "name": "prometheus-stack", + "namespace": "monitoring", + "revision": 1, + "values": "{\"grafana\":{\"adminPassword\":\"grafana-pass\",\"adminUser\":\"grafana\",\"ingress\":{\"annotations\":{\"nginx.ingress.kubernetes.io/rewrite-target\":\"/$1\",\"nginx.ingress.kubernetes.io/ssl-redirect\":\"false\",\"nginx.ingress.kubernetes.io/use-regex\":\"true\"},\"enabled\":true,\"ingressClassName\":\"nginx\",\"path\":\"/(.*)\"}}}", + "version": "40.1.2" + } + ], + "name": "prometheus-stack", + "namespace": "monitoring", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://prometheus-community.github.io/helm-charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "grafana.adminPassword", + "type": "", + "value": "grafana-pass" + }, + { + "name": "grafana.adminUser", + "type": "", + "value": "grafana" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target", + "type": "", + "value": "/$1" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect", + "type": "string", + "value": "false" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex", + "type": "string", + "value": "true" + }, + { + "name": "grafana.ingress.enabled", + "type": "", + "value": "true" + }, + { + "name": "grafana.ingress.ingressClassName", + "type": "", + "value": "nginx" + }, + { + "name": "grafana.ingress.path", + "type": "", + "value": "/(.*)" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "40.1.2", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "helm_release.nginx-ingress-controller" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "dev", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-dev", + "metadata": [ + { + "annotations": { + "name": "apps-dev" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Development" + }, + "name": "apps-dev", + "resource_version": "1447", + "uid": "e7d1d0f0-539d-49f0-9ba1-f7a187586e94" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "devops", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-devops", + "metadata": [ + { + "annotations": { + "name": "apps-devops" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Devops" + }, + "name": "apps-devops", + "resource_version": "1444", + "uid": "251115c5-d26c-4bd7-8af9-99c93da74b5a" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "prod", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-prod", + "metadata": [ + { + "annotations": { + "name": "apps-prod" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Production" + }, + "name": "apps-prod", + "resource_version": "1445", + "uid": "e76706f9-6aa6-405f-8c72-7afdfb423c05" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "staging", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-staging", + "metadata": [ + { + "annotations": { + "name": "apps-staging" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Staging" + }, + "name": "apps-staging", + "resource_version": "1443", + "uid": "d5be15f9-8924-4415-9d7c-05b85a649510" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "tst", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-tst", + "metadata": [ + { + "annotations": { + "name": "apps-tst" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Test" + }, + "name": "apps-tst", + "resource_version": "1446", + "uid": "8001ed90-da14-41c5-a51b-6fe1464bc1a3" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + } + ] +} diff --git a/deploy/release-deploy/clouds/azure/terraform/terraform.tfstate.backup b/deploy/release-deploy/clouds/azure/terraform/terraform.tfstate.backup new file mode 100644 index 00000000..59582a36 --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/terraform.tfstate.backup @@ -0,0 +1,1472 @@ +{ + "version": 4, + "terraform_version": "1.2.9", + "serial": 56, + "lineage": "63489a0a-daf7-a393-1b70-f5d769dd6fa6", + "outputs": { + "client_id": { + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "type": "string" + }, + "client_secret": { + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb", + "type": "string", + "sensitive": true + }, + "current_subscription_display_name": { + "value": "paid-subscription", + "type": "string" + }, + "display_name": { + "value": "External-DNS-SP", + "type": "string" + }, + "object_id": { + "value": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "type": "string" + } + }, + "resources": [ + { + "mode": "data", + "type": "azuread_client_config", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "client_id": "04b07795-8ddb-461a-bbee-02f9e1bf7b46", + "id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6-04b07795-8ddb-461a-bbee-02f9e1bf7b46-ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "object_id": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "timeouts": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "data", + "type": "azuread_domains", + "name": "example", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "admin_managed": null, + "domains": [ + { + "admin_managed": true, + "authentication_type": "Managed", + "default": true, + "domain_name": "o2bionicshotmail.onmicrosoft.com", + "initial": true, + "root": true, + "supported_services": [ + "Email", + "OfficeCommunicationsOnline" + ], + "verified": true + } + ], + "id": "domains#f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6#ZFYJzSzr82ymyVfK_gF6i8a-KPM=", + "include_unverified": null, + "only_default": null, + "only_initial": true, + "only_root": null, + "supports_services": null, + "timeouts": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "data", + "type": "azurerm_subscription", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "display_name": "paid-subscription", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "location_placement_id": "Public_2014-09-01", + "quota_id": "PayAsYouGo_2014-09-01", + "spending_limit": "Off", + "state": "Enabled", + "subscription_id": "f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "tags": {}, + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "timeouts": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "managed", + "type": "azuread_application", + "name": "example", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "api": [ + { + "known_client_applications": [], + "mapped_claims_enabled": false, + "oauth2_permission_scope": [], + "requested_access_token_version": 1 + } + ], + "app_role": [], + "app_role_ids": {}, + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "device_only_auth_enabled": false, + "disabled_by_microsoft": "\u003cnil\u003e", + "display_name": "External-DNS-SP", + "fallback_public_client_enabled": false, + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "group_membership_claims": [], + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "identifier_uris": [], + "logo_image": "", + "logo_url": "", + "marketing_url": "", + "oauth2_permission_scope_ids": {}, + "oauth2_post_response_required": false, + "object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "prevent_duplicate_names": false, + "privacy_statement_url": "", + "public_client": [ + { + "redirect_uris": [] + } + ], + "publisher_domain": "o2bionicshotmail.onmicrosoft.com", + "required_resource_access": [], + "sign_in_audience": "AzureADMyOrg", + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "support_url": "", + "tags": [], + "template_id": "", + "terms_of_service_url": "", + "timeouts": null, + "web": [ + { + "homepage_url": "", + "implicit_grant": [ + { + "access_token_issuance_enabled": false, + "id_token_issuance_enabled": false + } + ], + "logout_url": "", + "redirect_uris": [] + } + ] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJyZWFkIjozMDAwMDAwMDAwMDAsInVwZGF0ZSI6NjAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", + "dependencies": [ + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azuread_application_password", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "application_object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "display_name": null, + "end_date": "2024-09-27T23:44:40Z", + "end_date_relative": null, + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9/password/6c924c19-e789-4549-a35a-b09cfc673d66", + "key_id": "6c924c19-e789-4549-a35a-b09cfc673d66", + "rotate_when_changed": null, + "start_date": "2022-09-27T23:44:40Z", + "timeouts": null, + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo5MDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJyZWFkIjozMDAwMDAwMDAwMDAsInVwZGF0ZSI6MzAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", + "dependencies": [ + "azuread_application.example", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azuread_service_principal", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azuread\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "account_enabled": true, + "alternative_names": [], + "app_role_assignment_required": false, + "app_role_ids": {}, + "app_roles": [], + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "application_tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "description": "", + "display_name": "External-DNS-SP", + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "features": [ + { + "custom_single_sign_on_app": false, + "enterprise_application": false, + "gallery_application": false, + "visible_to_users": true + } + ], + "homepage_url": "", + "id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "login_url": "", + "logout_url": "", + "notes": "", + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "object_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "preferred_single_sign_on_mode": "", + "redirect_uris": [], + "saml_metadata_url": "", + "saml_single_sign_on": [ + { + "relay_state": "" + } + ], + "service_principal_names": [], + "sign_in_audience": "AzureADMyOrg", + "tags": [], + "timeouts": null, + "type": "Application", + "use_existing": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJyZWFkIjozMDAwMDAwMDAwMDAsInVwZGF0ZSI6NjAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_container_registry", + "name": "o2nextgen-aks-acr", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 2, + "attributes": { + "admin_enabled": false, + "admin_password": "", + "admin_username": "", + "anonymous_pull_enabled": false, + "data_endpoint_enabled": false, + "encryption": [ + { + "enabled": false, + "identity_client_id": "", + "key_vault_key_id": "" + } + ], + "export_policy_enabled": true, + "georeplications": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "identity": [], + "location": "westus3", + "login_server": "o2nextgen.azurecr.io", + "name": "o2nextgen", + "network_rule_bypass_option": "AzureServices", + "network_rule_set": [], + "public_network_access_enabled": true, + "quarantine_policy_enabled": false, + "resource_group_name": "o2bionics-products", + "retention_policy": [ + { + "days": 7, + "enabled": false + } + ], + "sku": "Standard", + "tags": {}, + "timeouts": null, + "trust_policy": [ + { + "enabled": false + } + ], + "zone_redundancy_enabled": false + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIyIn0=", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_dns_zone", + "name": "primary-dns-zone", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "max_number_of_record_sets": 10000, + "name": "o2bus.com", + "name_servers": [ + "ns1-32.azure-dns.com.", + "ns2-32.azure-dns.net.", + "ns3-32.azure-dns.org.", + "ns4-32.azure-dns.info." + ], + "number_of_record_sets": 4, + "resource_group_name": "o2bionics-products", + "soa_record": [ + { + "email": "azuredns-hostmaster.microsoft.com", + "expire_time": 2419200, + "fqdn": "o2bus.com.", + "host_name": "ns1-32.azure-dns.com.", + "minimum_ttl": 300, + "refresh_time": 3600, + "retry_time": 300, + "serial_number": 1, + "tags": {}, + "ttl": 3600 + } + ], + "tags": { + "product": "O2NextGen Platform", + "type_product": "Saas" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIxIn0=", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_kubernetes_cluster", + "name": "o2nextgen-aks", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 2, + "attributes": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "automatic_channel_upgrade": "", + "azure_active_directory_role_based_access_control": [], + "azure_policy_enabled": false, + "default_node_pool": [ + { + "capacity_reservation_group_id": "", + "enable_auto_scaling": false, + "enable_host_encryption": false, + "enable_node_public_ip": false, + "fips_enabled": false, + "host_group_id": "", + "kubelet_config": [], + "kubelet_disk_type": "OS", + "linux_os_config": [], + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_count": 1, + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "only_critical_addons_enabled": false, + "orchestrator_version": "", + "os_disk_size_gb": 128, + "os_disk_type": "Managed", + "os_sku": "Ubuntu", + "pod_subnet_id": "", + "proximity_placement_group_id": "", + "tags": {}, + "type": "VirtualMachineScaleSets", + "ultra_ssd_enabled": false, + "upgrade_settings": [], + "vm_size": "Standard_D2_v2", + "vnet_subnet_id": "", + "zones": [] + } + ], + "disk_encryption_set_id": "", + "dns_prefix": "aks", + "dns_prefix_private_cluster": "", + "edge_zone": "", + "enable_pod_security_policy": false, + "fqdn": "aks-62baec49.hcp.westus3.azmk8s.io", + "http_application_routing_enabled": false, + "http_application_routing_zone_name": "", + "http_proxy_config": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerService/managedClusters/o2nextgen-aks", + "identity": [ + { + "identity_ids": [], + "principal_id": "673d7ee5-59e9-4177-893a-154bf2411e58", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "type": "SystemAssigned" + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "host": "https://aks-62baec49.hcp.westus3.azmk8s.io:443", + "password": "85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf", + "username": "clusterUser_o2bionics-products_o2nextgen-aks" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://aks-62baec49.hcp.westus3.azmk8s.io:443\n name: o2nextgen-aks\ncontexts:\n- context:\n cluster: o2nextgen-aks\n user: clusterUser_o2bionics-products_o2nextgen-aks\n name: o2nextgen-aks\ncurrent-context: o2nextgen-aks\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_o2bionics-products_o2nextgen-aks\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf\n", + "kubelet_identity": [ + { + "client_id": "a7b1e297-2eb0-4fc0-acea-0b7dd9ac7ec6", + "object_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "user_assigned_identity_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.ManagedIdentity/userAssignedIdentities/o2nextgen-aks-agentpool" + } + ], + "kubernetes_version": "1.23.8", + "linux_profile": [], + "local_account_disabled": false, + "location": "westus3", + "maintenance_window": [], + "microsoft_defender": [], + "name": "o2nextgen-aks", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "ip_versions": [ + "IPv4" + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.Network/publicIPAddresses/a671c948-31c9-41d8-9f2d-73edf7531002" + ], + "idle_timeout_in_minutes": 0, + "managed_outbound_ip_count": 1, + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [], + "outbound_ports_allocated": 0 + } + ], + "load_balancer_sku": "standard", + "nat_gateway_profile": [], + "network_mode": "", + "network_plugin": "kubenet", + "network_policy": "", + "outbound_type": "loadBalancer", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_o2bionics-products_o2nextgen-aks_westus3", + "oidc_issuer_enabled": false, + "oidc_issuer_url": "", + "oms_agent": [], + "open_service_mesh_enabled": false, + "portal_fqdn": "aks-62baec49.portal.hcp.westus3.azmk8s.io", + "private_cluster_enabled": false, + "private_cluster_public_fqdn_enabled": false, + "private_dns_zone_id": "", + "private_fqdn": "", + "public_network_access_enabled": true, + "resource_group_name": "o2bionics-products", + "role_based_access_control_enabled": true, + "run_command_enabled": true, + "service_principal": [], + "sku_tier": "Free", + "tags": { + "Environment": "Production", + "Product": "O2NextGen Platform" + }, + "timeouts": null, + "windows_profile": [] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfSwic2NoZW1hX3ZlcnNpb24iOiIyIn0=", + "dependencies": [ + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-resource-group", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "location": "westus3", + "name": "o2bionics-products", + "tags": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleAssignments/a964cad9-e2af-c584-abeb-260ba07b73d4", + "name": "a964cad9-e2af-c584-abeb-260ba07b73d4", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", + "role_definition_name": "Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current", + "data.azurerm_subscription.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "main", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com/providers/Microsoft.Authorization/roleAssignments/1e321e91-e008-911f-1259-daaa91498ded", + "name": "1e321e91-e008-911f-1259-daaa91498ded", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/befefa01-2a29-4197-83a8-272ff33ce314", + "role_definition_name": "DNS Zone Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "reader", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Authorization/roleAssignments/2790a8c2-19c3-bd19-676e-be62e078963a", + "name": "2790a8c2-19c3-bd19-676e-be62e078963a", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", + "role_definition_name": "Reader", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "role-acrpull", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen/providers/Microsoft.Authorization/roleAssignments/88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "name": "88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "principal_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d", + "role_definition_name": "AcrPull", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjoxODAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azurerm_container_registry.o2nextgen-aks-acr", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "aad-pod-identity", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "aad-pod-identity", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "aad-pod-identity", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.8.12", + "chart": "aad-pod-identity", + "name": "aad-pod-identity", + "namespace": "kube-system", + "revision": 1, + "values": "null", + "version": "4.1.13" + } + ], + "name": "aad-pod-identity", + "namespace": "kube-system", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.13", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_container_registry.o2nextgen-aks-acr", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "cert-manager", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "cert-manager", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "cert-manager", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1.6.1", + "chart": "cert-manager", + "name": "cert-manager", + "namespace": "cert-manager", + "revision": 1, + "values": "{\"installCRDs\":true}", + "version": "v1.6.1" + } + ], + "name": "cert-manager", + "namespace": "cert-manager", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.jetstack.io", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "installCRDs", + "type": "", + "value": "true" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "v1.6.1", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "external-dns", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "external-dns", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "external-dns", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.12.2", + "chart": "external-dns", + "name": "external-dns", + "namespace": "external-dns", + "revision": 1, + "values": "{\"azure\":{\"aadClientId\":\"4acf4b9b-9507-44ae-83ff-43a8b0a2d45e\",\"aadClientSecret\":\"xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb\",\"resourceGroup\":\"o2bionics-products\",\"subscriptionId\":\"/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04\",\"tenantId\":\"f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6\"},\"logLevel\":\"debug\",\"policy\":\"sync\",\"provider\":\"azure\",\"txtOwnerId\":\"o2nextgen-aks\"}", + "version": "6.10.0" + } + ], + "name": "external-dns", + "namespace": "external-dns", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.bitnami.com/bitnami", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "azure.aadClientId", + "type": "", + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e" + }, + { + "name": "azure.aadClientSecret", + "type": "", + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + { + "name": "azure.resourceGroup", + "type": "", + "value": "o2bionics-products" + }, + { + "name": "azure.subscriptionId", + "type": "", + "value": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04" + }, + { + "name": "azure.tenantId", + "type": "", + "value": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" + }, + { + "name": "logLevel", + "type": "", + "value": "debug" + }, + { + "name": "policy", + "type": "", + "value": "sync" + }, + { + "name": "provider", + "type": "", + "value": "azure" + }, + { + "name": "txtOwnerId", + "type": "", + "value": "o2nextgen-aks" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "6.10.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [ + [ + { + "type": "get_attr", + "value": "set" + } + ] + ], + "private": "bnVsbA==", + "dependencies": [ + "azuread_application.example", + "azuread_application_password.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current", + "data.azurerm_subscription.current" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "nginx-ingress-controller", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "ingress-nginx", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "nginx-ingress-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.2.1", + "chart": "ingress-nginx", + "name": "nginx-ingress-controller", + "namespace": "ingress", + "revision": 1, + "values": "{\"controller\":{\"autoscaling\":{\"enabled\":true,\"maxReplicas\":2,\"minReplicas\":1},\"service\":{\"type\":\"LoadBalancer\"}}}", + "version": "4.1.3" + } + ], + "name": "nginx-ingress-controller", + "namespace": "ingress", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://kubernetes.github.io/ingress-nginx", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "controller.autoscaling.enabled", + "type": "", + "value": "true" + }, + { + "name": "controller.autoscaling.maxReplicas", + "type": "", + "value": "2" + }, + { + "name": "controller.autoscaling.minReplicas", + "type": "", + "value": "1" + }, + { + "name": "controller.service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.3", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "o2nextgen-auth", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "o2nextgen-auth", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "o2nextgen-auth", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.16.0", + "chart": "o2nextgen-auth", + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "revision": 1, + "values": "null", + "version": "0.1.0" + } + ], + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "prometheus-stack", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "kube-prometheus-stack", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "prometheus-stack", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.59.1", + "chart": "kube-prometheus-stack", + "name": "prometheus-stack", + "namespace": "monitoring", + "revision": 1, + "values": "{\"grafana\":{\"adminPassword\":\"grafana-pass\",\"adminUser\":\"grafana\",\"ingress\":{\"annotations\":{\"nginx.ingress.kubernetes.io/rewrite-target\":\"/$1\",\"nginx.ingress.kubernetes.io/ssl-redirect\":\"false\",\"nginx.ingress.kubernetes.io/use-regex\":\"true\"},\"enabled\":true,\"ingressClassName\":\"nginx\",\"path\":\"/(.*)\"}}}", + "version": "40.1.2" + } + ], + "name": "prometheus-stack", + "namespace": "monitoring", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://prometheus-community.github.io/helm-charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "grafana.adminPassword", + "type": "", + "value": "grafana-pass" + }, + { + "name": "grafana.adminUser", + "type": "", + "value": "grafana" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target", + "type": "", + "value": "/$1" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect", + "type": "string", + "value": "false" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex", + "type": "string", + "value": "true" + }, + { + "name": "grafana.ingress.enabled", + "type": "", + "value": "true" + }, + { + "name": "grafana.ingress.ingressClassName", + "type": "", + "value": "nginx" + }, + { + "name": "grafana.ingress.path", + "type": "", + "value": "/(.*)" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "40.1.2", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "helm_release.nginx-ingress-controller" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "dev", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-dev", + "metadata": [ + { + "annotations": { + "name": "apps-dev" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Development" + }, + "name": "apps-dev", + "resource_version": "1447", + "uid": "e7d1d0f0-539d-49f0-9ba1-f7a187586e94" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "devops", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-devops", + "metadata": [ + { + "annotations": { + "name": "apps-devops" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Devops" + }, + "name": "apps-devops", + "resource_version": "1444", + "uid": "251115c5-d26c-4bd7-8af9-99c93da74b5a" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "prod", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-prod", + "metadata": [ + { + "annotations": { + "name": "apps-prod" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Production" + }, + "name": "apps-prod", + "resource_version": "1445", + "uid": "e76706f9-6aa6-405f-8c72-7afdfb423c05" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "staging", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-staging", + "metadata": [ + { + "annotations": { + "name": "apps-staging" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Staging" + }, + "name": "apps-staging", + "resource_version": "1443", + "uid": "d5be15f9-8924-4415-9d7c-05b85a649510" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + }, + { + "mode": "managed", + "type": "kubernetes_namespace", + "name": "tst", + "provider": "provider[\"registry.terraform.io/hashicorp/kubernetes\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "apps-tst", + "metadata": [ + { + "annotations": { + "name": "apps-tst" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Test" + }, + "name": "apps-tst", + "resource_version": "1446", + "uid": "8001ed90-da14-41c5-a51b-6fe1464bc1a3" + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiZGVsZXRlIjozMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + } + ] +} diff --git a/deploy/release-deploy/clouds/azure/terraform/terraform.tfvars b/deploy/release-deploy/clouds/azure/terraform/terraform.tfvars new file mode 100644 index 00000000..f9b4e1da --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/terraform.tfvars @@ -0,0 +1,10 @@ +k8s_cluster_name = "o2nextgen-aks" +k8s_resource_group = "o2bionics-products" +k8s_location = "WestUS3" +k8s_dns_prefix = "aks" +k8s_vm_size = "Standard_D2_v2" +k8s_node_count = 1 + + +grafana_admin_user = "grafana" +grafana_admin_password = "grafana-pass" diff --git a/deploy/release-deploy/clouds/azure/terraform/tfplan b/deploy/release-deploy/clouds/azure/terraform/tfplan new file mode 100644 index 0000000000000000000000000000000000000000..17aba9e369e7225ffbc3294f063e339214ead707 GIT binary patch literal 52167 zcmZ^KQ*DHn_3B!M)m8PC zyc9SD1_;c5)83Fz1>}DXC=gf>Clfm>ppA+$BnW6II-B8Dw`CL=zyrHQWQQU3npCD0 z7=WK}pnYlfP`{iwdr?zw>{db3SkcJS$U}sxkxZcwHWgMeF)=o3WWtYZiSKR-TSBid zmPex5JJRJnJJs{@d^1+K;@F_SPG${`kw+2@4uOM4_myY8jzK396905olas!knZ1db zI>g6R78N!6OV4XIjIr148QL{Cn~12WEcW-32-jnwZa{+-ZmHYL!HnEzbnnBJZc3>S z+gfLLjS9`qt?tfS{T|b$yHnON+4Wy4vQEL~heWNX+aYaHlQ%z6atx!+2qPGS3x-=sC!B;Zaa6Uy-nrNnN=KB zjQVD|eJ5zMyXk^Cg8AJ2j%&iz*Xi`(@0S^V2ibOK-G>x!=P5JijD&}v-zDy^-uplm z0l;B+Ea08!w%BOT)SYK{7LZZklNIveHUi3Eu8?2cB{= ze3teeAA0UNaJaBCJ|%+vT0a(`WeQNEAiweBrGrKIT^teGu9zDKK0hq_4}1R}>Npzg zaQztC{&NDVoly>u63hA>Y`{&_fX#Sh7U%tzyoC(ln`uOjs?~m7Al%>T@$6$IKOj*y z&`@L`ct%E+>gr2%U*-J=5xd@bU(C-)PDSadChE`q@vucmk;GTTMGkYTvp<_0jsB^R zJS!;p9?afyLt5jFVN@)mV6NeG=j(Yma7aHW*y#v-$=zzNdx*W!e!Wo|;2nGL)W!ch zG^`>2S4DB z@$$AtlZ^SP+dWovtQca~8$MA0chT$b6aaq_Z`b?6wD&q6!re!J@t@ejcmjlK+2z~o z32)^}w^H7hncd6f{Yt;c1g>z56^uhJ1(hW8uZ>ArSk6j+%`Gya=Gj?PauSHVM0>U;Yw$%Y8_=={3V zPPCG(L<8SnNJMFgj5m9yhiEP>nLHHcZvPKYy`FAr>XOHXh~I3)uf<%K#{IA4dohJx zUX@7BE*JE#@gdO?||DU0O&9d6C=Yxn9*u)Pu9SC!mlrkT0LI$ z_TZ?mm32c#z!&VqxENr|D|rv}9CLg7b0tGJ<$+>{OJ~Lz(Cn&rrZ+g>-5uaLnH3pE zsr($O+t7<8`(cI(6}sL-wA;xx^-vU=5cEz9x*~OG&)mMKvAg*(M+1p3)$ROHZJZ5u z`hb{>Iq=LWhzay`C-rWathg<<$9j4A(!|Fk6IV z&z-gPdU`%FogH0&+5}vP=j0M^Jlu6NrXag{35BVn(H1G9tpx@y0E5NJRWY^%DC_7@ zk@cnlK?PnKy|bk8m#M>O`|Tks^RlGpKi^xySZ-xf7AQ$|CGP|HRI%0VKQ&!zP=9v7|8`@@*zRaz)xz0) zF1PYu{G!{BXM6b=4m*nVd3~=RKN_XbVg*s9>(%7U1C!pP;voe$e2W>k1g%W#;|@qr zUFB^%WMZ)eE52Y_V!9IYGa+A2-^XukGf~etmTa`l2#O~ex8@%zH$_&0;6r7sU?-S> zCygT~fT4$OV*abC5!v-W@~IJl~i^zPL#EqKdjp!U|l8qYY9xv=XHO< zR)PrV3{xcICPGMrbF8|>^B0`(Sa*wA^x*A{Hk22uEtE`~)B7zXU5fx9eFn1f&}fEW zG6PXly!fipVmWC-m08r2koy3BfW7CBEfV%9z0e08gqtn3Y=qPkV z1n12vd~UDbJPFdEVQ(8_ekS5tW>u(VKDxJ>?^B2bSey=e@OBYck`X*RQ$a|j9O|-# z{TL7cn|Y%k>@f@J;6)>8XX2IUjuZ6+pj%!u`DP&D)i{Xa9JLgzQwTDg_$(4= zB{r<(xCl0zeL&`4as(XZJ@)+6QAmQt3BBc!I>TWaq%KT! zyP+-sg%mo6ELI1QtFBGKMY1CEEYb7_5R^TnI0(Galm`brv2tfx#;(`JGw(6vj@ZZ# zH$6FQk*4QlG3fFOum&WyKq|qHWi6uko9xdaB2zN(Wn|FtxA2NY(2){1B)0Mnx^SXc zXIkXL9;R#qYEUQVI^d5*3!QeFL2KzNSPhw%===Ub1@gwEPt%>*YsTSW{eqV#j2Saq zQ%#2;!JAp`5P;5_s#sZe?>wiPVN3TH(_J*50?~MI<^_VXz25wRXCCg-_(vIMdGp7G z=~9BHYzbeiNk#+hQ3z=ht?Jyb`Z8a87~v?j!9sc3!e4QiuZEXSMVgS;BM%z|p)xJM zi)1{8gtvs|mp3wn2Qh70Jo&cEinnD3XkC#A{<*S%0!dWt8*nw^Af-_rqgp8&MWeoH zo(V#R^qH99QmBesTRG854@#B*YqrCgBjao(&0_ z=2TmTLNhSkvxRve+AYTD6efxao}ARRSOdw}+eBiZ3XhP!1D<|)a9_IhJf6TD9fnWV zII7{-Njjbd_mw`Ly2BY*yEgpL5UeBWa%cvjyH~2($Y>X^1DNVqOxnMHv<5@#Poox^ zBib1k+_9REWw1X6f@{f>)rBH4_S2E*ru%pt<}9*RWDl@YD#X_dA3Ph+|1s&=DEScA^pb z&CRONRYqln91WF?RlYBd(gHJvl_8LkD6BWrnnCf?;l&+_+)4t2TyfDV*^@Ki*mQ^p z?nbRt?yRVmz`%)R@hhfCY(?coviHlji&llI(cIzTvczmM=&o^_KgU31(F1|4^x@8Q zlp*XaF?@s+Cd4sYC5GUvu3H^hU>dflfXsHjsj#cC5}o*c3CwJ!eMA~&!dkX&kOq%Z z9{XQvf1}Yw^;JUi(uZ`5f}jq=bO*-)qd4iHgQVjqbl(z9Pgrje#Cyu@d7$1H|4hmd0rKe= zE(~W`BK#URPQUCn5KHLkv+fA7S+H?SHm_uL;9aNV!LLHRte_eKc>yBuNrq#Vh{>VG z;4YAnrDzva;c%gOcxUEXXvUp|_1sjl=nC6pdrO~o;wR(Q?G^^H)z$F*H8Eel{QKZQgedbf=;(tQ%(#I$e- z5vt3E;82yiPok`#*6C4IXa3skIMo+SbrCq;fBY6#ep8JcMpnX?o{QQ*w_L|hc(R$dwCyh;43(Et z!be&}--NaB3C>o7Xu701Sy7j3$f!SmcI}6#gSAjr_>WX7a?~G_7_Mg5O>(b-=w-KH zdx_$z+i=$2uY{cxl}B5Umf;BroNwF@5UAk9DwU=4)Ifh7MZBDR{-gilXZemV44qV#T6@i|_|^7+Yq$9NNKMs1)KU zfJ6Pmu8*;WMkr;ps{tcla4+4oQH`aSt#1}e=K(2g$)(pP4ew^k>4>M`S`4~%0SU$J zS8g7j3u&vVAIu<`AG4Zc2#4xI#dfwD7cxzxNWe4$bq0Mis0pcNKVr6`Dx1U;Zz)O# zp&^|N*~TSkaT3FHHem{MHir5`?h<%D0EAvN90Ao==D)v6w*VJs8j!@9XhRaQhHHzM zZ^?$>(7ynMbV)BXcg>gQyI{#7Yn}?RN+UJHe;CJ*03R`1SjrcJRuWgr92ttKpi9a- zk1o={Q=Z5xoK+#DP%V?`iecq9sk>UPUo@s69ShrMhK{#qFV}QNEN{-Lfba9?ktP64 zI>#(ui3PLcWmt>Pz)Z9uP>0xvX2t>2T+k&;$aDueJgY)}Z)(mNE;*5*VN(_{Pg&%T z0oTp;kfc!zrDJfIlyFQ8*bq<~oUSw;hu|KzBBS~u@RLD2qQvUph)cw}GYl#AP{ART z(6BcC=$=JQ;R#us%M0jQ{;MB90|Rrg3RXe_gBCJj8f3D+(iCtOAB%LZFRIVhb&zsSyM(g>&A@&~ys{D=uy7^4Y}@@JPZq3&$w0mK|sV(S#HT zVJ4%!%+0mJlLJFfDrnL_75}(oF=o6L--b)TVXcm-KuV;AC14-O0Pp7zkU?14Pxc3& z!)`Fs00kbaa;yeXR3?OAaMn->m&GP~r8(Fo=(W;OyOIhkcZ!|bvb?3lGdqnFx4%!bN?k9)#Ykb5ckax&9`I+b>E$W5Q4>9oRy%=Cb2b z3iwm@+m%{klVi%CAX1fy)lQ-ulO`TIin<;XM8wU?E*umWFrB7`fRI3ACNCP$6{E4G zXx&AepbnK!yn%?dVwRARwGxmr3Z|8o_|MK_)nWL8ss()y3$6@8EF*&4-iUpO2F_j$ zF*tnOGG6j<3EtE?F}0FsI10C}g21h76qdg696wzKz*M{rvpLwoJpjZ*a6_DkhigzS zy$g!cH`&Yp%NR_jRU=?D0yURVaujy%WJaJ1dvXym;gw4+$8(Oo%A~?ALkQ<0VayeF8lpVrO-a`9yHh4wL1S&$IXGZA zeywIwma`8F!I+?Np~^C{!d#UY#~pnu4YXFF9wd#PuL4d?L_F2s{gb82X&dY?o4|dPKyZu+!`c|7xgd$d z(AAA-Ns~}non*t6BO{T(jWImHe-Vx!!?1YVa)^tNrHi;hl*DFLWe9IL!nJ;ZrX)0& zo6KotK5xeaj|}OYyLA*dSN#Q)d?86?M)I7o(?}7TS|rAJ5^z#SK2u(OwLGE24%^Mn z3`Fa|fBFxv1BDp$>~a{AOu7k0QVGb|v5Ppfyde!31t1z`l70mktFi9VUYIg5&OSL? zNmyF~#g)~b@2@{vmKj|n@_XG$>=EM6+nV(p`u0G}_&B=rym6=97|(OugOx4R<;WIf z!5-9L$wppFJ|+C9qL)4|Ju8Abrdbsz!V)5I@}dtHdp~Aa0h%KU*n0R+7up3z9}k7A zWCJCWV>o0|9ssT*T)GSkvlc@wla5r_pIRJ1Xokp{U?KshNdpbv6-1bbzy9oZu4pVv z2LM5k&35-W$iP9?@CLH+w`}K=vQCMI5#U126%2e|zq?y)vM$q(*qX7zn3!8;NJ|{a zESWUtyVM=pS#1XbDq^GNnvd4tLuFG3M^)LD{P7>!{G$8ISJ(__F(8cQv4aiFVle=X zw8pXilsWVc&2x5B@pKpYDFq#dmeMTquQ%F__?Kxwtu~SgKN`|Nq!JUQN#Z1>%_-;X z3G_bq0`th8aY=Nw6#C?1$01~;PEbuQ1jWYmsI8FsComCyldL%-f_Y$c%=jcdHj_#F+L5g{74=a zH7O;F-|*BNbETVnh|cMU{(8VQk5NArH(4HUTO&%_>%Bb zWF-QE7&`KRtM@q)YSev+3_OC2 zd>-c|q#LuSMJDdjV6HM$eF)vbbB}m@U?#r>bK_WH60=pBKSj)SjOt=rkw2c~v?YRK zHoWExn5rShY~k4F>2O6Qg&v)GzfwO;%539>ALt6jU~$j3?~BQ zQY;r|fg!rkOfvx#tJNkRnRe>nAcO53gWO-Uar9V1nQ%x`9i}A(B^{yhvO+(o8f|t^ zd^#sx?ge^hunRZYKOIcmE#(|f)CVDyxRpyWZzOu~O*L3lF~1H-rz=_zM$QdXMe1sz zJDr#y5v_|L8*b_xWLjy1XFZOX8-mmLmaq}?LGW^-@$7WD&jX6Y$e8cU<`&Aq31nIK z{unmH@Zf4Chmnax)kY~WRk{mZ3IURs1AlFdm7_K~97tA0y;>N7s`}Se{Ff-n4_10f ztI6BMHAF-+0uOApjtyO~0wWQq=K-iRW+BBTQKy8KlR{=;agkb4!^0yuTTxo8^mLd7 zrdihig8;|}l2%~56c^vcT;Gdn;*FPYF6F_NIO3O84G(PjMeMVObgUPtBo_uO+vN#V z$Tn-*tY=qJhb+$>P)mu;Xu~JOW6eW2#u%-K`w0!W5zJX|njNtxNFXM~pzo8m<)zDX zpEJjXY9_X9$zy`@O5?AXt>wEQ+OIijXw;FJ9l+>WGPmbV+#{^|gBZCX2058rjZK2vi!8&1UG-TWlmC+`Q zs<@#$1>XdiSHCbA(au5pSuB&bTV%|Y|A9r2hT^Gwk-oglw8KWu7R*E={IY_xt8An$ zYd_G0SuJDN1+WP7I|-IqASO*oiY9MYsB%IEH1EN)EUF$vY6Ok)u|vtE?jM`VFu|Bg+W)i_A_Lk;YYG6{=(p*I9s8oJC<-ySQ7R zrZ^!{axIa~EnP8~+O3?0InsMrMJJUsZ|xfLTFAo+2cnW3$}FQMZ-sCygH`KD^fLTv zqz`e~>=V|7-WYwTGHy_5*=E9@G=Y?`U(iIr^N5qCA35uYtgwc{xuvgj=_(6Jv!Jhz zcXA%lk48Oa2XSt$q4ul2PzBa&ipeDB8DEaq_LRGCKE`rZSEs@61z~ZL zt*H)7P9LOLt)q|8o-B8N(Ec6IV$1mtBBrUzl9v=^*r2oKL6vxBPeNB8zS4zi`d`>g zv@Cnymi!!uQ9eSjO&^$HoWz_e*eI6h0tmG}c|LrlP9Jv(oZT8El6U~$3z&@Sx-4fKhXsbCic=3%N&_KcC3W`S!o_d)}!#;3`18dl3d7WhRh`Kl8G*p1T6l{lU<8nS3@0LnuSZT`_vIA%;QoJ00dXM z!Z8_JzIw-ojM8F|%e>w~6Hf>8N+MhyXL1;^ND>Nulc<@ch4Cw=XZjy*8FdVf4K9U(9qrshC z8dr=dGx42R1)T31%1R~Kj^LjII@6LG&LESY;wW9!MT)|hk_fW>c2m<3KBE7&6POh* zJN!`GFNRsL(~`w0S~@EY7(1jj|pI6 z?jP&Qk#TqPT%J_@*~U)5*dqjBCLR|-<#nhwF4bx!6nieqMAfH z3$-p>gpS9`& zGD7&z!~tqfV2D*es%V&EJ0d%*V|xXMdagV@GnOoZ6~}<{So;zRh;$yF1qWO-eqSX$ zeI9pw5bVVmf)$d|7+D2g9bdt=d+I#?n4hxc9L`POn2!EdHV6ep@!L`kifYdR)q9J~O?lrHE!CAu@@ib6G8QoyMI#b~ zEm#?`L$=toCenC34UjH4^~V3#pC^=mXj zOrnf*iZ#PdlhN^2@i~Va#RF1MCqNGjMye{6GCisf-36G9(s26e?lKm@B;anvph{O9 zRByGj!BkP}tl0pC3k%%Qe@w8|^ZPvV4cjRKi9zblHY-9!3?R!i{&IuDFnl zNo;sBkyW`ebX-PP%a`g#l=wb6{xC{9WS86KZZlT4}p0b_zTnv<*Mh&(alj}o&C4%sg);HXz}!SHd%^j7HPZP zshsJnMw`cU^V-cmDN&<`Wm~m(wPbT6rnA=Pu7ZiQR{Ncc;wThRKvoIuxOlqnr5ouJ zMz3923pa-sAo)&49xvWNo7(gEDGNG;cA+v#gr0GXvGVYkN^GT3L9{C1jn@4`=J5k~ z{7yXkqMZMbD|pEjy%h}K@%@irE_!RLWeNHgr!z#U@F`dDnk#xI7=GZ3HvB^t@dLp4 zNu>JzKM8`V3ZIkNv3y7p|1q5FjIchFnOWpk%H7*@f5B555PR#5O3+5PPXkRJ(`;4H=2eXJx$ki1}wn&k3IWHcgQuR#VsS=>^xNsXFfl=Ep_dVn<+Jv_;{^ zWYJ}JUMuw|zXUXjlcGl3@nT809ulucObwiyF~t~a9assowTHRLHN+Yw%e?wLF!$?* z8g+}w>R#)V&mG&G`p~xoQQT92Z7<%^0Nd=`rc?3mx!4iz@tpS)p8TEXsMT*@DU zW(rO{!D1*L!q@pp$YL=vL0a7s@hr*&e}sAe(vK@g9 zmxbjcTmRRzUJaHR_MEa#kmvZKBlNb*k`h*}1aPe(B+WNp#-)VCJ@~ zxqrpnVf3=rsJ|`sgUnl47FOc~{Hs|@k?n4g3l5Of>(YSR6sLHZYum~lJ#`Ni&X6si z^m53?H+lFmB57q@8f5-?VoF?p>*$%zNk*~}*4$0&xwZ39n7eEAv7K;qiMb;vUi9nd z4q16JHs|uCs`Gy^HG2a$KX$;=-p+r?yZ3jMQ~=e>S4jznAcYv4&t@&Ehy$;3m^55pVKkSqZbhI7@ zu#U#HWNoi`PGRrKip2*iZc#`OYNEMR6}}hwWxAjqcXEV8>%MNl7vG+`2WTmyU0qp$ z$@#umD5CIdM|MGq4m}RFX~L_se3(-;n9%|$^?E&O0#&YjGMFm$iaqe!p|G3$u!%o^ zjnd^X_65J>gK9~-UtR+&&E0&1&i$D6nH+uTd53j_iA_WEJcQY!ay&3QpKCv~ z+Kn8v4KZ8M(ixbG{OC?{vybq^8E@SEdGWC-7M8o*VIW)uyfyB+F;1+Z&0aH_stwFH zOniGPjAS!LOXw!upGqA%)%`qCq0gkgD+uoR-sbOl-Jr@0t~Ov-Z*IRn{Q`t}dECNJ zqS_@ThuEitnwjrpc_c$_wT{uc@NqjRq(r~P(b9Dujzs#|Z}gz!&u!Ex;O+60I< z_nW-bgUf#TfMt>5-q@!@UM@X%TM12Gw!KKO==w5W204i;%+3m!Z|#Phn@O zJL=aFPhZ86m!_+Fg?Gd^ZzQ;JnYDDjzjAJ~QHnt|bUEeuzMn&@*3dq7ce?1>ILI~7 z#5MM_^zc5Y`(0aI?+9TB+^7ptb!M+e)NE|g2cOiuy1t!hMM#cUkQs*;!;03UJ@rI` z9wxxzC37Dny@x!H<{bHV40q%dS*TN>V%3rw6${t5Us4F0IB$))C)8fl z=;+?H0R6UBC{8WW^%*Bm zoT)*3;{0qQ0^xiP9~S-IYL^#X*+@HjN>Tw(Mwy$0e&?zjvI$%|{k=&}tG35v(q_yW zM7v&`l;&xe3BHG=zc6QyHdjlAy6=`Z2f4^5>myogKY+}6xi3)E5%+k#&)1G#7pCiO z?U`*PueLTT7yW8d9eB0%o`epEyl`w+3!Nn`!MVzRJ5#X)YU$=W3cPu=&Rv6IKC zU@Uq%XLm5ky8w8p)W;GLG~KclSw13lbb!$-}sStIFCHk~ARF6Qd`<}LMbajt5>2rDi4>caAI zen`^sr3?0o`4&96W@u&NZoaYgDT?{-asEepiPV6n_jMwI_Y240s z|A_12b8nNg?^3~r=#KvA%6jLWEO@Z~PX(+0+*dn)PQMVXmFlAZh|?Yaw3{+s zeGC5Q(-&vGU&{5oV2|z3JYDr3L#U>08MiwYlG>;MJO8MJ=eej?YGb`TUZ$5tXZgN6 zZGj1KFo|QCFRG1gozt5{U18%vbI3cInP>cr!`(o9==E(|>xhFOQK~ynbW!gvle+0n zYJ0V2+n2+EBTeKxErIXB(i{(N;)f>n%3ozf$F6#?3P&%1l%IVixosNlm;Bsgdmi5l zr@#~BT+Qtb7n_9I99a`f!LGR7|FE)Bhj{Z>H@ z>Y1A!<+>d%Psqfe5yt>M-NyM_J-3@;6=b3=Hj?t)++AEfL*Y+ZUTmNBzPjiXBj?n0-^C66ld_9vHzQ+x1Xmxx& zUTOuqA1>v7p47Uz2EG;dyPV%29yz)_e{A}z!IfVdGD)`<{eqMtcSkvA&1?S5{k$Jq zsqkBoUR=D>jFQ7^GhjR{D-q=Ah$T1dk!Vw+B0WjvxKSm=No}F2nP?B;w?Xq^r3`uB zM#d^W_26w0{zdQdSt&xvwymj+<6Tec>29K9I{%38WhN8&d$c46J;BhKCC|+#s#`uq z$U^QfA`ROf8cH5>PV_Gne#)VL(~QEchIuOxr>)MHn>TZQJ$=iH(F*3awX%`JcT!;1iaOy?Ii?PFTz zAklQ50*iQB;Gkr>xMhx4QiX558=5;dk=@rJEb@fj79iJ6^H^ZlJ_utPsiRGFuXmr z=B|H@u=3vWKa}5H68X|dy)q*^62=F#u4j_-jV8cp{YG$9uc))?9da-z4nqBdsal3_ z5U_gnMWym%P~R%`UKESnGDK4IAJTO~_&iQLbeQT(VAeCpG&r>3rPF!3OPOw_7~1*P z^kD6Fw$SSJ961s3zsM`n_a}YS4((@ovGeEtJlpr~5uD-RQmbF?(Cbyh1??96X%K$| znec{T=hd=RKEdkmZNstmNj{glr2oeR;fY#LLPB^iAFh_C45O%_iKG!q;L9V z%*q|#`8(q0wu_nAUYNZ!bR;;W_q$fkCU-~QrfS~XJ^ID5{igMZ))}+n z?#4V)Whx-`=Hrf{$?)q$>%R=Vlk|U|62>ETCetr&Ln{wige*KWG=%y39~ z9jeLUb@w93%fb?hWB=9C_f`$0YU@4~pS5<%YbA-_p_bZti4RHD^}1%RKJNXPx^c}} zf7@GZO!*l%jZP(;=h|w?LPiGUzRUr~X*+Gorwp_W{^lgXP{JVmId1UmtD-*@FZakj z{-oN)@(!Ut4fOeI#4JYcuirzKgq)7X^G_bI_YuUuS2sp<5UM%DsQ0vx$Xsk`_{K`< z^uvccqxUIa%2QH=f)Sk2{fg}K%8YO(=OC3@MLpi2$o8*r{iP+h z_rcUe(AN+aXbyh+&Wa|va66gc6Tf}>ydJu5K#eZoG{;K&di*pAeRb}++SBB^l1KbM zF#jo$rC6xpL(TYWo$*CxcN<1gRzu?{BTu!q)8{{eJf0@-GL64a3d~8wpKGoNY`vkI zUp^mZb2kzO1UhGZw{W~PRX@A+wu<8U;g`0FUf=Alu!cO4E^~1Xzd3svM0amMLDtZP~Sy#(fm5J8!P7 z4c?6SQ!$&pgHG=qPx(@j3&$dRzeQq6Hg>#CUaC!9bbU|y4-W%WC20dGzv!e|9Q}Os z7Osk6JN0(L8XdQ5W-?l(W?p}^@4yYNwi&PA6jDefEyeh?U@Mh`8wvl#d;T5W2NV>wHJ_J!Z&s==)9D z>HGec?fd-(ogQ!Xr`#^dyCmHnZ|*i0C*3<`^OTU~2eZ>E)vA8d^}Y#e`_n;p_a=(DxjC=tYEA7VZXibFHf~+Ci~IA|IVp?!2Y*ra6iJFwM^LQY#2Fo z^n9bUl_O1H2<17=zRia1xEGkL;uIw^J{F)CcD20~0Gz(N2mSGNuWI`KN{@H@S(ZHL zZWev~#%i{i>=uXrr~UM}h|Zd$}98Xkz~*AYG{QnV((i>cd3(wsSHn;=IL?sQalEYiQ^5Z|dehm;1I72z8nX zv#*GDxM1RV?RnWQ*m+n6?f3QVM9}HmHtRqX5K7+6C+|VQZHwsxq|P+uh828QzbGD9 z)_;p#+%KgFKaM7oop-vP!Ah`qpO*F5j=kq4avrTwpncCa7 zGuFBKDgd=sa$)?!XzVV`VmWCIIKBj4?2a;(X8rrGgFq|qc2{uVWsSMp$@lA{{X7e^ z1H#@qY%j3&q4#bR z<*gTxfM|R3nayJ}x9-{p_+sknV^VqBigt9k;PM5QvbYx++ILTNv!2uPKzb?AP%PK- zaeGU66}I`s*I?N4vLvUy*4g#&=D7H}zWtwil~>=~{IJE$vtId9KU#vAYXpIxl3NUMyYrw&}h9fd&Ej`H`1`hKWn6CmQAi0f8<70g?Yd zI{=~oe+QtW6VS={f3*OfJ05hcFur^LV3ub+?C)r0Hi@HkTzsMQaWL118%sgu`a~ws zgO1$Kwcxn&pW5~shp@rMm4D#uKJLh=)TI=WnT1V z$~bjPI=TBNK0)qFuFcNCc@8-(GR4rVJN7hfi$#GEYyMZ|S8*oPiCy&Gyfb1XV*SX+ zs4kB zjb%cR`L!5+v_(Rgtrrr!Xu^5Po=l5Fvb6)IF(Jj_|s8%mVlb7~k=j2jO8?NrV>80nV?pzVfq@6B#%3G9xu~Et?o~(%v z>Jd;i#GHi;7|+~=OTkq_nLcSJVG*javvQ#}sggoIjXq^zy;!r3Y)i}jRLaK1Ymx>h ztTP~d9RkP69!}Y|f(1K~pqwMF~%X{okqEF0;R0^Nj`_R|RPtYVZMry%Vo z7hpiDHRT>QYQuXbmJ!?Uhq-F`iasAT$L z=^rLTSm66;sJz)c_Whxvk&Zy44DBMi?_RLmY_-z{w#fh~kO{+e%QTxR_FYVxz5i4QXdDyLd14=Ku^*GjVN&_u zARBC;K|%^M(z;5<5HPOvFAq&^0Goh{cv{f$N@z|wsodf(E-Dj^loN9D!GM#8e{XRF z@-&#@lw56XZCBA^Kp`!2{MiJZ7mV&Ahm%zCqaW{paPH|rh1a#0Sr{MB`;T6^jjV0A zpW4>5%b)ut|DKlBx9GYEHM1pxm}L*QK+A3D!`>KaO|&|k{6P(ez9U$FDfAZHZ|qw~ z494h{6a!9eO1L#d6?-m4%CYZ1CzP?FrFX-(2ec2b$W6kt@^kR|7O6nmQavO<1S6^L zK~bKp<$&{XE|;`rv>!|}YVm4=Tp5Pl!b5<12dfayAZWC&+f``#?0`O%U6=A9E_;k` z&cg>C{ap@rtxcpb&*H)_77QF2iL|Itx~M@(8d@2_-!%5^!``sZ>+vLAUSN{0x=-NK z40mp<2)+D2->#0UcdWklNA>n8_1TzTm!8(&)3||+|EzDgBp3cRh_6Fu*I!?w-;j=I zh|y}t47On}WMlhuV*^#Q?%mCg$Af`l4_tH=E(npt+fn`F2afOFVv!Sn4~X;rGSe-F zQG|N`qnn*Xf;U}fl3OpoAY2R~;ikTV?ygUKb)7bGEk@C7kKG^HR@S+5NL4AZN#uJ} z8x-eKT>i2iu{VedvU(V`XP=cmYIom{@e0Cuutz~`tR~om?fb8?L&adqO>k2+h*w0L zhG~q89La>k%0o9`&$5MZzzxg?03PU&;orgLv023)mfo-&Uw1_*~HCxpCdaJ#e6 zeo7!0oTcTAMiHJbUs>>(-r3v&y`HJpdo#3BBS=zef zn$ntQ)k~7Kz_}(xpV%`?i+`j~tsmt6X*4Z|zv!(-rZAW0>~`(QK$O8&Bfv`;w2zUS z*d88lV9cp}W1@@DfGp4*CHWP4;mffbZq-ZR&1=j>lgP)*>F|pvJ~~j(HfThyjDtd- zS0#@&8>gNSxuk!??9Pg~EYVY3!(%4z${f6W^nr6kXB1F(|CI^@($QI=qaw{Q;WVSIe(|p3&6@LvAIuQEPWGu{*3^^ z`lRi%@QWXd%;W@KaSi@9#TE92P16ow#;#WYK*?XlhoKLFFog4WXg&AA*Q}w z7$tpJ2r3AU{qvmh48dWD_?wY<2s_7!i1XQxo=0^3Va|7tpq^cX4lTl1j2K za^*YUE@NwjT=eMj1NJz{c`2xXt>23o-Q*w{4C~bQ`^w8Ts1`oN`4xa~Ulf9{Q6|iw z(CK4+>WvtYfrhF#eX5J)%S%MtG|{J~M-SzZo9?*Ouq5a^%rUp``ZoIW^DvOB6YE?0 zk_P^z1WO>3v}a+1Q*n0i_ahEL%DJ7Yl?dFeZn>v1?*F6iu7WBFq6N|7?$9_i?$Efq z(^%8E`@!Aa8+YfxfyUk4-QC^Y-R1Rt5qIX}#mvOSjW-eVT|ZS7m6bbp?zOW~3_I}0 zOCYY!(s3B3)oj=^M|Ra-#*{1+Y&1|9pNNsA+L@5*D8k2q*f~94+sc8Cl>KS`VfwuO=s`i5NiE6dVF!ouQnpPD`KD zULz^*>=ze}dWfx?VX=J66~+!Zs>h~mJJ+ZaXVNX%`g+^-8m5&bUxKDcs52h6X5}NA5P)p!D>&H?p?rL=v=k#0ej?OM#XX8Xo4x%{(EAd}xPCRIusaz?m7T1o zM~9{C9qtCV;c_EZa^l9*1iC~5RT+2Iw?6B^WvfWHWaI+)k=g5o0rm{27dkI5>z4(% zBU{}P9pr3l#&&)YP5Gyze>2!lZ1~rkHJh$2*@EV1ufYTB`1d*Xq92v?e%@_^sU1v~ z$#mHI#OfH9nxF*DU)cJOzjeG>h?lUmyePr>T0UzrujABA&+GSaS#92)R1hEE#7kWn z%#|h)ZrE*0Ggs9*h|gBEB1yUs=E!yKb&O--%v+@I%+scDiC)WoE{2}$sTl4-TztS3 zrq*Hu1s0?xRx401WZY_=a6;eSkdC-%`+|vOhiC=dEe&Gbjs#-%S?X!aZln`+1?-f` z1J#q^^s=WTQkNj~dgx}#cUPGlMD2Zp;ioQ(Jn-!H>vFx-&wLBvlb;9=lg2Ru6ZZ`H zNIvfj$7`1a1L@+AnDAx{mVtD$EIKnQ-3`5)^X>^#=8U4Vc9KVLFR1U>*=<5PryWDhy?RD_U$dZYQLwTP}KGCPH?? z&*v#AcUgb~?Qvh04{<9SNL1g6Qd5`6^el-Ro+Xx&R*W|DLZGM0kn&T?ntLS3dH+l~ z+)Ff>Rjy^mD^UM26*Bb@abHF#7r(1JW5?bJ6j<|0E~z(6z&4HI!v8#7bZi~(%|xM( z{RM6qZU;97>n6tas*pep>Aju>yjD~aPBC3TxiR_RAv&l}JIDKW zW>!4v{UGg>VB$q+L%lxL;3DNTXlFauD7VOSsku64YpcKSguX5#vY;=}lRx%5Z)5kR4OOT+KAW}&#NLP+57H97oMf3Tv{IDt60k3=2= zKgmMS#E?}Rq~`?hMr=_h#`$k$McKzpaLA39ty!3!d{Pa^oaa#xl6O6hy``Bx*o+i3 z(dsO^VxJQ2IXuPr4}#pSpY>WtNdi zHrC!`V{@|XfH31O2E6c8yjl~mZnZYvVSX}F_YLW-Nm5V!u(K}a65N+b+f7DVOR+AB z+L1k@&SUl(Tf9Mrtm3GcC71lJ7zSEdZYd%&L>C~YI$J41SPwg4X4IptfdBv{CXW#F zU{5q#HDkA55}^!ljljLgf0aihfP#^LpPM)iqdvB9xR11aXA;>lE6igjG&-Hr8w9Ty zp)wvne{fL%D=tNdQw;sN&bTdZQ)U$I3`8SYhmtF}xqEygBI}o9OwcP&?9bIFaBTH* zy!vi>>TxfrZl<#-56-dVQxXhW?l50}+cS>Mnc}MBzwV7sTZz7tO|IO;^tNXj0=5k> zsOBrJv*lxdol%WNCG!wtLwkrdT_G8TfX0}4S{Q2o0*8Q`f>Dl0YrXbNnMMYBE;D5U zs`A)P4+64Ycs(|f_o2F_+(LB^4HXkCRndx>0nhS=lq)e}kDRtHe4u6bi@BQTYEWHbSaoYw~@)^!J8 zrlC%pYgD&ROkkZOsw4NO?IQ1eM^mxj>$>)LV<@%_jX`c`{Q}TnsE{pF6j#B0K1gMD zIH`(sL$Q>j8%(WM@jA+MOZzZ3^Aw-2t*&!u4$-NUeiYLDiU+_%*KO*j2pvLvB(FVg zTdp?%jfcLskldgLvLw!gSrFMxoAXmxsyQ6a=2aWJ_eY{}+$gLJ@J z+h_KPTebf0<~=uzKY`4!?LIb_COW9z-VhJTY_pH|Y$cKu+x>u4h>TsUShBYZ= z7YCam7}0?tV4R5X#yrGSF^XlE7|~OOU$D+OW)MYkrTTL{^vtV}h^qqQpubK2DHP>a zy@$$O%j9kPyAq7XZdmr0d`QQ&#TxwL&*}Y46!$)#S`yRFjQ@Q+e*YL>)gIoTU!~xv z8O&7SC30%In_@xI1AlgXnv8xqw~V+&?m?}k=l8VY5s-;;9<}^3h(Gb%lD|Y{7WEXQu8-EMK3WH4r_)7(7m1#ZS{YY_3TMvW zctSA1G6o7p?r5dbD4zu_19O*=YK(5tI9DlBz*U~Hr}-B;CsKle%f9?O)nttC3X4#L zCoR)^;c-m-f>wCBw5a0Wx=+N})-b~@TcgrhL*tp2<6{i;8Bgw zB(h#2INX9oZ;gyr-m}j8Bcfi@jr$X4-QwWM$(m2y4ILfZI5@^=hdG* z)?Lkm9~x8$rA1Z1Fkwx&IKeMsjs;}GanC-T8=d3`Gv{G&i_($0uole8Ol`A9>DIHZ zE+Qb%*>N|O=?%?wNHhj(t<-9aiYy>8a_x~q>>Ah%2BXhZ-eZbJ$>4NZVn=*9(A78m0N^XTbv#sdm!fuofUo%?K=2 zAKh&wN)@d=6U|5;LEXuKCb-=$B0z@8qcITml7w&Yk`c^TTQJAYUCQFPFC|IGcIDtU?CIlU3 zO0Cx3Qa9M5C@BOQA5%@T1uX~(EtK81f1}}0jbBrXsm%$~DaL^0UnM-OgXVLMX0D*a z-@HLVm9q-z$@bT}=DM=6ivDldwOw1>6C z!Q9XsTk?)2t14E5pK@?KGSAQ!>}BSZSq;Iyp@c)B)3c3aXa+$^g8;XBvzZ>~^gZ<> z1iKgSdcuW$9Qk0;M*=tuUTE?c4MpxhTk8#|JTrQML>;EWbG3zTy8>JDkT^0GaKa43 zm_cpmB7t)2*>YY)k3^05GSz_Txu0u?D`54bd|(|Y0f{1t@oVA}{%p{00b#6s2}Qm` zPJeYheYGe4TDp`NG5Mf>Q+Y61vne*W9M;PW_ovk%In5#wZC|jP{CKFaMo2))I)rkq zWtYCkwFeQJ>&d)r&c|@0(+fNH^R3_&l?m^e#c`>NX#Z$yPv^;KsZ9W2i63M&aq^5a zvhC9)R53c?a6(n7K0>NK@pI~VO^=^97AZGbi;8^MBBsb;8P%szio}Z-=1{|Io#X5D z;e}~Ffgmxd@u%W*fhfQ*VhAfKIBuklLU?&|dGeW<3HWGy#4$!n*=voQ(vKc|Mwppg zt3g>7f6N#XgSV`nUbo?HkmvNmycgeZf!Qf`w%MzAbIU(rr(nnwQYHwOXXyb{_Gp?O zit(yVcKClFO!Ar0nQG_5>ri&!Yn7CXN?$)fX0=OrRfYuXuwl~Gb2@zOsX4=PI_mKo zC?}AA>oa}l>c4gS8)(I)kBweJWsTY~TxmOm2TtbOxrQO;iP+MZM~hp9hd6GBG5A%_ zBB!*57Q<@&V>QoRpev*;oAIyCE3HEGI`?4y5I7tep{gizBoM;L zg2;_qQ&Mppj!HSQZ`+DO{UiX}@ORe`@e~uo6mgnLIqWyOOPqXBtHfIOxdm%=L+!;% z0l-1FPjjoXBPR9PXWpsk4{mk&+&3yjz66}c&Af_Pf|pDb<*@JEdu?j-J8f0uQfc^suUavyn{a@kBNFVf}~u{6O-Q6bfJ z-{z=r;0AjgE*D{rkh}5yNtnJVw(lWB&okzimpD>Gt#9;Z1x`zl)EX<-?~b_jpBQ#a z)FQ)QuZk==9C(fYU5+L!Nb5q(uh8#J&AJdLRrcGgggzW^bFD~^0lD*%_^glwRAXX3VMXUtIR5GDa8Akth77 z<-OQb8bfGa9@%J$&^QW6<+dDzafH z7UwAwcBkG0r&+cy1O&A!NmP;_ZR7+V0(0D=_lG?R_Lmgor7erbS(F^CP7aN(wsL@g z#J1iz_AflAoIc0c06{~Lg>(11dS#wr7FpSCd3CGnMnJ3Wu6+E@(=haX>hd7&m@}6+ zBl=sn-PwwZbYn@q(kwu!m2CI{1WKu=sK4Q-FXz;>>1- zASiK#T|BH>FMbL6FgVByfK0P=KVg!!gci`s#m1o&E@!qO&a><8lnq!%fwV9mjsp=$ zEWYk8^Xsss!f{8DTDb~Ryc?D*aE#&jEL})7KftMpos{02DeY|r85ZjYMI?iieYYVo zI}2>fTSGjin*~|2h_*5;K)-{{sLDd38xc#e&$UO{#z?!;QmKLGI=$(S`R^hmcA`xT z8GWvsQ%UoIlqlndSqbx-*YPV8%;Mw+a63nFVHYrJ`DrS~(vpygVWaMo+`kTE!p)k% zUzcEMngM0w(Ty41kK&NZPDThKIOgLIYkLLMg-$9D1hM?>wh;a4r9*X;N^)7bfH~I{ zqIqX?g^6jGh2GtX^cJ=61_b33w8ywL>1f=B6zNHmWM?m^L7-3l*g*~SF3W_vZ@=9Fh)q}Bt&N}l+ zHENTDq5RJ?{-MA8y0iSblu`@=z;dAxA(TgUTo&B^T9+21_Odo4!yh$iuIT{XG}?9J z)x_NTtxf49mh9!}kBi8rO%`GZoUFIt#G_0|7`*=Iw(1gt_ZP^Pd-7wuhb@(JZO0i5 z^xy7ckWFUTo!8|3fZs~eX*z$2WXO|KhebLRz)7B#H>K8sz+gM<_rwsc&Z$IEin(o~kH?9)iljh13eIcPL+jmNy6PF7>@)NHQ!?e^Mw zCXpXWUf5k?fhGas%~sojJRA- z)4y5+MoA1c6EK9X1Qjd_(+)2`)F*tyA7th17rdbM zO;1i$_koYf?Aly-l{e^&uVqQCLqwbqs|_%W`F{nGFM{xXO;<#o*^Y*18pB$WOV&VX-hltN<`}W^KO2| z&LCBh755F9{?4KX6j^lp^3Oq85}FOrpwKeBWg@L`46bwluLX3*$qtH+=LNtFO{%ua z0pd_P*w_WTUIv8^4!FDTrD%m^d)|P|abP0?O~qQ&qY^)C0|OhiPP&=djBeH969O6D z@?Aagp6y%9%)0%(VBm2ZC8x2U=a?4}nr1E!IYb7Z4Op~EFM%uhBTr;qI$1r2ZjI{v z!_s&GQUhb*kzj^6cm~)p9htMoKGi1S{m7{Fa=)6UA-O5|U#+VL7ypJ3q!tEPc%`=X zp{={pGekFCv0vH>8k~?b!{F_juPoigsH=@B4;Hzrn@IvB`I~R}Ue$!VtAV^+i;%wl zRP9F!!QIFy#mH)cNt8kv&PdTM-J^@3ywK@~R#(Cs7rvwI~(1(_}Mv`}_t zyn6wb<2=ET_CGmh1R3iNc;JFVSePgjksL?NyKjxP+gee0Y6%CvqDjIu(0p{JK=ie! zdG=%SAyfidH96nzGerGFKD{s31Kvce1`z`0!S>~Iv^EE!?Q|1~!b9p&40@#{v|kH9 z9J)>2D)|m!rIa};R=S%rZ6@FRF{K4DE;d69EIOZU51?@)Eyq2IJSy{pZ6e z;rSQ_Y6#nuby+qf1-7Tfwns(jVL$?^ru3Xn>yJ8#V~2&@8tE}d>rURO=Cugvg3#9O z)qH?}xQsSe3r)E!G1532brc)D^taMeTz+jshlDo#^91hE3kA*x4rVwqgLNl8>pRf- zO^#ipCC)%%C0@|1cFicD5g-7+{WlbdZ#)B}4%{*jAeKU^Sw)rAI8h%0v$%sA|v>B#s{1pR>EU7WZaZcfi zts}9rOFqW(&-;>8uw#2!?;j?J7@VCzQ9wWp3X(4?D#kst^swdhlMWjxYP~8%sR9+Q zrY!8KGM5Eiab61K5+>n7VzHHdXYDcXYOOz!Zuubx+G+a|ixY#V)3F=?aYh%{F~|!~kGdSWl|B1jsLa zy=n!!E?ldV=roAuN{Xh-g%)3%NiI&D>AT2IRE7G@M`T{+k~ZEzax;nhbu|DpvRQNL zm)(*;8iFpdfB|&6`Ka?YXKUecODEjzqRPZaOt^KkM*Q$L5pgou3CT27%7&r5m_b6G z$8ZKG4xr3={nJL_7n`g2;9N-)Yo4_w6$5!-5w|UsVVZ-;cULcbSqMhiDCsLN_!coM zwPps5^+*#VSB<4uWW3wN@x6ek6z) zw>C~p5Y~v7klvG-ExUchxb$lPKuqT z7n6m}!#D}0gE*Ep2AEW+YX{@fC-@pH)`qRfpkr)MJl32my?7C7HTMZ&p7*RYel1rT z22A$gr`Yru5yQzwJ;QgG-A>kzx#lReGBYt!Q<42ror)Q4A*e~}2TX~Up3?AEzlz`# z3%g)-hV#s_qy4VWSw1(e>TXe!(mLj$!{Qv8E3~s{)up*c4qoHxllzg zO^Prp1`y#q?NS&lkgWsLJ9L9jxns|I*WY_944-A58_%JqH;r{*X*>ikysC#7KyO^zJg(kSB_?*x#|@bPGf0p=OLv6Fn_5-fLfd&Li%OF$IlI zCk@LK?%swg?6K+8fk3qQ;aX<~pPb}?Sci&J*gFb7mD50cT>-a_M+ZNmr3v8%51Gc2 zXFLpAjcPvzSX}S5oOnXm58e8sW0prlO9G}A?yrKxzx_RZD8mb81f$>X0jq`YD;EVs z7Yvzgh0`ng3|T>!{r(%?d1_%2QwU(O@1T|Y-LljuPMwfyURoJ0hQy_oVlt|hvlSJ_ z94{B{T`rWj$LLM-zWYP=GqiRyMq+U~@U`;>r zTCM6zYF7#(gMYFD822OLpf9KcAyqWtZEn$M9C7N#d#@`Iq1bN-r#PXj1pNDvxH0hH zJ>XP0DMeGfVtVkbj5ofuho`%fMq?BD8%QRz#A>MRT44S*BUwGS70E#=VYR?hD|~gR z{u95>mT*Y+Yo_C*mN#m`6fN2*f{LDAuQI;4iU{_gaP4^A$rOs5zDWsNBzlbTZ@eg= z(M#*mz^E<+CBB@ z{?ZqGM2EkU*XN{Fy;fNX>;Z}P#TG4=Q@id9rhyV08}I(nG*Rsn{jS>Y)pF$AM_RY907+^brZ?A_^=&;hib{Bs&_TdcDA8 zbQl8+`W8FZ?4R7#0767$6fm#{&K;#WM`2UNfNzP77isANS;9?w68#TaC=4$KtLL~7 z<389fhT04KVRAxx8EH}}B;d6}RLa~E5hG<=L=xHl)!Q~o4Xsv~ zFHyst1mz{8#MQeScr*Riw#w+L(!LWqs2l+!DvM{Rhs=NurYo63s)-I-D_)4xY1{*8 z^YLm72J@&iYJW}@d2|WAu?$uuZmMPcZ5Rko^MTD(Lz4>yJN4kbXp&j*XgtM26KIYF z5#?YOV@uR@1oWSM)6a3NY>-wzLYT7SI5E6oD8g9xhYBN&e~CJ;ageM1mdM!a9Q`{< zA*BO&M*m^Nse#NrCq_6fAI&K9o$@n-MwmlZo8zjxR0sD1a0KF7!j11NI({J8<(Oae z>K_HzYW&&YNMgvJ1T)s1dRP<}&Wzm7pz%h6-aMgQ?^RND+KyYkfFg9LbFGSnVzXTj z=zmvGP2sI+rLr-#=uZ|%lY{uiltVBKE>#FJAfrITkyqWsfIqTutDQQ7-i`a&TrRH6 zDQ43l9KYm{Qw|wT$vum#2+0x^fYr>47%cJxVl&-ZSnG78)`TCHM-H>)-~MaKd9{=i zYFuT905WuC=n<0(cA!JWg_Pbd!YV1qu9ivVQUghn5z6ypl{hd@YNbKa_j0{;8ZXXZ zrKPEJi)nL0f+Y0Hf~6sI^XxG$-6KIxZT>d8*U#k#v`Q$2r}=H1V!7^g(H+xD!hl~J9i8Mn??FriBQZC(+RjpfL`Z?XD zP)5rd#YJwEmA=#W<@Oc3<6r&7d-qjgeqY}a7b|)Y(25prIE*|&(W9nki@n*3Y#psj zL^2v?YDo%$h~xCZlLS-FR{Rrx=`2?`7(Ipg+ck%q7-dY%JNf|}W#$j4C9ck?5#Ow~ z!L(5mik}ajd-zK}0k1|RukAFE5I5OdlwCVl*T-)t>b-%7eS1FceMQ=*n+?EogUCf+ z9Gpqf`i;G}2ct}A@nQi-4F5h z?64=y8(*?b#s0T&cYUdLZIuQA`y(Xdz zFHphHvg@Oz$S0DiJ3?!_rP2#}KM-*U{EO$zYR144*C%MkXdq>6^9`~w+bmFXuh4GFu%&h6o|nh4tsL5wKA9jqnR zpO-kYW;`aQcnq}GSlTrSbkN%^A9?d!spSFm|8u?wTW>?n2nf=S?GdhCVeCy0K(Z~Lr;gp2fG zmgCk1#tV+}{4OP&<^Bi)RHqJq)IaXND_=RY=dP`#&1s$#)deHc5rmM4uk$UD`URoC?&c(DqBTC{cgji#nT-ln{w!N*wV|q+=`s=M{o3D zA<0VaW5ydatZfT>>ksM0(RSE6{xA&fbPl?vnj*cpR2{^*?ByT5buYMHb2PEg!xkIo zY;Bu4KYDu8Z{Jh>6vJEBz0%I~%{wwG>pA$$7{iI09{5X~?cs3)FFy#_vo{W*(@vYd zmDv3#s421&+L~> zrT1{D_f32EhME-xSn((Rm^OFdYfYTYC?_82VJjtgq!j^+%F4=7*EorVh&^x8Ts>aV z6R78}ynb3E+C)%GUg(=4yeaFE>`dV3lLV~8>XY!$Jw3V4oK5-2?5C&u7Y|+8TI{f9~DGOATh#0@q<(pMoMb#*78*k82~`E8Qqi`soNM%IDg;O@Z0mU(0gj zHpN0}dG|!OVj0X9D}l#a26&S%R4aaD{5tX;*L_iweGyYc*F zJal&tCY*A#-cOrWO0$-F`1d6}8mkWA=*Qu6ad8(fybx4U!KalOejOH4+2>i^NRo)h z1ui{rJh_*NS|*DZO&w9E0@a^|mP_+$bD0T%eEoh)_FneMJZN}(g7k$yd97OgI(cNWW&VcRL9Zwg zP=wqm$#Yq_xc#COjk7NqZ4gD!KHp3#g=#JkF)MZZiF#k@EH0I{X9akaidhyL|J zcryl4ZML<4rb4syCP%Xp+#zUqb;(-v*21B2^O-A-e9kockly_A0DXfE)o^@LC;Yp=+O|A0_g(u#Yy4$nB7 z>GtZJ?0dE?beqy^EkPyq+r;L7Jn7j4GEq2qX9={+R@H)ssAW6DEdDo&@V;ifr>cK( zv?o?o?7q*Xu28k=wcVj^l@xM1HPjNt&;AURt{ux~-fj*VLZweFl3I7C;O~38mR2gYo_`lKMgtoYRN9=>eTq~P1cOBoF zJ>qx#L8M+--3#_9@f8YLg?#q~)L5C*Jf>y|jb6#2A_{*J*`p(zT+WYYqo}wML!HJ& zYq#RAfB%7g(5G`tQgeJax^pEs(m#0#tGs2#%eJLNWnpv(QQB(M#W!1-t2pFRZ@(_b!?}uYjO04mVq5L#w&C3|TiS<&Etx8`{$Pva7c4R=M9~d2wtlRyH+SI33+E51$m`j!%vlr(m1< zy8iG{a4Q8C?CZd@!|tD|ks>WSozwi?8jz z&M;j*piWDZY8ofr?nGX@D0X>QdIe^rW)|TMzo4`U5_IRcLlnN&z$ZZtO8tbE^e(TJG(jpTU;xACGR-LA7-z+8p6MDyBnYt z)RnccDN%AUrA!1x=6TQ_S}QLlE`_@l;U6~%Kv=I4@pLu#*H7^8LSXY*^|pSBzn&B! z0M43fT7#Apw4dqS=O&0x;@SUp4gcsvkL#V@cM&n~Rl4t-9>6UlUUaytZh&S4a#NPV zwjjqjIgi&4mQEGrw16C^e76_3XHBy3u;e3l&kcXZb(bjM=T@V+@fRr2x1I^H!zkwL zQojU;&DG6|)=l&#vk1<o{Z0}s0xrpp<`YQAhv;-?}HcTxQb&!92$b&1Uq;amq zs;6@XhmNW9F$q=YH_%!-2@G_WkfV?F7BejshZST{Y|dM8`A!!b%HW3g(riQi{&Ia; z>*~_2b@tXj*`Xr%`)S=yYva}KeOIGF+4HzIDQw$$`Px$IuK9=!KjEe-0KI1Uf6e zBt!MH@6zhAb!FU;KW8UW)G~k(jCmFgf73y+V*YlZSYLCz}^#E(b zYnM&Pavjg1?QA?9X_u-Waw?lf=)L3j_SE#TptD9s z7g--JvHpGC^XcNYX-f}LQd<3e0k%n^qeg#gw&*J@t{)YrWsOu-^AbmX&&+)HNDNcR zgn$%LZ|O?8tR=(`|20Vztfp6ER|2B z(s}AbuGk#D{P9*6tA%90I;c&$eDUww6!=hXKSZ1YAqUM4_Op2~x#tE2R-}p`ida66 zbhaIst{uC+kj=onKWOruZ(L>C+=Dg+^1Q`MxW^iI?y`G7N6v;Yn(06DWCMPnJ^?fC znnE|!)%6>{wlp@T?x1n5AeO&`=j#@V%uce4j}#>ZG(m&)nbVp|Yt{xIX1kz?k*YfR z4P`&9Pj5+4eMzAzm-j7{FMD;zy=1gwZHmiX`H1JJM|7Tki{C8;rF#l-op|v7#_<97 z5P9adE?iQ-;cc~3II#JEsYUH&%-=|=z4Mzg+)tz-A1T<+=Zo- zlM7lb;@l4&-F-tDE6T~CHhEk9Pp&T7`vPl;9!nldLxmul!syKQ3>&p+Erp?f6=}*R zSFT?xO3iMm9Rv1CY22GIj$D*>Tz_{QYY!g2T3)|Cx458P=(*ep$vki02+O_YV>hXY z{k%+CP>+e7rQ!x}7~sbiM9iBU#TyjYJ#LuRUs`F`5%&}>szA$;%DrEO?%RK(U(&e` zFe~XWAL9x zo52BI&r#+_0rKzAxr?&8vujun-xcw%oN%GIZSn;@M!2l6=jR@t&j5$_J-};Qq;G9` zF;Syo>g(joI_jF=?n7N<-=}B!b=dJRuC9(wjD_f(kN0+_>I!<+u|E-bpWr|L;q}O= z4V^Uy;4Zuw)%o-j!j(*_ z&gQfnMbvX;Yf;L(l|SqkQ{%zrRkZrxs(km(5grMtOg_v%H5Q;lE-FwgBiK^8v8|N1 zXb$x+oo_Xg8cS`f=iMVflTJ4D%HCZrcb_{Z#!v9;?2D{?lEC>xpCY z@_>Qy5rO|t+$GX~cbAOzj;5~vHGE0>U&5F6z-$IN8sfQ#em|IDq7gPjx&D? zYz+=tMgC@MiJ@p;!GaOE3Kt390sk(H)U1B`vQ$|)mWh4BfND<3{AHH-sG*;kATJpx z``*so4*JIpcWjq~*zrPO$?MNzKMdZbhi{#UF*594y`P@GUR=}X95j+%PEVCSt9tLp zpl}kIrSHziDqH`B4v_rEG`JzZ#e|B9cxJDkBhXj`e)rm8wDC|A#+`Gvic7#Vh7Io$ zz>APdCKkj?`nubS74N$Ee7zD=^(d-OU>`L6&7Z2=+V3!Uy!A_gCA`lBcMmF-cIDxA z2KQXsN8{sh%P+<^o2II^>Pt|Blb)KLwhzqi{H!xCTDKFE2aae5kA4cL#nj2}=MUu` z)Hw>I2pO$^CP&=@BUA*0eNxU~li>utE^s>)$xb4Wewjr1g|JDE^Th|MdhX9sT`r|H&`Ao~P~R zQ{Qf8>Fb~b(#NLij==C+)pRi*VcEkq%u*}rpq~Jng-kaf7{zP^JdqlTNq*V#*|>d5 zshwR*J7U8=i^hOUWnf1-i{uS4J)55xG>Fp`Sv9^VGz~-aHwUMCo~chwp^Gp9OJB0R zUq&QrG5Bm$$RTYJ9~|A1{AZPE_AlD){JsAnuN0bm@kvQ>SBz3`8X(ECI6=gVh@zs9 z8x+GHG^9*UE)*jFPhQC;=KcbeblH9io1wdV1Hkp=`}}`-WqgUO=|UP`bx>V^B?iA0Mr7f{=#o03?m|N67LE$$%CejATqjSiJai^3zq z-r>fxg}KSBp3cwrNC}1Z2{4bs%X|6PGFV2M7|}hoIqJ?i1=$$?jr|9eVI$_9@@!o) zoc?YB`q3DNX38mtg|qHNUNdlYB5c=l8&>6!VCw(ND^baR43+%fWGjUre`zZx@38m; zB7cT;u1xSuA}?;96aP0``NTjlv1gPP^T?K7Hy{)OkosTP%9sUjTfsG;}+=uu&vbWgkt2E-`Hm>QoM^km%xPsoVL8@|L|mx9v{caug2MAyu!G&sNYVQ zw(Jy7B;iMw@W@0@%*U;q3)VCBz}@p!C6`eu6D0iKv6WL`1WY#zBQ#G7zPY|}J5QNU zNNhS-k?hn{)WTitCfBfv{=W5BMK{Cf&4Px+7NUPlitHe$tqY%f8_2`-DNoA!J%;`_ zZKV(}MasG13>3RRIfr0|goBxZ6a=p@2@?^CadcoP1Yh+qH>Pm%A?xQyTSoUqtoFeD zpSIE=YCrCN4lJ9i+lxKrzz`!C58&r>_V(z{h!W`hNCC1ZgNR+B60cEe{jfgtj)TGZ zmb4`Y&`bC2B(1EI5mMj!0ryInay!SOEb7Ye+E05@5Iqr^WhyvkH{WX zoa9srt_CkkqSHVpH)^ZgY()ciGFr?df|xO3Eh!a6k%WVmtPpNLFPV_;J*mdK^w;~O zVGjC))6bX#mn&D0NS#^TBzYjjkTvcchWh38db3R!=;VtasZ6w~jd{Ls-7Wl@?Z0Fz zp9$3kE!>e|U#djXx(sCfuf;9(wo>kIJr`0ASy~->t8HlMsN1f9W>_*A<-5*mNdNL? zRg9aeoJmv^vVH0}bLJTPW#<<)2kPXRZ7v0l9Nx7J*SAon92?ntc=Vw{RG(LM6V5H+ zDrU5ZK?`HdesXh}oz0c+Hy8N&kFCY3r5fHIIx@wk9zOvhn%*n24mShtI?Co3$x!F} zuVV_`Vp_>Hb1_G87HeHaTGd=+4k^P;DqV%bJyN4dxwzPG;R85 z*5M~A2!Hvg?T%RLmgj$oD?gDiK^uy9teeAT5-*jDA99#6B2^Q=u3B&r_i+ zV|s6RD&hQYBVjOon=0|3zHeE`I`rrA(bO+di)0iZ0O!heoLsXqREa5HbsEQic|XWV zfn84&>PgXRAp-e!pN8#NSK-6O9A8qIor00UljpkKc`di7)IJmJH}>y^dH)u9?9|B( zmH0hQghN>mxMm3DaISjC`xG3s&lxnYs{K5wvbzJ0$P{NuSN1`4Lt8>zM#aUI3&toLO_ zsB5w&+G4)enxhjiy1xlNPLIy=qQk(R*)yyK`IL4?r=iU4CS%YWG-~ei>){GWPt8tv zLQQ2;z$M}!E)xV8sV3c1m@MBvb%rTlI*D~xE3Rn%cy%8Cqp2XZa~pEGIi1QaH>&K} zLb_t@f_htx1lg`RB$L<_<(dJDsg=Z2X+6-hbFZwEKj2CcX)hmY+-2Eme+RKa5QADc zV9ymE`pH0RR%BkAgcO;cJ)Ih8r3qr{Yo49{ZuUnHa~H>9GR6(-@BoPo5;l?fudC^s z^(#_?ZSA;5`ktXu9GCOkB#GK_3sPd@7#TsUNBhY|AI(rTBhpbXEzF@RPRFY9f{BCn zmeT4NoGn|f(E0Cym-LFNg-jRv8G@-dLWFk`+)J>9JT^fkLQ3P-EXeGi>#N<-VbcaF zc2EZ2TX{S(j9~Za*OhR*&jr)%yC{69@K=F#u`3t&ECIx zd>NE3U1xM7_cMOCP;r^(QQa&pH30vFS+z5~kc;ek&~0VbLkhL1@9$0OSz zTol1M4U8l|(=n zR0hp+?8t44Zj0vA4W`Fzs@4M(HM#&Tg*xM#LyYS}!L$s7;9^V6+MM2%X%)Dl2#~Nd zQ2B_H9f%f4WzFHdpEkyn%9yk9D@!l~J=A+BVwRF0KThy>kh{l`3x6NlPmXO7%s~p4 z>6CgV&cPx{5S{b!^q zC<583A+&jGKoD+ZDBQEIM0LdFjFZA8VJ*_44l7XMWG}WB@ss%n)Z0D5m}3nDZlJUg zP%bN+at#Oc@FmbH5jGw@S`8bB1AR>4WB_j0GfBlOyhx1opG~BWyur6s5naI}5w z={}M+v@E?)l-akBMiG%8`q!B@=U7%*g)au-RS#Ieq~i#Ql8#$C9wRVznKm2{5=Pb; z39Sk#cY@(VJ%*FHy=VX49`Z zjQJ(4C&vKnO3c!TR}ylHa{v8`!fGfE_3vauIR)FMLclQ($o5_nd-L&_~)Xu zBa!K*)2~Zm)oXUV43zMXXTW7%TgXJ6SCf$8GB~v)t+lIw==V-{~W zVfh1WV$DK#NN$TQQ;(++PaGz=)GJ7rfd~r@paLN!O_{Gy=*)Y9r}L*KQcZGAOGM-V z`N(zQ%)PZ~IOP|;HnuEJamL>R0Kd2}VfjQFGudjguV}+Tm1^uY$f!qhY|ms#?b}Gi zd~;Dw3iM0kw=(%&QU~L*!in5(C-P(ojYDi3*x_apyu$Xg6oi-oxt_ug)?yW-#8Va0 z3-CpBDQ6d>obq7dMx+TEaz4yxKd%Nxx@Bf7n-*Q_wlbAf-NsKS{`^0@-D8j?ar7qW zF59+k+wQV$+qUg48(m$tZQHhO-NM#?Hg;lmc4uOCXLj>Oe#p2V^2W)C8=1d6&wKC^ zz#|svC|h_7bd0Jddov@$3ONjS7HLcQHL^2*m3nnoIBRGFuK)}j2%_TN)|K(86=@O zWr29GfX*M=$b2zqhG0JT#!{UJGhG8gN7vm=Xa*v~cXvq?4@As2JG5#K(rp99n{UEv zGKSHNhTMf0rgul(I&D(Ty2XDaj(5f@#HP3O`b`d--%pfCXk<#R$zq-GYivPgTRM}4 z!H6uK-BYA9X9s4~r8NvS|E}{S$P}Tltm_$7UMdZJQdC~qqoJq;)l5|C_JGtfPtMgp}A>!oG6!HW~1<_VF%Lgc`FO68PQisewUOOL2% zCUL)b<3ZmjJ!4G@|8ws;#FxMOG-O zU?IC#E)_fyA7nZiWQxXeCu<#v!U#+<&Vz#Izy;0X1NQ!y+Ty}Aje|vkMO|$^CaARY zVVOL<%`{9$?7qqLx<72UY1}XWJa=T+8X+@d>)GWzRhF`J$F?siQaA>^fs`_76!md% zH%m9zniGWSV%ynZU-W=W$z{P1WlqH43KA&1V1=~+s>+gdy^gCu(b%xd#0DYM7hL!hMD*~AF}Keq9R^?;9-PJpD!QF zEGRrN%?(xk`LpbRLO={EdB0dHx8pJquMoS{xr%Df&V$S|_W_$tFyI#wlv}2C_zN;> zM&t!`{RWXQ;h)q6`^;uwOhg$NW@pW{oP6cC*dt#Wdd1m{$0>M6L)K9^u&P80x;h1T z+{7aUwe~)x7sMyQ3)pGw@0GhP#_&((YXLG&-Ui%zJdz=JN~ z9VpkKe>b8cAVFuH04BS`dRA_u?h*#6SLb{kc#+*kB@qQ}1Vw>s)SwJna<<)(ouwL2 ze_XbeSCJb6f|0V;qjFyrl4Pz+E*zY8oE31W@tgDci4>cE*)oSxqA5bGxs+=+!cFFq zgJ{!ipZP*4L7F8fvet8PC6-3wu0mo}<4nV?tTrFVWhlA1}i+f^c>#+T+5(si%>28o`TS0J3cs!HZUAT9PZj%a97nGQXU5qBz zM^T!(Zc;a3fw3!ZxS2yRprre>V=v-kQGaC4SH0%HKNOS~t83yECqaxrUuu0|op zscYs-Tz-dHF$1rp69?_Gif2wzGAIxWm<+>VGwS-*K;Xla{RI16TU zA<*?f#eyMoyvp;@z+vo2Rqa4)t8-XOZv2SdX;m2-O>LIN9q1d$2Dh9*K ze}0V`-X9*0GoFZYS?+-ytU9Msgm#OGzt<_*F%&EUaxY9JMLd7GvhH4^2RBWRy7YoY z%{Q^3ttx|F57_{vFhOwBzF?lB9A}6_Ol}pAk$|oBsc1eM6u|?Q#}O5e2akDAy`#P3 zN`|A_NSotw;yEQ(QWYFyhFtfgeaGdQlo_t1;aiof^|0Vo9X-8=jfadgmq_w z&Ux7vIl(L`cu1NnMAR{&yciO}IBS<05-mC@G^SSE)TXwA{x9kmwJuEA3r`Jy1DABa zf^3cl5#g!OU~C$wY3>F!#+M886Sp9!4N8^M-?;GJ;& zs1qmz?y(Sxb3%tc4wqvZxe`_*o2$X|5)a99rW$Cc;2w(&2JaGi^HDjvY8FVIr*#Cm z>$u>;9$n(2D@u)Bh?>n9ry7lJ2zt%Tha7vLmL|b1xdf;Rgu^_j?R;UT)@lqbcs4yY zb_;AsRuj|_d_V?T>-eTc1(c0ED|%m2boNJnu=jvSY3jxjm!I<1Vhf2HVbxP+KZ)g=BfouTFbx{;Dn6U!m)7s)yV$WNS+vi$ zjdV2dM48Y`P&rcAdjHzzPJUk+(oy};=l-wAVM^c1`>$$g7050@4H=e#*5W< z7uy;#YA+t2Z#z-65?Xu)E!0Z10_qE?hFPg9_JlBQ<3GIsULIzyp3Ty=LNyheWk(mJ zQP&gDf}qX8Nzh+|(g3Z_O!h+uS2VU7MwxI70-V|H1}g7NtZFI7Z9V|R;V^-9TFmUqGIqWr6}FG2X0!|^WQSBd>5Ko=#rB5p z@)*b}EppS$p?4H-e<~8E zE_FklGa((|$R;JAoQN|8Cvig((XDO7^8Bx*a|I}oER%&ezik10R+7Baki#gifisIr zm}U-5TTIt~N@rYQ!^rEpND4I{DxjKJI8DNCe@ZB?GA2aUCIyXM2_3QgNlza_Lwht~ z!YKispnn=39aNZlIi5hQ!TWC+Avp_q0#f~MU+ zk9dKek|4=KJ1D{Y=gOnjkY3FNV|ZyuyUsF9dxG^E&hRAN_B1fnL+OTOn%5MfP$5dS zMM}+BbyJeE!Te4iwTVVUhY+3Jw`^?(Pxk87EK-U%jX=he(NpksI4>Z%QfekveucDk z$gXfes-MUZI<J#&*4rXs)PGPNXktN5S?O#QRljr=UJHGbL_1a!dk1zcQsl{UHo9 z+OOv!%ir0YBX^l^=#pS@)r^pxC4t_!tU0p;6vpP3qr3X?l?TyDWQpgcLZNhFK zJ7M3DQeak4Q_35e!nVh}p|v&2Z)0NTz5h<17+i);j31#Uuz$s=&8?QY4!@r;am-kK zd3zs6sfi*g3FL^*gN@Kd+7JX85~xcIaj!cogg2{B0GzhS7YA9JHx$?}BA~?_P=CWu z{F{c!ygF&jqP$Wt53O~Iw@Ch-{KT?(*R?J{23iQ!Vw+HMF{JfFH%*%y$Qai_5r~J> z6<{`j${cIqMKe3xMkcCjADdaL>eO9+4z5m)P63joO%Ep&XAzWIJfr5;_=ga}dDqL? zy*#XS>(Ev%4;k*X)|cWHDr*f9s{6t*=ilZ%aH>E5Hsv@OJh+XSoeSk4BA}NHTZ;`JoY7iQ zY#JEdmF}2Go)JhZt22Xe<}eFdbrCe;9adsO?bj5)l1Yk#iLG20dJ_&pcYlS34LSUw zYe;7MSTJZ!ms>9!=>!{>dA1=2@SH0M64eBk@L}JXx$MH-yTTlXXwG3SGL+e&Y-CXl z9%o%d))VZL+g5Pd?9m*ET0&%r41`^gbyV&}G@-rh(&kP2Xjn8_B<%K{B2)rAu&vP= z-ZCpFIag+QrKPiB^Y4+XonufoV+j-994{J{@e;FsW@3-112g0>ER09PmVb4mv-N`! zkKJhrJdI|d6G1~=lH_LLuAi$3L;_>H_!f3Hej~tjzIrLRU~8mAI~_VySmo`cwv<9> zzTr&T?P||kIdUbnS4_%O#_=RCr7UM}iCWlk^|vWUi#J(T2wKsCd#2WSm5B}%>xyB# za;n*J+z__9P$6L!1A(j>&Re>d!mh;Duo-Ke%2~~^o#aZptH%i~vM25TiU@xK@eBh5 zy2HRiudvZiaVrhi&}okYYX>9pesxmc$aL61oEO6!%sUwo1FJq=mS%S#NlV#0(-xP< z6@pX{xCBD0NbF^$lgNS)E&X&)M#rn=%e&C9d&gy+g;)!2Fv;THxk3P?+>$=MmPC@6 zzL~^Emu;}o)3DI}qtY~5ZY1GzOkb%dM4(H%G5l*4UUqPLxSk13+;rw(wxBJa32)Lq zlrhGCzwkT42#S=XuBwKrWh)7shr}DCg@u^N z6%nPl(?KiAPG&*7b_AcfV!2yif@uEf2C)w%%MiR#TMNJ^+o zA#+G$4EPBa4!bOy8jZF~1sBN8s;2nmPK$ua)VHo-VDhXZ`^_(@f>f^8lPR|VTBH|lGRU|;%zJKLhKn?a-PXK=wNIr zRbm77J{19pG8PgcLHz?n5c)Wk6DlNfX~tB7xen1R12RDJ^65Ik6~gskn_D&_OHpLa=}F*{yJq%DSGGJ?thipT5gCSkZ@5&-o7JWcJOIuhE5vF9h>_o2Mg;Uq)pyLVD z$*G2>H}|4b3W!13EV6I)7JlCn-M)o*|IfOz%>mQ9^ico(n+&Pv*hBoo;jraCl` z!;T_)zEm?KQKK%17<26+vZCmcA~Ax%x1|>C@Qj`V%Pq?W_OuiXW<_m>Vn=?mX(vhg z^^Vu0$z(xAEOsv#!mEz)#i}&@qiX;%XNL;UOs#mPjZ?4USL~c>f7}AzHUqel{z7G| z3!QJwmKt$VIi!*Vy|t6`P<76?vRkg?K7=o{)eB$HrWe&>!wJ~*fHyL}a_Ajk(r@0E z0hx0W+c?;a7&St?lNBMdr7XuAt()EbiR-sV!DplU>3=}gV6xnZ%UD~0a^cYv)u}n^ zO+qM{iX-aXG*`rER-FnSeLVOZ>1o16jGZoA!mT3$$?6A(Oz3UH9I9NL-ub?z_y`3F zvyHA=(ZQZL6LHzmmsx%ZM6;cPBnx}Pj;0uTxH9>qfRZj_+Vy1sZ@heQpKD?@znN8E zLXr<3s~8tD3`^4&G#udxY$39Qs(9E`Ni`5)98?8lN0=Y3c3FidzI^@YCdRo9NsKp} zerNJqO+gutRSc7*C8Jy z4}nN^uQIt`1vT9dwr)^&{NU(qD7TFx=zV)a|Dff{a>Z_D}X02`gm# zLGVl1y3&kT`{aoz(msgZz3!forMY0s z!7f2#^EAyfi-(RCMv7@0_Ak;HYV79#)KVi5ejH?Y`20PIk(ir0(n5mbxQRaF(QscS zeYz-nVXtt^R;(V~{K%)JiZv@B83s-y_baV>7+}OPwIO8zHElT5jxLAsloFJCK18kE zcfNAZ7n^LuD&!=JeVw$KC{yu3RVLbyyH#|B}FqsH>Hv>5QTS_n0 zTP6_Njn5se4(Nqf_&YTi&R^Q~6`il|bY;4iemQJ4sivUaU|ScTf8QJ-*WH9CUWAJE>oKx$Jan9Gshs zP666G(P{$!Em`?PEcKl)^g2UBW*gbr*l*j)C<3WoUh++kY z6mOL@+gi5Q-n&GqS>mccyplAUx1rwRU7wJ&*N5iRbDGOr^mJZ$=+F}2eGlBVC6?~a zGu*B6acv*9;p=mcKK}eSpGkInO19}{`?ICv>~&X5{_8hlO&mkthHm$Je{47HmJW5h zw|-K{kTeH=_nvAhX873ga#sL6hN1BMP?;8iy*&Xkci~uu_my6Ev!{HcxAakdYz+*% zRMZHB2nWZ7-u)SIVfdO~fLs@B zEm50yy7b8Z7r64FyNh$H2O|rJ#0Fp_$W0S&$o#`Z-H~1*VL}<2_q*o+1Mt3Q;Cr&U zBI{cfF$|lbZ?qE!DgE{niGMvcVVO2guf-eUZ(e#lMk+qSnOi%yTR1<(XNJ^*CqCKI z7%&T>Mfmt1?)OnLW2T1phM`rP84Hf02LaN?@;g4AH~&8A@>FrMI>>W319OuI&;vS< zNz0gV&1rkLhjC4IpARMeD_n`UF~v&S_mkw0HKpHn@|oln zotHnW=ruz#A*ay$P!6d0Fo{0H5l8ppAC7) zo`C549-HIG_Bzjj%Dt=9i`bueCJ0MI{4e@xJvw;Q`gJ*8_A=KjzN-QQfEVQ;LRm?T zTtAEhiG7%Oa~7ChS&1Q@ln=*GUbe{gEk2OOxdDcyh;4p& zi#srmbEN>OB5^R@az=IYvG&+Cig4-Xi@Hebp&JHJ{{i@dZFKn!v{|v+LL#; zkX&*9?{VeGL-NEF%?E+aQp11XN`8N4d}C%#J;c+pK3XwquN*R$~c)ZXq*mjX6t~+?bd+}pAXC5j!2@kb;SJ)Ig6Rqdr@Rodt zp_&wPD&l>728_Kvv3mgc5b{rs5}$zgdHIvq|KuyFPSTmR2842_Faa)!{^l5OuP!vJ zvGZwL4t#6&&*B^Yr@Hobr;@O@vUH^Yzp7~zr32H%6w?qG2H(Vb_X& zRfjdi*tnjvZWS=_73_vgQ}HA>ZdLHYIx%M#TdHJN7)zv?vG!?lW*eg?eTIdkG1HcQ zE439hCLLg8wQO*H|DKU>NeLhODUD|9+L257BPPXOgq__oUn0}+#2zW_IIBM2PLCJX zPs<TJ?kN8I2PO0xWix=RQwMR`F_L{o9!l^Uf%{nh5nCm0l zhBfh6`s5RMXX(45vUxQBq3D~sx+40NV_b&B-(RN=Vo z5nea$%Ssxidfd@OSjLGqCcy_jw zc-lORm+a#`3)hnM6DtqV+FnCXE#8Vhdz4e*3yc0XOF(1tg(3n%q5c5bGY_ocCi1bd|VX!WJ5h-;*n zPVo=3kf%I*ZCR5_u=SyqiJFwxuV?7v^``fTW83tLzkB}HDBny0)-c)CC5^PdaYZTO zMty=xoe9rfb+@870|WAqFS|H+sUFctRE^knZ%|(Sf0goBZhhtEU*~~Np4L}3#w1D)Qrc;?SzFsysmzchhVi?QzgqdoEdf5nw~HO#h<2x&ELI(`OH z*2;^=UQxcv|2-J-^@IHU{X0y~Uc2W9WZ8v3*F2QhpFQ4=jq82~UA5!{Zu)FJIji2) zU(z9G-jw^jANCzt*S7i%Ije616#8*OE~kK><%5U(G{`yOIeb5;877Krur+rzZ)k}R;pBMl$_$TM5yrarsSTi)kb zBDRBYs!}HUR|6xKy}+g2?s`@ECqR3tCcqBX>j(8#DELAp2Qz%we}6UiWLj&BnkKT> zMF4`eZ@P8Ao;R%fAkU(D-glczIi4@H-yaE3l3w?S-Fb?sCq4@;KVW4)d@T0EFLm)K zSC+oaI#950$tC@rm~J=+0BhW{*9Z;Im;8(ReJcn!4~E^jHP8MrH93wQ>niVxX7ILq z0GUkz1Mz0IONq0dmypX9`Cz{l%Mqb&0Sh^Y-q*_P4;FJ^^YvB=z^TeE>+p9r4DU3U z-t|k*9&A9301TCGr|vxccD}pBpLj|%^EGy#FXdGM&rc0t_aT25s@tPIKV|2y=UTw| z`NZ=#P6fcTdv{;=7l0t*XV8etpRY)-FO$XOBTJbHs2sGWDez@~^6Rzi5AKacz9)&j z8FSJ{)5iy`k?*Tp1a~qHJ*dELv3>gO;s}Yx_)#Lc?S6QLODR@RiRNgNyIHl%nZe#GkKA!dk zXe;;{@;^w9VH-E(m0Dcsb0iPLb|{ZNN2s^qX4&TwinrtM*Bw*@-bN+?lz%?`s-}g0 zsYUvIliT2Un1dBnaBt1>faj}TVb#2Ny8ZBtyPwH(D!VTy>kbyV`c^`Uxevwy&0ea) zfRm=fIpYr#7C*PW{Z=&pXW?-sff4wJff!r$Lq8((l$tL_4xH~V{+dsO^!l6Laisqx zwi0WO#n{Esk*fr1>g6ubS+q%Sf67)me`F301(qS1}W8|6PbQY`uz_EDTkdgoLnR2_^>0pMV+mWIplKM5bs8Yd)@p>sZ`bnN~sTmJ0s{#W|R5VScInpRtuR?!aYOKeiJ6ziTT| z{*$dVwzo60G-t4-W3V-}w4--1`_II3kmu8Wqq(^UP(yh5Rm-R1lv$#y-upu2d>>^{ zhBCNzJ)jE_m>OrhEm@2&)pi%v+4C8sUoR^4HQGLnsV1@iw)@5({)i}xsheOr1~i72 zA5Xd`QyVIJ;$Ldsl3gVQ?W3^DK-qf^HUsi#8ZZl7OUniMcw~9YT3V$gWR}MJ$9WgE zSc_EWm9({APFN=mN1i3 zVHX+PVfS$9cKV|9Tl=8rcKN-q`*6tn!QQQ%?LVCnd!`iI2lpZJUG;N{E@S~FUQUyK z2B@$?P|ww*qwvlM=7TDSu=LI1Do_!M!3@vAzGjkAt08430GmUmIf1E^%c6+WZF}$H zGGNZYfh(ee9VoG)FOX@W=p>IHzC%k56Gw~u%13jUb#WdBLTWd-nfpDy|7k&r7a38j zIF8KZ1VAO}m_aI_;uWXKFb4^5%#IF87QV9*!xB?8*wLyWvNVmxvj-!^HMzJ_jSOPemO%|8E^9{F??UoV9u}@EA)PKfy#YK*btdgyDdw?|1I6 zepWH--5|!O<9tTy0UVX`Wu;R>1E-uPeb#1wl5n*v&(NVL(ijYqH03L73Hz8J|CqUp zQ&MiGn%u{4Ypf;|dpiCWq&WE^cUc!|)f;1le-Cokazz|-72Mp`_y9(38Y_~|Z~y#- z)1@r(WZZ>6uC;5umgq};q+^B%30n1Fb7gjnqV9xTfo%DIj?xvbPIx))NQaQs?GUrT zhy{Uo_d7>>Il+t8$jSdm2C=Y;C#4zm-@NW3w0C50eK>Kn@q&ZHajx37E77^h?~|FE zBIW-Qh?wPry%HH>9cq)Vx1KBtckd6zBmBdJqGoNqSyaUF`p~h)G|}@@;6)2r3Iks#1JaDu+kGMvFKhH<11l}0wrzi%Q&IfDN z5`z>ZE94Kn1NMw#m?bbTI>KLZVkTLpm0c@EuitL*Zv*xDgPhQT!@O;Si~HxZ0}n;;t>36`o@2 zZca&!9{fcLb1#>_i8gA;OMSQs~1l1XjVuDhnNvl5$^{lM_*qqAo>Y$}v#z-yxC$JQHfdyGm6i z8)z4D#yTpRG!NOK_dqj}6^`DPKvxz*?kNKQ<5UjfSY0zO*CHDkvM;ZV!}a1QU}A|a zKGcbO87PIv6R%5IO9VK)xp)Kvtn$LB=MYFf1adZh_{F zzo-F5)qva@Ja3B;F>Jnm!h-XBovr*MMpY3G_uEkygB-omQH{FE2JG5VeXIkXrxdCD zaW>qc2V533*P&ObX|2>u-p^;l)Ru=N>*0MgK9aro&CKiUj}KE$XoEJI!dG@;dt}xY zS$#=UQ)jU3s&j27Z|1PJHLnsN5Q6ab=yX^NFa_AQYjO53Zk&9MQ=7rLb{UN;cL7N40D%p*GNPaOv28o!eoNM zwPzxj=Ja>f$JeS@RZuBwj85Vli?Q-XI0@Hix;R&=C1j9r zMe{aTHjL+^PFbTXv)rC}Bt)%bNvoB@vAM`^NMJBeUGTsp^bC1k%kjYNpNdkN2pL=S z(HM-duH6!vy}A3%K(W-_#z}TtJ=_1mk z*~UPY5y_w-kgn-Q8J-O(A&|*2uT#&C&n}%{xP=7fkKX3+U1-C0N2h*Cih^)-pOFdg z>M){-5Pk`g&(k$-(Z|yY?^gW|WY+#zodkyZSUNe=t|Ywqgq9>M;hwG`r8VPa{VqeL z;0n~h)Dip>8@YV2*kkB4chyTR5UZ@o^5jMUdcOc!iK`4cEDEO-YuBl1TV)ytUJ4~j zJ$d=*ZChoZ*pdL7z)2a5rMMF9$EEhw$_0s4TXHMhVK7QH-fo&mZyH$(F*`bMhgINsunSe2!g>XnMo^BG_rbqFdg6&hI0Cb-)-D z^DB{B-xek@mN`kN60I<@YgzT`k}4j*uftm?v@Nw)YEm{`rHXD~u@+k~Yyb7s>=3VR zMd9kd!g|Z0KkDr3*xciiQjC3fbGl08s4`y&$8l%XBau=0G^xk_~iis2f$sm(}BTa@NgcyqQcvs<+W)avV<-`eu;sv7!L^KmIvHG1kj(LA&@ z%$Ae_^*omr!7H!2r6_*i&@-h9+Z{gLbJLcs9ef3vo2w~bZ60DC4I2Q?a$M>*1%MZb zHC(~n59OncR7lK+@GwU#i=<_=W9{e`C8e5ECzQfjvoqm$uigs9@SE z`D=(x9U;`M?ar#M(BMm)Eq#3qcJ`T*OlC3(PTMS=Dc1MSu%A03ZYXrW5akqx< zB~R&_2TNCbPg_T(pWq7z#|j|cygAR_O`#!3CS@4Qpg;%wfR$DQyZxZAt7x)I^=YDL z+C`85X0*<6l<9gkj30zLo$&pA6%$OgC00N}nppj)6SWsj$eWaT9-~H_zeF((ZKcR0 zw5?4xzvrsB(gOvodMg-us|)gqKMrFcoV+__A!3$Hy^C5G`JFQf*PwV^a6;(8wa4h` zVwSGi*B;zgqWS<2QC3s!VvD}HQoBz)gsttdSk2Ia&S|CQJbJoNea>3GoF80Pa7Fme zZ3z>M+U%?#_}5x%3v)AybeE7izUVva#HM&%lbFMl!+Ubq^q!snrFfY1*dC_c6~ zC!G4o{y0<@2wq8O_{|ba!rlnJ$-nEz`VBdlX{Q7l%9PMUPpOn>$_1Dz&*n?jEPpr| z$!y-ojjEn{4#K6qLjH{_9%g)Z#C79iU7i{&A6anU<87)){)uTU)fmL~OD4OV_>PqB zLythJxJuq!^Dus7zzykuu#Dq1&+nrFh(elL9ZyQ}9kK7HE-Ub$L|tF*cl*!EcDGQf zCS}dLZQT;35Sqp&1JPB<2-?GhbL+ty#eD0<-CwOrf}@5|@i#3->ktEbEELGXk#ER{ z-mG4C=ZsQ|&nB0z3luNc3;(c@o?6?;N1-o!ZWXVeLH{RW{S%+@4 zm!ox==8={$eEpEfXYC7C(k0xaY_5UJ#`gqWTB<9ygX_65>iSwZ_}^b3z82e@)pcy1 znLCUNBi-k+C8L}RQ9?eqF+hATbqi+nopo-L%!?0@Lrz0EXuczxX=`_`M8 zt8w*US#xhsz$?$U(w8*64s1;^v~0f*NV3z3)O7Y_=gQw4R76kzl|{1-SYr^FB6nAB zc~R$B;IGX*9%e9WxjTG6ug{D47viV@lA$YiO@9+C*Gg(^%Dv3*s6EY+B(n&jKhCWe zqZ)F%%}U(=IuRY66@Q|xOxOHR=%A!JO&xicd6H>pLYL3TSXKV@c?CB?@C!}}V*ts} zH*#QPeTlj|YCDqv=*cuj?jMngWVUH?2TTt}x%%i#RBtR#nTR))%SmyG-icjdM^)do_Xe29*PvLJ`paR$#q6&tchve{o zLJV>>`R9B5p-;{k>iHwLeg(fl)lP*h2_Dc-3_GQX@+LZf`NCej5kF*Ht94@jolpPeys)0eFQn^3ks?)tbM*cv2piwb#-TE zSA4izK)#vn4Ns^vMLJNaSLv|XRawZI;LH_pk;fG#zR9Cp;k>_tx*e+K0Qb)@j)Z<+ zh^zdCeEF)`ZH&{)81x7JKk|lJF++OBe-gQEM1C4aq(MMYe?k6y9F2KZfBhF5=704} z>}Kd>X=r3)>il0m7#AnV$_+3giob9T{mTxL#Xys!MbuS@tYT~W*GGIO%HsBh;w~Yj zElQ*yW`fi8a{Lg-I$vVC7>{xMM>fjKE%x`Bb*HMJ-x*f8JU`J^R99^_6MRT$M__l7iBFpo1=Rw4e?j89i92 zR<(xU&uPBD6{H~`bN*W6QT-hK$Nt~GX8*B{LGNPftgLhO=u7>7Ya2B?)#g0gp$G4ti;baF+ zyq5X+^ZLZ?s_CWteW_;oGrVIace|%E3t;Z+{(XO))$0F6eVzBx7QIrV=YvvnO_R$9 z*rWGv^#-U4@D6r*ydGbFy?s`+=Rtq-{f|Ayq*7izt!pY z^j>hI=kL9*+T(M-ti8kE`8x4=7T(c9@IC=ZtHJm4xVI1cmpAOUww9t#81(scX#6~V?*zWiuD^ZU zht4k!zVDY^w>IQo1irow(g?mU)b&g7-gAZgK5xe$dS0&|d`%a)vl4Q zS}AE1VUv3&<2`N<^Nwn96p(sUKyy77J35z&Fa%f1r8^C0KwHzw=GnHn^ijzaEQ)ay zESBh)qF1UJ?=(u8#vS~wr(JHcuInG0Issij)3G*D*)-bc1ig=X zQMUnM^SHPWG7z^~@oAyY@p!0_HMN{^Ojqr?$%*~qR-uWmGu~2gjw#J51#;W0rRFma z8betb&j9XLbF@8Of#(FooZu|9MLwW$Ym=LF*Wjd2bI&_B+gbdwn7Y=C0d6;rmJ*o^ z%tbEQQi07uts!`6*Q|Z{ONod3rr*Gd#J+ZWvO7Gq3ogqB?dsA8<-Di+Y3KXc%K!D4 zq5?1P*QZI-_X5Ms?b!R8(f8w*yS`t~*W(<5|L6S{g22b&guvW_zW?*bR=oeiPwuLe z&+{k6$C>xnM%oTPz+?*@pvKePf+w{iBrd`Ql$`^p)DSPt2I4Wh`Rnf6gMUnuAG*}vJ&Bo ztMbAX^aU9z$6P^BNs@JEcs%)87ars_Eyakj{9Nt;uJ1M;R&{cRJ77?3e>d( z>59Vwf1^R!q}#}|xG-wq6olo3R=jZJzuJyq1x{P0z{*{2#Cp|uWmS4$Y}j)mLf{9u zvlI_NwfF}vClW4oTY4F>a21YdZy#h9k|WxDQ^`0Nqc54($e2$EVTG**p;Kz^GZP9@ z%Hg&(BHhx~+n}M_(lU*o`fobAkB-*6#=K8f*4@YtT$WuZfi(dNNdId6D*YaUJbv%H z&jEM9K#kuE{^whf2Oa}|voB)=kEO=nK4hg{7g4eQ3?{#W2O-lFm^jYp#o?HCjN;D9>ZACMV;iqT1210A$pS76n$s@V{lC4)a}X z8)}Tq*EE(cvF>oHie79EhpEur<2o3MZxpL;p-lOwL-`8%+`E0;uv!rbLqSn*$peBXDSyKno3#9{}nYeg4%RvlyH*BnpR#Ux)_p~RgbB62^yPW{EV^NMm^;Yzsy(z3)1daDVKQ<`si$)F zD{JlxzT)s0ha9V;`MC-uc$q)vbVdk{+W0M0ieYi4>%SMBjgV7Y+#C^q#g53lK<7(s zLy$fsHqEB6OiKTahZh&3jl_Rwt{};XI@Nh=jN(uoV6Pt9SM|oPqDGk9hV|R>Jhsto z6jraIt_3S=Xb7x^5<5cG5s=`4A#|TVP>88qQGqhaKC4b$%69V5?UrqwIX0S%tB8)-%$ z=Ti3A1wLEpHpGf~5hb2hv%c*pw|9qtvnCBk)w3(GEUg`8|LV4EP>?&iaa1)%XQb5} zu(2U1RdH+$DtKe%z(?^_vI`TnQo$eCHZ%>W%MsW+ar0sL*R0)UY7UDz+yzAi`MQmy z^2M-SWtgP56vRCD$5pV|HChv0^WyeuLARww)9RTN`81ix%LaC_zN+xSFJ1j^dx=W6 z`s>;(_LyPb#*F>W-C@E zMF*;}9o$XnxW?6DOXqA!j=l(-b{UhhMYfwmR;<#F3M4DV7NUFTC9#R(S#M`sIK@%e zBJJs%o)JXuD12ibQp3Ao9fwX)Af3#K;$4`cx}B*$G6a^aDrnA4|FUUK2FhB0O=jrV zOm(B^h)cVvOR`6A+ya@SO0C%HFdb#GLmHafWQak)M{aC&MFcMgCntJhMOnI{-crDB z=-~h>R47XT+A$BY=o?u-lP`g!VJ^#}zp1~O)$;dXCpc97W#_Rcxc}Xs_0|4k#JuPG z6ylS&$Lk%a%kS&VT>s-}@8Y4&N3+MfYUe4f$M^1bj-Y46e&_R5F*rO9mm27C-$hUL zI-|CReP$C}z3wI_g~u(ZRg?Bt&i2LTyfafTw!Rk|XD4*mvJ57+nYvW|tZ+VUH!i~b z96XALKJ;`;b*&|gxg)0cTVj6_-F13U`g*f$xnmguemV)FiR>th}^RO_-3su;dXy!}VF_o*LLaBC+zuA$B+=w(K z>JpIB`At{Uh}*3Mbs7Qeb*2n!oQZ6b?Sn?upX68|Gx_KP+cW@d(rR|PR)(AR?+{mf z$?^!zGV+O8IRPKM9*7;3qa#&U-eh772*L&pSi<&~kj^YO@EAwYfXtml9oqjS>bNatI z#Z^-`?S0v>W7-3 zLPfp@k&x$!1vo(sEVV5-l# zM>n^v-{4{+xBD8`8SkXd#Mcua_8$Iyap8lPORXjy3n*jx`s8EDGViT7uY20)Jzji! z(Jt4H#Y-3ieth)2=gP}I;jQ?sOQjj7WmfabJ$6a23Ak*Q+k34fR`r=ro?FFip0&Fw zGS)3`PTW4t`SqsN*RGk@KV{mz=~Ts0QstVz{Q4cjnHv)Og0@TYzfNQHjM&O>iM>h$%`wkl8K!8^}QBA@+;(=})a>pFh t=SKj|-N?pa8v#H!3px5wJvk3(7QT*sfHx}}$YypRe9OqdaO5P22LL7|DWU)X literal 0 HcmV?d00001 diff --git a/deploy/release-deploy/clouds/azure/terraform/tfplan.json b/deploy/release-deploy/clouds/azure/terraform/tfplan.json new file mode 100644 index 00000000..2b001896 --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/tfplan.json @@ -0,0 +1,7081 @@ +{ + "format_version": "1.1", + "terraform_version": "1.2.9", + "variables": { + "grafana_admin_password": { + "value": "grafana-pass" + }, + "grafana_admin_user": { + "value": "grafana" + }, + "k8s_cluster_name": { + "value": "o2nextgen-aks" + }, + "k8s_dns_prefix": { + "value": "aks" + }, + "k8s_location": { + "value": "WestUS3" + }, + "k8s_node_count": { + "value": 1 + }, + "k8s_resource_group": { + "value": "o2bionics-products" + }, + "k8s_vm_size": { + "value": "Standard_D2_v2" + } + }, + "planned_values": { + "outputs": { + "client_id": { + "sensitive": false, + "type": "string", + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e" + }, + "client_secret": { + "sensitive": true, + "type": "string", + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + "current_subscription_display_name": { + "sensitive": false, + "type": "string", + "value": "paid-subscription" + }, + "display_name": { + "sensitive": false, + "type": "string", + "value": "External-DNS-SP" + }, + "object_id": { + "sensitive": false, + "type": "string", + "value": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + } + }, + "root_module": { + "resources": [ + { + "address": "azuread_application.example", + "mode": "managed", + "type": "azuread_application", + "name": "example", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 1, + "values": { + "api": [ + { + "known_client_applications": [], + "mapped_claims_enabled": false, + "oauth2_permission_scope": [], + "requested_access_token_version": 1 + } + ], + "app_role": [], + "app_role_ids": {}, + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "device_only_auth_enabled": false, + "disabled_by_microsoft": "", + "display_name": "External-DNS-SP", + "fallback_public_client_enabled": false, + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "group_membership_claims": [], + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "identifier_uris": [], + "logo_image": "", + "logo_url": "", + "marketing_url": "", + "oauth2_permission_scope_ids": {}, + "oauth2_post_response_required": false, + "object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "prevent_duplicate_names": false, + "privacy_statement_url": "", + "public_client": [ + { + "redirect_uris": [] + } + ], + "publisher_domain": "o2bionicshotmail.onmicrosoft.com", + "required_resource_access": [], + "sign_in_audience": "AzureADMyOrg", + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "support_url": "", + "tags": [], + "template_id": "", + "terms_of_service_url": "", + "timeouts": null, + "web": [ + { + "homepage_url": "", + "implicit_grant": [ + { + "access_token_issuance_enabled": false, + "id_token_issuance_enabled": false + } + ], + "logout_url": "", + "redirect_uris": [] + } + ] + }, + "sensitive_values": { + "api": [ + { + "known_client_applications": [], + "oauth2_permission_scope": [] + } + ], + "app_role": [], + "app_role_ids": {}, + "feature_tags": [ + {} + ], + "group_membership_claims": [], + "identifier_uris": [], + "oauth2_permission_scope_ids": {}, + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + false + ], + "public_client": [ + { + "redirect_uris": [] + } + ], + "required_resource_access": [], + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "tags": [], + "web": [ + { + "implicit_grant": [ + {} + ], + "redirect_uris": [] + } + ] + } + }, + { + "address": "azuread_application_password.current", + "mode": "managed", + "type": "azuread_application_password", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 1, + "values": { + "application_object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "display_name": null, + "end_date": "2024-09-27T23:44:40Z", + "end_date_relative": null, + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9/password/6c924c19-e789-4549-a35a-b09cfc673d66", + "key_id": "6c924c19-e789-4549-a35a-b09cfc673d66", + "rotate_when_changed": null, + "start_date": "2022-09-27T23:44:40Z", + "timeouts": null, + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + "sensitive_values": {} + }, + { + "address": "azuread_service_principal.current", + "mode": "managed", + "type": "azuread_service_principal", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 0, + "values": { + "account_enabled": true, + "alternative_names": [], + "app_role_assignment_required": false, + "app_role_ids": {}, + "app_roles": [], + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "application_tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "description": "", + "display_name": "External-DNS-SP", + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "features": [ + { + "custom_single_sign_on_app": false, + "enterprise_application": false, + "gallery_application": false, + "visible_to_users": true + } + ], + "homepage_url": "", + "id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "login_url": "", + "logout_url": "", + "notes": "", + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "object_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "preferred_single_sign_on_mode": "", + "redirect_uris": [], + "saml_metadata_url": "", + "saml_single_sign_on": [ + { + "relay_state": "" + } + ], + "service_principal_names": [], + "sign_in_audience": "AzureADMyOrg", + "tags": [], + "timeouts": null, + "type": "Application", + "use_existing": null + }, + "sensitive_values": { + "alternative_names": [], + "app_role_ids": {}, + "app_roles": [], + "feature_tags": [ + {} + ], + "features": [ + {} + ], + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "owners": [ + false + ], + "redirect_uris": [], + "saml_single_sign_on": [ + {} + ], + "service_principal_names": [], + "tags": [] + } + }, + { + "address": "azurerm_container_registry.o2nextgen-aks-acr", + "mode": "managed", + "type": "azurerm_container_registry", + "name": "o2nextgen-aks-acr", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 2, + "values": { + "admin_enabled": false, + "admin_password": "", + "admin_username": "", + "anonymous_pull_enabled": false, + "data_endpoint_enabled": false, + "encryption": [ + { + "enabled": false, + "identity_client_id": "", + "key_vault_key_id": "" + } + ], + "export_policy_enabled": true, + "georeplications": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "identity": [], + "location": "westus3", + "login_server": "o2nextgen.azurecr.io", + "name": "o2nextgen", + "network_rule_bypass_option": "AzureServices", + "network_rule_set": [], + "public_network_access_enabled": true, + "quarantine_policy_enabled": false, + "resource_group_name": "o2bionics-products", + "retention_policy": [ + { + "days": 7, + "enabled": false + } + ], + "sku": "Standard", + "tags": {}, + "timeouts": null, + "trust_policy": [ + { + "enabled": false + } + ], + "zone_redundancy_enabled": false + }, + "sensitive_values": { + "encryption": [ + {} + ], + "georeplications": [], + "identity": [], + "network_rule_set": [], + "retention_policy": [ + {} + ], + "tags": {}, + "trust_policy": [ + {} + ] + } + }, + { + "address": "azurerm_dns_zone.primary-dns-zone", + "mode": "managed", + "type": "azurerm_dns_zone", + "name": "primary-dns-zone", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 1, + "values": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "max_number_of_record_sets": 10000, + "name": "o2bus.com", + "name_servers": [ + "ns1-32.azure-dns.com.", + "ns2-32.azure-dns.net.", + "ns3-32.azure-dns.org.", + "ns4-32.azure-dns.info." + ], + "number_of_record_sets": 4, + "resource_group_name": "o2bionics-products", + "soa_record": [ + { + "email": "azuredns-hostmaster.microsoft.com", + "expire_time": 2419200, + "fqdn": "o2bus.com.", + "host_name": "ns1-32.azure-dns.com.", + "minimum_ttl": 300, + "refresh_time": 3600, + "retry_time": 300, + "serial_number": 1, + "tags": {}, + "ttl": 3600 + } + ], + "tags": { + "product": "O2NextGen Platform", + "type_product": "Saas" + }, + "timeouts": null + }, + "sensitive_values": { + "name_servers": [ + false, + false, + false, + false + ], + "soa_record": [ + { + "tags": {} + } + ], + "tags": {} + } + }, + { + "address": "azurerm_kubernetes_cluster.o2nextgen-aks", + "mode": "managed", + "type": "azurerm_kubernetes_cluster", + "name": "o2nextgen-aks", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 2, + "values": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "automatic_channel_upgrade": "", + "azure_active_directory_role_based_access_control": [], + "azure_policy_enabled": false, + "default_node_pool": [ + { + "capacity_reservation_group_id": "", + "enable_auto_scaling": false, + "enable_host_encryption": false, + "enable_node_public_ip": false, + "fips_enabled": false, + "host_group_id": "", + "kubelet_config": [], + "kubelet_disk_type": "OS", + "linux_os_config": [], + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_count": 1, + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "only_critical_addons_enabled": false, + "orchestrator_version": "", + "os_disk_size_gb": 128, + "os_disk_type": "Managed", + "os_sku": "Ubuntu", + "pod_subnet_id": "", + "proximity_placement_group_id": "", + "tags": {}, + "type": "VirtualMachineScaleSets", + "ultra_ssd_enabled": false, + "upgrade_settings": [], + "vm_size": "Standard_D2_v2", + "vnet_subnet_id": "", + "zones": [] + } + ], + "disk_encryption_set_id": "", + "dns_prefix": "aks", + "dns_prefix_private_cluster": "", + "edge_zone": "", + "enable_pod_security_policy": false, + "fqdn": "aks-62baec49.hcp.westus3.azmk8s.io", + "http_application_routing_enabled": false, + "http_application_routing_zone_name": "", + "http_proxy_config": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerService/managedClusters/o2nextgen-aks", + "identity": [ + { + "identity_ids": [], + "principal_id": "673d7ee5-59e9-4177-893a-154bf2411e58", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "type": "SystemAssigned" + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "host": "https://aks-62baec49.hcp.westus3.azmk8s.io:443", + "password": "85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf", + "username": "clusterUser_o2bionics-products_o2nextgen-aks" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://aks-62baec49.hcp.westus3.azmk8s.io:443\n name: o2nextgen-aks\ncontexts:\n- context:\n cluster: o2nextgen-aks\n user: clusterUser_o2bionics-products_o2nextgen-aks\n name: o2nextgen-aks\ncurrent-context: o2nextgen-aks\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_o2bionics-products_o2nextgen-aks\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf\n", + "kubelet_identity": [ + { + "client_id": "a7b1e297-2eb0-4fc0-acea-0b7dd9ac7ec6", + "object_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "user_assigned_identity_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.ManagedIdentity/userAssignedIdentities/o2nextgen-aks-agentpool" + } + ], + "kubernetes_version": "1.23.8", + "linux_profile": [], + "local_account_disabled": false, + "location": "westus3", + "maintenance_window": [], + "microsoft_defender": [], + "name": "o2nextgen-aks", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "ip_versions": [ + "IPv4" + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.Network/publicIPAddresses/a671c948-31c9-41d8-9f2d-73edf7531002" + ], + "idle_timeout_in_minutes": 0, + "managed_outbound_ip_count": 1, + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [], + "outbound_ports_allocated": 0 + } + ], + "load_balancer_sku": "standard", + "nat_gateway_profile": [], + "network_mode": "", + "network_plugin": "kubenet", + "network_policy": "", + "outbound_type": "loadBalancer", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_o2bionics-products_o2nextgen-aks_westus3", + "oidc_issuer_enabled": false, + "oidc_issuer_url": "", + "oms_agent": [], + "open_service_mesh_enabled": false, + "portal_fqdn": "aks-62baec49.portal.hcp.westus3.azmk8s.io", + "private_cluster_enabled": false, + "private_cluster_public_fqdn_enabled": false, + "private_dns_zone_id": "", + "private_fqdn": "", + "public_network_access_enabled": true, + "resource_group_name": "o2bionics-products", + "role_based_access_control_enabled": true, + "run_command_enabled": true, + "service_principal": [], + "sku_tier": "Free", + "tags": { + "Environment": "Production", + "Product": "O2NextGen Platform" + }, + "timeouts": null, + "windows_profile": [] + }, + "sensitive_values": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "azure_active_directory_role_based_access_control": [], + "default_node_pool": [ + { + "kubelet_config": [], + "linux_os_config": [], + "node_labels": {}, + "node_taints": [], + "tags": {}, + "upgrade_settings": [], + "zones": [] + } + ], + "http_proxy_config": [], + "identity": [ + { + "identity_ids": [] + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_config": [ + {} + ], + "kubelet_identity": [ + {} + ], + "linux_profile": [], + "maintenance_window": [], + "microsoft_defender": [], + "network_profile": [ + { + "ip_versions": [ + false + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + false + ], + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [] + } + ], + "nat_gateway_profile": [] + } + ], + "oms_agent": [], + "service_principal": [], + "tags": {}, + "windows_profile": [] + } + }, + { + "address": "azurerm_resource_group.aks-resource-group", + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-resource-group", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "location": "westus3", + "name": "o2bionics-products", + "tags": {}, + "timeouts": null + }, + "sensitive_values": { + "tags": {} + } + }, + { + "address": "azurerm_role_assignment.current", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleAssignments/a964cad9-e2af-c584-abeb-260ba07b73d4", + "name": "a964cad9-e2af-c584-abeb-260ba07b73d4", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", + "role_definition_name": "Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {} + }, + { + "address": "azurerm_role_assignment.main", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "main", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com/providers/Microsoft.Authorization/roleAssignments/1e321e91-e008-911f-1259-daaa91498ded", + "name": "1e321e91-e008-911f-1259-daaa91498ded", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/befefa01-2a29-4197-83a8-272ff33ce314", + "role_definition_name": "DNS Zone Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {} + }, + { + "address": "azurerm_role_assignment.reader", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "reader", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Authorization/roleAssignments/2790a8c2-19c3-bd19-676e-be62e078963a", + "name": "2790a8c2-19c3-bd19-676e-be62e078963a", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", + "role_definition_name": "Reader", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {} + }, + { + "address": "azurerm_role_assignment.role-acrpull", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "role-acrpull", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen/providers/Microsoft.Authorization/roleAssignments/88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "name": "88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "principal_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d", + "role_definition_name": "AcrPull", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {} + }, + { + "address": "helm_release.aad-pod-identity", + "mode": "managed", + "type": "helm_release", + "name": "aad-pod-identity", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "aad-pod-identity", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "aad-pod-identity", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.8.12", + "chart": "aad-pod-identity", + "name": "aad-pod-identity", + "namespace": "kube-system", + "revision": 1, + "values": "null", + "version": "4.1.13" + } + ], + "name": "aad-pod-identity", + "namespace": "kube-system", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.13", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [], + "set_sensitive": [] + } + }, + { + "address": "helm_release.cert-manager", + "mode": "managed", + "type": "helm_release", + "name": "cert-manager", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "cert-manager", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "cert-manager", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1.6.1", + "chart": "cert-manager", + "name": "cert-manager", + "namespace": "cert-manager", + "revision": 1, + "values": "{\"installCRDs\":true}", + "version": "v1.6.1" + } + ], + "name": "cert-manager", + "namespace": "cert-manager", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.jetstack.io", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "installCRDs", + "type": "", + "value": "true" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "v1.6.1", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [ + {} + ], + "set_sensitive": [] + } + }, + { + "address": "helm_release.external-dns", + "mode": "managed", + "type": "helm_release", + "name": "external-dns", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "external-dns", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "external-dns", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.12.2", + "chart": "external-dns", + "name": "external-dns", + "namespace": "external-dns", + "revision": 1, + "values": "{\"azure\":{\"aadClientId\":\"4acf4b9b-9507-44ae-83ff-43a8b0a2d45e\",\"aadClientSecret\":\"xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb\",\"resourceGroup\":\"o2bionics-products\",\"subscriptionId\":\"/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04\",\"tenantId\":\"f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6\"},\"logLevel\":\"debug\",\"policy\":\"sync\",\"provider\":\"azure\",\"txtOwnerId\":\"o2nextgen-aks\"}", + "version": "6.10.0" + } + ], + "name": "external-dns", + "namespace": "external-dns", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.bitnami.com/bitnami", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "azure.aadClientId", + "type": "", + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e" + }, + { + "name": "azure.aadClientSecret", + "type": "", + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + { + "name": "azure.resourceGroup", + "type": "", + "value": "o2bionics-products" + }, + { + "name": "azure.subscriptionId", + "type": "", + "value": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04" + }, + { + "name": "azure.tenantId", + "type": "", + "value": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" + }, + { + "name": "logLevel", + "type": "", + "value": "debug" + }, + { + "name": "policy", + "type": "", + "value": "sync" + }, + { + "name": "provider", + "type": "", + "value": "azure" + }, + { + "name": "txtOwnerId", + "type": "", + "value": "o2nextgen-aks" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "6.10.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": true, + "set_sensitive": [] + } + }, + { + "address": "helm_release.nginx-ingress-controller", + "mode": "managed", + "type": "helm_release", + "name": "nginx-ingress-controller", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "ingress-nginx", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "nginx-ingress-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.2.1", + "chart": "ingress-nginx", + "name": "nginx-ingress-controller", + "namespace": "ingress", + "revision": 1, + "values": "{\"controller\":{\"autoscaling\":{\"enabled\":true,\"maxReplicas\":2,\"minReplicas\":1},\"service\":{\"type\":\"LoadBalancer\"}}}", + "version": "4.1.3" + } + ], + "name": "nginx-ingress-controller", + "namespace": "ingress", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://kubernetes.github.io/ingress-nginx", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "controller.autoscaling.enabled", + "type": "", + "value": "true" + }, + { + "name": "controller.autoscaling.maxReplicas", + "type": "", + "value": "2" + }, + { + "name": "controller.autoscaling.minReplicas", + "type": "", + "value": "1" + }, + { + "name": "controller.service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.3", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [ + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + } + }, + { + "address": "helm_release.o2bus-webapp", + "mode": "managed", + "type": "helm_release", + "name": "o2bus-webapp", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "o2bus-webapp", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "keyring": null, + "lint": false, + "max_history": 0, + "name": "o2bus-webapp", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [], + "postrender": [], + "set": [], + "set_sensitive": [] + } + }, + { + "address": "helm_release.o2nextgen-auth", + "mode": "managed", + "type": "helm_release", + "name": "o2nextgen-auth", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "o2nextgen-auth", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "o2nextgen-auth", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.16.0", + "chart": "o2nextgen-auth", + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "revision": 1, + "values": "null", + "version": "0.1.0" + } + ], + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [], + "set_sensitive": [] + } + }, + { + "address": "helm_release.prometheus-stack", + "mode": "managed", + "type": "helm_release", + "name": "prometheus-stack", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "kube-prometheus-stack", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "prometheus-stack", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.59.1", + "chart": "kube-prometheus-stack", + "name": "prometheus-stack", + "namespace": "monitoring", + "revision": 1, + "values": "{\"grafana\":{\"adminPassword\":\"grafana-pass\",\"adminUser\":\"grafana\",\"ingress\":{\"annotations\":{\"nginx.ingress.kubernetes.io/rewrite-target\":\"/$1\",\"nginx.ingress.kubernetes.io/ssl-redirect\":\"false\",\"nginx.ingress.kubernetes.io/use-regex\":\"true\"},\"enabled\":true,\"ingressClassName\":\"nginx\",\"path\":\"/(.*)\"}}}", + "version": "40.1.2" + } + ], + "name": "prometheus-stack", + "namespace": "monitoring", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://prometheus-community.github.io/helm-charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "grafana.adminPassword", + "type": "", + "value": "grafana-pass" + }, + { + "name": "grafana.adminUser", + "type": "", + "value": "grafana" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target", + "type": "", + "value": "/$1" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect", + "type": "string", + "value": "false" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex", + "type": "string", + "value": "true" + }, + { + "name": "grafana.ingress.enabled", + "type": "", + "value": "true" + }, + { + "name": "grafana.ingress.ingressClassName", + "type": "", + "value": "nginx" + }, + { + "name": "grafana.ingress.path", + "type": "", + "value": "/(.*)" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "40.1.2", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + } + }, + { + "address": "kubernetes_namespace.dev", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "dev", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-dev", + "metadata": [ + { + "annotations": { + "name": "apps-dev" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Development" + }, + "name": "apps-dev", + "resource_version": "1447", + "uid": "e7d1d0f0-539d-49f0-9ba1-f7a187586e94" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + }, + { + "address": "kubernetes_namespace.devops", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "devops", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-devops", + "metadata": [ + { + "annotations": { + "name": "apps-devops" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Devops" + }, + "name": "apps-devops", + "resource_version": "1444", + "uid": "251115c5-d26c-4bd7-8af9-99c93da74b5a" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + }, + { + "address": "kubernetes_namespace.prod", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "prod", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-prod", + "metadata": [ + { + "annotations": { + "name": "apps-prod" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Production" + }, + "name": "apps-prod", + "resource_version": "1445", + "uid": "e76706f9-6aa6-405f-8c72-7afdfb423c05" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + }, + { + "address": "kubernetes_namespace.staging", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "staging", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-staging", + "metadata": [ + { + "annotations": { + "name": "apps-staging" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Staging" + }, + "name": "apps-staging", + "resource_version": "1443", + "uid": "d5be15f9-8924-4415-9d7c-05b85a649510" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + }, + { + "address": "kubernetes_namespace.tst", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "tst", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-tst", + "metadata": [ + { + "annotations": { + "name": "apps-tst" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Test" + }, + "name": "apps-tst", + "resource_version": "1446", + "uid": "8001ed90-da14-41c5-a51b-6fe1464bc1a3" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + } + ] + } + }, + "resource_changes": [ + { + "address": "azuread_application.example", + "mode": "managed", + "type": "azuread_application", + "name": "example", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "change": { + "actions": [ + "no-op" + ], + "before": { + "api": [ + { + "known_client_applications": [], + "mapped_claims_enabled": false, + "oauth2_permission_scope": [], + "requested_access_token_version": 1 + } + ], + "app_role": [], + "app_role_ids": {}, + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "device_only_auth_enabled": false, + "disabled_by_microsoft": "", + "display_name": "External-DNS-SP", + "fallback_public_client_enabled": false, + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "group_membership_claims": [], + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "identifier_uris": [], + "logo_image": "", + "logo_url": "", + "marketing_url": "", + "oauth2_permission_scope_ids": {}, + "oauth2_post_response_required": false, + "object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "prevent_duplicate_names": false, + "privacy_statement_url": "", + "public_client": [ + { + "redirect_uris": [] + } + ], + "publisher_domain": "o2bionicshotmail.onmicrosoft.com", + "required_resource_access": [], + "sign_in_audience": "AzureADMyOrg", + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "support_url": "", + "tags": [], + "template_id": "", + "terms_of_service_url": "", + "timeouts": null, + "web": [ + { + "homepage_url": "", + "implicit_grant": [ + { + "access_token_issuance_enabled": false, + "id_token_issuance_enabled": false + } + ], + "logout_url": "", + "redirect_uris": [] + } + ] + }, + "after": { + "api": [ + { + "known_client_applications": [], + "mapped_claims_enabled": false, + "oauth2_permission_scope": [], + "requested_access_token_version": 1 + } + ], + "app_role": [], + "app_role_ids": {}, + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "device_only_auth_enabled": false, + "disabled_by_microsoft": "", + "display_name": "External-DNS-SP", + "fallback_public_client_enabled": false, + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "group_membership_claims": [], + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "identifier_uris": [], + "logo_image": "", + "logo_url": "", + "marketing_url": "", + "oauth2_permission_scope_ids": {}, + "oauth2_post_response_required": false, + "object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "prevent_duplicate_names": false, + "privacy_statement_url": "", + "public_client": [ + { + "redirect_uris": [] + } + ], + "publisher_domain": "o2bionicshotmail.onmicrosoft.com", + "required_resource_access": [], + "sign_in_audience": "AzureADMyOrg", + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "support_url": "", + "tags": [], + "template_id": "", + "terms_of_service_url": "", + "timeouts": null, + "web": [ + { + "homepage_url": "", + "implicit_grant": [ + { + "access_token_issuance_enabled": false, + "id_token_issuance_enabled": false + } + ], + "logout_url": "", + "redirect_uris": [] + } + ] + }, + "after_unknown": {}, + "before_sensitive": { + "api": [ + { + "known_client_applications": [], + "oauth2_permission_scope": [] + } + ], + "app_role": [], + "app_role_ids": {}, + "feature_tags": [ + {} + ], + "group_membership_claims": [], + "identifier_uris": [], + "oauth2_permission_scope_ids": {}, + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + false + ], + "public_client": [ + { + "redirect_uris": [] + } + ], + "required_resource_access": [], + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "tags": [], + "web": [ + { + "implicit_grant": [ + {} + ], + "redirect_uris": [] + } + ] + }, + "after_sensitive": { + "api": [ + { + "known_client_applications": [], + "oauth2_permission_scope": [] + } + ], + "app_role": [], + "app_role_ids": {}, + "feature_tags": [ + {} + ], + "group_membership_claims": [], + "identifier_uris": [], + "oauth2_permission_scope_ids": {}, + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + false + ], + "public_client": [ + { + "redirect_uris": [] + } + ], + "required_resource_access": [], + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "tags": [], + "web": [ + { + "implicit_grant": [ + {} + ], + "redirect_uris": [] + } + ] + } + } + }, + { + "address": "azuread_application_password.current", + "mode": "managed", + "type": "azuread_application_password", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "change": { + "actions": [ + "no-op" + ], + "before": { + "application_object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "display_name": null, + "end_date": "2024-09-27T23:44:40Z", + "end_date_relative": null, + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9/password/6c924c19-e789-4549-a35a-b09cfc673d66", + "key_id": "6c924c19-e789-4549-a35a-b09cfc673d66", + "rotate_when_changed": null, + "start_date": "2022-09-27T23:44:40Z", + "timeouts": null, + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + "after": { + "application_object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "display_name": null, + "end_date": "2024-09-27T23:44:40Z", + "end_date_relative": null, + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9/password/6c924c19-e789-4549-a35a-b09cfc673d66", + "key_id": "6c924c19-e789-4549-a35a-b09cfc673d66", + "rotate_when_changed": null, + "start_date": "2022-09-27T23:44:40Z", + "timeouts": null, + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + "after_unknown": {}, + "before_sensitive": { + "value": true + }, + "after_sensitive": { + "value": true + } + } + }, + { + "address": "azuread_service_principal.current", + "mode": "managed", + "type": "azuread_service_principal", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "change": { + "actions": [ + "no-op" + ], + "before": { + "account_enabled": true, + "alternative_names": [], + "app_role_assignment_required": false, + "app_role_ids": {}, + "app_roles": [], + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "application_tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "description": "", + "display_name": "External-DNS-SP", + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "features": [ + { + "custom_single_sign_on_app": false, + "enterprise_application": false, + "gallery_application": false, + "visible_to_users": true + } + ], + "homepage_url": "", + "id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "login_url": "", + "logout_url": "", + "notes": "", + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "object_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "preferred_single_sign_on_mode": "", + "redirect_uris": [], + "saml_metadata_url": "", + "saml_single_sign_on": [ + { + "relay_state": "" + } + ], + "service_principal_names": [], + "sign_in_audience": "AzureADMyOrg", + "tags": [], + "timeouts": null, + "type": "Application", + "use_existing": null + }, + "after": { + "account_enabled": true, + "alternative_names": [], + "app_role_assignment_required": false, + "app_role_ids": {}, + "app_roles": [], + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "application_tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "description": "", + "display_name": "External-DNS-SP", + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "features": [ + { + "custom_single_sign_on_app": false, + "enterprise_application": false, + "gallery_application": false, + "visible_to_users": true + } + ], + "homepage_url": "", + "id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "login_url": "", + "logout_url": "", + "notes": "", + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "object_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "preferred_single_sign_on_mode": "", + "redirect_uris": [], + "saml_metadata_url": "", + "saml_single_sign_on": [ + { + "relay_state": "" + } + ], + "service_principal_names": [], + "sign_in_audience": "AzureADMyOrg", + "tags": [], + "timeouts": null, + "type": "Application", + "use_existing": null + }, + "after_unknown": {}, + "before_sensitive": { + "alternative_names": [], + "app_role_ids": {}, + "app_roles": [], + "feature_tags": [ + {} + ], + "features": [ + {} + ], + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "owners": [ + false + ], + "redirect_uris": [], + "saml_single_sign_on": [ + {} + ], + "service_principal_names": [], + "tags": [] + }, + "after_sensitive": { + "alternative_names": [], + "app_role_ids": {}, + "app_roles": [], + "feature_tags": [ + {} + ], + "features": [ + {} + ], + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "owners": [ + false + ], + "redirect_uris": [], + "saml_single_sign_on": [ + {} + ], + "service_principal_names": [], + "tags": [] + } + } + }, + { + "address": "azurerm_container_registry.o2nextgen-aks-acr", + "mode": "managed", + "type": "azurerm_container_registry", + "name": "o2nextgen-aks-acr", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "admin_enabled": false, + "admin_password": "", + "admin_username": "", + "anonymous_pull_enabled": false, + "data_endpoint_enabled": false, + "encryption": [ + { + "enabled": false, + "identity_client_id": "", + "key_vault_key_id": "" + } + ], + "export_policy_enabled": true, + "georeplications": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "identity": [], + "location": "westus3", + "login_server": "o2nextgen.azurecr.io", + "name": "o2nextgen", + "network_rule_bypass_option": "AzureServices", + "network_rule_set": [], + "public_network_access_enabled": true, + "quarantine_policy_enabled": false, + "resource_group_name": "o2bionics-products", + "retention_policy": [ + { + "days": 7, + "enabled": false + } + ], + "sku": "Standard", + "tags": {}, + "timeouts": null, + "trust_policy": [ + { + "enabled": false + } + ], + "zone_redundancy_enabled": false + }, + "after": { + "admin_enabled": false, + "admin_password": "", + "admin_username": "", + "anonymous_pull_enabled": false, + "data_endpoint_enabled": false, + "encryption": [ + { + "enabled": false, + "identity_client_id": "", + "key_vault_key_id": "" + } + ], + "export_policy_enabled": true, + "georeplications": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "identity": [], + "location": "westus3", + "login_server": "o2nextgen.azurecr.io", + "name": "o2nextgen", + "network_rule_bypass_option": "AzureServices", + "network_rule_set": [], + "public_network_access_enabled": true, + "quarantine_policy_enabled": false, + "resource_group_name": "o2bionics-products", + "retention_policy": [ + { + "days": 7, + "enabled": false + } + ], + "sku": "Standard", + "tags": {}, + "timeouts": null, + "trust_policy": [ + { + "enabled": false + } + ], + "zone_redundancy_enabled": false + }, + "after_unknown": {}, + "before_sensitive": { + "admin_password": true, + "encryption": [ + {} + ], + "georeplications": [], + "identity": [], + "network_rule_set": [], + "retention_policy": [ + {} + ], + "tags": {}, + "trust_policy": [ + {} + ] + }, + "after_sensitive": { + "admin_password": true, + "encryption": [ + {} + ], + "georeplications": [], + "identity": [], + "network_rule_set": [], + "retention_policy": [ + {} + ], + "tags": {}, + "trust_policy": [ + {} + ] + } + } + }, + { + "address": "azurerm_dns_zone.primary-dns-zone", + "mode": "managed", + "type": "azurerm_dns_zone", + "name": "primary-dns-zone", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "max_number_of_record_sets": 10000, + "name": "o2bus.com", + "name_servers": [ + "ns1-32.azure-dns.com.", + "ns2-32.azure-dns.net.", + "ns3-32.azure-dns.org.", + "ns4-32.azure-dns.info." + ], + "number_of_record_sets": 4, + "resource_group_name": "o2bionics-products", + "soa_record": [ + { + "email": "azuredns-hostmaster.microsoft.com", + "expire_time": 2419200, + "fqdn": "o2bus.com.", + "host_name": "ns1-32.azure-dns.com.", + "minimum_ttl": 300, + "refresh_time": 3600, + "retry_time": 300, + "serial_number": 1, + "tags": {}, + "ttl": 3600 + } + ], + "tags": { + "product": "O2NextGen Platform", + "type_product": "Saas" + }, + "timeouts": null + }, + "after": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "max_number_of_record_sets": 10000, + "name": "o2bus.com", + "name_servers": [ + "ns1-32.azure-dns.com.", + "ns2-32.azure-dns.net.", + "ns3-32.azure-dns.org.", + "ns4-32.azure-dns.info." + ], + "number_of_record_sets": 4, + "resource_group_name": "o2bionics-products", + "soa_record": [ + { + "email": "azuredns-hostmaster.microsoft.com", + "expire_time": 2419200, + "fqdn": "o2bus.com.", + "host_name": "ns1-32.azure-dns.com.", + "minimum_ttl": 300, + "refresh_time": 3600, + "retry_time": 300, + "serial_number": 1, + "tags": {}, + "ttl": 3600 + } + ], + "tags": { + "product": "O2NextGen Platform", + "type_product": "Saas" + }, + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": { + "name_servers": [ + false, + false, + false, + false + ], + "soa_record": [ + { + "tags": {} + } + ], + "tags": {} + }, + "after_sensitive": { + "name_servers": [ + false, + false, + false, + false + ], + "soa_record": [ + { + "tags": {} + } + ], + "tags": {} + } + } + }, + { + "address": "azurerm_kubernetes_cluster.o2nextgen-aks", + "mode": "managed", + "type": "azurerm_kubernetes_cluster", + "name": "o2nextgen-aks", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "automatic_channel_upgrade": "", + "azure_active_directory_role_based_access_control": [], + "azure_policy_enabled": false, + "default_node_pool": [ + { + "capacity_reservation_group_id": "", + "enable_auto_scaling": false, + "enable_host_encryption": false, + "enable_node_public_ip": false, + "fips_enabled": false, + "host_group_id": "", + "kubelet_config": [], + "kubelet_disk_type": "OS", + "linux_os_config": [], + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_count": 1, + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "only_critical_addons_enabled": false, + "orchestrator_version": "", + "os_disk_size_gb": 128, + "os_disk_type": "Managed", + "os_sku": "Ubuntu", + "pod_subnet_id": "", + "proximity_placement_group_id": "", + "tags": {}, + "type": "VirtualMachineScaleSets", + "ultra_ssd_enabled": false, + "upgrade_settings": [], + "vm_size": "Standard_D2_v2", + "vnet_subnet_id": "", + "zones": [] + } + ], + "disk_encryption_set_id": "", + "dns_prefix": "aks", + "dns_prefix_private_cluster": "", + "edge_zone": "", + "enable_pod_security_policy": false, + "fqdn": "aks-62baec49.hcp.westus3.azmk8s.io", + "http_application_routing_enabled": false, + "http_application_routing_zone_name": "", + "http_proxy_config": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerService/managedClusters/o2nextgen-aks", + "identity": [ + { + "identity_ids": [], + "principal_id": "673d7ee5-59e9-4177-893a-154bf2411e58", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "type": "SystemAssigned" + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "host": "https://aks-62baec49.hcp.westus3.azmk8s.io:443", + "password": "85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf", + "username": "clusterUser_o2bionics-products_o2nextgen-aks" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://aks-62baec49.hcp.westus3.azmk8s.io:443\n name: o2nextgen-aks\ncontexts:\n- context:\n cluster: o2nextgen-aks\n user: clusterUser_o2bionics-products_o2nextgen-aks\n name: o2nextgen-aks\ncurrent-context: o2nextgen-aks\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_o2bionics-products_o2nextgen-aks\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf\n", + "kubelet_identity": [ + { + "client_id": "a7b1e297-2eb0-4fc0-acea-0b7dd9ac7ec6", + "object_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "user_assigned_identity_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.ManagedIdentity/userAssignedIdentities/o2nextgen-aks-agentpool" + } + ], + "kubernetes_version": "1.23.8", + "linux_profile": [], + "local_account_disabled": false, + "location": "westus3", + "maintenance_window": [], + "microsoft_defender": [], + "name": "o2nextgen-aks", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "ip_versions": [ + "IPv4" + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.Network/publicIPAddresses/a671c948-31c9-41d8-9f2d-73edf7531002" + ], + "idle_timeout_in_minutes": 0, + "managed_outbound_ip_count": 1, + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [], + "outbound_ports_allocated": 0 + } + ], + "load_balancer_sku": "standard", + "nat_gateway_profile": [], + "network_mode": "", + "network_plugin": "kubenet", + "network_policy": "", + "outbound_type": "loadBalancer", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_o2bionics-products_o2nextgen-aks_westus3", + "oidc_issuer_enabled": false, + "oidc_issuer_url": "", + "oms_agent": [], + "open_service_mesh_enabled": false, + "portal_fqdn": "aks-62baec49.portal.hcp.westus3.azmk8s.io", + "private_cluster_enabled": false, + "private_cluster_public_fqdn_enabled": false, + "private_dns_zone_id": "", + "private_fqdn": "", + "public_network_access_enabled": true, + "resource_group_name": "o2bionics-products", + "role_based_access_control_enabled": true, + "run_command_enabled": true, + "service_principal": [], + "sku_tier": "Free", + "tags": { + "Environment": "Production", + "Product": "O2NextGen Platform" + }, + "timeouts": null, + "windows_profile": [] + }, + "after": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "automatic_channel_upgrade": "", + "azure_active_directory_role_based_access_control": [], + "azure_policy_enabled": false, + "default_node_pool": [ + { + "capacity_reservation_group_id": "", + "enable_auto_scaling": false, + "enable_host_encryption": false, + "enable_node_public_ip": false, + "fips_enabled": false, + "host_group_id": "", + "kubelet_config": [], + "kubelet_disk_type": "OS", + "linux_os_config": [], + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_count": 1, + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "only_critical_addons_enabled": false, + "orchestrator_version": "", + "os_disk_size_gb": 128, + "os_disk_type": "Managed", + "os_sku": "Ubuntu", + "pod_subnet_id": "", + "proximity_placement_group_id": "", + "tags": {}, + "type": "VirtualMachineScaleSets", + "ultra_ssd_enabled": false, + "upgrade_settings": [], + "vm_size": "Standard_D2_v2", + "vnet_subnet_id": "", + "zones": [] + } + ], + "disk_encryption_set_id": "", + "dns_prefix": "aks", + "dns_prefix_private_cluster": "", + "edge_zone": "", + "enable_pod_security_policy": false, + "fqdn": "aks-62baec49.hcp.westus3.azmk8s.io", + "http_application_routing_enabled": false, + "http_application_routing_zone_name": "", + "http_proxy_config": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerService/managedClusters/o2nextgen-aks", + "identity": [ + { + "identity_ids": [], + "principal_id": "673d7ee5-59e9-4177-893a-154bf2411e58", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "type": "SystemAssigned" + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "host": "https://aks-62baec49.hcp.westus3.azmk8s.io:443", + "password": "85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf", + "username": "clusterUser_o2bionics-products_o2nextgen-aks" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://aks-62baec49.hcp.westus3.azmk8s.io:443\n name: o2nextgen-aks\ncontexts:\n- context:\n cluster: o2nextgen-aks\n user: clusterUser_o2bionics-products_o2nextgen-aks\n name: o2nextgen-aks\ncurrent-context: o2nextgen-aks\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_o2bionics-products_o2nextgen-aks\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf\n", + "kubelet_identity": [ + { + "client_id": "a7b1e297-2eb0-4fc0-acea-0b7dd9ac7ec6", + "object_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "user_assigned_identity_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.ManagedIdentity/userAssignedIdentities/o2nextgen-aks-agentpool" + } + ], + "kubernetes_version": "1.23.8", + "linux_profile": [], + "local_account_disabled": false, + "location": "westus3", + "maintenance_window": [], + "microsoft_defender": [], + "name": "o2nextgen-aks", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "ip_versions": [ + "IPv4" + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.Network/publicIPAddresses/a671c948-31c9-41d8-9f2d-73edf7531002" + ], + "idle_timeout_in_minutes": 0, + "managed_outbound_ip_count": 1, + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [], + "outbound_ports_allocated": 0 + } + ], + "load_balancer_sku": "standard", + "nat_gateway_profile": [], + "network_mode": "", + "network_plugin": "kubenet", + "network_policy": "", + "outbound_type": "loadBalancer", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_o2bionics-products_o2nextgen-aks_westus3", + "oidc_issuer_enabled": false, + "oidc_issuer_url": "", + "oms_agent": [], + "open_service_mesh_enabled": false, + "portal_fqdn": "aks-62baec49.portal.hcp.westus3.azmk8s.io", + "private_cluster_enabled": false, + "private_cluster_public_fqdn_enabled": false, + "private_dns_zone_id": "", + "private_fqdn": "", + "public_network_access_enabled": true, + "resource_group_name": "o2bionics-products", + "role_based_access_control_enabled": true, + "run_command_enabled": true, + "service_principal": [], + "sku_tier": "Free", + "tags": { + "Environment": "Production", + "Product": "O2NextGen Platform" + }, + "timeouts": null, + "windows_profile": [] + }, + "after_unknown": {}, + "before_sensitive": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "azure_active_directory_role_based_access_control": [], + "default_node_pool": [ + { + "kubelet_config": [], + "linux_os_config": [], + "node_labels": {}, + "node_taints": [], + "tags": {}, + "upgrade_settings": [], + "zones": [] + } + ], + "http_proxy_config": [], + "identity": [ + { + "identity_ids": [] + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": true, + "kube_admin_config_raw": true, + "kube_config": true, + "kube_config_raw": true, + "kubelet_identity": [ + {} + ], + "linux_profile": [], + "maintenance_window": [], + "microsoft_defender": [], + "network_profile": [ + { + "ip_versions": [ + false + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + false + ], + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [] + } + ], + "nat_gateway_profile": [] + } + ], + "oms_agent": [], + "service_principal": [], + "tags": {}, + "windows_profile": [] + }, + "after_sensitive": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "azure_active_directory_role_based_access_control": [], + "default_node_pool": [ + { + "kubelet_config": [], + "linux_os_config": [], + "node_labels": {}, + "node_taints": [], + "tags": {}, + "upgrade_settings": [], + "zones": [] + } + ], + "http_proxy_config": [], + "identity": [ + { + "identity_ids": [] + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": true, + "kube_admin_config_raw": true, + "kube_config": true, + "kube_config_raw": true, + "kubelet_identity": [ + {} + ], + "linux_profile": [], + "maintenance_window": [], + "microsoft_defender": [], + "network_profile": [ + { + "ip_versions": [ + false + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + false + ], + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [] + } + ], + "nat_gateway_profile": [] + } + ], + "oms_agent": [], + "service_principal": [], + "tags": {}, + "windows_profile": [] + } + } + }, + { + "address": "azurerm_resource_group.aks-resource-group", + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-resource-group", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "location": "westus3", + "name": "o2bionics-products", + "tags": {}, + "timeouts": null + }, + "after": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "location": "westus3", + "name": "o2bionics-products", + "tags": {}, + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": { + "tags": {} + }, + "after_sensitive": { + "tags": {} + } + } + }, + { + "address": "azurerm_role_assignment.current", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleAssignments/a964cad9-e2af-c584-abeb-260ba07b73d4", + "name": "a964cad9-e2af-c584-abeb-260ba07b73d4", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", + "role_definition_name": "Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleAssignments/a964cad9-e2af-c584-abeb-260ba07b73d4", + "name": "a964cad9-e2af-c584-abeb-260ba07b73d4", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", + "role_definition_name": "Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": {}, + "after_sensitive": {} + } + }, + { + "address": "azurerm_role_assignment.main", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "main", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com/providers/Microsoft.Authorization/roleAssignments/1e321e91-e008-911f-1259-daaa91498ded", + "name": "1e321e91-e008-911f-1259-daaa91498ded", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/befefa01-2a29-4197-83a8-272ff33ce314", + "role_definition_name": "DNS Zone Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com/providers/Microsoft.Authorization/roleAssignments/1e321e91-e008-911f-1259-daaa91498ded", + "name": "1e321e91-e008-911f-1259-daaa91498ded", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/befefa01-2a29-4197-83a8-272ff33ce314", + "role_definition_name": "DNS Zone Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": {}, + "after_sensitive": {} + } + }, + { + "address": "azurerm_role_assignment.reader", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "reader", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Authorization/roleAssignments/2790a8c2-19c3-bd19-676e-be62e078963a", + "name": "2790a8c2-19c3-bd19-676e-be62e078963a", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", + "role_definition_name": "Reader", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Authorization/roleAssignments/2790a8c2-19c3-bd19-676e-be62e078963a", + "name": "2790a8c2-19c3-bd19-676e-be62e078963a", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", + "role_definition_name": "Reader", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": {}, + "after_sensitive": {} + } + }, + { + "address": "azurerm_role_assignment.role-acrpull", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "role-acrpull", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen/providers/Microsoft.Authorization/roleAssignments/88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "name": "88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "principal_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d", + "role_definition_name": "AcrPull", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen/providers/Microsoft.Authorization/roleAssignments/88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "name": "88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "principal_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d", + "role_definition_name": "AcrPull", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": {}, + "after_sensitive": {} + } + }, + { + "address": "helm_release.aad-pod-identity", + "mode": "managed", + "type": "helm_release", + "name": "aad-pod-identity", + "provider_name": "registry.terraform.io/hashicorp/helm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "atomic": false, + "chart": "aad-pod-identity", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "aad-pod-identity", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.8.12", + "chart": "aad-pod-identity", + "name": "aad-pod-identity", + "namespace": "kube-system", + "revision": 1, + "values": "null", + "version": "4.1.13" + } + ], + "name": "aad-pod-identity", + "namespace": "kube-system", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.13", + "wait": true, + "wait_for_jobs": false + }, + "after": { + "atomic": false, + "chart": "aad-pod-identity", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "aad-pod-identity", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.8.12", + "chart": "aad-pod-identity", + "name": "aad-pod-identity", + "namespace": "kube-system", + "revision": 1, + "values": "null", + "version": "4.1.13" + } + ], + "name": "aad-pod-identity", + "namespace": "kube-system", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.13", + "wait": true, + "wait_for_jobs": false + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [], + "set_sensitive": [] + }, + "after_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [], + "set_sensitive": [] + } + } + }, + { + "address": "helm_release.cert-manager", + "mode": "managed", + "type": "helm_release", + "name": "cert-manager", + "provider_name": "registry.terraform.io/hashicorp/helm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "atomic": false, + "chart": "cert-manager", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "cert-manager", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1.6.1", + "chart": "cert-manager", + "name": "cert-manager", + "namespace": "cert-manager", + "revision": 1, + "values": "{\"installCRDs\":true}", + "version": "v1.6.1" + } + ], + "name": "cert-manager", + "namespace": "cert-manager", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.jetstack.io", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "installCRDs", + "type": "", + "value": "true" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "v1.6.1", + "wait": true, + "wait_for_jobs": false + }, + "after": { + "atomic": false, + "chart": "cert-manager", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "cert-manager", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1.6.1", + "chart": "cert-manager", + "name": "cert-manager", + "namespace": "cert-manager", + "revision": 1, + "values": "{\"installCRDs\":true}", + "version": "v1.6.1" + } + ], + "name": "cert-manager", + "namespace": "cert-manager", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.jetstack.io", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "installCRDs", + "type": "", + "value": "true" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "v1.6.1", + "wait": true, + "wait_for_jobs": false + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [ + {} + ], + "set_sensitive": [] + }, + "after_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [ + {} + ], + "set_sensitive": [] + } + } + }, + { + "address": "helm_release.external-dns", + "mode": "managed", + "type": "helm_release", + "name": "external-dns", + "provider_name": "registry.terraform.io/hashicorp/helm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "atomic": false, + "chart": "external-dns", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "external-dns", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.12.2", + "chart": "external-dns", + "name": "external-dns", + "namespace": "external-dns", + "revision": 1, + "values": "{\"azure\":{\"aadClientId\":\"4acf4b9b-9507-44ae-83ff-43a8b0a2d45e\",\"aadClientSecret\":\"xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb\",\"resourceGroup\":\"o2bionics-products\",\"subscriptionId\":\"/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04\",\"tenantId\":\"f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6\"},\"logLevel\":\"debug\",\"policy\":\"sync\",\"provider\":\"azure\",\"txtOwnerId\":\"o2nextgen-aks\"}", + "version": "6.10.0" + } + ], + "name": "external-dns", + "namespace": "external-dns", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.bitnami.com/bitnami", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "azure.aadClientId", + "type": "", + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e" + }, + { + "name": "azure.aadClientSecret", + "type": "", + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + { + "name": "azure.resourceGroup", + "type": "", + "value": "o2bionics-products" + }, + { + "name": "azure.subscriptionId", + "type": "", + "value": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04" + }, + { + "name": "azure.tenantId", + "type": "", + "value": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" + }, + { + "name": "logLevel", + "type": "", + "value": "debug" + }, + { + "name": "policy", + "type": "", + "value": "sync" + }, + { + "name": "provider", + "type": "", + "value": "azure" + }, + { + "name": "txtOwnerId", + "type": "", + "value": "o2nextgen-aks" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "6.10.0", + "wait": true, + "wait_for_jobs": false + }, + "after": { + "atomic": false, + "chart": "external-dns", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "external-dns", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.12.2", + "chart": "external-dns", + "name": "external-dns", + "namespace": "external-dns", + "revision": 1, + "values": "{\"azure\":{\"aadClientId\":\"4acf4b9b-9507-44ae-83ff-43a8b0a2d45e\",\"aadClientSecret\":\"xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb\",\"resourceGroup\":\"o2bionics-products\",\"subscriptionId\":\"/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04\",\"tenantId\":\"f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6\"},\"logLevel\":\"debug\",\"policy\":\"sync\",\"provider\":\"azure\",\"txtOwnerId\":\"o2nextgen-aks\"}", + "version": "6.10.0" + } + ], + "name": "external-dns", + "namespace": "external-dns", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.bitnami.com/bitnami", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "azure.aadClientId", + "type": "", + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e" + }, + { + "name": "azure.aadClientSecret", + "type": "", + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + { + "name": "azure.resourceGroup", + "type": "", + "value": "o2bionics-products" + }, + { + "name": "azure.subscriptionId", + "type": "", + "value": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04" + }, + { + "name": "azure.tenantId", + "type": "", + "value": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" + }, + { + "name": "logLevel", + "type": "", + "value": "debug" + }, + { + "name": "policy", + "type": "", + "value": "sync" + }, + { + "name": "provider", + "type": "", + "value": "azure" + }, + { + "name": "txtOwnerId", + "type": "", + "value": "o2nextgen-aks" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "6.10.0", + "wait": true, + "wait_for_jobs": false + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": true, + "set_sensitive": [] + }, + "after_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": true, + "set_sensitive": [] + } + } + }, + { + "address": "helm_release.nginx-ingress-controller", + "mode": "managed", + "type": "helm_release", + "name": "nginx-ingress-controller", + "provider_name": "registry.terraform.io/hashicorp/helm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "atomic": false, + "chart": "ingress-nginx", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "nginx-ingress-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.2.1", + "chart": "ingress-nginx", + "name": "nginx-ingress-controller", + "namespace": "ingress", + "revision": 1, + "values": "{\"controller\":{\"autoscaling\":{\"enabled\":true,\"maxReplicas\":2,\"minReplicas\":1},\"service\":{\"type\":\"LoadBalancer\"}}}", + "version": "4.1.3" + } + ], + "name": "nginx-ingress-controller", + "namespace": "ingress", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://kubernetes.github.io/ingress-nginx", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "controller.autoscaling.enabled", + "type": "", + "value": "true" + }, + { + "name": "controller.autoscaling.maxReplicas", + "type": "", + "value": "2" + }, + { + "name": "controller.autoscaling.minReplicas", + "type": "", + "value": "1" + }, + { + "name": "controller.service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.3", + "wait": true, + "wait_for_jobs": false + }, + "after": { + "atomic": false, + "chart": "ingress-nginx", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "nginx-ingress-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.2.1", + "chart": "ingress-nginx", + "name": "nginx-ingress-controller", + "namespace": "ingress", + "revision": 1, + "values": "{\"controller\":{\"autoscaling\":{\"enabled\":true,\"maxReplicas\":2,\"minReplicas\":1},\"service\":{\"type\":\"LoadBalancer\"}}}", + "version": "4.1.3" + } + ], + "name": "nginx-ingress-controller", + "namespace": "ingress", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://kubernetes.github.io/ingress-nginx", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "controller.autoscaling.enabled", + "type": "", + "value": "true" + }, + { + "name": "controller.autoscaling.maxReplicas", + "type": "", + "value": "2" + }, + { + "name": "controller.autoscaling.minReplicas", + "type": "", + "value": "1" + }, + { + "name": "controller.service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.3", + "wait": true, + "wait_for_jobs": false + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [ + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + }, + "after_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [ + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + } + } + }, + { + "address": "helm_release.o2bus-webapp", + "mode": "managed", + "type": "helm_release", + "name": "o2bus-webapp", + "provider_name": "registry.terraform.io/hashicorp/helm", + "change": { + "actions": [ + "create" + ], + "before": null, + "after": { + "atomic": false, + "chart": "o2bus-webapp", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "keyring": null, + "lint": false, + "max_history": 0, + "name": "o2bus-webapp", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "after_unknown": { + "id": true, + "manifest": true, + "metadata": true, + "postrender": [], + "set": [], + "set_sensitive": [] + }, + "before_sensitive": false, + "after_sensitive": { + "metadata": [], + "postrender": [], + "repository_password": true, + "set": [], + "set_sensitive": [] + } + } + }, + { + "address": "helm_release.o2nextgen-auth", + "mode": "managed", + "type": "helm_release", + "name": "o2nextgen-auth", + "provider_name": "registry.terraform.io/hashicorp/helm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "atomic": false, + "chart": "o2nextgen-auth", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "o2nextgen-auth", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.16.0", + "chart": "o2nextgen-auth", + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "revision": 1, + "values": "null", + "version": "0.1.0" + } + ], + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "after": { + "atomic": false, + "chart": "o2nextgen-auth", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "o2nextgen-auth", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.16.0", + "chart": "o2nextgen-auth", + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "revision": 1, + "values": "null", + "version": "0.1.0" + } + ], + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [], + "set_sensitive": [] + }, + "after_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [], + "set_sensitive": [] + } + } + }, + { + "address": "helm_release.prometheus-stack", + "mode": "managed", + "type": "helm_release", + "name": "prometheus-stack", + "provider_name": "registry.terraform.io/hashicorp/helm", + "change": { + "actions": [ + "no-op" + ], + "before": { + "atomic": false, + "chart": "kube-prometheus-stack", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "prometheus-stack", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.59.1", + "chart": "kube-prometheus-stack", + "name": "prometheus-stack", + "namespace": "monitoring", + "revision": 1, + "values": "{\"grafana\":{\"adminPassword\":\"grafana-pass\",\"adminUser\":\"grafana\",\"ingress\":{\"annotations\":{\"nginx.ingress.kubernetes.io/rewrite-target\":\"/$1\",\"nginx.ingress.kubernetes.io/ssl-redirect\":\"false\",\"nginx.ingress.kubernetes.io/use-regex\":\"true\"},\"enabled\":true,\"ingressClassName\":\"nginx\",\"path\":\"/(.*)\"}}}", + "version": "40.1.2" + } + ], + "name": "prometheus-stack", + "namespace": "monitoring", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://prometheus-community.github.io/helm-charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "grafana.adminPassword", + "type": "", + "value": "grafana-pass" + }, + { + "name": "grafana.adminUser", + "type": "", + "value": "grafana" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target", + "type": "", + "value": "/$1" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect", + "type": "string", + "value": "false" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex", + "type": "string", + "value": "true" + }, + { + "name": "grafana.ingress.enabled", + "type": "", + "value": "true" + }, + { + "name": "grafana.ingress.ingressClassName", + "type": "", + "value": "nginx" + }, + { + "name": "grafana.ingress.path", + "type": "", + "value": "/(.*)" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "40.1.2", + "wait": true, + "wait_for_jobs": false + }, + "after": { + "atomic": false, + "chart": "kube-prometheus-stack", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "prometheus-stack", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.59.1", + "chart": "kube-prometheus-stack", + "name": "prometheus-stack", + "namespace": "monitoring", + "revision": 1, + "values": "{\"grafana\":{\"adminPassword\":\"grafana-pass\",\"adminUser\":\"grafana\",\"ingress\":{\"annotations\":{\"nginx.ingress.kubernetes.io/rewrite-target\":\"/$1\",\"nginx.ingress.kubernetes.io/ssl-redirect\":\"false\",\"nginx.ingress.kubernetes.io/use-regex\":\"true\"},\"enabled\":true,\"ingressClassName\":\"nginx\",\"path\":\"/(.*)\"}}}", + "version": "40.1.2" + } + ], + "name": "prometheus-stack", + "namespace": "monitoring", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://prometheus-community.github.io/helm-charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "grafana.adminPassword", + "type": "", + "value": "grafana-pass" + }, + { + "name": "grafana.adminUser", + "type": "", + "value": "grafana" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target", + "type": "", + "value": "/$1" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect", + "type": "string", + "value": "false" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex", + "type": "string", + "value": "true" + }, + { + "name": "grafana.ingress.enabled", + "type": "", + "value": "true" + }, + { + "name": "grafana.ingress.ingressClassName", + "type": "", + "value": "nginx" + }, + { + "name": "grafana.ingress.path", + "type": "", + "value": "/(.*)" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "40.1.2", + "wait": true, + "wait_for_jobs": false + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + }, + "after_sensitive": { + "metadata": [ + {} + ], + "postrender": [], + "repository_password": true, + "set": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + } + } + }, + { + "address": "kubernetes_namespace.dev", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "dev", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "change": { + "actions": [ + "no-op" + ], + "before": { + "id": "apps-dev", + "metadata": [ + { + "annotations": { + "name": "apps-dev" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Development" + }, + "name": "apps-dev", + "resource_version": "1447", + "uid": "e7d1d0f0-539d-49f0-9ba1-f7a187586e94" + } + ], + "timeouts": null + }, + "after": { + "id": "apps-dev", + "metadata": [ + { + "annotations": { + "name": "apps-dev" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Development" + }, + "name": "apps-dev", + "resource_version": "1447", + "uid": "e7d1d0f0-539d-49f0-9ba1-f7a187586e94" + } + ], + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "after_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + } + }, + { + "address": "kubernetes_namespace.devops", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "devops", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "change": { + "actions": [ + "no-op" + ], + "before": { + "id": "apps-devops", + "metadata": [ + { + "annotations": { + "name": "apps-devops" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Devops" + }, + "name": "apps-devops", + "resource_version": "1444", + "uid": "251115c5-d26c-4bd7-8af9-99c93da74b5a" + } + ], + "timeouts": null + }, + "after": { + "id": "apps-devops", + "metadata": [ + { + "annotations": { + "name": "apps-devops" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Devops" + }, + "name": "apps-devops", + "resource_version": "1444", + "uid": "251115c5-d26c-4bd7-8af9-99c93da74b5a" + } + ], + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "after_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + } + }, + { + "address": "kubernetes_namespace.prod", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "prod", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "change": { + "actions": [ + "no-op" + ], + "before": { + "id": "apps-prod", + "metadata": [ + { + "annotations": { + "name": "apps-prod" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Production" + }, + "name": "apps-prod", + "resource_version": "1445", + "uid": "e76706f9-6aa6-405f-8c72-7afdfb423c05" + } + ], + "timeouts": null + }, + "after": { + "id": "apps-prod", + "metadata": [ + { + "annotations": { + "name": "apps-prod" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Production" + }, + "name": "apps-prod", + "resource_version": "1445", + "uid": "e76706f9-6aa6-405f-8c72-7afdfb423c05" + } + ], + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "after_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + } + }, + { + "address": "kubernetes_namespace.staging", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "staging", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "change": { + "actions": [ + "no-op" + ], + "before": { + "id": "apps-staging", + "metadata": [ + { + "annotations": { + "name": "apps-staging" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Staging" + }, + "name": "apps-staging", + "resource_version": "1443", + "uid": "d5be15f9-8924-4415-9d7c-05b85a649510" + } + ], + "timeouts": null + }, + "after": { + "id": "apps-staging", + "metadata": [ + { + "annotations": { + "name": "apps-staging" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Staging" + }, + "name": "apps-staging", + "resource_version": "1443", + "uid": "d5be15f9-8924-4415-9d7c-05b85a649510" + } + ], + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "after_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + } + }, + { + "address": "kubernetes_namespace.tst", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "tst", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "change": { + "actions": [ + "no-op" + ], + "before": { + "id": "apps-tst", + "metadata": [ + { + "annotations": { + "name": "apps-tst" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Test" + }, + "name": "apps-tst", + "resource_version": "1446", + "uid": "8001ed90-da14-41c5-a51b-6fe1464bc1a3" + } + ], + "timeouts": null + }, + "after": { + "id": "apps-tst", + "metadata": [ + { + "annotations": { + "name": "apps-tst" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Test" + }, + "name": "apps-tst", + "resource_version": "1446", + "uid": "8001ed90-da14-41c5-a51b-6fe1464bc1a3" + } + ], + "timeouts": null + }, + "after_unknown": {}, + "before_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "after_sensitive": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + } + } + } + ], + "output_changes": { + "client_id": { + "actions": [ + "no-op" + ], + "before": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "after": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "after_unknown": false, + "before_sensitive": false, + "after_sensitive": false + }, + "client_secret": { + "actions": [ + "no-op" + ], + "before": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb", + "after": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb", + "after_unknown": false, + "before_sensitive": true, + "after_sensitive": true + }, + "current_subscription_display_name": { + "actions": [ + "no-op" + ], + "before": "paid-subscription", + "after": "paid-subscription", + "after_unknown": false, + "before_sensitive": false, + "after_sensitive": false + }, + "display_name": { + "actions": [ + "no-op" + ], + "before": "External-DNS-SP", + "after": "External-DNS-SP", + "after_unknown": false, + "before_sensitive": false, + "after_sensitive": false + }, + "object_id": { + "actions": [ + "no-op" + ], + "before": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "after": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "after_unknown": false, + "before_sensitive": false, + "after_sensitive": false + } + }, + "prior_state": { + "format_version": "1.0", + "terraform_version": "1.2.9", + "values": { + "outputs": { + "client_id": { + "sensitive": false, + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "type": "string" + }, + "client_secret": { + "sensitive": true, + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb", + "type": "string" + }, + "current_subscription_display_name": { + "sensitive": false, + "value": "paid-subscription", + "type": "string" + }, + "display_name": { + "sensitive": false, + "value": "External-DNS-SP", + "type": "string" + }, + "object_id": { + "sensitive": false, + "value": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "type": "string" + } + }, + "root_module": { + "resources": [ + { + "address": "azuread_application.example", + "mode": "managed", + "type": "azuread_application", + "name": "example", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 1, + "values": { + "api": [ + { + "known_client_applications": [], + "mapped_claims_enabled": false, + "oauth2_permission_scope": [], + "requested_access_token_version": 1 + } + ], + "app_role": [], + "app_role_ids": {}, + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "device_only_auth_enabled": false, + "disabled_by_microsoft": "", + "display_name": "External-DNS-SP", + "fallback_public_client_enabled": false, + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "group_membership_claims": [], + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "identifier_uris": [], + "logo_image": "", + "logo_url": "", + "marketing_url": "", + "oauth2_permission_scope_ids": {}, + "oauth2_post_response_required": false, + "object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "prevent_duplicate_names": false, + "privacy_statement_url": "", + "public_client": [ + { + "redirect_uris": [] + } + ], + "publisher_domain": "o2bionicshotmail.onmicrosoft.com", + "required_resource_access": [], + "sign_in_audience": "AzureADMyOrg", + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "support_url": "", + "tags": [], + "template_id": "", + "terms_of_service_url": "", + "timeouts": null, + "web": [ + { + "homepage_url": "", + "implicit_grant": [ + { + "access_token_issuance_enabled": false, + "id_token_issuance_enabled": false + } + ], + "logout_url": "", + "redirect_uris": [] + } + ] + }, + "sensitive_values": { + "api": [ + { + "known_client_applications": [], + "oauth2_permission_scope": [] + } + ], + "app_role": [], + "app_role_ids": {}, + "feature_tags": [ + {} + ], + "group_membership_claims": [], + "identifier_uris": [], + "oauth2_permission_scope_ids": {}, + "optional_claims": [ + { + "access_token": [], + "id_token": [], + "saml2_token": [] + } + ], + "owners": [ + false + ], + "public_client": [ + { + "redirect_uris": [] + } + ], + "required_resource_access": [], + "single_page_application": [ + { + "redirect_uris": [] + } + ], + "tags": [], + "web": [ + { + "implicit_grant": [ + {} + ], + "redirect_uris": [] + } + ] + }, + "depends_on": [ + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + }, + { + "address": "azuread_application_password.current", + "mode": "managed", + "type": "azuread_application_password", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 1, + "values": { + "application_object_id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9", + "display_name": null, + "end_date": "2024-09-27T23:44:40Z", + "end_date_relative": null, + "id": "b414f0b5-5546-4f76-ae08-8fea6cbce5b9/password/6c924c19-e789-4549-a35a-b09cfc673d66", + "key_id": "6c924c19-e789-4549-a35a-b09cfc673d66", + "rotate_when_changed": null, + "start_date": "2022-09-27T23:44:40Z", + "timeouts": null, + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + "sensitive_values": {}, + "depends_on": [ + "azuread_application.example", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + }, + { + "address": "azuread_service_principal.current", + "mode": "managed", + "type": "azuread_service_principal", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 0, + "values": { + "account_enabled": true, + "alternative_names": [], + "app_role_assignment_required": false, + "app_role_ids": {}, + "app_roles": [], + "application_id": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e", + "application_tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "description": "", + "display_name": "External-DNS-SP", + "feature_tags": [ + { + "custom_single_sign_on": false, + "enterprise": false, + "gallery": false, + "hide": false + } + ], + "features": [ + { + "custom_single_sign_on_app": false, + "enterprise_application": false, + "gallery_application": false, + "visible_to_users": true + } + ], + "homepage_url": "", + "id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "login_url": "", + "logout_url": "", + "notes": "", + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "object_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "owners": [ + "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0" + ], + "preferred_single_sign_on_mode": "", + "redirect_uris": [], + "saml_metadata_url": "", + "saml_single_sign_on": [ + { + "relay_state": "" + } + ], + "service_principal_names": [], + "sign_in_audience": "AzureADMyOrg", + "tags": [], + "timeouts": null, + "type": "Application", + "use_existing": null + }, + "sensitive_values": { + "alternative_names": [], + "app_role_ids": {}, + "app_roles": [], + "feature_tags": [ + {} + ], + "features": [ + {} + ], + "notification_email_addresses": [], + "oauth2_permission_scope_ids": {}, + "oauth2_permission_scopes": [], + "owners": [ + false + ], + "redirect_uris": [], + "saml_single_sign_on": [ + {} + ], + "service_principal_names": [], + "tags": [] + }, + "depends_on": [ + "azuread_application.example", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + }, + { + "address": "azurerm_container_registry.o2nextgen-aks-acr", + "mode": "managed", + "type": "azurerm_container_registry", + "name": "o2nextgen-aks-acr", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 2, + "values": { + "admin_enabled": false, + "admin_password": "", + "admin_username": "", + "anonymous_pull_enabled": false, + "data_endpoint_enabled": false, + "encryption": [ + { + "enabled": false, + "identity_client_id": "", + "key_vault_key_id": "" + } + ], + "export_policy_enabled": true, + "georeplications": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "identity": [], + "location": "westus3", + "login_server": "o2nextgen.azurecr.io", + "name": "o2nextgen", + "network_rule_bypass_option": "AzureServices", + "network_rule_set": [], + "public_network_access_enabled": true, + "quarantine_policy_enabled": false, + "resource_group_name": "o2bionics-products", + "retention_policy": [ + { + "days": 7, + "enabled": false + } + ], + "sku": "Standard", + "tags": {}, + "timeouts": null, + "trust_policy": [ + { + "enabled": false + } + ], + "zone_redundancy_enabled": false + }, + "sensitive_values": { + "encryption": [ + {} + ], + "georeplications": [], + "identity": [], + "network_rule_set": [], + "retention_policy": [ + {} + ], + "tags": {}, + "trust_policy": [ + {} + ] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "azurerm_dns_zone.primary-dns-zone", + "mode": "managed", + "type": "azurerm_dns_zone", + "name": "primary-dns-zone", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 1, + "values": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "max_number_of_record_sets": 10000, + "name": "o2bus.com", + "name_servers": [ + "ns1-32.azure-dns.com.", + "ns2-32.azure-dns.net.", + "ns3-32.azure-dns.org.", + "ns4-32.azure-dns.info." + ], + "number_of_record_sets": 4, + "resource_group_name": "o2bionics-products", + "soa_record": [ + { + "email": "azuredns-hostmaster.microsoft.com", + "expire_time": 2419200, + "fqdn": "o2bus.com.", + "host_name": "ns1-32.azure-dns.com.", + "minimum_ttl": 300, + "refresh_time": 3600, + "retry_time": 300, + "serial_number": 1, + "tags": {}, + "ttl": 3600 + } + ], + "tags": { + "product": "O2NextGen Platform", + "type_product": "Saas" + }, + "timeouts": null + }, + "sensitive_values": { + "name_servers": [ + false, + false, + false, + false + ], + "soa_record": [ + { + "tags": {} + } + ], + "tags": {} + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "azurerm_kubernetes_cluster.o2nextgen-aks", + "mode": "managed", + "type": "azurerm_kubernetes_cluster", + "name": "o2nextgen-aks", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 2, + "values": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "automatic_channel_upgrade": "", + "azure_active_directory_role_based_access_control": [], + "azure_policy_enabled": false, + "default_node_pool": [ + { + "capacity_reservation_group_id": "", + "enable_auto_scaling": false, + "enable_host_encryption": false, + "enable_node_public_ip": false, + "fips_enabled": false, + "host_group_id": "", + "kubelet_config": [], + "kubelet_disk_type": "OS", + "linux_os_config": [], + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_count": 1, + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "only_critical_addons_enabled": false, + "orchestrator_version": "", + "os_disk_size_gb": 128, + "os_disk_type": "Managed", + "os_sku": "Ubuntu", + "pod_subnet_id": "", + "proximity_placement_group_id": "", + "tags": {}, + "type": "VirtualMachineScaleSets", + "ultra_ssd_enabled": false, + "upgrade_settings": [], + "vm_size": "Standard_D2_v2", + "vnet_subnet_id": "", + "zones": [] + } + ], + "disk_encryption_set_id": "", + "dns_prefix": "aks", + "dns_prefix_private_cluster": "", + "edge_zone": "", + "enable_pod_security_policy": false, + "fqdn": "aks-62baec49.hcp.westus3.azmk8s.io", + "http_application_routing_enabled": false, + "http_application_routing_zone_name": "", + "http_proxy_config": [], + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerService/managedClusters/o2nextgen-aks", + "identity": [ + { + "identity_ids": [], + "principal_id": "673d7ee5-59e9-4177-893a-154bf2411e58", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "type": "SystemAssigned" + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "host": "https://aks-62baec49.hcp.westus3.azmk8s.io:443", + "password": "85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf", + "username": "clusterUser_o2bionics-products_o2nextgen-aks" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2VENDQXRHZ0F3SUJBZ0lSQUsvc2xaV1hRaytINStDcFhKUmtQTmd3RFFZSktvWklodmNOQVFFTEJRQXcKRFRFTE1Ba0dBMVVFQXhNQ1kyRXdJQmNOTWpJd09USTNNak16TVRFd1doZ1BNakExTWpBNU1qY3lNelF4TVRCYQpNQTB4Q3pBSkJnTlZCQU1UQW1OaE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCndEQ2dpdmNEUHNWY2R2TjI2bTlLTjJHTnBkck1XMk9mUG05V0cwMjlEbGNwNkNOUmVZY2o1K0lYOUZacXVWLysKS1B1OGRZTW14VldpKzhGQkpwT0RYbzBWSks3czdNLzBmdlNKNGpYQ0R1Rjl3NUVQMDNJU3BQTTBHTTRCMEVTWQpLMm93eCsrWC9jcE9iTVlQaUYxOTd3TnZWRkVsdHUxd3AwYU5vOWZDdjR6bDBOQ21FTk0wNXUwNEltY1lUQzY1CkRIMFdidzExRWxUcUplMHM5ZFBkZk8xM1gvNWZ2RWg5YldNRzMwaVNOWGJqYnF3UFZXQk94S2RQc1RYUlhlalIKM29xZ1pqdW5jbTZCcytEenJyOGdvVjNsYWZjUno5ODQ3Tk5xVjFzdTdMWmExdjlyRXBkd2h4NUV1VFV4Yk1URgpEVWJkZW45eGUrU1E4YVBYU2ZSMUdmYUZ2ekttckNQb1Btd0lRUXdyRXdrY1VjOUQvQWlXdUJDZUhpTllLbkQ2CmllN2FJbkpWSGhuVTE5d0creE5ZOXFaSFhSQnpXUCtKU1NFZE42LzlSaVlMWVdFbFBYVFVqUGhPcE5KalpQaUIKR2VhZTZSN2ZDYUdNc0dkMndPcFljd2prZTM0MzMzK2ZhNnZiekw0RURueEg1VlptajBUeTY3SlIwdU5UeEhCMQpFbmczUk5OMnBwcFVLNWl6UmNxckgreVhyQmxzV3JzTTVrNW9HL0tkUkQrSVpkUG0rQ29oUlNDOGpPMGRPK1MrCjA4WnJoK2ZtbHU1R0RjS0JyL2tNR29nSTZ5UU9rQ28zdlR5UVZLWEh2T0xaOVg5c0VUNnJ3dkRNc0VWQTJLTVQKR05JN21LSU41NEJKUGdmbzlxdk5PaExCcjBnRkFXTHlTeFdLekFFOGxpY0NBd0VBQWFOQ01FQXdEZ1lEVlIwUApBUUgvQkFRREFnS2tNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQTdWU0gvRmMzT0RZam1tCmpGRkxyeDgrMkdwYk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQmdDSTNpSjhUWHZkdWZCTUt1cjBHM2UrblkKUDFGZUVNbmxNa1VQT3VYN2pFT092cG1zRnR5ZlhjUjVEN1FqTEJhRis1S3FQKzNVbld5bWczeFlPaEZIMkhMZAo3VmtjazlWZVBRNlFlOXYvUmlOK1Z4NG4vZjlBT2VHemVrV29uaEcwemVlZ2RDUFN3VkZCQjlaR0l2SGR0Y2VPCmZzTldzWjAyd01MckJReml1djdyUGFTVjVaallFOVNEd2tMMG1ielNpRzZoUW1ndDV2blR4UVpVbmNWamRtUVAKNklteE4vaXF0VHhrV0pMbk13alYyY0NZV0UrNGlxdXVnbzdERFNtSFNIRytwMXBHL1NzaVdXZEJ6ck1GVDJOdQpuWitiKzU4QVFuRllKZWZzd2V0WVUzdE1mU21TOE0wTFFNYTdmWHc0dWpDOXV2Nm9IRnNqeFloTmFzdDExMmQ2CmhhcFUwUWc5c0djZ2NVV2dWVjF1Q3d0ZGI5b1JsV0VFd0ptVjluVDJsVkZHTU5JRGlnakJMZGRmUmR4cWJlc2YKL0N5bWJDbEI4QnRrNGR3WmY1UFNBLzROamZXN2ZMNHQ2ZVl3Umo5YllRV21jeVFtbnlhK1MyZGdkakhZVkFmcgpCa0Ryd1BXbTN6VjRNa1E0MGxBc1lkZCtUVGR3TE04aHZwOTAwUDJ2Z1pCZEkrRjFhKzNidEZFemZiTFk1V3lpCnoyL2wwL2MrdWFPRjBoWTZidW4vNDFTTjB3emMrdGVtNTRNRjFQMlNmdy9Pdm9ZbmdyZEVTRmFka2o0SDMwWlcKLytvRFVsRkxpcHEzUEJ3bnR2MCt1QXAwU1J4dWRHeG9KQ2NlV0hkTm41cmZRbW14dFZQRzEyazRLdTdXQlVBcwpYcks3NGp6b25vTjlFNllsUHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://aks-62baec49.hcp.westus3.azmk8s.io:443\n name: o2nextgen-aks\ncontexts:\n- context:\n cluster: o2nextgen-aks\n user: clusterUser_o2bionics-products_o2nextgen-aks\n name: o2nextgen-aks\ncurrent-context: o2nextgen-aks\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_o2bionics-products_o2nextgen-aks\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRRWk4VS9rQ0hyd1dCRTNTbExqNEdaREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TWpBNU1qY3lNek14TVRCYUZ3MHlOREE1TWpjeU16UXhNVEJhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURBUC9JVTNxK0pwUS9FTXVudTdqaEEKd1VYdXVFcmxIZHZMM2tFc1RBUmdnNEhyK1ZVYkFaMEZqQmRsK0hqQ002SThoczBmM3VVS0ZWU2lkNWZqN3A4dAp3bzlSOHJid24vd2lxTmJoRWh3Y0dDWTN6czQ0MVo3a0k4VmtBRnE4bWtQdHhCbnRPNUhQWS9IZ3p5ZEFlUUo3CjRVSXNzN1RkMitDYTQxbmZ1dGtiNkdrazJraXcxSVZ2MG12NlkwUkptTlpja0V1N092NFdlQU5DRDNZTERRcjkKZGUxZnA5eCtOS21uNFlmR0FUeW5zMzJiR3h6azhRQTVwcXlmUzJ4elF6YmZjVmNiaEN1UU9Ddm5RUE1CRGZFSApxd0hSbmh0aE4wbHpBR0dOWUZ1d2owZ1pCM3N5Y3FRUjhGNDh4eGJ5alEvUkJ2SkJVUXFSVnRrem9MdWJVR0FLCjlmeWtvNXRYb0dsNGFSbjdkT09HdVBTZXpHREJxN3FHTFRXZDloWUx0Y0VNaUFlSmZQSHNVTUs3Vk1Ka2FGRlEKd0xkYktiRzFYaHFkTnRseTBkY0pGQkZ3eDVkY2tJTDBJZlZQYXBGdUdjdmVCZlQ4Vk5IUWVxVXRnWEVXak5OWQpKVnlsS2hEMStKTjZTb0ZSd0hSelo2L3Jpa0FkcEFubEQvT2s4ZmdQS1I5TmE5VXpTMmhtbTVNUkd2WFgwN05DCjNiZTZJMXlpcStuOFlTbnRodzV4WTEvOTVrTUF2ZG5UNTdmbm8vbVIwS1lLWXhlaTRkeFZtOXhOYk5WWlNmSVoKWXpqeTRNYzJPNllyYWU3NzBxRzhQTU03R0dXZSsxTVc2NktRT2o4VFhjejhOM0paaWVyMDQyU2F1MTAyOHZJZwpxUGtCQlo0UFNiQWp1UVR3YzNmdld3SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlFPMVVoL3hYTnoKZzJJNXBveFJTNjhmUHRocVd6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZbWJ0aGxRWTRMaFoveTN2dkM2ZApvNG0ycWRjdGoyaFZIUjl1VERtbExtVFQxRE4xYmIzYzNrQmhxQWlIWnNvVUc2M0R6cmtsbmNtVXdWUTFmbUF6Ck5pZmt5aDhNQnc3Y3JuL3RSbmY2bEI4Z2FoRm9kMFBhcElYV1VQcXlTa1VjRUN1SGZPNDY5VXZpeEowelpPa2wKRTdDMU41aHJ3ekc2cVBkWGJEaW5tRHdKSTFHS2pCd2RIUU0rTEJMODFSd1ZUZkZ0WTdFMWdBZEp2YUE0V3dVdQpNdzlQYnR4ZGN1ZnBuZkltRjB1M3AvL2VNT094cVgvOWRxOUVjSzZEZEoxQUp3ZGE1NHJCMUNQQjI3L1BJcWV4CkRUa25hM083RnVNaXhjOHlqUC9nczlUZGtSS1lYRCtIRUZHdUhYOE5DdFpRTjRIc3VpSk5jbHZWUStZbDFrUFQKeENxb3VseFZ5SW9FVjM5Zmp3RlE0c3JHckV1QXBvbzA5N245UTBhUHpocnJmR0Z5cGZteXZjSk03aER4T3I5TgoycG1uU1NycDJtK1NpTGNyQnBkcktIZzN0a0xpVWE4bGxrWU92ZCtXcFJZZlgzZUNpSDZJeWtBU2FqS2Q5dEdMClQ4U3dkN2JnM1BKM09TY3pKL0RhTkgvVEJNTlh3ZVRzT2c0aUZBNUNUQjk3SmNhek9wQWt4Q2ZlcFFXYzVwYkwKNmx3cUh0dVRSbHYwbTdYSjZUWGFLSkFZdXpGNkJLV3NGM3V6RVY4T3lEaXJpMVhUYkQrOE5FWXNMMER5VEl3UwpoTmpHd1dVSVBJeFFqL1l5ZHgzUDRLcVd4UHBzT1ZnVkNnWWE5WHdXR2tQTXBNSERlR2NQUlNxejhOcHh4eGxLCmtVcHhXNHdWUkYrMEVzV3Qxa2tYT3lrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBd0QveUZONnZpYVVQeERMcDd1NDRRTUZGN3JoSzVSM2J5OTVCTEV3RVlJT0I2L2xWCkd3R2RCWXdYWmZoNHdqT2lQSWJOSDk3bENoVlVvbmVYNCs2ZkxjS1BVZksyOEovOElxalc0UkljSEJnbU44N08KT05XZTVDUEZaQUJhdkpwRDdjUVo3VHVSejJQeDRNOG5RSGtDZStGQ0xMTzAzZHZnbXVOWjM3clpHK2hwSk5wSQpzTlNGYjlKcittTkVTWmpXWEpCTHV6citGbmdEUWc5MkN3MEsvWFh0WDZmY2ZqU3BwK0dIeGdFOHA3TjlteHNjCjVQRUFPYWFzbjB0c2MwTTIzM0ZYRzRRcmtEZ3I1MER6QVEzeEI2c0IwWjRiWVRkSmN3QmhqV0Jic0k5SUdRZDcKTW5La0VmQmVQTWNXOG8wUDBRYnlRVkVLa1ZiWk02QzdtMUJnQ3ZYOHBLT2JWNkJwZUdrWiszVGpocmowbnN4Zwp3YXU2aGkwMW5mWVdDN1hCRElnSGlYeng3RkRDdTFUQ1pHaFJVTUMzV3lteHRWNGFuVGJaY3RIWENSUVJjTWVYClhKQ0M5Q0gxVDJxUmJobkwzZ1gwL0ZUUjBIcWxMWUZ4Rm96VFdDVmNwU29ROWZpVGVrcUJVY0IwYzJldjY0cEEKSGFRSjVRL3pwUEg0RHlrZlRXdlZNMHRvWnB1VEVScjExOU96UXQyM3VpTmNvcXZwL0dFcDdZY09jV05mL2VaRApBTDNaMCtlMzU2UDVrZENtQ21NWG91SGNWWnZjVFd6VldVbnlHV000OHVESE5qdW1LMm51KzlLaHZEekRPeGhsCm52dFRGdXVpa0RvL0UxM00vRGR5V1lucTlPTmttcnRkTnZMeUlLajVBUVdlRDBtd0k3a0U4SE4zNzFzQ0F3RUEKQVFLQ0FnRUFuS0Q4aUFoTmw2VUZUV0gxdVpZWCtwbjhjZHR3R1c3VUxpcXJpbjE4YTIxNUlsb0cvbk80REZidwprVUY0a1RBa0U0LzMrdWxNVFlUSGFYNXFIMmZBQkRZcE1paSs1eGhSQWFQeFBYblZzUVh6elRBT1Q3dXJNay82CmQ5amFGQ0xUQ1JubHphUGt6Y1N0d2V6RUhBRDdCeGFsSldwY0J3MG0xc28zNU5HRUpQcWEvMDFnUDhGRjNhN2cKRGlWbDgxZ3ovVUlLa1VZazBRV0NFZ1lxdENJeVBBSWlIUGJUNjNiWWFsQ1NuNzFPUDRzNjRHMmNndUhldnhtTwpObEhxejVXSlZVNHdHOWo0N1F6MnAvZ0FnM0ZxV0ViNHVtRklDVkpUNHdBQ2VuNXc5VTRtL1UxZEQrTGF6VXE2ClhHWVB5aGtuTTdPbkY1UUJPaHc1NVpna2dRdGcwdUo4T1JFbWU5NFVXRitoSEh0bDlDNzNIa3AydC9JT3pyNEsKMWNQcXo3RG5FSm9vaS82d3k5R2xOMStWK1VRV0oxaFZ1a21UazlOY0V2QmdQZmtUV0QvbENoVTJxd1B4WWtObwppelJFYlUrOWVtUWo5TkxRdmllTmJncURweWJUVmVLR2pRUGpCRy9RdUpBUGlaektDd1dKMWdzeE56Um45WG1VClprS2NKVTc1UW4yem8wWCtJTXJWZkdKaklEUjNMdE5jTG5BamdYMm4vS3NnMlorcmxOS3FBQld0Mk1MWkc3c24KSHZISHE4SExjdWhDSjdmOUg3NVFnMUsrQlovejVsWWNJUHhxbFBZcm1UeGEwSzlQWGhkTVdQOGF1c2J1Qk94TgpHZHpmck1KT1Y4YWszS1NwYklVRmpwY1hkOTVaQy9lajZWTG0zK3JWa3oxeExTL1VoQUVDZ2dFQkFQR2NUWWUzCnBIUm56YXJ2aGg5aFZ5SStGeVpscDMwRGtyZXkzclovMU1ySnRwcWFrdXpick9jNmhQZWVZSmswNmlQV1lzUnIKbGpZaHg3cVBSUnV2eGpPQXdwRisxck9JcTBHT3VkR2s5R1NUNTZaREZZM09KbFhrTU1QeXRqdlM2NFh4WmlFVgoyRERDdTZmeFJFbHN0M1VYdDJlUzI5ODFZYkdTVmFQd1ExYW5MSS9VejcvdGxUcG9TUUxzclM4RGJzT2ZGTkFECkJ0SUY0YWtuRHo5eWp4QXI4MEZsQnN6M25CdVEvb1VXZzdqcHJYb3h3eDVmN0JGanZkbE0za3R3ekZmQngxR2EKOG1PSnVDdjRVT3c4cFhCcGNZaHUxZDBHYmk5bG02a0dkamFucDdrUHVaN3hqOG9sWmZDMFo1S2FRNVNjcjE4dApUYldIV1NhWklCWXE0RnNDZ2dFQkFNdXpFVWkvMTJXVUVqQ3BmbjA1ZHRkQ3Nud2VvTDRUMnh1MS9mb0Q0SlE2CnJESFVKbzlWelVDQlJrbVhkcVhRUWE3UW1VWnZvRXdyMnlhSFlsSVEwUUF6OXJRaGw5U0prRndFK1Z1L1FWb2IKM2FCTitBc3MrRU8xbmRaVXRDSGpXenFSZjlPVVFLbGlPQTdWS2FvMzY1YVh1ZWh2cWcxVDRybU54bkhHMGlWRQpzZTJiUWZKSmk1MUN1RURaYmVKTXVCUjdXT2lZVGRhYXZ3cXVXeU1GVUZSMG5HWldRb0lENUY4QlBvUk1XSEw0CllMQnprbndEc2t2Skt5SldSNkFocXVTbi9oaEN1Y1JwbG5HZXAyWThoVDRDRlllZmNHdS9LY1l4QkNGbnExaEkKM2VrRndmc0pIWWg0YlJyeTE4U0drZytPbSs3V1QzRHc1OXljSmtja1hRRUNnZ0VBYitoWWxMci9oaGNxVUxrKwpvencvMHBGMXdZZ21DcVprQjRmbTFocmhZY2dLTnhQUFo3dmNHd0drNHRoTm44aTloam5mWjJENW96c0VPcW52CmRZSjF5QmNraDZWN0pvN3YyNTZTL01KdG5FUlJjRlgwSHNsVVFrWStQQlFvU2c5SW5iS1EvbFFTM1lya3hrWGUKdmkrSHpjbGRYckRML0ZmS1Z5Z1RXS3FKVmhKNmRtZzRqWW9xcTNId0YxV3VaVzh1bDVjUVdjUjlIVHd5S0ZuNgpHd1loczNqWDQvczZLaWVwKzY2dDVORG4wL2NRTGQvc294NEV4bzB2T3YzNm5IQ3poUll4RHVBNDB0ZlFJVFdUCnJjZnRUT0xaL2pwdi9qN2pQRHJRM1hvcnVPYndyYXZWNndPeCtReFhhaVQxTUJjWnBEVHFtYWZ2TFZ4eWM0bEwKTGxsUHJ3S0NBUUJ1ZHNra3ZvUThuYlBQbDlyMFpibEF1dmEzd0pSQy85bU9pWDhWbWd5cjFiV1R3QXk1SmpxTQpoSTV0VWlvUmVZSmxIdEpBRkVERmpmTG1UZnpQckRicStVTU1KRHVHRXFPcWd6Z0d2UXpmcE1UbkxlRVpqbVdECnNuWEp5VjEyRXlsaDlZMXdXN0ZGS2ZKa2VNeURkcGZYcnFndW1IK0xncll0RWVsUHdoWXNCN2pGdGJCcGgrQ2kKZzVBUCt0bFFJM0tnQ05RS0xxM25kenVxdXlySkx4U0UrRWZvWjFiaDB1S0JjdGRJUDI2bnluSUV2bWZ0d01Ocgp2Y2dhY3RlY3l5VTFvclIweTVxYUhQaHMzVERDaklkbFBSUVgzQ3JIQTMvUDdyemlzS21HMHQwa2hPN1JCL3h3CkNYNkJZcmdINTBKR0ZYd1NaVDNuYlgwUGNjNkFQZ1FCQW9JQkFIc0FTa0tmN0NaakdRcWdGVy9PYUpCeE5pclkKQlZVZ2NRVzN1NnVZN1BEeEFnR3JuakxCcUNXVE5Fd0dzNjZCeS9PbE1Fa3BnTU1JVVBJN1RnazZDc0Y4QWN0TgpaWUR3WWc3VExvVVdPTXpBNTZXUEJwdFhrZEk2NkZjdTJzTUhQdWpOMFAzOUo2K1VPaEVNVjlJRW9KN3ZWb3RrCjFrbHNVSUwydkM1T1VtRVJRcGhQSHlBM2l4TGZVQjBwNCtTWXArdVBmT3l1ejZyNkpjNnlpd2ZETWp4aUp0cXUKOGlncGpnMkJXZndIVzlsWlcwL3dhNHlKbmM5U1hpZ1RGWmNqa2dSb1F4TEVSdndqK0t4MFFxdDU4UFVqUmlxWQpqWjhjUDZlNEtmZ0dLVHhObkFtMTEwbExjbXNFOUQwcE15QzczV2I3SkpVZ0FETHFvRDJEc293SUY4Yz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 85d3c874ccdf0d4be13918907d28db9df99116f2ef9666c5dad8317a6632d2fa4ae2a708e40efbfe0ded0b2c78bb05b607aae5df346697a6b2eb3c3b13532dbf\n", + "kubelet_identity": [ + { + "client_id": "a7b1e297-2eb0-4fc0-acea-0b7dd9ac7ec6", + "object_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "user_assigned_identity_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.ManagedIdentity/userAssignedIdentities/o2nextgen-aks-agentpool" + } + ], + "kubernetes_version": "1.23.8", + "linux_profile": [], + "local_account_disabled": false, + "location": "westus3", + "maintenance_window": [], + "microsoft_defender": [], + "name": "o2nextgen-aks", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "ip_versions": [ + "IPv4" + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/MC_o2bionics-products_o2nextgen-aks_westus3/providers/Microsoft.Network/publicIPAddresses/a671c948-31c9-41d8-9f2d-73edf7531002" + ], + "idle_timeout_in_minutes": 0, + "managed_outbound_ip_count": 1, + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [], + "outbound_ports_allocated": 0 + } + ], + "load_balancer_sku": "standard", + "nat_gateway_profile": [], + "network_mode": "", + "network_plugin": "kubenet", + "network_policy": "", + "outbound_type": "loadBalancer", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_o2bionics-products_o2nextgen-aks_westus3", + "oidc_issuer_enabled": false, + "oidc_issuer_url": "", + "oms_agent": [], + "open_service_mesh_enabled": false, + "portal_fqdn": "aks-62baec49.portal.hcp.westus3.azmk8s.io", + "private_cluster_enabled": false, + "private_cluster_public_fqdn_enabled": false, + "private_dns_zone_id": "", + "private_fqdn": "", + "public_network_access_enabled": true, + "resource_group_name": "o2bionics-products", + "role_based_access_control_enabled": true, + "run_command_enabled": true, + "service_principal": [], + "sku_tier": "Free", + "tags": { + "Environment": "Production", + "Product": "O2NextGen Platform" + }, + "timeouts": null, + "windows_profile": [] + }, + "sensitive_values": { + "aci_connector_linux": [], + "api_server_authorized_ip_ranges": [], + "auto_scaler_profile": [], + "azure_active_directory_role_based_access_control": [], + "default_node_pool": [ + { + "kubelet_config": [], + "linux_os_config": [], + "node_labels": {}, + "node_taints": [], + "tags": {}, + "upgrade_settings": [], + "zones": [] + } + ], + "http_proxy_config": [], + "identity": [ + { + "identity_ids": [] + } + ], + "ingress_application_gateway": [], + "key_vault_secrets_provider": [], + "kube_admin_config": [], + "kube_config": [ + {} + ], + "kubelet_identity": [ + {} + ], + "linux_profile": [], + "maintenance_window": [], + "microsoft_defender": [], + "network_profile": [ + { + "ip_versions": [ + false + ], + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + false + ], + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [] + } + ], + "nat_gateway_profile": [] + } + ], + "oms_agent": [], + "service_principal": [], + "tags": {}, + "windows_profile": [] + }, + "depends_on": [ + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "azurerm_resource_group.aks-resource-group", + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-resource-group", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "location": "westus3", + "name": "o2bionics-products", + "tags": {}, + "timeouts": null + }, + "sensitive_values": { + "tags": {} + } + }, + { + "address": "azurerm_role_assignment.current", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleAssignments/a964cad9-e2af-c584-abeb-260ba07b73d4", + "name": "a964cad9-e2af-c584-abeb-260ba07b73d4", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", + "role_definition_name": "Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {}, + "depends_on": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current", + "data.azurerm_subscription.current" + ] + }, + { + "address": "azurerm_role_assignment.main", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "main", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com/providers/Microsoft.Authorization/roleAssignments/1e321e91-e008-911f-1259-daaa91498ded", + "name": "1e321e91-e008-911f-1259-daaa91498ded", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/befefa01-2a29-4197-83a8-272ff33ce314", + "role_definition_name": "DNS Zone Contributor", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Network/dnsZones/o2bus.com", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {}, + "depends_on": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + }, + { + "address": "azurerm_role_assignment.reader", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "reader", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.Authorization/roleAssignments/2790a8c2-19c3-bd19-676e-be62e078963a", + "name": "2790a8c2-19c3-bd19-676e-be62e078963a", + "principal_id": "2b4b23c7-ef03-4fdb-b16a-b14dac98c4fd", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", + "role_definition_name": "Reader", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {}, + "depends_on": [ + "azuread_application.example", + "azuread_service_principal.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current" + ] + }, + { + "address": "azurerm_role_assignment.role-acrpull", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "role-acrpull", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "condition": "", + "condition_version": "", + "delegated_managed_identity_resource_id": "", + "description": "", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen/providers/Microsoft.Authorization/roleAssignments/88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "name": "88ef3ca8-c6bb-61dd-153e-e2440aa66b70", + "principal_id": "c1a2d202-93af-4298-a620-455e6b5a7431", + "principal_type": "ServicePrincipal", + "role_definition_id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d", + "role_definition_name": "AcrPull", + "scope": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04/resourceGroups/o2bionics-products/providers/Microsoft.ContainerRegistry/registries/o2nextgen", + "skip_service_principal_aad_check": null, + "timeouts": null + }, + "sensitive_values": {}, + "depends_on": [ + "azurerm_container_registry.o2nextgen-aks-acr", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "data.azuread_client_config.current", + "mode": "data", + "type": "azuread_client_config", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 0, + "values": { + "client_id": "04b07795-8ddb-461a-bbee-02f9e1bf7b46", + "id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6-04b07795-8ddb-461a-bbee-02f9e1bf7b46-ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "object_id": "ae2c64ac-8e28-41da-9f2c-fa3ce8cbc3c0", + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "timeouts": null + }, + "sensitive_values": {} + }, + { + "address": "data.azuread_domains.example", + "mode": "data", + "type": "azuread_domains", + "name": "example", + "provider_name": "registry.terraform.io/hashicorp/azuread", + "schema_version": 0, + "values": { + "admin_managed": null, + "domains": [ + { + "admin_managed": true, + "authentication_type": "Managed", + "default": true, + "domain_name": "o2bionicshotmail.onmicrosoft.com", + "initial": true, + "root": true, + "supported_services": [ + "Email", + "OfficeCommunicationsOnline" + ], + "verified": true + } + ], + "id": "domains#f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6#ZFYJzSzr82ymyVfK_gF6i8a-KPM=", + "include_unverified": null, + "only_default": null, + "only_initial": true, + "only_root": null, + "supports_services": null, + "timeouts": null + }, + "sensitive_values": { + "domains": [ + { + "supported_services": [ + false, + false + ] + } + ] + } + }, + { + "address": "data.azurerm_subscription.current", + "mode": "data", + "type": "azurerm_subscription", + "name": "current", + "provider_name": "registry.terraform.io/hashicorp/azurerm", + "schema_version": 0, + "values": { + "display_name": "paid-subscription", + "id": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "location_placement_id": "Public_2014-09-01", + "quota_id": "PayAsYouGo_2014-09-01", + "spending_limit": "Off", + "state": "Enabled", + "subscription_id": "f1404c6e-2728-40ae-9cd2-fee75bde4c04", + "tags": {}, + "tenant_id": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6", + "timeouts": null + }, + "sensitive_values": { + "tags": {} + } + }, + { + "address": "helm_release.aad-pod-identity", + "mode": "managed", + "type": "helm_release", + "name": "aad-pod-identity", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "aad-pod-identity", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "aad-pod-identity", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.8.12", + "chart": "aad-pod-identity", + "name": "aad-pod-identity", + "namespace": "kube-system", + "revision": 1, + "values": "null", + "version": "4.1.13" + } + ], + "name": "aad-pod-identity", + "namespace": "kube-system", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.13", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [], + "set_sensitive": [] + }, + "depends_on": [ + "azurerm_container_registry.o2nextgen-aks-acr", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "helm_release.cert-manager", + "mode": "managed", + "type": "helm_release", + "name": "cert-manager", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "cert-manager", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "cert-manager", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1.6.1", + "chart": "cert-manager", + "name": "cert-manager", + "namespace": "cert-manager", + "revision": 1, + "values": "{\"installCRDs\":true}", + "version": "v1.6.1" + } + ], + "name": "cert-manager", + "namespace": "cert-manager", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.jetstack.io", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "installCRDs", + "type": "", + "value": "true" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "v1.6.1", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [ + {} + ], + "set_sensitive": [] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "helm_release.external-dns", + "mode": "managed", + "type": "helm_release", + "name": "external-dns", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "external-dns", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "external-dns", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.12.2", + "chart": "external-dns", + "name": "external-dns", + "namespace": "external-dns", + "revision": 1, + "values": "{\"azure\":{\"aadClientId\":\"4acf4b9b-9507-44ae-83ff-43a8b0a2d45e\",\"aadClientSecret\":\"xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb\",\"resourceGroup\":\"o2bionics-products\",\"subscriptionId\":\"/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04\",\"tenantId\":\"f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6\"},\"logLevel\":\"debug\",\"policy\":\"sync\",\"provider\":\"azure\",\"txtOwnerId\":\"o2nextgen-aks\"}", + "version": "6.10.0" + } + ], + "name": "external-dns", + "namespace": "external-dns", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://charts.bitnami.com/bitnami", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "azure.aadClientId", + "type": "", + "value": "4acf4b9b-9507-44ae-83ff-43a8b0a2d45e" + }, + { + "name": "azure.aadClientSecret", + "type": "", + "value": "xvT8Q~GoHTTArzkIjY0mPAbt2Grg-1KxoShWGaxb" + }, + { + "name": "azure.resourceGroup", + "type": "", + "value": "o2bionics-products" + }, + { + "name": "azure.subscriptionId", + "type": "", + "value": "/subscriptions/f1404c6e-2728-40ae-9cd2-fee75bde4c04" + }, + { + "name": "azure.tenantId", + "type": "", + "value": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" + }, + { + "name": "logLevel", + "type": "", + "value": "debug" + }, + { + "name": "policy", + "type": "", + "value": "sync" + }, + { + "name": "provider", + "type": "", + "value": "azure" + }, + { + "name": "txtOwnerId", + "type": "", + "value": "o2nextgen-aks" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "6.10.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": true, + "set_sensitive": [] + }, + "depends_on": [ + "azuread_application.example", + "azuread_application_password.current", + "azurerm_dns_zone.primary-dns-zone", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "data.azuread_client_config.current", + "data.azurerm_subscription.current" + ] + }, + { + "address": "helm_release.nginx-ingress-controller", + "mode": "managed", + "type": "helm_release", + "name": "nginx-ingress-controller", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "ingress-nginx", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "nginx-ingress-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.2.1", + "chart": "ingress-nginx", + "name": "nginx-ingress-controller", + "namespace": "ingress", + "revision": 1, + "values": "{\"controller\":{\"autoscaling\":{\"enabled\":true,\"maxReplicas\":2,\"minReplicas\":1},\"service\":{\"type\":\"LoadBalancer\"}}}", + "version": "4.1.3" + } + ], + "name": "nginx-ingress-controller", + "namespace": "ingress", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://kubernetes.github.io/ingress-nginx", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "controller.autoscaling.enabled", + "type": "", + "value": "true" + }, + { + "name": "controller.autoscaling.maxReplicas", + "type": "", + "value": "2" + }, + { + "name": "controller.autoscaling.minReplicas", + "type": "", + "value": "1" + }, + { + "name": "controller.service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "4.1.3", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [ + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "helm_release.o2nextgen-auth", + "mode": "managed", + "type": "helm_release", + "name": "o2nextgen-auth", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "o2nextgen-auth", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "o2nextgen-auth", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.16.0", + "chart": "o2nextgen-auth", + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "revision": 1, + "values": "null", + "version": "0.1.0" + } + ], + "name": "o2nextgen-auth", + "namespace": "apps-prod", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "../../../helm_charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [], + "set_sensitive": [] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "helm_release.prometheus-stack", + "mode": "managed", + "type": "helm_release", + "name": "prometheus-stack", + "provider_name": "registry.terraform.io/hashicorp/helm", + "schema_version": 0, + "values": { + "atomic": false, + "chart": "kube-prometheus-stack", + "cleanup_on_fail": false, + "create_namespace": true, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "prometheus-stack", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "0.59.1", + "chart": "kube-prometheus-stack", + "name": "prometheus-stack", + "namespace": "monitoring", + "revision": 1, + "values": "{\"grafana\":{\"adminPassword\":\"grafana-pass\",\"adminUser\":\"grafana\",\"ingress\":{\"annotations\":{\"nginx.ingress.kubernetes.io/rewrite-target\":\"/$1\",\"nginx.ingress.kubernetes.io/ssl-redirect\":\"false\",\"nginx.ingress.kubernetes.io/use-regex\":\"true\"},\"enabled\":true,\"ingressClassName\":\"nginx\",\"path\":\"/(.*)\"}}}", + "version": "40.1.2" + } + ], + "name": "prometheus-stack", + "namespace": "monitoring", + "pass_credentials": false, + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": "https://prometheus-community.github.io/helm-charts", + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "grafana.adminPassword", + "type": "", + "value": "grafana-pass" + }, + { + "name": "grafana.adminUser", + "type": "", + "value": "grafana" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target", + "type": "", + "value": "/$1" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect", + "type": "string", + "value": "false" + }, + { + "name": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex", + "type": "string", + "value": "true" + }, + { + "name": "grafana.ingress.enabled", + "type": "", + "value": "true" + }, + { + "name": "grafana.ingress.ingressClassName", + "type": "", + "value": "nginx" + }, + { + "name": "grafana.ingress.path", + "type": "", + "value": "/(.*)" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "40.1.2", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_values": { + "metadata": [ + {} + ], + "postrender": [], + "set": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "set_sensitive": [] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group", + "helm_release.nginx-ingress-controller" + ] + }, + { + "address": "kubernetes_namespace.dev", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "dev", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-dev", + "metadata": [ + { + "annotations": { + "name": "apps-dev" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Development" + }, + "name": "apps-dev", + "resource_version": "1447", + "uid": "e7d1d0f0-539d-49f0-9ba1-f7a187586e94" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "kubernetes_namespace.devops", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "devops", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-devops", + "metadata": [ + { + "annotations": { + "name": "apps-devops" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Devops" + }, + "name": "apps-devops", + "resource_version": "1444", + "uid": "251115c5-d26c-4bd7-8af9-99c93da74b5a" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "kubernetes_namespace.prod", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "prod", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-prod", + "metadata": [ + { + "annotations": { + "name": "apps-prod" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Production" + }, + "name": "apps-prod", + "resource_version": "1445", + "uid": "e76706f9-6aa6-405f-8c72-7afdfb423c05" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "kubernetes_namespace.staging", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "staging", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-staging", + "metadata": [ + { + "annotations": { + "name": "apps-staging" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Staging" + }, + "name": "apps-staging", + "resource_version": "1443", + "uid": "d5be15f9-8924-4415-9d7c-05b85a649510" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "kubernetes_namespace.tst", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "tst", + "provider_name": "registry.terraform.io/hashicorp/kubernetes", + "schema_version": 0, + "values": { + "id": "apps-tst", + "metadata": [ + { + "annotations": { + "name": "apps-tst" + }, + "generate_name": "", + "generation": 0, + "labels": { + "Environment": "Test" + }, + "name": "apps-tst", + "resource_version": "1446", + "uid": "8001ed90-da14-41c5-a51b-6fe1464bc1a3" + } + ], + "timeouts": null + }, + "sensitive_values": { + "metadata": [ + { + "annotations": {}, + "labels": {} + } + ] + }, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_resource_group.aks-resource-group" + ] + } + ] + } + } + }, + "configuration": { + "provider_config": { + "azuread": { + "name": "azuread", + "full_name": "registry.terraform.io/hashicorp/azuread", + "version_constraint": "~> 2.15.0", + "expressions": { + "tenant_id": { + "constant_value": "f3a52f65-e3a4-4386-8bc9-a42f32fc1cd6" + } + } + }, + "azurerm": { + "name": "azurerm", + "full_name": "registry.terraform.io/hashicorp/azurerm", + "version_constraint": ">= 3.0.0", + "expressions": { + "features": [ + {} + ] + } + }, + "helm": { + "name": "helm", + "full_name": "registry.terraform.io/hashicorp/helm", + "version_constraint": ">= 2.5.1", + "expressions": { + "kubernetes": [ + { + "client_certificate": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].client_certificate", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + "client_key": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].client_key", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + "cluster_ca_certificate": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].cluster_ca_certificate", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + "host": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].host", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + } + } + ] + } + }, + "kubernetes": { + "name": "kubernetes", + "full_name": "registry.terraform.io/hashicorp/kubernetes", + "version_constraint": "2.8.0", + "expressions": { + "client_certificate": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].client_certificate", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + "client_key": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].client_key", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + "cluster_ca_certificate": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].cluster_ca_certificate", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + "host": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0].host", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kube_config", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + } + } + }, + "random": { + "name": "random", + "full_name": "registry.terraform.io/hashicorp/random" + }, + "time": { + "name": "time", + "full_name": "registry.terraform.io/hashicorp/time" + }, + "tls": { + "name": "tls", + "full_name": "registry.terraform.io/hashicorp/tls" + } + }, + "root_module": { + "outputs": { + "client_id": { + "expression": { + "references": [ + "azuread_application.example.application_id", + "azuread_application.example" + ] + } + }, + "client_secret": { + "sensitive": true, + "expression": { + "references": [ + "azuread_application_password.current.value", + "azuread_application_password.current" + ] + } + }, + "current_subscription_display_name": { + "expression": { + "references": [ + "data.azurerm_subscription.current.display_name", + "data.azurerm_subscription.current" + ] + } + }, + "display_name": { + "expression": { + "references": [ + "azuread_service_principal.current.display_name", + "azuread_service_principal.current" + ] + } + }, + "object_id": { + "expression": { + "references": [ + "data.azuread_client_config.current.object_id", + "data.azuread_client_config.current" + ] + } + } + }, + "resources": [ + { + "address": "azuread_application.example", + "mode": "managed", + "type": "azuread_application", + "name": "example", + "provider_config_key": "azuread", + "expressions": { + "display_name": { + "constant_value": "External-DNS-SP" + }, + "owners": { + "references": [ + "data.azuread_client_config.current.object_id", + "data.azuread_client_config.current" + ] + } + }, + "schema_version": 1, + "depends_on": [ + "azurerm_dns_zone.primary-dns-zone" + ] + }, + { + "address": "azuread_application_password.current", + "mode": "managed", + "type": "azuread_application_password", + "name": "current", + "provider_config_key": "azuread", + "expressions": { + "application_object_id": { + "references": [ + "azuread_application.example.object_id", + "azuread_application.example" + ] + } + }, + "schema_version": 1 + }, + { + "address": "azuread_service_principal.current", + "mode": "managed", + "type": "azuread_service_principal", + "name": "current", + "provider_config_key": "azuread", + "expressions": { + "app_role_assignment_required": { + "constant_value": false + }, + "application_id": { + "references": [ + "azuread_application.example.application_id", + "azuread_application.example" + ] + }, + "owners": { + "references": [ + "data.azuread_client_config.current.object_id", + "data.azuread_client_config.current" + ] + } + }, + "schema_version": 0 + }, + { + "address": "azurerm_container_registry.o2nextgen-aks-acr", + "mode": "managed", + "type": "azurerm_container_registry", + "name": "o2nextgen-aks-acr", + "provider_config_key": "azurerm", + "expressions": { + "admin_enabled": { + "constant_value": false + }, + "location": { + "references": [ + "var.k8s_location" + ] + }, + "name": { + "constant_value": "o2nextgen" + }, + "resource_group_name": { + "references": [ + "var.k8s_resource_group" + ] + }, + "sku": { + "constant_value": "Standard" + } + }, + "schema_version": 2, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + { + "address": "azurerm_dns_zone.primary-dns-zone", + "mode": "managed", + "type": "azurerm_dns_zone", + "name": "primary-dns-zone", + "provider_config_key": "azurerm", + "expressions": { + "name": { + "constant_value": "o2bus.com" + }, + "resource_group_name": { + "references": [ + "var.k8s_resource_group" + ] + }, + "tags": { + "constant_value": { + "product": "O2NextGen Platform", + "type_product": "Saas" + } + } + }, + "schema_version": 1, + "depends_on": [ + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + { + "address": "azurerm_kubernetes_cluster.o2nextgen-aks", + "mode": "managed", + "type": "azurerm_kubernetes_cluster", + "name": "o2nextgen-aks", + "provider_config_key": "azurerm", + "expressions": { + "default_node_pool": [ + { + "enable_auto_scaling": { + "constant_value": false + }, + "name": { + "constant_value": "system" + }, + "node_count": { + "references": [ + "var.k8s_node_count" + ] + }, + "type": { + "constant_value": "VirtualMachineScaleSets" + }, + "vm_size": { + "references": [ + "var.k8s_vm_size" + ] + } + } + ], + "dns_prefix": { + "references": [ + "var.k8s_dns_prefix" + ] + }, + "identity": [ + { + "type": { + "constant_value": "SystemAssigned" + } + } + ], + "location": { + "references": [ + "var.k8s_location" + ] + }, + "name": { + "references": [ + "var.k8s_cluster_name" + ] + }, + "resource_group_name": { + "references": [ + "var.k8s_resource_group" + ] + }, + "tags": { + "constant_value": { + "Environment": "Production", + "Product": "O2NextGen Platform" + } + } + }, + "schema_version": 2, + "depends_on": [ + "azurerm_resource_group.aks-resource-group" + ] + }, + { + "address": "azurerm_resource_group.aks-resource-group", + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-resource-group", + "provider_config_key": "azurerm", + "expressions": { + "location": { + "references": [ + "var.k8s_location" + ] + }, + "name": { + "references": [ + "var.k8s_resource_group" + ] + } + }, + "schema_version": 0 + }, + { + "address": "azurerm_role_assignment.current", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "current", + "provider_config_key": "azurerm", + "expressions": { + "principal_id": { + "references": [ + "azuread_service_principal.current.object_id", + "azuread_service_principal.current" + ] + }, + "role_definition_name": { + "constant_value": "Contributor" + }, + "scope": { + "references": [ + "data.azurerm_subscription.current.id", + "data.azurerm_subscription.current" + ] + } + }, + "schema_version": 0 + }, + { + "address": "azurerm_role_assignment.main", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "main", + "provider_config_key": "azurerm", + "expressions": { + "principal_id": { + "references": [ + "azuread_service_principal.current.object_id", + "azuread_service_principal.current" + ] + }, + "role_definition_name": { + "constant_value": "DNS Zone Contributor" + }, + "scope": { + "references": [ + "azurerm_dns_zone.primary-dns-zone.id", + "azurerm_dns_zone.primary-dns-zone" + ] + } + }, + "schema_version": 0 + }, + { + "address": "azurerm_role_assignment.reader", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "reader", + "provider_config_key": "azurerm", + "expressions": { + "principal_id": { + "references": [ + "azuread_service_principal.current.object_id", + "azuread_service_principal.current" + ] + }, + "role_definition_name": { + "constant_value": "Reader" + }, + "scope": { + "references": [ + "azurerm_resource_group.aks-resource-group.id", + "azurerm_resource_group.aks-resource-group" + ] + } + }, + "schema_version": 0 + }, + { + "address": "azurerm_role_assignment.role-acrpull", + "mode": "managed", + "type": "azurerm_role_assignment", + "name": "role-acrpull", + "provider_config_key": "azurerm", + "expressions": { + "principal_id": { + "references": [ + "azurerm_kubernetes_cluster.o2nextgen-aks.kubelet_identity[0].object_id", + "azurerm_kubernetes_cluster.o2nextgen-aks.kubelet_identity[0]", + "azurerm_kubernetes_cluster.o2nextgen-aks.kubelet_identity", + "azurerm_kubernetes_cluster.o2nextgen-aks" + ] + }, + "role_definition_name": { + "constant_value": "AcrPull" + }, + "scope": { + "references": [ + "azurerm_container_registry.o2nextgen-aks-acr.id", + "azurerm_container_registry.o2nextgen-aks-acr" + ] + } + }, + "schema_version": 0, + "depends_on": [ + "azurerm_container_registry.o2nextgen-aks-acr" + ] + }, + { + "address": "helm_release.aad-pod-identity", + "mode": "managed", + "type": "helm_release", + "name": "aad-pod-identity", + "provider_config_key": "helm", + "expressions": { + "chart": { + "constant_value": "aad-pod-identity" + }, + "name": { + "constant_value": "aad-pod-identity" + }, + "namespace": { + "constant_value": "kube-system" + }, + "repository": { + "constant_value": "https://raw.githubusercontent.com/Azure/aad-pod-identity/master/charts" + } + }, + "schema_version": 0, + "depends_on": [ + "azurerm_resource_group.aks-resource-group", + "azurerm_kubernetes_cluster.o2nextgen-aks", + "azurerm_container_registry.o2nextgen-aks-acr" + ] + }, + { + "address": "helm_release.cert-manager", + "mode": "managed", + "type": "helm_release", + "name": "cert-manager", + "provider_config_key": "helm", + "expressions": { + "chart": { + "constant_value": "cert-manager" + }, + "create_namespace": { + "constant_value": true + }, + "name": { + "constant_value": "cert-manager" + }, + "namespace": { + "constant_value": "cert-manager" + }, + "repository": { + "constant_value": "https://charts.jetstack.io" + }, + "set": [ + { + "name": { + "constant_value": "installCRDs" + }, + "value": { + "constant_value": "true" + } + } + ], + "version": { + "constant_value": "1.6.1" + } + }, + "schema_version": 0 + }, + { + "address": "helm_release.external-dns", + "mode": "managed", + "type": "helm_release", + "name": "external-dns", + "provider_config_key": "helm", + "expressions": { + "chart": { + "constant_value": "external-dns" + }, + "create_namespace": { + "constant_value": true + }, + "name": { + "constant_value": "external-dns" + }, + "namespace": { + "constant_value": "external-dns" + }, + "repository": { + "constant_value": "https://charts.bitnami.com/bitnami" + }, + "set": [ + { + "name": { + "constant_value": "txtOwnerId" + }, + "value": { + "references": [ + "var.k8s_cluster_name" + ] + } + }, + { + "name": { + "constant_value": "provider" + }, + "value": { + "constant_value": "azure" + } + }, + { + "name": { + "constant_value": "logLevel" + }, + "value": { + "constant_value": "debug" + } + }, + { + "name": { + "constant_value": "policy" + }, + "value": { + "constant_value": "sync" + } + }, + { + "name": { + "constant_value": "azure.resourceGroup" + }, + "value": { + "references": [ + "var.k8s_resource_group" + ] + } + }, + { + "name": { + "constant_value": "azure.tenantId" + }, + "value": { + "references": [ + "data.azuread_client_config.current.tenant_id", + "data.azuread_client_config.current" + ] + } + }, + { + "name": { + "constant_value": "azure.subscriptionId" + }, + "value": { + "references": [ + "data.azurerm_subscription.current.id", + "data.azurerm_subscription.current" + ] + } + }, + { + "name": { + "constant_value": "azure.aadClientId" + }, + "value": { + "references": [ + "azuread_application.example.application_id", + "azuread_application.example" + ] + } + }, + { + "name": { + "constant_value": "azure.aadClientSecret" + }, + "value": { + "references": [ + "azuread_application_password.current.value", + "azuread_application_password.current" + ] + } + } + ] + }, + "schema_version": 0, + "depends_on": [ + "azurerm_dns_zone.primary-dns-zone" + ] + }, + { + "address": "helm_release.nginx-ingress-controller", + "mode": "managed", + "type": "helm_release", + "name": "nginx-ingress-controller", + "provider_config_key": "helm", + "expressions": { + "chart": { + "constant_value": "ingress-nginx" + }, + "create_namespace": { + "constant_value": "true" + }, + "name": { + "constant_value": "nginx-ingress-controller" + }, + "namespace": { + "constant_value": "ingress" + }, + "repository": { + "constant_value": "https://kubernetes.github.io/ingress-nginx" + }, + "set": [ + { + "name": { + "constant_value": "controller.service.type" + }, + "value": { + "constant_value": "LoadBalancer" + } + }, + { + "name": { + "constant_value": "controller.autoscaling.enabled" + }, + "value": { + "constant_value": "true" + } + }, + { + "name": { + "constant_value": "controller.autoscaling.minReplicas" + }, + "value": { + "constant_value": "1" + } + }, + { + "name": { + "constant_value": "controller.autoscaling.maxReplicas" + }, + "value": { + "constant_value": "2" + } + } + ], + "version": { + "constant_value": "4.1.3" + } + }, + "schema_version": 0 + }, + { + "address": "helm_release.o2bus-webapp", + "mode": "managed", + "type": "helm_release", + "name": "o2bus-webapp", + "provider_config_key": "helm", + "expressions": { + "chart": { + "constant_value": "o2bus-webapp" + }, + "name": { + "constant_value": "o2bus-webapp" + }, + "namespace": { + "constant_value": "apps-prod" + }, + "repository": { + "constant_value": "../../../helm_charts" + } + }, + "schema_version": 0 + }, + { + "address": "helm_release.o2nextgen-auth", + "mode": "managed", + "type": "helm_release", + "name": "o2nextgen-auth", + "provider_config_key": "helm", + "expressions": { + "chart": { + "constant_value": "o2nextgen-auth" + }, + "name": { + "constant_value": "o2nextgen-auth" + }, + "namespace": { + "constant_value": "apps-prod" + }, + "repository": { + "constant_value": "../../../helm_charts" + } + }, + "schema_version": 0 + }, + { + "address": "helm_release.prometheus-stack", + "mode": "managed", + "type": "helm_release", + "name": "prometheus-stack", + "provider_config_key": "helm", + "expressions": { + "chart": { + "constant_value": "kube-prometheus-stack" + }, + "create_namespace": { + "constant_value": true + }, + "name": { + "constant_value": "prometheus-stack" + }, + "namespace": { + "constant_value": "monitoring" + }, + "repository": { + "constant_value": "https://prometheus-community.github.io/helm-charts" + }, + "set": [ + { + "name": { + "constant_value": "grafana.ingress.enabled" + }, + "value": { + "constant_value": "true" + } + }, + { + "name": { + "constant_value": "grafana.ingress.ingressClassName" + }, + "value": { + "constant_value": "nginx" + } + }, + { + "name": { + "constant_value": "grafana.ingress.path" + }, + "value": { + "constant_value": "/(.*)" + } + }, + { + "name": { + "constant_value": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/ssl-redirect" + }, + "type": { + "constant_value": "string" + }, + "value": { + "constant_value": "false" + } + }, + { + "name": { + "constant_value": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/use-regex" + }, + "type": { + "constant_value": "string" + }, + "value": { + "constant_value": "true" + } + }, + { + "name": { + "constant_value": "grafana.ingress.annotations.nginx\\.ingress\\.kubernetes\\.io/rewrite-target" + }, + "value": { + "constant_value": "/$1" + } + }, + { + "name": { + "constant_value": "grafana.adminUser" + }, + "value": { + "references": [ + "var.grafana_admin_user" + ] + } + }, + { + "name": { + "constant_value": "grafana.adminPassword" + }, + "value": { + "references": [ + "var.grafana_admin_password" + ] + } + } + ] + }, + "schema_version": 0, + "depends_on": [ + "helm_release.nginx-ingress-controller" + ] + }, + { + "address": "kubernetes_namespace.dev", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "dev", + "provider_config_key": "kubernetes", + "expressions": { + "metadata": [ + { + "annotations": { + "constant_value": { + "name": "apps-dev" + } + }, + "labels": { + "constant_value": { + "Environment": "Development" + } + }, + "name": { + "constant_value": "apps-dev" + } + } + ] + }, + "schema_version": 0 + }, + { + "address": "kubernetes_namespace.devops", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "devops", + "provider_config_key": "kubernetes", + "expressions": { + "metadata": [ + { + "annotations": { + "constant_value": { + "name": "apps-devops" + } + }, + "labels": { + "constant_value": { + "Environment": "Devops" + } + }, + "name": { + "constant_value": "apps-devops" + } + } + ] + }, + "schema_version": 0 + }, + { + "address": "kubernetes_namespace.prod", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "prod", + "provider_config_key": "kubernetes", + "expressions": { + "metadata": [ + { + "annotations": { + "constant_value": { + "name": "apps-prod" + } + }, + "labels": { + "constant_value": { + "Environment": "Production" + } + }, + "name": { + "constant_value": "apps-prod" + } + } + ] + }, + "schema_version": 0 + }, + { + "address": "kubernetes_namespace.staging", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "staging", + "provider_config_key": "kubernetes", + "expressions": { + "metadata": [ + { + "annotations": { + "constant_value": { + "name": "apps-staging" + } + }, + "labels": { + "constant_value": { + "Environment": "Staging" + } + }, + "name": { + "constant_value": "apps-staging" + } + } + ] + }, + "schema_version": 0 + }, + { + "address": "kubernetes_namespace.tst", + "mode": "managed", + "type": "kubernetes_namespace", + "name": "tst", + "provider_config_key": "kubernetes", + "expressions": { + "metadata": [ + { + "annotations": { + "constant_value": { + "name": "apps-tst" + } + }, + "labels": { + "constant_value": { + "Environment": "Test" + } + }, + "name": { + "constant_value": "apps-tst" + } + } + ] + }, + "schema_version": 0 + }, + { + "address": "data.azuread_client_config.current", + "mode": "data", + "type": "azuread_client_config", + "name": "current", + "provider_config_key": "azuread", + "schema_version": 0 + }, + { + "address": "data.azuread_domains.example", + "mode": "data", + "type": "azuread_domains", + "name": "example", + "provider_config_key": "azuread", + "expressions": { + "only_initial": { + "constant_value": true + } + }, + "schema_version": 0 + }, + { + "address": "data.azurerm_subscription.current", + "mode": "data", + "type": "azurerm_subscription", + "name": "current", + "provider_config_key": "azurerm", + "schema_version": 0 + } + ], + "variables": { + "grafana_admin_password": { + "description": "Admin password to access Grafana dashboard" + }, + "grafana_admin_user": { + "description": "Admin user to access Grafana dashboard" + }, + "k8s_cluster_name": { + "description": "AKS cluster name" + }, + "k8s_dns_prefix": { + "description": "DNS prefix for AKS Cluster" + }, + "k8s_location": { + "description": "Resourse group location for AKS cluster" + }, + "k8s_node_count": { + "description": "Node count for AKS Cluster" + }, + "k8s_resource_group": { + "description": "Resourse group for AKS cluster" + }, + "k8s_vm_size": { + "description": "Name VM for AKS Cluster" + } + } + } + } +} diff --git a/deploy/release-deploy/clouds/azure/terraform/tls-issuer.sh b/deploy/release-deploy/clouds/azure/terraform/tls-issuer.sh new file mode 100644 index 00000000..4e51b9de --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/tls-issuer.sh @@ -0,0 +1,91 @@ +LETS_ENCRYPT_EMAIL=o2bionics@hotmail.com +cat <<-EOF | kubectl apply --namespace default -f - +apiVersion: cert-manager.io/v1 + +kind: ClusterIssuer +metadata: + name: letsencrypt +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: $LETS_ENCRYPT_EMAIL + privateKeySecretRef: + name: letsencrypt + solvers: + - http01: + ingress: + class: nginx +EOF + +# cat <<-EOF | kubectl apply --namespace apps-prod -f - +# apiVersion: cert-manager.io/v1 + +# kind: ClusterIssuer +# metadata: +# name: letsencrypt-prod +# spec: +# acme: +# server: https://acme-v02.api.letsencrypt.org/directory +# email: $LETS_ENCRYPT_EMAIL +# privateKeySecretRef: +# name: letsencrypt-prod +# solvers: +# - http01: +# ingress: +# class: nginx +# EOF + +# cat <<-EOF | kubectl apply --namespace apps-staging -f - +# apiVersion: cert-manager.io/v1 + +# kind: ClusterIssuer +# metadata: +# name: letsencrypt-staging +# spec: +# acme: +# server: https://acme-v02.api.letsencrypt.org/directory +# email: $LETS_ENCRYPT_EMAIL +# privateKeySecretRef: +# name: letsencrypt-staging +# solvers: +# - http01: +# ingress: +# class: nginx +# EOF + +# cat <<-EOF | kubectl apply --namespace apps-dev -f - +# apiVersion: cert-manager.io/v1 + +# kind: ClusterIssuer +# metadata: +# name: letsencrypt-dev +# spec: +# acme: +# server: https://acme-v02.api.letsencrypt.org/directory +# email: $LETS_ENCRYPT_EMAIL +# privateKeySecretRef: +# name: letsencrypt-dev +# solvers: +# - http01: +# ingress: +# class: nginx +# EOF + + +# cat <<-EOF | kubectl apply --namespace apps-devops -f - +# apiVersion: cert-manager.io/v1 + +# kind: ClusterIssuer +# metadata: +# name: letsencrypt-devops +# spec: +# acme: +# server: https://acme-v02.api.letsencrypt.org/directory +# email: $LETS_ENCRYPT_EMAIL +# privateKeySecretRef: +# name: letsencrypt-devops +# solvers: +# - http01: +# ingress: +# class: nginx +# EOF \ No newline at end of file diff --git a/deploy/release-deploy/clouds/azure/terraform/variables.tf b/deploy/release-deploy/clouds/azure/terraform/variables.tf new file mode 100644 index 00000000..1806f5e6 --- /dev/null +++ b/deploy/release-deploy/clouds/azure/terraform/variables.tf @@ -0,0 +1,39 @@ +variable "k8s_resource_group" { + type = string + description = "Resourse group for AKS cluster" +} + +variable "k8s_location" { + type = string + description = "Resourse group location for AKS cluster" +} +variable "k8s_cluster_name" { + type = string + description = "AKS cluster name" +} + +variable "k8s_dns_prefix" { + type = string + description = "DNS prefix for AKS Cluster" +} + +variable "k8s_vm_size" { + type = string + description = "Name VM for AKS Cluster" +} + + +variable "k8s_node_count" { + type = number + description = "Node count for AKS Cluster" +} + +variable "grafana_admin_user" { + type = string + description = "Admin user to access Grafana dashboard" +} + +variable "grafana_admin_password" { + type = string + description = "Admin password to access Grafana dashboard" +} \ No newline at end of file diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/.helmignore b/deploy/release-deploy/helm_charts/o2bus-webapp/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/.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/deploy/release-deploy/helm_charts/o2bus-webapp/Chart.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/Chart.yaml new file mode 100644 index 00000000..0cbdbb0d --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: o2bus-webapp +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/NOTES.txt b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/NOTES.txt new file mode 100644 index 00000000..aed5fcb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "o2bus-webapp.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 --namespace {{ .Release.Namespace }} svc -w {{ include "o2bus-webapp.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "o2bus-webapp.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "o2bus-webapp.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/_helpers.tpl new file mode 100644 index 00000000..cc6f8599 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "o2bus-webapp.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 "o2bus-webapp.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 "o2bus-webapp.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "o2bus-webapp.labels" -}} +helm.sh/chart: {{ include "o2bus-webapp.chart" . }} +{{ include "o2bus-webapp.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "o2bus-webapp.selectorLabels" -}} +app.kubernetes.io/name: {{ include "o2bus-webapp.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "o2bus-webapp.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "o2bus-webapp.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/deployment.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/deployment.yaml new file mode 100644 index 00000000..8451c3e8 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "o2bus-webapp.fullname" . }} + labels: + {{- include "o2bus-webapp.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "o2bus-webapp.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "o2bus-webapp.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "o2bus-webapp.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/hpa.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/hpa.yaml new file mode 100644 index 00000000..7108cde0 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "o2bus-webapp.fullname" . }} + labels: + {{- include "o2bus-webapp.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "o2bus-webapp.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/ingress.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/ingress.yaml new file mode 100644 index 00000000..17f0ddcf --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "o2bus-webapp.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "o2bus-webapp.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/service.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/service.yaml new file mode 100644 index 00000000..421b41ad --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "o2bus-webapp.fullname" . }} + labels: + {{- include "o2bus-webapp.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "o2bus-webapp.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/serviceaccount.yaml new file mode 100644 index 00000000..2ae3dac0 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "o2bus-webapp.serviceAccountName" . }} + labels: + {{- include "o2bus-webapp.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/tests/test-connection.yaml new file mode 100644 index 00000000..c109ebc0 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "o2bus-webapp.fullname" . }}-test-connection" + labels: + {{- include "o2bus-webapp.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "o2bus-webapp.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml new file mode 100644 index 00000000..7f621a96 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml @@ -0,0 +1,83 @@ +# Default values for o2bus-webapp. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: o2bus-com-tls + hosts: + - o2bus.com + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/.helmignore b/deploy/release-deploy/helm_charts/o2nextgen-auth/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/.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/deploy/release-deploy/helm_charts/o2nextgen-auth/Chart.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/Chart.yaml new file mode 100644 index 00000000..215c9707 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: o2nextgen-auth +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/NOTES.txt b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/NOTES.txt new file mode 100644 index 00000000..91837f5b --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "o2nextgen-auth.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 --namespace {{ .Release.Namespace }} svc -w {{ include "o2nextgen-auth.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "o2nextgen-auth.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "o2nextgen-auth.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/_helpers.tpl new file mode 100644 index 00000000..f682c4ef --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "o2nextgen-auth.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 "o2nextgen-auth.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 "o2nextgen-auth.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "o2nextgen-auth.labels" -}} +helm.sh/chart: {{ include "o2nextgen-auth.chart" . }} +{{ include "o2nextgen-auth.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "o2nextgen-auth.selectorLabels" -}} +app.kubernetes.io/name: {{ include "o2nextgen-auth.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "o2nextgen-auth.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "o2nextgen-auth.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/deployment.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/deployment.yaml new file mode 100644 index 00000000..95383dc9 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "o2nextgen-auth.fullname" . }} + labels: + {{- include "o2nextgen-auth.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "o2nextgen-auth.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "o2nextgen-auth.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "o2nextgen-auth.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/hpa.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/hpa.yaml new file mode 100644 index 00000000..fadc2938 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "o2nextgen-auth.fullname" . }} + labels: + {{- include "o2nextgen-auth.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "o2nextgen-auth.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/ingress.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/ingress.yaml new file mode 100644 index 00000000..342ae592 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "o2nextgen-auth.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "o2nextgen-auth.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/service.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/service.yaml new file mode 100644 index 00000000..1063ec9e --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "o2nextgen-auth.fullname" . }} + labels: + {{- include "o2nextgen-auth.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "o2nextgen-auth.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/serviceaccount.yaml new file mode 100644 index 00000000..5a01dc72 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "o2nextgen-auth.serviceAccountName" . }} + labels: + {{- include "o2nextgen-auth.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/tests/test-connection.yaml new file mode 100644 index 00000000..94158418 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "o2nextgen-auth.fullname" . }}-test-connection" + labels: + {{- include "o2nextgen-auth.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "o2nextgen-auth.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml new file mode 100644 index 00000000..68695970 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml @@ -0,0 +1,89 @@ +# Default values for o2nextgen-auth. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: #{} + nginx.ingress.kubernetes.io/ingress.class: nginx + cert-manager.io/cluster-issuer: letsencrypt + nginx.ingress.kubernetes.io/proxy-body-size: 16m + nginx.ingress.kubernetes.io/client-body-buffer-size: 16m + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: auth.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-identity-o2bus + hosts: + - auth.o2bus.com + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} From a21382d5efd6d8941fd3e5e2bda215e066fff0c0 Mon Sep 17 00:00:00 2001 From: Denis Prokharhcyk Date: Thu, 29 Sep 2022 11:48:47 +0300 Subject: [PATCH 3/6] feat(issue-433): setup dns-external addon for aks --- .../clouds/azure/terraform/main.tf | 66 ++++++++++++++----- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/deploy/release-deploy/clouds/azure/terraform/main.tf b/deploy/release-deploy/clouds/azure/terraform/main.tf index ec506329..8d5d2ce7 100644 --- a/deploy/release-deploy/clouds/azure/terraform/main.tf +++ b/deploy/release-deploy/clouds/azure/terraform/main.tf @@ -98,7 +98,8 @@ resource "azurerm_kubernetes_cluster" "o2nextgen-aks" { identity { type = "SystemAssigned" } - # network_profile { + azure_policy_enabled = true + # # network_profile { # load_balancer_sku = "Standard" # network_plugin = "kubenet" # azure (CNI) # } @@ -191,7 +192,7 @@ resource "azuread_application" "example" { depends_on = [ azurerm_dns_zone.primary-dns-zone ] - display_name = "External-DNS-SP" + display_name = "external-dns" owners = [data.azuread_client_config.current.object_id] } @@ -221,6 +222,7 @@ resource "azuread_service_principal" "current" { # special = true # } resource "azuread_application_password" "current" { + display_name = "rbac" application_object_id = azuread_application.example.object_id } # resource "time_rotating" "example" { @@ -376,7 +378,7 @@ resource "helm_release" "nginx-ingress-controller" { } set { name = "controller.autoscaling.maxReplicas" - value = "2" + value = "1" } } @@ -430,20 +432,42 @@ resource "helm_release" "prometheus-stack" { value = var.grafana_admin_password } } +locals { + dnsValues = < Date: Thu, 29 Sep 2022 15:18:51 +0300 Subject: [PATCH 4/6] feat(issue-433): update code for external-dns+ cert-manager --- deploy/release-deploy/clouds/azure/terraform/main.tf | 1 + .../release-deploy/helm_charts/o2bus-webapp/values.yaml | 4 ++-- .../helm_charts/o2nextgen-auth/values.yaml | 9 +++------ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/deploy/release-deploy/clouds/azure/terraform/main.tf b/deploy/release-deploy/clouds/azure/terraform/main.tf index 8d5d2ce7..89530ae3 100644 --- a/deploy/release-deploy/clouds/azure/terraform/main.tf +++ b/deploy/release-deploy/clouds/azure/terraform/main.tf @@ -619,6 +619,7 @@ resource "helm_release" "o2nextgen-auth" { repository = "../../../helm_charts" chart = "o2nextgen-auth" } + resource "helm_release" "o2bus-webapp" { name = "o2bus-webapp" namespace = "apps-prod" diff --git a/deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml b/deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml index 7f621a96..65a47277 100644 --- a/deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml +++ b/deploy/release-deploy/helm_charts/o2bus-webapp/values.yaml @@ -53,11 +53,11 @@ ingress: - path: / pathType: ImplementationSpecific tls: - - secretName: o2bus-com-tls + - secretName: tls-secret-o2bus hosts: - o2bus.com -resources: {} +resources: #{} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following diff --git a/deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml b/deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml index 68695970..142783f5 100644 --- a/deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml +++ b/deploy/release-deploy/helm_charts/o2nextgen-auth/values.yaml @@ -43,12 +43,9 @@ service: ingress: enabled: true className: "" - annotations: #{} - nginx.ingress.kubernetes.io/ingress.class: nginx + annotations: cert-manager.io/cluster-issuer: letsencrypt - nginx.ingress.kubernetes.io/proxy-body-size: 16m - nginx.ingress.kubernetes.io/client-body-buffer-size: 16m - # kubernetes.io/ingress.class: nginx + kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" hosts: - host: auth.o2bus.com @@ -63,7 +60,7 @@ ingress: # hosts: # - chart-example.local -resources: {} +resources: #{} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following From 89dfa6ef9fd385b86b3fd8abc698edcbdd7f02bd Mon Sep 17 00:00:00 2001 From: Denis Prokharhcyk Date: Thu, 29 Sep 2022 23:39:06 +0300 Subject: [PATCH 5/6] feat(issue-433): update terraform+devops azure --- .../clouds/azure/terraform/main.tf | 7 +- .../helm_charts/cgen-webapp/.helmignore | 23 +++++ .../helm_charts/cgen-webapp/Chart.yaml | 24 +++++ .../cgen-webapp/templates/NOTES.txt | 22 +++++ .../cgen-webapp/templates/_helpers.tpl | 62 +++++++++++++ .../cgen-webapp/templates/deployment.yaml | 68 ++++++++++++++ .../cgen-webapp/templates/hpa.yaml | 28 ++++++ .../cgen-webapp/templates/ingress.yaml | 61 ++++++++++++ .../cgen-webapp/templates/service.yaml | 15 +++ .../cgen-webapp/templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 +++ .../helm_charts/cgen-webapp/values.yaml | 92 +++++++++++++++++++ 12 files changed, 428 insertions(+), 1 deletion(-) create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/.helmignore create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-webapp/values.yaml diff --git a/deploy/release-deploy/clouds/azure/terraform/main.tf b/deploy/release-deploy/clouds/azure/terraform/main.tf index 89530ae3..fe8a3874 100644 --- a/deploy/release-deploy/clouds/azure/terraform/main.tf +++ b/deploy/release-deploy/clouds/azure/terraform/main.tf @@ -627,4 +627,9 @@ resource "helm_release" "o2bus-webapp" { chart = "o2bus-webapp" } - +resource "helm_release" "cgen-webapp" { + name = "cgen-webapp" + namespace = "apps-prod" + repository = "../../../helm_charts" + chart = "cgen-webapp" +} \ No newline at end of file diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/.helmignore b/deploy/release-deploy/helm_charts/cgen-webapp/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/.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/deploy/release-deploy/helm_charts/cgen-webapp/Chart.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/Chart.yaml new file mode 100644 index 00000000..af145d4c --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: cgen-webapp +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/NOTES.txt b/deploy/release-deploy/helm_charts/cgen-webapp/templates/NOTES.txt new file mode 100644 index 00000000..1d7fe29f --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "cgen-webapp.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 --namespace {{ .Release.Namespace }} svc -w {{ include "cgen-webapp.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "cgen-webapp.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "cgen-webapp.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/cgen-webapp/templates/_helpers.tpl new file mode 100644 index 00000000..6eec401e --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "cgen-webapp.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 "cgen-webapp.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 "cgen-webapp.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "cgen-webapp.labels" -}} +helm.sh/chart: {{ include "cgen-webapp.chart" . }} +{{ include "cgen-webapp.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "cgen-webapp.selectorLabels" -}} +app.kubernetes.io/name: {{ include "cgen-webapp.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "cgen-webapp.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "cgen-webapp.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/deployment.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/templates/deployment.yaml new file mode 100644 index 00000000..0c3f58e6 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/deployment.yaml @@ -0,0 +1,68 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "cgen-webapp.fullname" . }} + labels: + {{- include "cgen-webapp.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "cgen-webapp.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "cgen-webapp.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "cgen-webapp.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + {{- if .Values.env.values -}} + {{- range .Values.env.values }} + - name: {{ .name }} + value: {{ .value | quote }} + {{- end }} + {{- end }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/hpa.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/templates/hpa.yaml new file mode 100644 index 00000000..1d830f63 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "cgen-webapp.fullname" . }} + labels: + {{- include "cgen-webapp.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "cgen-webapp.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/ingress.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/templates/ingress.yaml new file mode 100644 index 00000000..291f03c8 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "cgen-webapp.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "cgen-webapp.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/service.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/templates/service.yaml new file mode 100644 index 00000000..a9cbe875 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "cgen-webapp.fullname" . }} + labels: + {{- include "cgen-webapp.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "cgen-webapp.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/templates/serviceaccount.yaml new file mode 100644 index 00000000..5d5bd7f6 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "cgen-webapp.serviceAccountName" . }} + labels: + {{- include "cgen-webapp.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/templates/tests/test-connection.yaml new file mode 100644 index 00000000..8d60c646 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "cgen-webapp.fullname" . }}-test-connection" + labels: + {{- include "cgen-webapp.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "cgen-webapp.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/cgen-webapp/values.yaml b/deploy/release-deploy/helm_charts/cgen-webapp/values.yaml new file mode 100644 index 00000000..c356bf24 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-webapp/values.yaml @@ -0,0 +1,92 @@ +# Default values for cgen-webapp. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: o2nextgen.azurecr.io/cgen-webapp + pullPolicy: IfNotPresent + + # Overrides the image tag whose default is the chart appVersion. + tag: "1.0.138-dev" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: cgen.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-o2bus-cgen + hosts: + - cgen.o2bus.com +env: + values: + - name: CHOKIDAR_USEPOLLING + value: true + - name: REACT_APP_NAME + value: dockerEnv + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} From c938bc65e44de7f3ef2dbca750cc9917b1ee9253 Mon Sep 17 00:00:00 2001 From: Denis Prokharhcyk Date: Fri, 30 Sep 2022 08:29:38 +0300 Subject: [PATCH 6/6] feat(issue-433): update helm charts --- .../azure/terraform/deploy-infastructure.sh | 3 +- .../clouds/azure/terraform/main.tf | 40 ++++----- .../helm_charts/cgen-api/.helmignore | 23 +++++ .../helm_charts/cgen-api/Chart.yaml | 24 ++++++ .../helm_charts/cgen-api/templates/NOTES.txt | 22 +++++ .../cgen-api/templates/_helpers.tpl | 62 ++++++++++++++ .../cgen-api/templates/deployment.yaml | 61 ++++++++++++++ .../helm_charts/cgen-api/templates/hpa.yaml | 28 +++++++ .../cgen-api/templates/ingress.yaml | 61 ++++++++++++++ .../cgen-api/templates/service.yaml | 15 ++++ .../cgen-api/templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../helm_charts/cgen-api/values copy.yaml | 83 +++++++++++++++++++ .../helm_charts/cgen-api/values.yaml | 82 ++++++++++++++++++ .../helm_charts/esender-api/.helmignore | 23 +++++ .../helm_charts/esender-api/Chart.yaml | 24 ++++++ .../esender-api/templates/NOTES.txt | 22 +++++ .../esender-api/templates/_helpers.tpl | 62 ++++++++++++++ .../esender-api/templates/deployment.yaml | 61 ++++++++++++++ .../esender-api/templates/hpa.yaml | 28 +++++++ .../esender-api/templates/ingress.yaml | 61 ++++++++++++++ .../esender-api/templates/service.yaml | 15 ++++ .../esender-api/templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../helm_charts/esender-api/values.yaml | 83 +++++++++++++++++++ .../helm_charts/goevent-api/.helmignore | 23 +++++ .../helm_charts/goevent-api/Chart.yaml | 24 ++++++ .../goevent-api/templates/NOTES.txt | 22 +++++ .../goevent-api/templates/_helpers.tpl | 62 ++++++++++++++ .../goevent-api/templates/deployment.yaml | 61 ++++++++++++++ .../goevent-api/templates/hpa.yaml | 28 +++++++ .../goevent-api/templates/ingress.yaml | 61 ++++++++++++++ .../goevent-api/templates/service.yaml | 15 ++++ .../goevent-api/templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../helm_charts/goevent-api/values.yaml | 83 +++++++++++++++++++ .../o2nextgen-webportal/.helmignore | 23 +++++ .../o2nextgen-webportal/Chart.yaml | 24 ++++++ .../o2nextgen-webportal/templates/NOTES.txt | 22 +++++ .../templates/_helpers.tpl | 62 ++++++++++++++ .../templates/deployment.yaml | 61 ++++++++++++++ .../o2nextgen-webportal/templates/hpa.yaml | 28 +++++++ .../templates/ingress.yaml | 61 ++++++++++++++ .../templates/service.yaml | 15 ++++ .../templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../o2nextgen-webportal/values.yaml | 82 ++++++++++++++++++ .../helm_charts/ontracker-api/.helmignore | 23 +++++ .../helm_charts/ontracker-api/Chart.yaml | 24 ++++++ .../ontracker-api/templates/NOTES.txt | 22 +++++ .../ontracker-api/templates/_helpers.tpl | 62 ++++++++++++++ .../ontracker-api/templates/deployment.yaml | 61 ++++++++++++++ .../ontracker-api/templates/hpa.yaml | 28 +++++++ .../ontracker-api/templates/ingress.yaml | 61 ++++++++++++++ .../ontracker-api/templates/service.yaml | 15 ++++ .../templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../helm_charts/ontracker-api/values.yaml | 82 ++++++++++++++++++ .../helm_charts/slink-api/.helmignore | 23 +++++ .../helm_charts/slink-api/Chart.yaml | 24 ++++++ .../helm_charts/slink-api/templates/NOTES.txt | 22 +++++ .../slink-api/templates/_helpers.tpl | 62 ++++++++++++++ .../slink-api/templates/deployment.yaml | 61 ++++++++++++++ .../helm_charts/slink-api/templates/hpa.yaml | 28 +++++++ .../slink-api/templates/ingress.yaml | 61 ++++++++++++++ .../slink-api/templates/service.yaml | 15 ++++ .../slink-api/templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../helm_charts/slink-api/values.yaml | 83 +++++++++++++++++++ .../helm_charts/smalltalk-api/.helmignore | 23 +++++ .../helm_charts/smalltalk-api/Chart.yaml | 24 ++++++ .../smalltalk-api/templates/NOTES.txt | 22 +++++ .../smalltalk-api/templates/_helpers.tpl | 62 ++++++++++++++ .../smalltalk-api/templates/deployment.yaml | 61 ++++++++++++++ .../smalltalk-api/templates/hpa.yaml | 28 +++++++ .../smalltalk-api/templates/ingress.yaml | 61 ++++++++++++++ .../smalltalk-api/templates/service.yaml | 15 ++++ .../templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../helm_charts/smalltalk-api/values.yaml | 82 ++++++++++++++++++ .../smartsubscriber-api/.helmignore | 23 +++++ .../smartsubscriber-api/Chart.yaml | 24 ++++++ .../smartsubscriber-api/templates/NOTES.txt | 22 +++++ .../templates/_helpers.tpl | 62 ++++++++++++++ .../templates/deployment.yaml | 61 ++++++++++++++ .../smartsubscriber-api/templates/hpa.yaml | 28 +++++++ .../templates/ingress.yaml | 61 ++++++++++++++ .../templates/service.yaml | 15 ++++ .../templates/serviceaccount.yaml | 12 +++ .../templates/tests/test-connection.yaml | 15 ++++ .../smartsubscriber-api/values.yaml | 82 ++++++++++++++++++ 91 files changed, 3348 insertions(+), 21 deletions(-) create mode 100644 deploy/release-deploy/helm_charts/cgen-api/.helmignore create mode 100644 deploy/release-deploy/helm_charts/cgen-api/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/values copy.yaml create mode 100644 deploy/release-deploy/helm_charts/cgen-api/values.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/.helmignore create mode 100644 deploy/release-deploy/helm_charts/esender-api/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/esender-api/values.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/.helmignore create mode 100644 deploy/release-deploy/helm_charts/goevent-api/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/goevent-api/values.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/.helmignore create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/o2nextgen-webportal/values.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/.helmignore create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/ontracker-api/values.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/.helmignore create mode 100644 deploy/release-deploy/helm_charts/slink-api/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/slink-api/values.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/.helmignore create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/smalltalk-api/values.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/.helmignore create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/Chart.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/NOTES.txt create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/_helpers.tpl create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/deployment.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/hpa.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/ingress.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/service.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/serviceaccount.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/templates/tests/test-connection.yaml create mode 100644 deploy/release-deploy/helm_charts/smartsubscriber-api/values.yaml diff --git a/deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh b/deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh index 2552da0c..3a4665f6 100644 --- a/deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh +++ b/deploy/release-deploy/clouds/azure/terraform/deploy-infastructure.sh @@ -52,4 +52,5 @@ kubectl get ns # kube-system Active 8m58s kubectl get deploy -A -kubectl get all --all-namespaces \ No newline at end of file +kubectl get all --all-namespaces +sh ./tls-issuer.sh \ No newline at end of file diff --git a/deploy/release-deploy/clouds/azure/terraform/main.tf b/deploy/release-deploy/clouds/azure/terraform/main.tf index fe8a3874..187f2b68 100644 --- a/deploy/release-deploy/clouds/azure/terraform/main.tf +++ b/deploy/release-deploy/clouds/azure/terraform/main.tf @@ -613,23 +613,23 @@ resource "kubernetes_namespace" "devops" { # ============================= INSTALL APPLICATION ======================================= # ========================================================================================= -resource "helm_release" "o2nextgen-auth" { - name = "o2nextgen-auth" - namespace = "apps-prod" - repository = "../../../helm_charts" - chart = "o2nextgen-auth" -} - -resource "helm_release" "o2bus-webapp" { - name = "o2bus-webapp" - namespace = "apps-prod" - repository = "../../../helm_charts" - chart = "o2bus-webapp" -} - -resource "helm_release" "cgen-webapp" { - name = "cgen-webapp" - namespace = "apps-prod" - repository = "../../../helm_charts" - chart = "cgen-webapp" -} \ No newline at end of file +# resource "helm_release" "o2nextgen-auth" { +# name = "o2nextgen-auth" +# namespace = "apps-prod" +# repository = "../../../helm_charts" +# chart = "o2nextgen-auth" +# } + +# resource "helm_release" "o2bus-webapp" { +# name = "o2bus-webapp" +# namespace = "apps-prod" +# repository = "../../../helm_charts" +# chart = "o2bus-webapp" +# } + +# resource "helm_release" "cgen-webapp" { +# name = "cgen-webapp" +# namespace = "apps-prod" +# repository = "../../../helm_charts" +# chart = "cgen-webapp" +# } \ No newline at end of file diff --git a/deploy/release-deploy/helm_charts/cgen-api/.helmignore b/deploy/release-deploy/helm_charts/cgen-api/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/.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/deploy/release-deploy/helm_charts/cgen-api/Chart.yaml b/deploy/release-deploy/helm_charts/cgen-api/Chart.yaml new file mode 100644 index 00000000..84cc1efa --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: cgen-api +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/NOTES.txt b/deploy/release-deploy/helm_charts/cgen-api/templates/NOTES.txt new file mode 100644 index 00000000..72f9354f --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "cgen-api.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 --namespace {{ .Release.Namespace }} svc -w {{ include "cgen-api.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "cgen-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "cgen-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/cgen-api/templates/_helpers.tpl new file mode 100644 index 00000000..0e559756 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "cgen-api.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 "cgen-api.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 "cgen-api.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "cgen-api.labels" -}} +helm.sh/chart: {{ include "cgen-api.chart" . }} +{{ include "cgen-api.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "cgen-api.selectorLabels" -}} +app.kubernetes.io/name: {{ include "cgen-api.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "cgen-api.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "cgen-api.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/deployment.yaml b/deploy/release-deploy/helm_charts/cgen-api/templates/deployment.yaml new file mode 100644 index 00000000..afd50f2a --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "cgen-api.fullname" . }} + labels: + {{- include "cgen-api.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "cgen-api.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "cgen-api.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "cgen-api.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/hpa.yaml b/deploy/release-deploy/helm_charts/cgen-api/templates/hpa.yaml new file mode 100644 index 00000000..85a83a7d --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "cgen-api.fullname" . }} + labels: + {{- include "cgen-api.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "cgen-api.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/ingress.yaml b/deploy/release-deploy/helm_charts/cgen-api/templates/ingress.yaml new file mode 100644 index 00000000..5d3be969 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "cgen-api.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "cgen-api.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/service.yaml b/deploy/release-deploy/helm_charts/cgen-api/templates/service.yaml new file mode 100644 index 00000000..a99e0ae9 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "cgen-api.fullname" . }} + labels: + {{- include "cgen-api.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "cgen-api.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/cgen-api/templates/serviceaccount.yaml new file mode 100644 index 00000000..d719c3ae --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "cgen-api.serviceAccountName" . }} + labels: + {{- include "cgen-api.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/cgen-api/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/cgen-api/templates/tests/test-connection.yaml new file mode 100644 index 00000000..1c855093 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "cgen-api.fullname" . }}-test-connection" + labels: + {{- include "cgen-api.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "cgen-api.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/cgen-api/values copy.yaml b/deploy/release-deploy/helm_charts/cgen-api/values copy.yaml new file mode 100644 index 00000000..3796ada3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/values copy.yaml @@ -0,0 +1,83 @@ +# Default values for esender-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: cgen-api.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-o2bus-cgen-api + hosts: + - cgen-api.o2bus.com + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/cgen-api/values.yaml b/deploy/release-deploy/helm_charts/cgen-api/values.yaml new file mode 100644 index 00000000..f9466f22 --- /dev/null +++ b/deploy/release-deploy/helm_charts/cgen-api/values.yaml @@ -0,0 +1,82 @@ +# Default values for cgen-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/esender-api/.helmignore b/deploy/release-deploy/helm_charts/esender-api/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/.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/deploy/release-deploy/helm_charts/esender-api/Chart.yaml b/deploy/release-deploy/helm_charts/esender-api/Chart.yaml new file mode 100644 index 00000000..18eb477a --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: esender-api +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/NOTES.txt b/deploy/release-deploy/helm_charts/esender-api/templates/NOTES.txt new file mode 100644 index 00000000..e67e2813 --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "esender-api.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 --namespace {{ .Release.Namespace }} svc -w {{ include "esender-api.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "esender-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "esender-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/esender-api/templates/_helpers.tpl new file mode 100644 index 00000000..584e8e20 --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "esender-api.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 "esender-api.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 "esender-api.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "esender-api.labels" -}} +helm.sh/chart: {{ include "esender-api.chart" . }} +{{ include "esender-api.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "esender-api.selectorLabels" -}} +app.kubernetes.io/name: {{ include "esender-api.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "esender-api.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "esender-api.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/deployment.yaml b/deploy/release-deploy/helm_charts/esender-api/templates/deployment.yaml new file mode 100644 index 00000000..fbf062bd --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "esender-api.fullname" . }} + labels: + {{- include "esender-api.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "esender-api.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "esender-api.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "esender-api.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/hpa.yaml b/deploy/release-deploy/helm_charts/esender-api/templates/hpa.yaml new file mode 100644 index 00000000..5b508fac --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "esender-api.fullname" . }} + labels: + {{- include "esender-api.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "esender-api.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/ingress.yaml b/deploy/release-deploy/helm_charts/esender-api/templates/ingress.yaml new file mode 100644 index 00000000..10cc9266 --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "esender-api.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "esender-api.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/service.yaml b/deploy/release-deploy/helm_charts/esender-api/templates/service.yaml new file mode 100644 index 00000000..055bff95 --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "esender-api.fullname" . }} + labels: + {{- include "esender-api.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "esender-api.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/esender-api/templates/serviceaccount.yaml new file mode 100644 index 00000000..9d24c7ef --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "esender-api.serviceAccountName" . }} + labels: + {{- include "esender-api.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/esender-api/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/esender-api/templates/tests/test-connection.yaml new file mode 100644 index 00000000..01606509 --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "esender-api.fullname" . }}-test-connection" + labels: + {{- include "esender-api.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "esender-api.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/esender-api/values.yaml b/deploy/release-deploy/helm_charts/esender-api/values.yaml new file mode 100644 index 00000000..009da3a5 --- /dev/null +++ b/deploy/release-deploy/helm_charts/esender-api/values.yaml @@ -0,0 +1,83 @@ +# Default values for esender-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: esender.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-o2bus-esender + hosts: + - esender.o2bus.com + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/goevent-api/.helmignore b/deploy/release-deploy/helm_charts/goevent-api/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/.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/deploy/release-deploy/helm_charts/goevent-api/Chart.yaml b/deploy/release-deploy/helm_charts/goevent-api/Chart.yaml new file mode 100644 index 00000000..125ad507 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: goevent-api +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/NOTES.txt b/deploy/release-deploy/helm_charts/goevent-api/templates/NOTES.txt new file mode 100644 index 00000000..b87bd851 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "goevent-api.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 --namespace {{ .Release.Namespace }} svc -w {{ include "goevent-api.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "goevent-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "goevent-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/goevent-api/templates/_helpers.tpl new file mode 100644 index 00000000..1f2ea48f --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "goevent-api.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 "goevent-api.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 "goevent-api.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "goevent-api.labels" -}} +helm.sh/chart: {{ include "goevent-api.chart" . }} +{{ include "goevent-api.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "goevent-api.selectorLabels" -}} +app.kubernetes.io/name: {{ include "goevent-api.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "goevent-api.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "goevent-api.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/deployment.yaml b/deploy/release-deploy/helm_charts/goevent-api/templates/deployment.yaml new file mode 100644 index 00000000..58c42e85 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "goevent-api.fullname" . }} + labels: + {{- include "goevent-api.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "goevent-api.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "goevent-api.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "goevent-api.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/hpa.yaml b/deploy/release-deploy/helm_charts/goevent-api/templates/hpa.yaml new file mode 100644 index 00000000..8344d4d1 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "goevent-api.fullname" . }} + labels: + {{- include "goevent-api.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "goevent-api.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/ingress.yaml b/deploy/release-deploy/helm_charts/goevent-api/templates/ingress.yaml new file mode 100644 index 00000000..6857e4fa --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "goevent-api.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "goevent-api.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/service.yaml b/deploy/release-deploy/helm_charts/goevent-api/templates/service.yaml new file mode 100644 index 00000000..fbf9e342 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "goevent-api.fullname" . }} + labels: + {{- include "goevent-api.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "goevent-api.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/goevent-api/templates/serviceaccount.yaml new file mode 100644 index 00000000..c6a2a652 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "goevent-api.serviceAccountName" . }} + labels: + {{- include "goevent-api.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/goevent-api/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/goevent-api/templates/tests/test-connection.yaml new file mode 100644 index 00000000..b952cdd5 --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "goevent-api.fullname" . }}-test-connection" + labels: + {{- include "goevent-api.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "goevent-api.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/goevent-api/values.yaml b/deploy/release-deploy/helm_charts/goevent-api/values.yaml new file mode 100644 index 00000000..ae16d71e --- /dev/null +++ b/deploy/release-deploy/helm_charts/goevent-api/values.yaml @@ -0,0 +1,83 @@ +# Default values for goevent-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: goevent-api.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-o2bus-goevent-api + hosts: + - goevent-api.o2bus.com + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/.helmignore b/deploy/release-deploy/helm_charts/o2nextgen-webportal/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/.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/deploy/release-deploy/helm_charts/o2nextgen-webportal/Chart.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/Chart.yaml new file mode 100644 index 00000000..ace5eba3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: o2nextgen-webportal +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/NOTES.txt b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/NOTES.txt new file mode 100644 index 00000000..108ae9eb --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "o2nextgen-webportal.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 --namespace {{ .Release.Namespace }} svc -w {{ include "o2nextgen-webportal.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "o2nextgen-webportal.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "o2nextgen-webportal.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/_helpers.tpl new file mode 100644 index 00000000..ed85c49e --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "o2nextgen-webportal.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 "o2nextgen-webportal.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 "o2nextgen-webportal.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "o2nextgen-webportal.labels" -}} +helm.sh/chart: {{ include "o2nextgen-webportal.chart" . }} +{{ include "o2nextgen-webportal.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "o2nextgen-webportal.selectorLabels" -}} +app.kubernetes.io/name: {{ include "o2nextgen-webportal.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "o2nextgen-webportal.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "o2nextgen-webportal.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/deployment.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/deployment.yaml new file mode 100644 index 00000000..4dcdff13 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "o2nextgen-webportal.fullname" . }} + labels: + {{- include "o2nextgen-webportal.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "o2nextgen-webportal.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "o2nextgen-webportal.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "o2nextgen-webportal.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/hpa.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/hpa.yaml new file mode 100644 index 00000000..bca9ed16 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "o2nextgen-webportal.fullname" . }} + labels: + {{- include "o2nextgen-webportal.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "o2nextgen-webportal.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/ingress.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/ingress.yaml new file mode 100644 index 00000000..aa093531 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "o2nextgen-webportal.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "o2nextgen-webportal.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/service.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/service.yaml new file mode 100644 index 00000000..fb6a69f2 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "o2nextgen-webportal.fullname" . }} + labels: + {{- include "o2nextgen-webportal.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "o2nextgen-webportal.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/serviceaccount.yaml new file mode 100644 index 00000000..b9f21f7b --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "o2nextgen-webportal.serviceAccountName" . }} + labels: + {{- include "o2nextgen-webportal.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/tests/test-connection.yaml new file mode 100644 index 00000000..65a04d68 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "o2nextgen-webportal.fullname" . }}-test-connection" + labels: + {{- include "o2nextgen-webportal.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "o2nextgen-webportal.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/o2nextgen-webportal/values.yaml b/deploy/release-deploy/helm_charts/o2nextgen-webportal/values.yaml new file mode 100644 index 00000000..4a5ae476 --- /dev/null +++ b/deploy/release-deploy/helm_charts/o2nextgen-webportal/values.yaml @@ -0,0 +1,82 @@ +# Default values for o2nextgen-webportal. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/.helmignore b/deploy/release-deploy/helm_charts/ontracker-api/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/.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/deploy/release-deploy/helm_charts/ontracker-api/Chart.yaml b/deploy/release-deploy/helm_charts/ontracker-api/Chart.yaml new file mode 100644 index 00000000..e1d0d734 --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: ontracker-api +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/NOTES.txt b/deploy/release-deploy/helm_charts/ontracker-api/templates/NOTES.txt new file mode 100644 index 00000000..b19f0d4e --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "ontracker-api.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 --namespace {{ .Release.Namespace }} svc -w {{ include "ontracker-api.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "ontracker-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "ontracker-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/ontracker-api/templates/_helpers.tpl new file mode 100644 index 00000000..0427191a --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "ontracker-api.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 "ontracker-api.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 "ontracker-api.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "ontracker-api.labels" -}} +helm.sh/chart: {{ include "ontracker-api.chart" . }} +{{ include "ontracker-api.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "ontracker-api.selectorLabels" -}} +app.kubernetes.io/name: {{ include "ontracker-api.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "ontracker-api.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "ontracker-api.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/deployment.yaml b/deploy/release-deploy/helm_charts/ontracker-api/templates/deployment.yaml new file mode 100644 index 00000000..ca136ee7 --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "ontracker-api.fullname" . }} + labels: + {{- include "ontracker-api.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "ontracker-api.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "ontracker-api.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "ontracker-api.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/hpa.yaml b/deploy/release-deploy/helm_charts/ontracker-api/templates/hpa.yaml new file mode 100644 index 00000000..e7e4bbff --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "ontracker-api.fullname" . }} + labels: + {{- include "ontracker-api.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "ontracker-api.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/ingress.yaml b/deploy/release-deploy/helm_charts/ontracker-api/templates/ingress.yaml new file mode 100644 index 00000000..93c19a67 --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "ontracker-api.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "ontracker-api.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/service.yaml b/deploy/release-deploy/helm_charts/ontracker-api/templates/service.yaml new file mode 100644 index 00000000..a59c7c1c --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "ontracker-api.fullname" . }} + labels: + {{- include "ontracker-api.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "ontracker-api.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/ontracker-api/templates/serviceaccount.yaml new file mode 100644 index 00000000..f3dcab6f --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "ontracker-api.serviceAccountName" . }} + labels: + {{- include "ontracker-api.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/ontracker-api/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/ontracker-api/templates/tests/test-connection.yaml new file mode 100644 index 00000000..71dd34a7 --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "ontracker-api.fullname" . }}-test-connection" + labels: + {{- include "ontracker-api.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "ontracker-api.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/ontracker-api/values.yaml b/deploy/release-deploy/helm_charts/ontracker-api/values.yaml new file mode 100644 index 00000000..2832b152 --- /dev/null +++ b/deploy/release-deploy/helm_charts/ontracker-api/values.yaml @@ -0,0 +1,82 @@ +# Default values for ontracker-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/slink-api/.helmignore b/deploy/release-deploy/helm_charts/slink-api/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/.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/deploy/release-deploy/helm_charts/slink-api/Chart.yaml b/deploy/release-deploy/helm_charts/slink-api/Chart.yaml new file mode 100644 index 00000000..ef62fa4f --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: slink-api +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/NOTES.txt b/deploy/release-deploy/helm_charts/slink-api/templates/NOTES.txt new file mode 100644 index 00000000..300ddceb --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "slink-api.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 --namespace {{ .Release.Namespace }} svc -w {{ include "slink-api.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "slink-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "slink-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/slink-api/templates/_helpers.tpl new file mode 100644 index 00000000..2650515d --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "slink-api.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 "slink-api.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 "slink-api.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "slink-api.labels" -}} +helm.sh/chart: {{ include "slink-api.chart" . }} +{{ include "slink-api.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "slink-api.selectorLabels" -}} +app.kubernetes.io/name: {{ include "slink-api.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "slink-api.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "slink-api.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/deployment.yaml b/deploy/release-deploy/helm_charts/slink-api/templates/deployment.yaml new file mode 100644 index 00000000..73de54d6 --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "slink-api.fullname" . }} + labels: + {{- include "slink-api.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "slink-api.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "slink-api.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "slink-api.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/hpa.yaml b/deploy/release-deploy/helm_charts/slink-api/templates/hpa.yaml new file mode 100644 index 00000000..46af6676 --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "slink-api.fullname" . }} + labels: + {{- include "slink-api.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "slink-api.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/ingress.yaml b/deploy/release-deploy/helm_charts/slink-api/templates/ingress.yaml new file mode 100644 index 00000000..cf416ad9 --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "slink-api.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "slink-api.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/service.yaml b/deploy/release-deploy/helm_charts/slink-api/templates/service.yaml new file mode 100644 index 00000000..a7ee0fbd --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "slink-api.fullname" . }} + labels: + {{- include "slink-api.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "slink-api.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/slink-api/templates/serviceaccount.yaml new file mode 100644 index 00000000..fd7d70e3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "slink-api.serviceAccountName" . }} + labels: + {{- include "slink-api.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/slink-api/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/slink-api/templates/tests/test-connection.yaml new file mode 100644 index 00000000..3981c6fa --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "slink-api.fullname" . }}-test-connection" + labels: + {{- include "slink-api.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "slink-api.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/slink-api/values.yaml b/deploy/release-deploy/helm_charts/slink-api/values.yaml new file mode 100644 index 00000000..30f13676 --- /dev/null +++ b/deploy/release-deploy/helm_charts/slink-api/values.yaml @@ -0,0 +1,83 @@ +# Default values for slink-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: slink-api.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-o2bus-slink-api + hosts: + - slink-api.o2bus.com + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/.helmignore b/deploy/release-deploy/helm_charts/smalltalk-api/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/.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/deploy/release-deploy/helm_charts/smalltalk-api/Chart.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/Chart.yaml new file mode 100644 index 00000000..1eebe79a --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: smalltalk-api +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/NOTES.txt b/deploy/release-deploy/helm_charts/smalltalk-api/templates/NOTES.txt new file mode 100644 index 00000000..b928f7b0 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "smalltalk-api.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 --namespace {{ .Release.Namespace }} svc -w {{ include "smalltalk-api.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "smalltalk-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "smalltalk-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/smalltalk-api/templates/_helpers.tpl new file mode 100644 index 00000000..e0d6e4c3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "smalltalk-api.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 "smalltalk-api.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 "smalltalk-api.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "smalltalk-api.labels" -}} +helm.sh/chart: {{ include "smalltalk-api.chart" . }} +{{ include "smalltalk-api.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "smalltalk-api.selectorLabels" -}} +app.kubernetes.io/name: {{ include "smalltalk-api.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "smalltalk-api.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "smalltalk-api.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/deployment.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/templates/deployment.yaml new file mode 100644 index 00000000..3cdf2d1a --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "smalltalk-api.fullname" . }} + labels: + {{- include "smalltalk-api.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "smalltalk-api.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "smalltalk-api.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "smalltalk-api.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/hpa.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/templates/hpa.yaml new file mode 100644 index 00000000..8eed6d5d --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "smalltalk-api.fullname" . }} + labels: + {{- include "smalltalk-api.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "smalltalk-api.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/ingress.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/templates/ingress.yaml new file mode 100644 index 00000000..2b9f25bd --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "smalltalk-api.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "smalltalk-api.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/service.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/templates/service.yaml new file mode 100644 index 00000000..bfc13202 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "smalltalk-api.fullname" . }} + labels: + {{- include "smalltalk-api.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "smalltalk-api.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/templates/serviceaccount.yaml new file mode 100644 index 00000000..a6070132 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "smalltalk-api.serviceAccountName" . }} + labels: + {{- include "smalltalk-api.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/templates/tests/test-connection.yaml new file mode 100644 index 00000000..ab09fef1 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "smalltalk-api.fullname" . }}-test-connection" + labels: + {{- include "smalltalk-api.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "smalltalk-api.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/smalltalk-api/values.yaml b/deploy/release-deploy/helm_charts/smalltalk-api/values.yaml new file mode 100644 index 00000000..6f7d1156 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smalltalk-api/values.yaml @@ -0,0 +1,82 @@ +# Default values for smalltalk-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: smalltalk-api.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-o2bus-smalltalk-api + hosts: + - smalltalk-api.o2bus.com +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/.helmignore b/deploy/release-deploy/helm_charts/smartsubscriber-api/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/.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/deploy/release-deploy/helm_charts/smartsubscriber-api/Chart.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/Chart.yaml new file mode 100644 index 00000000..bba28427 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: smartsubscriber-api +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/NOTES.txt b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/NOTES.txt new file mode 100644 index 00000000..65c65452 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "smartsubscriber-api.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 --namespace {{ .Release.Namespace }} svc -w {{ include "smartsubscriber-api.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "smartsubscriber-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + 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.kubernetes.io/name={{ include "smartsubscriber-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/_helpers.tpl b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/_helpers.tpl new file mode 100644 index 00000000..01ba4f6b --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "smartsubscriber-api.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 "smartsubscriber-api.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 "smartsubscriber-api.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "smartsubscriber-api.labels" -}} +helm.sh/chart: {{ include "smartsubscriber-api.chart" . }} +{{ include "smartsubscriber-api.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "smartsubscriber-api.selectorLabels" -}} +app.kubernetes.io/name: {{ include "smartsubscriber-api.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "smartsubscriber-api.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "smartsubscriber-api.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/deployment.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/deployment.yaml new file mode 100644 index 00000000..10b87160 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/deployment.yaml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "smartsubscriber-api.fullname" . }} + labels: + {{- include "smartsubscriber-api.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "smartsubscriber-api.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "smartsubscriber-api.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "smartsubscriber-api.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/hpa.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/hpa.yaml new file mode 100644 index 00000000..8703f5f8 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/hpa.yaml @@ -0,0 +1,28 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "smartsubscriber-api.fullname" . }} + labels: + {{- include "smartsubscriber-api.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "smartsubscriber-api.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/ingress.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/ingress.yaml new file mode 100644 index 00000000..c2f74b5c --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "smartsubscriber-api.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "smartsubscriber-api.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/service.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/service.yaml new file mode 100644 index 00000000..e62522f5 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "smartsubscriber-api.fullname" . }} + labels: + {{- include "smartsubscriber-api.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "smartsubscriber-api.selectorLabels" . | nindent 4 }} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/serviceaccount.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/serviceaccount.yaml new file mode 100644 index 00000000..6eb77225 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "smartsubscriber-api.serviceAccountName" . }} + labels: + {{- include "smartsubscriber-api.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/tests/test-connection.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/tests/test-connection.yaml new file mode 100644 index 00000000..916f5997 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "smartsubscriber-api.fullname" . }}-test-connection" + labels: + {{- include "smartsubscriber-api.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "smartsubscriber-api.fullname" . }}:{{ .Values.service.port }}'] + restartPolicy: Never diff --git a/deploy/release-deploy/helm_charts/smartsubscriber-api/values.yaml b/deploy/release-deploy/helm_charts/smartsubscriber-api/values.yaml new file mode 100644 index 00000000..da510902 --- /dev/null +++ b/deploy/release-deploy/helm_charts/smartsubscriber-api/values.yaml @@ -0,0 +1,82 @@ +# Default values for smartsubscriber-api. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: true + className: "" + annotations: + cert-manager.io/cluster-issuer: letsencrypt + kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: smartsubscriber-api.o2bus.com + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: tls-secret-o2bus-smartsubscriber-api + hosts: + - smartsubscriber-api.o2bus.com +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {}