diff --git a/.gitignore b/.gitignore index f891a108d5f1c5c162c4969262101dbea32819d5..b7ffa54af779ca9f6b49a0a4cfd906973d6aa48e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ *.tgz *.xpkg -local +*local* argopw argowftoken diff --git a/build_package.sh b/build_package.sh index 08c2d26523097f24594eb33765b87be12ea36460..8487c26c1ce22690f3c3f5091cf053461cdab108 100644 --- a/build_package.sh +++ b/build_package.sh @@ -1,4 +1,4 @@ # Builds the crossplane configuration package image and pushes it to EC gitlab -# VERSION=v0.3.9 +# VERSION=v0.3.10 crossplane xpkg build -f package/ -e package/examples/ -o configuration-${VERSION}.xpkg --verbose crossplane xpkg push code.europa.eu:4567/simpl/simpl-open/development/infrastructure/infrastructure-crossplane/configuration:${VERSION} -f configuration-${VERSION}.xpkg --domain https://code.europa.eu \ No newline at end of file diff --git a/charts/.helmignore b/charts/.helmignore index 3573acb04099d39694b8691457fb2b9c443c5151..1535abfe9f8a7c764b1c9bcfc7e9fdd5a326287f 100644 --- a/charts/.helmignore +++ b/charts/.helmignore @@ -1 +1,2 @@ -values.env.yaml \ No newline at end of file +values.env.yaml +dependencies \ No newline at end of file diff --git a/charts/dependencies/templates/secret.yaml b/charts/dependencies/templates/secret.yaml index 85708a5a996cf986bf05aeec19d886d2721e605f..855724c7b6b9561418491430390926b467d82dce 100644 --- a/charts/dependencies/templates/secret.yaml +++ b/charts/dependencies/templates/secret.yaml @@ -6,4 +6,3 @@ type: Opaque data: username: {{ .Values.secrets.gitea.username | b64enc }} password: {{ .Values.secrets.gitea.password | b64enc }} - email: {{ .Values.secrets.gitea.email | b64enc }} diff --git a/charts/dependencies/values.env.yaml b/charts/dependencies/values.env.yaml index 150bb3985dd4690eca0d5e1c49506c22faa05a4c..dc88b06d866c39c000abe88f0c5a1b5de2427a4a 100644 --- a/charts/dependencies/values.env.yaml +++ b/charts/dependencies/values.env.yaml @@ -10,4 +10,3 @@ secrets: gitea: username: #GITEA_USERNAME password: #GITEA_PASSWORD - email: #GITEA_EMAIL diff --git a/charts/dependencies/values.yaml b/charts/dependencies/values.yaml index e218c4867c56b6959b6a7322c33d687e651179d8..4ed09b9e8147a9365df743fd543c199448af7cb0 100644 --- a/charts/dependencies/values.yaml +++ b/charts/dependencies/values.yaml @@ -1,7 +1,7 @@ crossplane: configuration: packages: - - code.europa.eu:4567/simpl/simpl-open/development/infrastructure/infrastructure-crossplane/configuration:v0.3.9 + - code.europa.eu:4567/simpl/simpl-open/development/infrastructure/infrastructure-crossplane/configuration:v0.3.10 gitea: service: diff --git a/charts/templates/claim-manager.yaml b/charts/templates/argo/claim-manager.yaml similarity index 100% rename from charts/templates/claim-manager.yaml rename to charts/templates/argo/claim-manager.yaml diff --git a/charts/templates/cli.yaml b/charts/templates/cli.yaml deleted file mode 100644 index dab3b7759ecfbb9a7ec2c011ff2c91b5d918a790..0000000000000000000000000000000000000000 --- a/charts/templates/cli.yaml +++ /dev/null @@ -1,187 +0,0 @@ -{{- if .Values.cliEnabled }} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: cli - namespace: {{ .Release.Namespace }} ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: cli - namespace: {{ .Release.Namespace }} -rules: - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - create - - get - - update - - apiGroups: - - "" - resources: - - pods - - pods/exec - verbs: - - create - - get - - list - - watch - - update - - patch - - delete - - apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - watch - - list - - apiGroups: - - "" - resources: - - persistentvolumeclaims - - persistentvolumeclaims/finalizers - verbs: - - create - - update - - delete - - get - - apiGroups: - - argoproj.io - resources: - - workflows - - workflows/finalizers - - workflowtasksets - - workflowtasksets/finalizers - - workflowartifactgctasks - verbs: - - get - - list - - watch - - update - - patch - - delete - - create - - apiGroups: - - argoproj.io - resources: - - workflowtemplates - - workflowtemplates/finalizers - verbs: - - get - - list - - watch - - apiGroups: - - argoproj.io - resources: - - workflowtaskresults - verbs: - - list - - watch - - deletecollection - - apiGroups: - - "" - resources: - - serviceaccounts - verbs: - - get - - list - - apiGroups: - - "" - resources: - - secrets - verbs: - - get - - apiGroups: - - argoproj.io - resources: - - cronworkflows - - cronworkflows/finalizers - verbs: - - get - - list - - watch - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - - apiGroups: - - "policy" - resources: - - poddisruptionbudgets - verbs: - - create - - get - - delete ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: cli - namespace: {{ .Release.Namespace }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: cli -subjects: -- kind: ServiceAccount - name: cli - namespace: {{ .Release.Namespace }} ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: operate-workflow-role - namespace: {{ .Release.Namespace }} -rules: - - apiGroups: - - argoproj.io - verbs: - - "*" - resources: - - workflows - - workflowtemplates - - cronworkflows - - clusterworkflowtemplates ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: operate-workflow-role-binding - namespace: {{ .Release.Namespace }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: operate-workflow-role -subjects: - - kind: ServiceAccount - name: {{ .Values.workflowOperatorSA }} - namespace: {{ .Release.Namespace }} ---- -apiVersion: v1 -kind: Secret -metadata: - namespace: {{ .Release.Namespace }} - name: cli.service-account-token - annotations: - kubernetes.io/service-account.name: cli -type: kubernetes.io/service-account-token ---- -apiVersion: v1 -kind: Secret -metadata: - name: argocli.service-account-token - annotations: - kubernetes.io/service-account.name: argocli -type: kubernetes.io/service-account-token -{{- end }} \ No newline at end of file diff --git a/charts/templates/crossplane/provider-ionos-config.yaml b/charts/templates/crossplane/provider-ionos-config.yaml index 9a8d01159d8fc167403803186846acacb5a85524..52c688539867f61171fb01be6bb7f861dfb25fa0 100644 --- a/charts/templates/crossplane/provider-ionos-config.yaml +++ b/charts/templates/crossplane/provider-ionos-config.yaml @@ -1,7 +1,7 @@ apiVersion: ionoscloud.crossplane.io/v1alpha1 kind: ProviderConfig metadata: - name: example + name: {{ .Release.Namespace }}-ionos-pc spec: credentials: source: Secret diff --git a/charts/templates/events/decommission/sensor.yaml b/charts/templates/events/decommission/sensor.yaml index 50c4ef26ac0df71fa2cac37af9bf9356afdb7920..4337278ad3e439e475ea397c35189f3774156988 100644 --- a/charts/templates/events/decommission/sensor.yaml +++ b/charts/templates/events/decommission/sensor.yaml @@ -6,7 +6,7 @@ metadata: spec: eventBusName: provisioner-eventbus template: - serviceAccountName: {{ .Values.workflowOperatorSA }} + serviceAccountName: provisioner-events dependencies: - name: message eventSourceName: decommission @@ -30,12 +30,12 @@ spec: volumes: - name: repos emptyDir: {} - serviceAccountName: cli + serviceAccountName: provisioner-workflows entrypoint: main workflowMetadata: labels: track-workflow: "true" - workflow-type: {{ .Values.kafkaConfig.decommissioningRequestsTopicName }} + workflow-type: {{ .Values.kafkaDecommissioningRequestsTopicName }} labelsFrom: scriptTriggerId: expression: workflow.parameters.scriptTriggerId diff --git a/charts/templates/events/decommission/source.yaml b/charts/templates/events/decommission/source.yaml index f6f3b56a502d946b68210fcf3b8ae8f647e8d82e..82958092a268c8a993c448161587c18b7a673afb 100644 --- a/charts/templates/events/decommission/source.yaml +++ b/charts/templates/events/decommission/source.yaml @@ -8,12 +8,12 @@ spec: kafka: decommissionRequest: url: {{ .Values.kafkaEndpoint }} - topic: {{ .Values.kafkaConfig.decommissioningRequestsTopicName }} + topic: {{ .Values.kafkaDecommissioningRequestsTopicName }} jsonBody: false partition: "0" - {{- if .Values.kafkaConfig.authEnable }} + {{- if .Values.kafkaAuthEnable }} sasl: - mechanism: {{ .Values.kafkaConfig.authMechanism }} + mechanism: {{ .Values.kafkaAuthMechanism }} userSecret: name: kafka-secret key: username diff --git a/charts/templates/events/decommission/status-sensor.yaml b/charts/templates/events/decommission/status-sensor.yaml index 4877e07aab23c71b49496a650a4ebd5597312d4b..f6d2f9e208ed1a3cb8c1ce6d196194afa3e8c3b3 100644 --- a/charts/templates/events/decommission/status-sensor.yaml +++ b/charts/templates/events/decommission/status-sensor.yaml @@ -14,10 +14,10 @@ spec: name: kafka kafka: url: {{ .Values.kafkaEndpoint }} - topic: {{ .Values.kafkaConfig.decommissioningResponsesTopicName }} - {{- if .Values.kafkaConfig.authEnable }} + topic: {{ .Values.kafkaDecommissioningResponsesTopicName }} + {{- if .Values.kafkaAuthEnable }} sasl: - mechanism: {{ .Values.kafkaConfig.authMechanism }} + mechanism: {{ .Values.kafkaAuthMechanism }} userSecret: name: kafka-secret key: username diff --git a/charts/templates/events/decommission/status-source.yaml b/charts/templates/events/decommission/status-source.yaml index cd136e742856549e1ae621f277114cc4e1da9e35..97bd1b9e08e81b5920a0cb34a8138807c113b452 100644 --- a/charts/templates/events/decommission/status-source.yaml +++ b/charts/templates/events/decommission/status-source.yaml @@ -6,7 +6,7 @@ metadata: spec: eventBusName: provisioner-eventbus template: - serviceAccountName: {{ .Values.applicationStatusViewerSA }} + serviceAccountName: provisioner-events resource: decommissionStatus: namespace: {{ .Release.Namespace }} diff --git a/charts/templates/events/provision/gitops-status-sensor.yaml b/charts/templates/events/provision/gitops-status-sensor.yaml index 0646ca815cdf7e0e468753121b373ce8b63a26a7..8f49d7fcebc6b0ee6f9e03949a1aa40fb98da458 100644 --- a/charts/templates/events/provision/gitops-status-sensor.yaml +++ b/charts/templates/events/provision/gitops-status-sensor.yaml @@ -14,11 +14,11 @@ spec: name: kafka kafka: url: {{ .Values.kafkaEndpoint }} - topic: {{ .Values.kafkaConfig.provisioningResponsesTopicName }} + topic: {{ .Values.kafkaProvisioningResponsesTopicName }} partition: 0 - {{- if .Values.kafkaConfig.authEnable }} + {{- if .Values.kafkaAuthEnable }} sasl: - mechanism: {{ .Values.kafkaConfig.authMechanism }} + mechanism: {{ .Values.kafkaAuthMechanism }} userSecret: name: kafka-secret key: username diff --git a/charts/templates/events/provision/gitops-status-source.yaml b/charts/templates/events/provision/gitops-status-source.yaml index c1b0fe4580714f683cac5d68b60bcfc396469d75..d664ad586e0e341f1e0d5deb594c43ae2e7f936c 100644 --- a/charts/templates/events/provision/gitops-status-source.yaml +++ b/charts/templates/events/provision/gitops-status-source.yaml @@ -6,7 +6,7 @@ metadata: spec: eventBusName: provisioner-eventbus template: - serviceAccountName: {{ .Values.workflowOperatorSA }} + serviceAccountName: provisioner-events resource: provisionGitops: namespace: {{ .Release.Namespace }} diff --git a/charts/templates/events/provision/sensor.yaml b/charts/templates/events/provision/sensor.yaml index 6437c985d778a7cefac2945b7a4129922d8e476e..f2ed9fe0231d5111ecabab1e46a615f4caae860d 100644 --- a/charts/templates/events/provision/sensor.yaml +++ b/charts/templates/events/provision/sensor.yaml @@ -6,7 +6,7 @@ metadata: spec: eventBusName: provisioner-eventbus template: - serviceAccountName: {{ .Values.workflowOperatorSA }} + serviceAccountName: provisioner-events dependencies: - name: message eventSourceName: provision @@ -30,7 +30,7 @@ spec: volumes: - name: repos emptyDir: {} - serviceAccountName: cli + serviceAccountName: provisioner-workflows entrypoint: main workflowMetadata: labels: diff --git a/charts/templates/events/provision/source.yaml b/charts/templates/events/provision/source.yaml index ba39bbfb6ab568dcd0ac6b34d07a00fe9a5183e1..7daf933ac7d60ee6c6c223fd06ed94f1d252f94c 100644 --- a/charts/templates/events/provision/source.yaml +++ b/charts/templates/events/provision/source.yaml @@ -8,12 +8,12 @@ spec: kafka: provisionRequest: url: {{ .Values.kafkaEndpoint }} - topic: {{ .Values.kafkaConfig.authMechanism.provisioningRequestsTopicName }} + topic: {{ .Values.kafkaProvisioningRequestsTopicName }} jsonBody: false partition: "0" - {{- if .Values.kafkaConfig.authEnable }} + {{- if .Values.kafkaAuthEnable }} sasl: - mechanism: {{ .Values.kafkaConfig.authMechanism }} + mechanism: {{ .Values.kafkaAuthMechanism }} userSecret: name: kafka-secret key: username diff --git a/charts/templates/events/provision/status-sensor.yaml b/charts/templates/events/provision/status-sensor.yaml index 086347df0a6155838eeef0e7a4e71491ba54f525..ca327a63145d7faf2d887b148b85c52082ee98f8 100644 --- a/charts/templates/events/provision/status-sensor.yaml +++ b/charts/templates/events/provision/status-sensor.yaml @@ -6,13 +6,16 @@ metadata: spec: eventBusName: provisioner-eventbus template: - serviceAccountName: {{ .Values.workflowOperatorSA }} + serviceAccountName: provisioner-events dependencies: - name: message eventSourceName: provision-status eventName: provisionStatus triggers: - - template: + - rateLimit: + unit: Second + requestsPerUnit: 1 + template: name: argo-workflow-trigger argoWorkflow: operation: submit @@ -27,7 +30,7 @@ spec: podGC: strategy: OnPodCompletion deleteDelayDuration: 120s - serviceAccountName: cli + serviceAccountName: provisioner-workflows entrypoint: main workflowMetadata: arguments: @@ -205,10 +208,10 @@ spec: parameters: - name: payload script: - {{- if .Values.kafkaConfig.authEnable }} + {{- if .Values.kafkaAuthEnable }} env: - name: MECHANISM - value: {{ .Values.kafkaConfig.authMechanism }} + value: {{ .Values.kafkaAuthMechanism }} - name: USERNAME valueFrom: secretKeyRef: @@ -222,12 +225,12 @@ spec: {{- end }} image: confluentinc/cp-kafkacat:7.1.14 command: [sh] - {{- if .Values.kafkaConfig.authEnable }} + {{- if .Values.kafkaAuthEnable }} source: | - echo {{`{{inputs.parameters.payload}}`}} | kafkacat -P -b {{ .Values.kafkaEndpoint }} -X security.protocol=SASL_PLAINTEXT -X sasl.username="$USERNAME" -X sasl.password="$PASSWORD" -X sasl.mechanism="$MECHANISM" -t {{ .Values.kafkaConfig.provisioningResponsesTopicName }} -J + echo {{`{{inputs.parameters.payload}}`}} | kafkacat -P -b {{ .Values.kafkaEndpoint }} -X security.protocol=SASL_PLAINTEXT -X sasl.username="$USERNAME" -X sasl.password="$PASSWORD" -X sasl.mechanism="$MECHANISM" -t {{ .Values.kafkaProvisioningResponsesTopicName }} -J {{- else }} source: | - echo {{`{{inputs.parameters.payload}}`}} | kafkacat -P -b {{ .Values.kafkaEndpoint }} -t {{ .Values.kafkaConfig.provisioningResponsesTopicName }} -J + echo {{`{{inputs.parameters.payload}}`}} | kafkacat -P -b {{ .Values.kafkaEndpoint }} -t {{ .Values.kafkaProvisioningResponsesTopicName }} -J {{- end }} parameters: @@ -235,6 +238,3 @@ spec: dependencyName: message dataKey: body dest: spec.arguments.parameters.0.value - retryStrategy: - steps: 2 - duration: 30s \ No newline at end of file diff --git a/charts/templates/events/provision/status-source.yaml b/charts/templates/events/provision/status-source.yaml index f47ede78a87c20140743e8c974e1620aadf712c7..d5eceaccd0209866a3c6ee2d3302570c264a67e8 100644 --- a/charts/templates/events/provision/status-source.yaml +++ b/charts/templates/events/provision/status-source.yaml @@ -6,7 +6,7 @@ metadata: spec: eventBusName: provisioner-eventbus template: - serviceAccountName: {{ .Values.applicationStatusViewerSA }} + serviceAccountName: provisioner-events resource: provisionStatus: namespace: {{ .Release.Namespace }} diff --git a/charts/templates/job.yaml b/charts/templates/job.yaml index e36ed8a85c3f874f1884b5e46eb194bdc1e64e86..67aee8b030491c09c9dc6c07bec878925911a62e 100644 --- a/charts/templates/job.yaml +++ b/charts/templates/job.yaml @@ -3,8 +3,10 @@ apiVersion: batch/v1 kind: Job metadata: name: gitea-setup-job + annotations: + "helm.sh/hook": post-install spec: - backoffLimit: 12 + backoffLimit: 24 ttlSecondsAfterFinished: 600 template: spec: diff --git a/charts/templates/rbac/cli.yaml b/charts/templates/rbac/cli.yaml new file mode 100644 index 0000000000000000000000000000000000000000..671d4a37bcfc8b4984bf8da30defc58b6de0c554 --- /dev/null +++ b/charts/templates/rbac/cli.yaml @@ -0,0 +1,70 @@ +{{- if .Values.cliEnabled }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: cli + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: cli + namespace: {{ .Release.Namespace }} +rules: + - apiGroups: + - argoproj.io + resources: + - workflows + - workflows/finalizers + - workflowtasksets + - workflowtasksets/finalizers + - workflowartifactgctasks + verbs: + - get + - list + - watch + - update + - patch + - delete + - create + - apiGroups: + - argoproj.io + resources: + - workflowtemplates + - workflowtemplates/finalizers + verbs: + - get + - list + - watch + - apiGroups: + - argoproj.io + resources: + - workflowtaskresults + verbs: + - list + - watch + - deletecollection +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: cli + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: cli +subjects: +- kind: ServiceAccount + name: cli + namespace: {{ .Release.Namespace }} +--- +apiVersion: v1 +kind: Secret +metadata: + namespace: {{ .Release.Namespace }} + name: cli.service-account-token + annotations: + kubernetes.io/service-account.name: cli +type: kubernetes.io/service-account-token +{{- end }} \ No newline at end of file diff --git a/charts/templates/rbac.yaml b/charts/templates/rbac/rbac.yaml similarity index 52% rename from charts/templates/rbac.yaml rename to charts/templates/rbac/rbac.yaml index 850b5065b1eb1b1d97725a385b93884f3cb31a5f..4983929c365c929858f6c8fea7b78f12f8b9ca88 100644 --- a/charts/templates/rbac.yaml +++ b/charts/templates/rbac/rbac.yaml @@ -23,6 +23,36 @@ rules: - argoproj.io resources: - applications + verbs: + - patch + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: view-workflow + namespace: {{ .Release.Namespace }} +rules: + - apiGroups: + - argoproj.io + resources: + - workflows + - workflowtaskresults + verbs: + - list + - get + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: patch-workflow + namespace: {{ .Release.Namespace }} +rules: + - apiGroups: + - argoproj.io + resources: + - workflows - workflowtaskresults verbs: - patch @@ -39,13 +69,10 @@ roleRef: name: view-application subjects: - kind: ServiceAccount - name: claim-application-status + name: provisioner-events namespace: {{ .Release.Namespace }} - kind: ServiceAccount - name: operate-workflow - namespace: {{ .Release.Namespace }} -- kind: ServiceAccount - name: cli + name: provisioner-workflows namespace: {{ .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 @@ -59,21 +86,49 @@ roleRef: name: patch-application subjects: - kind: ServiceAccount - name: cli + name: provisioner-workflows + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: view-workflow + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: patch-workflow +subjects: +- kind: ServiceAccount + name: provisioner-events + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: patch-workflow + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: patch-workflow +subjects: +- kind: ServiceAccount + name: provisioner-workflows + namespace: {{ .Release.Namespace }} +- kind: ServiceAccount + name: provisioner-events namespace: {{ .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: view-composite-status-events + name: {{ .Release.Namespace }}-view-crossplane roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: crossplane-view subjects: - kind: ServiceAccount - name: composite-status - namespace: {{ .Release.Namespace }} - - kind: ServiceAccount - name: cli + name: provisioner-workflows namespace: {{ .Release.Namespace }} \ No newline at end of file diff --git a/charts/templates/service-account.yaml b/charts/templates/rbac/service-account.yaml similarity index 65% rename from charts/templates/service-account.yaml rename to charts/templates/rbac/service-account.yaml index f70a04a34d5ec16b40a7fd9ea99286615e373121..4ed8ee5fc70bbe82a8a1fe8736a6a554eb2fba58 100644 --- a/charts/templates/service-account.yaml +++ b/charts/templates/rbac/service-account.yaml @@ -1,11 +1,11 @@ apiVersion: v1 kind: ServiceAccount metadata: - name: {{ .Values.workflowOperatorSA }} + name: provisioner-events namespace: {{ .Release.Namespace }} --- apiVersion: v1 kind: ServiceAccount metadata: - name: {{ .Values.applicationStatusViewerSA }} + name: provisioner-workflows namespace: {{ .Release.Namespace }} diff --git a/charts/values.env.yaml b/charts/values.env.yaml index 18c05dad2308a34dd2ef81b27a0bb52e3728b313..15e24077467d1c9b9a689ebd2c1a3cb9426dd183 100644 --- a/charts/values.env.yaml +++ b/charts/values.env.yaml @@ -1,4 +1,5 @@ kafkaEndpoint: #KAFKA_ENDPOINT +giteaUrl: #GITEA_URL secrets: ionos: @@ -9,4 +10,3 @@ secrets: gitea: username: #GITEA_USERNAME password: #GITEA_PASSWORD - email: #GITEA_EMAIL diff --git a/charts/values.yaml b/charts/values.yaml index 2137dcfe5e39f3f75c2d065d731250a72c27778b..3f651f5576e20982b6573ec34e0b33fb0a9790d7 100644 --- a/charts/values.yaml +++ b/charts/values.yaml @@ -1,17 +1,12 @@ dependenciesReleaseName: provisioner-dependencies dependenciesNamespace: infrastructure -applicationStatusViewerSA: claim-application-status -workflowOperatorSA: operate-workflow - -cliEnabled: true - -provisionWorkflowImage: code.europa.eu:4567/simpl/simpl-open/development/infrastructure/infrastructure-crossplane/to-provision-workflow:v0.2.1 - -kafkaConfig: - authEnable: true - authMechanism: PLAIN - provisioningRequestsTopicName: to-provision - provisioningResponsesTopicName: provisioned - decommissioningRequestsTopicName: to-decommission - decommissioningResponsesTopicName: decommissioned +cliEnabled: false +provisionWorkflowImage: code.europa.eu:4567/simpl/simpl-open/development/infrastructure/infrastructure-crossplane/to-provision-workflow:v0.3.0 + +kafkaAuthEnable: true +kafkaAuthMechanism: PLAIN +kafkaProvisioningRequestsTopicName: to-provision +kafkaProvisioningResponsesTopicName: provisioned +kafkaDecommissioningRequestsTopicName: to-decommission +kafkaDecommissioningResponsesTopicName: decommissioned diff --git a/package/apis/demo/definition.yaml b/package/apis/demo/definition.yaml index bb15d9a4c63c4e7e6de3981f95f37e211615b6c7..3c30cd0d874f2215ec1935650b5e00825eaac0d3 100644 --- a/package/apis/demo/definition.yaml +++ b/package/apis/demo/definition.yaml @@ -48,6 +48,8 @@ spec: enum: [INTEL_ICELAKE, AMD_EPYC] cloudConfig: type: string + providerConfig: + type: string required: - datacenterName - datacenterLocation @@ -55,6 +57,7 @@ spec: - cores - ram - cpuFamily + - providerConfig required: - parameters status: diff --git a/package/apis/demo/ionos.yaml b/package/apis/demo/ionos.yaml index 32540260409e43b07acdde5f517bf0ec3e494bd5..840bfa7d90eea4a8320a1e0c071ecfa5ac138351 100644 --- a/package/apis/demo/ionos.yaml +++ b/package/apis/demo/ionos.yaml @@ -25,6 +25,9 @@ spec: providerConfigRef: name: example patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.providerConfig + toFieldPath: spec.providerConfigRef.name - type: FromCompositeFieldPath fromFieldPath: spec.parameters.datacenterLocation toFieldPath: spec.forProvider.location @@ -67,6 +70,9 @@ spec: - type: string string: fmt: "%s_1" + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.providerConfig + toFieldPath: spec.providerConfigRef.name - type: FromCompositeFieldPath fromFieldPath: spec.parameters.cores toFieldPath: spec.forProvider.cores @@ -99,6 +105,9 @@ spec: providerConfigRef: name: example patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.providerConfig + toFieldPath: spec.providerConfigRef.name - type: FromCompositeFieldPath fromFieldPath: spec.resourceRefs[0].name toFieldPath: spec.forProvider.datacenterConfig.datacenterIdRef.name @@ -117,6 +126,9 @@ spec: providerConfigRef: name: example patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.providerConfig + toFieldPath: spec.providerConfigRef.name - type: FromCompositeFieldPath fromFieldPath: spec.parameters.datacenterLocation toFieldPath: spec.forProvider.location @@ -149,6 +161,9 @@ spec: providerConfigRef: name: example patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.providerConfig + toFieldPath: spec.providerConfigRef.name - type: FromCompositeFieldPath fromFieldPath: spec.resourceRefs[0].name toFieldPath: spec.forProvider.datacenterConfig.datacenterIdRef.name @@ -184,6 +199,9 @@ spec: providerConfigRef: name: example patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.parameters.providerConfig + toFieldPath: spec.providerConfigRef.name - type: FromCompositeFieldPath fromFieldPath: spec.resourceRefs[0].name toFieldPath: spec.forProvider.datacenterConfig.datacenterIdRef.name diff --git a/setup.sh b/setup.sh index 2bd1c148d4465b5692ba92cde2de07af8f3d5d4f..4066f51982cda6e8817af51c75c11d06acd86f5c 100644 --- a/setup.sh +++ b/setup.sh @@ -1,16 +1,16 @@ +# For setting up locally NS=infrastructure kubectl create namespace $NS kubectl create -n $NS secret docker-registry "ec-pull-secret" --docker-server="code.europa.eu:4567" --docker-username="$EC_USERNAME" --docker-password="$EC_PASSWORD" -kubectl create -n $NS secret generic gitea-secret --from-literal=username=gitops_test --from-literal=password=test1234 -kubectl create -n $NS secret generic kafka-secret --from-literal=username=demo --from-literal=password=demo-password -kubectl create -n $NS secret generic ionos-provider --from-literal=credentials="{\"token\":\"${IONOS_TOKEN}\"}" -helm install provisioner-dependencies -n $NS charts/dependencies -sleep 60 -helm install provisioner-resources -n $NS charts/resources +helm install dependencies -n $NS charts/dependencies -f charts/dependencies/values.yaml -f charts/dependencies/values.local.yaml +sleep 100 +helm install resources -n $NS charts -f charts/values.yaml -f charts/values.local.yaml # Use when installing locally to get access tokens and forward service ports -echo "Bearer $(kubectl get -n $NS secret cli.service-account-token -o=jsonpath='{.data.token}' | base64 --decode)" > argowftoken -kubectl get -n $NS secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d > argopw -# kubectl port-forward -n $NS svc/argocd-server 8888:443 -# kubectl port-forward -n $NS svc/argowf-argo-workflows-server 8777:2746 -# kubectl port-forward -n $NS svc/gitea-http 8333:3000 \ No newline at end of file +# echo "Bearer $(kubectl get -n $NS secret cli.service-account-token -o=jsonpath='{.data.token}' | base64 --decode)" > argowftoken +kubectl get -n infrastructure secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d > argopw + +# Port Forwarding to access UIs of each component +# kubectl port-forward svc/dependencies-argocd-server 8888:443 -n infrastructure +# kubectl port-forward svc/dependencies-argowf-argo-workflows-server 8777:2746 -n infrastructure +# kubectl port-forward svc/dependencies-gitea-http 8333:3000 -n infrastructure diff --git a/workflow-images/to-provision/main.py b/workflow-images/to-provision/main.py index a5db1f6cc29bb3d892aceaa2a2914b357d803e42..f3af6fe7b7f39b2488f4427ca1778cbdb49fdad5 100644 --- a/workflow-images/to-provision/main.py +++ b/workflow-images/to-provision/main.py @@ -13,6 +13,33 @@ CLAIM_KIND_REF_LABEL = "reference-kind" KIND_REF_PLACEHOLDER = "KIND" UUID_PLACEHOLDER = "UUID" +PROVIDER = 'ionos' + +##TODO add all metadata in this way +def insert_claim_metadata(claim, uuid): + as_dict = {} + try: + as_dict = yaml.safe_load(claim) + except Exception as e: + msg = f"claim metadata: cannot deserialize manifest: claim {uuid}" + write_termination_log(msg) + sys.exit(104) + try: + namespace = as_dict["metadata"]["namespace"] + as_dict["spec"]["parameters"]["providerConfig"] = f"{namespace}-{PROVIDER}-pc" + except KeyError: + msg = f"claim metadata: missing required fields: claim {uuid} " + write_termination_log(msg) + sys.exit(104) + try: + claim = yaml.safe_dump(as_dict) + except Exception as e: + msg = f"claim metadata: cannot serialize manifest: claim {uuid} " + write_termination_log(msg) + sys.exit(104) + + return claim + def write_termination_log(msg, echo_stdout=True): if echo_stdout: print(msg) @@ -51,6 +78,7 @@ except Exception as e: sys.exit(103) with open(script_path, mode="w", encoding="utf-8") as claim_file: + script_content = insert_claim_metadata(script_content, UUID) claim_file.write(script_content) print(f"\n---[claim {UUID} created]---\n") @@ -64,7 +92,7 @@ with open(APPLICATION_TEMPLATE_PATH, mode="r", encoding="utf-8") as template_fil except Exception as e: msg = f"Cannot retrieve claim kind reference label from manifest" write_termination_log(msg) - sys.exit(104) + sys.exit(105) application_content = template.format(**{UUID_PLACEHOLDER:UUID,KIND_REF_PLACEHOLDER:reference_kind}) with open(application_path, mode="w", encoding="utf-8") as application_file: