diff --git a/.dockerignore b/.dockerignore index 232fea6b43..9f1faf5d71 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,3 +5,4 @@ .git .github kyma/temp +bin diff --git a/.github/scripts/kyma.mk b/.github/scripts/kyma.mk new file mode 100644 index 0000000000..86c35eb0b1 --- /dev/null +++ b/.github/scripts/kyma.mk @@ -0,0 +1,13 @@ +PROJECT_ROOT=./ +LOCALBIN ?= $(realpath $(PROJECT_ROOT))/bin +$(LOCALBIN): + mkdir -p $(LOCALBIN) + + +KYMA ?= $(LOCALBIN)/kyma +kyma: $(LOCALBIN) $(KYMA) ## Download kyma locally if necessary. +$(KYMA): + echo $(LOCALBIN) + $(eval OS=$(shell (uname -s | tr 'A-Z' 'a-z'))) + curl --location --output $(LOCALBIN)/kyma https://storage.googleapis.com/kyma-cli-unstable/kyma-${OS} + chmod +x $(LOCALBIN)/kyma diff --git a/.github/scripts/setup-kyma.sh b/.github/scripts/setup-kyma.sh index 7733af3056..641c2e461b 100755 --- a/.github/scripts/setup-kyma.sh +++ b/.github/scripts/setup-kyma.sh @@ -1,14 +1,10 @@ #!/bin/bash set -e -OS="$(uname -s | tr 'A-Z' 'a-z')" APPLICATION_CONNECTOR_VERSION="1.1.3" -echo "Using OS:" ${OS} -mkdir bin -curl --location --output ./bin/kyma https://storage.googleapis.com/kyma-cli-unstable/kyma-${OS} -chmod +x ./bin/kyma +make --makefile ./.github/scripts/kyma.mk kyma echo "Provisioning k3d cluster for Kyma" k3d registry create kyma-registry --port 5001 @@ -43,11 +39,6 @@ kubectl apply -f https://github.com/kyma-project/application-connector-manager/r echo "Apply eventing" kubectl apply -f https://github.com/kyma-project/eventing-manager/releases/latest/download/eventing-manager.yaml -echo "Apply module templates" -kubectl apply -f ./kyma-envs/extensions/modules/api-gateway-regular.yaml -kubectl apply -f ./kyma-envs/extensions/modules/eventing-fast.yaml -kubectl apply -f ./kyma-envs/extensions/modules/eventing-regular.yaml - echo "Apply and enable telemetry module" kubectl apply -f https://github.com/kyma-project/telemetry-manager/releases/latest/download/telemetry-manager.yaml kubectl apply -f https://github.com/kyma-project/telemetry-manager/releases/latest/download/telemetry-default-cr.yaml -n kyma-system diff --git a/.gitignore b/.gitignore index 5cfdcdacff..7fc1fb3bc0 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,9 @@ tests/integration/fixtures/kubeconfig.yaml tests/integration/fixtures/kubeconfig-k3s.yaml tests/integration/fixtures/sa-kubeconfig.yaml +tests/kyma/cypress/* +tests/kyma/fixtures/kubeconfig.yaml + public/themes/@sap-theming/*.css public/environments diff --git a/.prettierignore b/.prettierignore index a863b30658..e2128a87c8 100644 --- a/.prettierignore +++ b/.prettierignore @@ -92,4 +92,5 @@ backend/backend-production.* **/public/** tests/integration/fixtures/kubeconfig.yaml +tests/kyma/fixtures/kubeconfig.yaml kyma/** diff --git a/kyma/extensions/configuration/certificates.yaml b/kyma/extensions/configuration/certificates.yaml index d5b7a9e34d..968da45d86 100644 --- a/kyma/extensions/configuration/certificates.yaml +++ b/kyma/extensions/configuration/certificates.yaml @@ -8,25 +8,49 @@ metadata: busola.io/extension: resource busola.io/extension-version: '0.5' data: + dataSources: |- + jksSecret: + resource: + kind: Secret + version: v1 + filter: $item.metadata.name = $root.spec.keystores.jks.passwordSecretRef.secretName + pkcs12Secret: + resource: + kind: Secret + version: v1 + filter: $item.metadata.name = $root.spec.keystores.pkcs12.passwordSecretRef.secretName details: | - header: - - name: status - source: 'status.state ? status.state : "UNKNOWN"' - highlights: - unknown: - - UNKNOWN - widget: Badge - description: status.message - - name: status.expirationDate - source: '$readableTimestamp(status.expirationDate)' - - name: commonName - source: spec.commonName + status: + header: + - name: status + source: 'status.state ? status.state : "UNKNOWN"' + highlights: + unknown: + - UNKNOWN + widget: Badge + description: status.message + body: + - name: conditions + source: status.conditions + widget: ConditionList + - name: status.expirationDate + source: '$readableTimestamp(status.expirationDate)' + - name: issuer + source: status.issuerRef.name + - name: Observed Generation + source: status.observedGeneration body: - - name: references + - name: Specification widget: Panel children: - name: issuer - source: status.issuerRef.name + source: spec.issuerRef.name + widget: ResourceLink + visibility: $exists(spec.issuerRef) + resource: + namespace: $root.spec.issuerRef.namespace + kind: "'Issuer'" + name: $root.spec.issuerRef.name - name: secret source: spec.secretRef.name widget: ResourceLink @@ -34,16 +58,98 @@ data: namespace: $root.spec.secretRef.namespace kind: "'Secret'" name: $root.spec.secretRef.name + - name: spec.secretName + source: spec.secretName + visibility: $exists(spec.secretName) and $not($exists(spec.secretRef)) + - name: spec.secretLabels + source: spec.secretLabels + visibility: $exists(spec.secretLabels) + - name: commonName + source: spec.commonName + - name: dnsNames + source: spec.dnsNames + widget: Labels - name: spec.csr source: spec.csr - - name: metadata.annotations - source: metadata.annotations - widget: Labels + - name: spec.followCNAME + source: spec.followCNAME + visibility: $exists(spec.followCNAME) - name: spec.renew source: spec.renew - - name: spec.dnsNames - source: spec.dnsNames - widget: Labels + - name: spec.ensureRenewedAfter + source: spec.ensureRenewedAfter + visibility: $exists(spec.ensureRenewedAfter) + - name: spec.preferredChain + source: spec.preferredChain + visibility: $exists(spec.preferredChain) + - name: spec.keystores + widget: Panel + visibility: $exists(spec.keystores) + children: + - name: JKS + widget: Panel + visibility: $exists(spec.keystores.jks) + children: + - name: spec.keystores.create + source: spec.keystores.jks.create + visibility: $exists(spec.keystores.jks.create) + - name: spec.keystores.passwordSecretRef + widget: Panel + visibility: $exists(spec.keystores.jks.passwordSecretRef) + children: + - name: Password Secret Ref + source: spec.keystores.jks.passwordSecretRef.secretName + widget: ResourceLink + visibility: $exists(spec.keystores.jks.passwordSecretRef.secretName) and $count($jksSecret().items)>0 + resource: + namespace: $jksSecret().items.metadata.namespace + kind: "'Secret'" + name: $root.spec.keystores.jks.passwordSecretRef.secretName + - name: spec.keystores.secretName + source: spec.keystores.jks.passwordSecretRef.secretName + visibility: $exists(spec.keystores.jks.passwordSecretRef.secretName) and $count($jksSecret().items)=0 + - name: spec.keystores.key + source: spec.keystores.jks.passwordSecretRef.key + visibility: $exists(spec.keystores.jks.passwordSecretRef.key) + - name: PKCS12 + widget: Panel + visibility: $exists(spec.keystores.pkcs12) + children: + - name: Create + source: spec.keystores.pkcs12.create + visibility: $exists(spec.keystores.pkcs12.create) + - name: spec.keystores.passwordSecretRef + widget: Panel + visibility: $exists(spec.keystores.pkcs12.passwordSecretRef) + children: + - name: Password Secret Ref + source: spec.keystores.pkcs12.passwordSecretRef.secretName + widget: ResourceLink + visibility: $exists(spec.keystores.pkcs12.passwordSecretRef.secretName) and $count($pkcs12Secret().items)>0 + resource: + namespace: $pkcs12Secret().items.metadata.namespace + kind: "'Secret'" + name: $root.spec.keystores.pkcs12.passwordSecretRef.secretName + - name: spec.keystores.secretName + source: spec.keystores.pkcs12.passwordSecretRef.secretName + visibility: $exists(spec.keystores.pkcs12.passwordSecretRef.secretName) and $count($pkcs12Secret().items)=0 + - name: spec.keystores.key + source: spec.keystores.pkcs12.passwordSecretRef.key + visibility: $exists(spec.keystores.pkcs12.passwordSecretRef.key) + - name: spec.privateKey + widget: Panel + visibility: $exists(spec.privateKey) + children: + - name: spec.privateKey.algorithm + source: spec.privateKey.algorithm + visibility: $exists(spec.privateKey.algorithm) + - name: spec.privateKey.size + source: spec.privateKey.size + visibility: $exists(spec.privateKey.size) + - widget: EventList + name: Events + filter: "$matchEvents($$, $root.kind, $root.metadata.name)" + hideInvolvedObjects: true form: | - var: useCSR dynamicValue: '$exists(spec.csr)' @@ -139,17 +245,32 @@ data: metadata.creationTimestamp: Created at status: Status status.expirationDate: Expiration Time + conditions.conditions: Conditions issuer: Issuer commonName: Common Name spec.secretRef: Secret to use spec.useExisting: Use the existing Secret spec.additionalDomains: Additional domain names, one per line spec.dnsNames: DNS Names + dnsNames: DNS Names spec.csr: CSR spec.useCSR: Use a CSR spec.certSignReq: Plain text Certificate Signing Request spec.certSignReqDecoded: Base64-encoded Certificate Signing Request + spec.followCNAME: Follow CNAME + spec.keystores: Keystores + spec.keystores.create: Create + spec.keystores.passwordSecretRef: Password Secret Ref + spec.keystores.secretName: Secret Name + spec.keystores.key: Key + spec.privateKey: Private Key + spec.privateKey.algorithm: Algorithm + spec.privateKey.size: Size spec.renew: Renew + spec.ensureRenewedAfter: Ensure Renewed After + spec.preferredChain: Preferred Chain + spec.secretLabels: Secret Labels + spec.secretName: Secret Name certificateCN: Certificate CN (max 64 characters) - references: References secret: Secret + conditions: Conditions diff --git a/kyma/extensions/configuration/dns-entries.yaml b/kyma/extensions/configuration/dns-entries.yaml index 35b243be11..6606bdd7c0 100644 --- a/kyma/extensions/configuration/dns-entries.yaml +++ b/kyma/extensions/configuration/dns-entries.yaml @@ -8,22 +8,40 @@ metadata: busola.io/extension: resource busola.io/extension-version: '0.5' data: + dataSources: |- + targetServices: + resource: + kind: Service + version: v1 + filter: >- + $exists($item.status.loadBalancer.ingress) + relatedService: + resource: + kind: Service + version: v1 + filter: >- + $filter($root.spec.targets, function ($v, $i, $a) { $contains($item.status.loadBalancer.ingress.ip, $v)}) details: |- - header: - - source: 'status.state ? status.state : "UNKNOWN"' - highlights: - informative: - - UNKNOWN - type: string - name: status - widget: Badge - description: status.message + resourceGraph: + dataSources: + - source: relatedService + status: + header: + - source: 'status.state ? status.state : "UNKNOWN"' + highlights: + informative: + - UNKNOWN + type: string + name: status + widget: Badge + description: status.message + body: + - name: Provider + source: status.provider + fullWidth: true + - name: Observed Generation + source: status.observedGeneration body: - - name: Provider - widget: Panel - children: - - name: Provider - source: status.provider - name: Specification widget: Panel children: @@ -51,8 +69,10 @@ data: required: true name: spec.targets children: - - widget: Text - simple: true + - simple: true + enum: "$map($targetServices().items, function($v, $i, $a) { + {'key':$v.status.loadBalancer.ingress.ip , 'name':$v.status.loadBalancer.ingress.ip & ' (' & $v.metadata.name & ')'} + })" placeholder: target.placeholder - path: spec.text name: spec.text diff --git a/kyma/extensions/configuration/issuers.yaml b/kyma/extensions/configuration/issuers.yaml index e35cfb02f0..162472e745 100644 --- a/kyma/extensions/configuration/issuers.yaml +++ b/kyma/extensions/configuration/issuers.yaml @@ -9,22 +9,81 @@ metadata: busola.io/extension-version: '0.5' data: details: |- - header: - - name: spec.acme.email - source: spec.acme.email - - source: 'status.state ? status.state : "UNKNOWN"' - highlights: - informative: - - UNKNOWN - name: status - widget: Badge - description: status.message - - name: spec.acme.server - source: spec.acme.server + status: + header: + - name: status + source: 'status.state ? status.state : "UNKNOWN"' + highlights: + informative: + - UNKNOWN + widget: Badge + description: status.message + body: + - name: status.observedGeneration + source: status.observedGeneration + - name: status.requestsPerDayQuota + source: status.requestsPerDayQuota body: + - name: specification + widget: Panel + children: + - name: issuertype + source: '$exists(spec.acme) ? "ACME" : $exists(spec.ca) ? "CA" : ""' + - name: spec.acme.server + source: spec.acme.server + visibility: $exists(spec.acme) + - name: spec.acme.email + source: spec.acme.email + visibility: $exists(spec.acme) + - name: spec.acme.skipDNSChallengeValidation + source: spec.acme.skipDNSChallengeValidation + visibility: $exists(spec.acme) + - name: spec.acme.autoRegistration + source: spec.acme.autoRegistration + visibility: $exists(spec.acme) + - name: spec.ca.privateKeySecretRef + visibility: $exists(spec.acme) + source: spec.acme.privateKeySecretRef.name + widget: ResourceLink + resource: + namespace: $root.spec.acme.privateKeySecretRef.namespace + kind: "'Secret'" + name: $root.spec.acme.privateKeySecretRef.name + - name: spec.ca.privateKeySecretRef + visibility: $exists(spec.ca) + source: spec.ca.privateKeySecretRef.name + widget: ResourceLink + resource: + namespace: $root.spec.ca.privateKeySecretRef.namespace + kind: "'Secret'" + name: $root.spec.ca.privateKeySecretRef.name + - name: spec.acme.externalAccountBinding.keyID + source: spec.acme.externalAccountBinding.keyID + visibility: $exists(spec.acme) + - name: spec.acme.externalAccountBinding.keySecretRef + visibility: $exists(spec.acme) + source: spec.acme.externalAccountBinding.keySecretRef.name + widget: ResourceLink + resource: + namespace: $root.spec.acme.externalAccountBinding.keySecretRef.namespace + kind: "'Secret'" + name: $root.spec.acme.externalAccountBinding.keySecretRef.name - widget: Columns + visibility: $exists(spec.acme.precheckNameservers) children: - - name: Included domains + - name: spec.acme.precheckNameservers + widget: Table + visibility: $exists(spec.acme.precheckNameservers) + disablePadding: true + showHeader: false + source: spec.acme.precheckNameservers + children: + - source: $item + search: true + - widget: Columns + visibility: $exists(spec.acme) + children: + - name: spec.acme.includeddomains widget: Table disablePadding: true showHeader: false @@ -32,7 +91,7 @@ data: children: - source: $item search: true - - name: Excluded domains + - name: spec.acme.excludeddomains widget: Table disablePadding: true showHeader: false @@ -40,6 +99,10 @@ data: children: - source: $item search: true + - widget: EventList + name: events + filter: "$matchEvents($$, $root.kind, $root.metadata.name)" + hideInvolvedObjects: true form: |- - var: IssuerType dynamicValue: | @@ -66,6 +129,13 @@ data: simple: true placeholder: email.for.registration - path: skipDNSChallengeValidation + - name: spec.acme.precheckNameservers + path: precheckNameservers + widget: SimpleList + children: + - path: '[]' + simple: true + placeholder: spec.acme.precheckNameservers.placeholder - path: privateKeySecretRef widget: ResourceRef provideVar: secret @@ -126,6 +196,8 @@ data: {{[Issuer](https://cert-manager.io/docs/concepts/issuer/)}} is a Namespace resource responsible for provisioning of certificates. list: |- + - name: issuertype + source: '$exists(spec.acme) ? "ACME" : $exists(spec.ca) ? "CA" : ""' - name: spec.acme.email source: spec.acme.email - name: status @@ -168,6 +240,7 @@ data: metadata.creationTimestamp: Created at issuertype: Issuer Type selectissuertype: Select Issuer type + specification: Specification spec.requestsPerDayQuota: Daily Requests Quota spec.acme.email: Email email.for.registration: Email address for user registration @@ -179,7 +252,6 @@ data: spec.acme.excludeddomains: Excluded Domains spec.acme.domainallowed: Domain that is allowed spec.acme.domainforbidden: Domain that is forbidden - status: Status spec.acme.skipDNSChallengeValidation: Skip DNS challenge validation spec.acme.privateKeySecretRef: Private key Secret spec.acme.autoRegistration: Auto registration @@ -187,4 +259,10 @@ data: spec.acme.externalAccountBinding.keyID: CA key ID spec.acme.externalAccountBinding.id: ID of the CA that the external account is bound to spec.acme.externalAccountBinding.keySecretRef: Symmetric MAC Secret + spec.acme.precheckNameservers: Precheck Nameservers + spec.acme.precheckNameservers.placeholder: Format `host` or `host:port`, e.g. "8.8.8.8" or "8.8.8.8:53" spec.ca.privateKeySecretRef: Private key Secret + status: Status + status.observedGeneration: Observed Generation + status.requestsPerDayQuota: Requests per day quota + events: Events diff --git a/kyma/extensions/service-management/servicebindings.yaml b/kyma/extensions/service-management/servicebindings.yaml index 349b016aef..f2395c7584 100644 --- a/kyma/extensions/service-management/servicebindings.yaml +++ b/kyma/extensions/service-management/servicebindings.yaml @@ -8,24 +8,61 @@ metadata: busola.io/extension: resource busola.io/extension-version: '0.5' data: + dataSources: |- + relatedServiceInstance: + resource: + kind: ServiceInstance + group: services.cloud.sap.com + version: v1 + filter: $root.spec.serviceInstanceName = $item.metadata.name + relatedSecret: + resource: + kind: Secret + version: v1 + filter: $root.spec.secretName = $item.metadata.name details: | + resourceGraph: + depth: 1 + dataSources: + - source: relatedServiceInstance + - source: relatedSecret + status: + header: + - name: status + source: status.conditions[$count(status.conditions)-1].reason + highlights: + positive: + - Provisioned + informative: + - NotProvisioned + negative: + - CreateFailed + widget: Badge + description: >- + $filter(status.conditions, function ($v, $i, $a) { $length($v.message) > + 0 })[0].message + body: + - name: status.observedGeneration + source: status.observedGeneration + - name: status.lastCredentialsRotationTime + source: status.lastCredentialsRotationTime + - name: status.bindingID + source: status.bindingID + - name: status.instanceID + source: status.instanceID + - name: status.operationType + source: status.operationType + - name: status.operationURL + source: status.operationURL + - name: conditions + source: status.conditions + widget: ConditionList header: - - name: spec.controlledBy - source: metadata.ownerReferences - widget: ControlledBy - - name: status - source: 'status.conditions[$count(status.conditions)-1].reason' - description: '$filter(status.conditions, function ($v, $i, $a) { $length($v.message) > 0 })[0].message' - widget: Badge - highlights: - positive: - - Provisioned - informative: - - NotProvisioned - negative: - - CreateFailed + - name: metadata.finalizers + source: metadata.finalizers + widget: Labels body: - - name: bindingData + - name: spec.specification widget: Panel children: - name: spec.serviceInstanceName @@ -33,29 +70,60 @@ data: widget: ResourceLink resource: namespace: $root.metadata.namespace - kind: "'ServiceInstance'" + kind: '''ServiceInstance''' name: $root.spec.serviceInstanceName - name: spec.secretName source: spec.secretName widget: ResourceLink resource: namespace: $root.metadata.namespace - kind: "'Secret'" + kind: '''Secret''' name: $root.spec.secretName - name: spec.externalName source: spec.externalName - - name: status.bindingID - source: status.bindingID - - name: status.instanceID - source: status.instanceID + - name: spec.secretKey + source: spec.secretKey + visibility: '$exists($value) ? $boolean($value) : false' + - name: spec.secretRootKey + source: spec.secretRootKey + visibility: '$exists($value) ? $boolean($value) : false' + - name: spec.userInfo + widget: Panel + children: + - name: spec.groups + source: spec.userInfo.groups + widget: Labels + - name: spec.uid + source: spec.userInfo.uid + - name: spec.username + source: spec.userInfo.username + visibility: $exists(spec.userInfo) + - name: spec.credentialsRotationPolicy + widget: Panel + visibility: $exists(spec.credentialsRotationPolicy) + children: + - name: spec.enabled + source: spec.credentialsRotationPolicy.enabled + - name: spec.rotatedBindingTTL + source: spec.credentialsRotationPolicy.rotatedBindingTTL + - name: spec.rotationFrequency + source: spec.credentialsRotationPolicy.rotationFrequency - name: spec.parameters source: spec.parameters widget: CodeViewer - visibility: "$exists($value) ? $boolean($value) : false" + visibility: '$exists($value) ? $boolean($value) : false' - name: spec.parametersFrom source: spec.parametersFrom widget: CodeViewer - visibility: "$exists($value) ? $boolean($value) : false" + visibility: '$exists($value) ? $boolean($value) : false' + - name: spec.secretTemplate + source: spec.secretTemplate + widget: CodeViewer + visibility: '$exists($value) ? $boolean($value) : false' + - widget: EventList + name: Events + filter: "$matchEvents($$, $root.kind, $root.metadata.name)" + hideInvolvedObjects: true form: | - simple: true path: spec.serviceInstanceName @@ -70,7 +138,7 @@ data: version: v1 - simple: true var: separator - value: "" + value: '' - simple: true path: spec.serviceInstanceName required: true @@ -80,9 +148,11 @@ data: - path: spec.externalName placeholder: spec.externalNamePlaceholder - path: spec.secretName + - path: spec.secretKey + - path: spec.secretRootKey - path: spec.parameters widget: CodeEditor - language: "'json'" + language: '''json''' - path: spec.parametersFrom widget: SimpleList defaultExpanded: true @@ -96,9 +166,18 @@ data: provideVar: secret required: false - path: '[].secretKeyRef.key' - enum: '$keys($secret.data)' + enum: $keys($secret.data) required: false placeholder: chooseSecretKey + - path: spec.credentialsRotationPolicy + widget: FormGroup + children: + - path: enabled + - path: rotationFrequency + - path: rotatedBindingTTL + - path: spec.secretTemplate + widget: CodeEditor + language: '''go''' general: | resource: kind: ServiceBinding @@ -112,9 +191,6 @@ data: {{[BTP Service Binding](https://github.com/SAP/sap-btp-service-operator/blob/main/README.md)}} provides access details for an existing service instance. list: | - - name: spec.controlledBy - source: metadata.ownerReferences - widget: ControlledBy - name: spec.serviceInstanceName source: spec.serviceInstanceName widget: ResourceLink @@ -140,9 +216,15 @@ data: metadata.annotations: Annotations metadata.labels: Labels metadata.creationTimestamp: Created at + metadata.finalizers: Finalizers status: Status status.bindingID: Binding ID status.instanceID: InstanceID + status.observedGeneration: Observed Generation + status.lastCredentialsRotationTime: Last Credentials Rotation Time + status.operationURL: Operation URL + status.operationType: Operation Type + spec.specification: Specification spec.secretName: Secret Name spec.externalName: External Name spec.externalNamePlaceholder: Defaults to the Service Binding name if empty @@ -150,5 +232,17 @@ data: spec.controlledBy: Controlled By spec.parameters: Parameters spec.parametersFrom: Parameters from Secrets + spec.credentialsRotationPolicy: Credentials Rotation Policy + spec.secretTemplate: Secret Template + spec.secretKey: Secret Key + spec.secretRootKey: Secret Root Key + spec.enabled: Enabled + spec.rotationFrequency: Rotation Frequency + spec.rotatedBindingTTL: Rotated Binding TTL + spec.userInfo: User Info + spec.groups: Groups + spec.uid: UID + spec.username: Username chooseSecretKey: Choose Secret Key bindingData: Binding Data + conditions: Conditions diff --git a/kyma/extensions/service-management/serviceinstances.yaml b/kyma/extensions/service-management/serviceinstances.yaml index 941dd3b5b9..08eed23bac 100644 --- a/kyma/extensions/service-management/serviceinstances.yaml +++ b/kyma/extensions/service-management/serviceinstances.yaml @@ -16,37 +16,91 @@ data: version: v1 filter: '$item.spec.serviceInstanceName = $root.metadata.name' details: | + resourceGraph: + depth: 1 + dataSources: + - source: myServiceBindings + status: + header: + - name: status + source: 'status.conditions[$count(status.conditions)-1].reason' + description: '$filter(status.conditions, function ($v, $i, $a) { $length($v.message) > 0 })[0].message' + widget: Badge + highlights: + positive: + - Provisioned + informative: + - NotProvisioned + negative: + - CreateFailed + body: + - name: status.observedGeneration + source: status.observedGeneration + - name: status.instanceID + source: status.instanceID + - name: status.operationType + source: status.operationType + - name: status.operationURL + source: status.operationURL + - name: status.tags + source: status.tags + widget: Labels + fullWidth: true + - name: conditions + source: status.conditions + widget: ConditionList header: - - name: status - source: 'status.conditions[$count(status.conditions)-1].reason' - description: '$filter(status.conditions, function ($v, $i, $a) { $length($v.message) > 0 })[0].message' - widget: Badge - highlights: - positive: - - Provisioned - informative: - - NotProvisioned - negative: - - CreateFailed + - name: metadata.finalizers + source: metadata.finalizers + widget: Labels body: - - name: serviceinstancedata + - name: specification widget: Panel children: - name: spec.serviceOfferingName source: spec.serviceOfferingName - name: spec.servicePlanName source: spec.servicePlanName + - name: spec.servicePlanID + source: spec.servicePlanID + visibility: '$exists($value) ? $boolean($value) : false' - name: spec.externalName source: spec.externalName - - name: status.instanceID - source: status.instanceID - - name: BTP Service Binding - source: '$myServiceBindings()' - widget: ResourceList + - name: spec.shared + source: spec.shared + - name: spec.btpAccessCredentialsSecret + source: spec.btpAccessCredentialsSecret + visibility: '$exists($value) ? $boolean($value) : false' + - name: spec.customTags + source: spec.customTags + widget: Labels + visibility: '$exists($value) ? $boolean($value) : false' + - name: spec.userInfo + widget: Panel + children: + - name: spec.groups + source: spec.userInfo.groups + widget: Labels + - name: spec.uid + source: spec.userInfo.uid + - name: spec.username + source: spec.userInfo.username + visibility: $exists(spec.userInfo) - name: spec.parameters source: spec.parameters widget: CodeViewer visibility: '$exists($value) ? $boolean($value) : false' + - name: spec.parametersFrom + source: spec.parametersFrom + widget: CodeViewer + visibility: '$exists($value) ? $boolean($value) : false' + - name: BTP Service Binding + source: '$myServiceBindings()' + widget: ResourceList + - widget: EventList + name: Events + filter: "$matchEvents($$, $root.kind, $root.metadata.name)" + hideInvolvedObjects: true form: | - simple: true path: spec.serviceOfferingName @@ -55,11 +109,36 @@ data: path: spec.servicePlanName required: true placeholder: spec.servicePlanNamePlaceholder + - simple: true + path: spec.servicePlanID - path: spec.externalName placeholder: spec.externalNamePlaceholder + - path: spec.btpAccessCredentialsSecret + - path: spec.shared - path: spec.parameters widget: CodeEditor language: "'json'" + - path: spec.parametersFrom + widget: GenericList + defaultExpanded: true + children: + - path: '[].secretKeyRef.name' + widget: Resource + resource: + kind: Secret + version: v1 + scope: namespace + provideVar: secret + required: false + - path: '[].secretKeyRef.key' + enum: '$keys($secret.data)' + required: false + placeholder: chooseSecretKey + - path: spec.customTags + widget: SimpleList + children: + - path: '[]' + placeholder: spec.enterCustomTag general: | resource: kind: ServiceInstance @@ -92,15 +171,28 @@ data: - CreateFailed translations: | en: - metadata.annotations: Annotations - metadata.labels: Labels - metadata.creationTimestamp: Created at + metadata.finalizers: Finalizers + conditions: Conditions status: Status + status.observedGeneration: Observed Generation + status.operationURL: Operation URL + status.operationType: Operation Type + status.tags: Tags + status.instanceID: Instance ID + specification: Specification spec.externalName: External Name spec.externalNamePlaceholder: Defaults to the instance name if empty spec.servicePlanName: Plan Name spec.servicePlanNamePlaceholder: The plan name to use for the Service Instance spec.serviceOfferingName: Offering Name spec.parameters: Instance Parameters - status.instanceID: Instance ID - serviceinstancedata: Service Instance Data + spec.userInfo: User Info + spec.groups: Groups + spec.uid: UID + spec.username: Username + spec.customTags: Custom Tags + spec.enterCustomTag: Enter custom tag + spec.shared: Shared + spec.btpAccessCredentialsSecret: BTP Access Credentials Secret + spec.servicePlanID: Plan ID + chooseSecretKey: Choose Secret Key diff --git a/tests/kyma/cypress/videos/cluster/test-check-extensions.spec.js.mp4 b/tests/kyma/cypress/videos/cluster/test-check-extensions.spec.js.mp4 deleted file mode 100644 index c1ed607b1e..0000000000 Binary files a/tests/kyma/cypress/videos/cluster/test-check-extensions.spec.js.mp4 and /dev/null differ diff --git a/tests/kyma/cypress/videos/namespace/a-run-before.spec.js.mp4 b/tests/kyma/cypress/videos/namespace/a-run-before.spec.js.mp4 deleted file mode 100644 index 8b73b55b7f..0000000000 Binary files a/tests/kyma/cypress/videos/namespace/a-run-before.spec.js.mp4 and /dev/null differ diff --git a/tests/kyma/cypress/videos/namespace/test-smoke-service-management.spec.js.mp4 b/tests/kyma/cypress/videos/namespace/test-smoke-service-management.spec.js.mp4 deleted file mode 100644 index 61ac81f706..0000000000 Binary files a/tests/kyma/cypress/videos/namespace/test-smoke-service-management.spec.js.mp4 and /dev/null differ diff --git a/tests/kyma/fixtures/kubeconfig.yaml b/tests/kyma/fixtures/kubeconfig.yaml deleted file mode 100644 index a62f66ba48..0000000000 --- a/tests/kyma/fixtures/kubeconfig.yaml +++ /dev/null @@ -1,20 +0,0 @@ ---- -apiVersion: v1 -clusters: - - cluster: - certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTWpVME5EQXlOakF3SGhjTk1qUXdPVEEwTURnMU56UXdXaGNOTXpRd09UQXlNRGcxTnpRdwpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTWpVME5EQXlOakF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRWWZGTjE1RDlGRzVFTjdvSEJEWGlmZWg1RDd0d1g3NVNoZXZYV1FJSEoKeTNTZktoS3RJdXZNMVlhck9vWTRhMjRJeUhUbmtTc2RSdzFQNzNTZFFLbjdvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVUloNTNnS1d3ZWRIbDcrMVBPUkJZCkwzdXBUNW93Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnVWNscWFxdEtML20rUkVRbXRZNWtGMjZKajk1UDhxQmMKbXJxeldtSHZvdVVDSVFDYUxnSFpHSUNNOEpPaFp4NzVLZHNUZHhOQmlMTEJWNTltclZnSHorZFRpZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K - server: https://0.0.0.0:46269 - name: k3d-kyma -contexts: - - context: - cluster: k3d-kyma - user: admin@k3d-kyma - name: k3d-kyma -current-context: k3d-kyma -kind: Config -preferences: {} -users: - - name: admin@k3d-kyma - user: - client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrRENDQVRlZ0F3SUJBZ0lJS0hqVy96RXQ3aEV3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOekkxTkRRd01qWXdNQjRYRFRJME1Ea3dOREE0TlRjME1Gb1hEVEkxTURrdwpOREE0TlRjME1Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJEWUViblQydnR3VmVmeGQKL0kxWnZPRk1hVGkxRzBJdFd2WGxvazFJbnpJTGhwcDYyMEY5b2hHRmkwdWJ2V2plMVZyTThOWDRNY0lnRjM3QgpSM3gvbldlalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVFJXay9BN3FQWW9TTTI2R3R6RTRKTGpFKzJXakFLQmdncWhrak9QUVFEQWdOSEFEQkUKQWlCa0JORlFTaTdNZWlwR29aeEtlVVNSNm9rQXlHckpJSi9hN2F1Wlh6ZElUZ0lnZGlPd0FXR0hiMFBmZGNoTwpiMUNJR011M25laUlzaWVLVmlaUEdqdXN6OFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTWpVME5EQXlOakF3SGhjTk1qUXdPVEEwTURnMU56UXdXaGNOTXpRd09UQXlNRGcxTnpRdwpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTWpVME5EQXlOakF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSQkU5bEN6QjlFVndQYVoyTnk5OEJOR3M5U0xzVGNXOGNoRmREaUNZSjkKdndTdTJEOFZzelFQWmdRRE1mVEpDeE0xQ2RKU1BsazBYNlZsUjhaUVBCMlpvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTBWcFB3TzZqMktFak51aHJjeE9DClM0eFB0bG93Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnZmU1a1NSU1JwVWFMdHh0WFdQaTE1dXZETm4xN3BCZ2wKTjNtQnRjV2JCQVVDSVFEd1pPN2xHZDJZdHN1TFRaWHowNWVLbE5GYmc0Q3draFFJOVhQbnlDSXVmZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K - client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUc5OUVvNnR0L0VPSXJncDMrQzVqTDlvSnFJWDRBcGt5SXV6YnhkajA1Ym1vQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFTmdSdWRQYSszQlY1L0YzOGpWbTg0VXhwT0xVYlFpMWE5ZVdpVFVpZk1ndUdtbnJiUVgyaQpFWVdMUzV1OWFON1ZXc3p3MWZneHdpQVhmc0ZIZkgrZFp3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= diff --git a/tests/kyma/package.json b/tests/kyma/package.json index 815047f270..d91f84a42d 100644 --- a/tests/kyma/package.json +++ b/tests/kyma/package.json @@ -3,7 +3,7 @@ "description": "UI tests for Kyma-Dashboard", "scripts": { "start": "cypress open", - "start:local": "CYPRESS_LOCAL_DEV=true cypress open", + "start:local": "CYPRESS_LOCAL_DEV=true cypress open --config watchForFileChanges=false", "test:cluster": "cypress run --spec \"tests/cluster/*.spec.js\" --browser chromium", "test:namespace": "cypress run --spec \"tests/namespace/*.spec.js\" --browser chromium", "test:cluster:local": "CYPRESS_LOCAL_DEV=true cypress run --spec \"tests/cluster/*.spec.js,tests/extensibility/*.spec.js\" --browser chrome", diff --git a/tests/kyma/support/commands.js b/tests/kyma/support/commands.js index 3d0d9490a5..7ef494426a 100644 --- a/tests/kyma/support/commands.js +++ b/tests/kyma/support/commands.js @@ -189,8 +189,6 @@ Cypress.Commands.add( cy.contains('ui5-link', resourceName).should('be.visible'); } - cy.contains('ui5-message-strip', /created/).should('not.exist'); - cy.get('ui5-button[data-testid="delete"]').click(); if (confirmationEnabled) { @@ -201,7 +199,7 @@ Cypress.Commands.add( .click(); if (deletedVisible) { - cy.contains('ui5-message-strip', /deleted/).should('be.visible'); + cy.contains('ui5-toast', /deleted/).should('be.visible'); } if (clearSearch) { diff --git a/tests/kyma/tests/cluster/test-kyma-modules.spec.js b/tests/kyma/tests/cluster/test-kyma-modules.spec.js index 8a0ea7e7f6..0e7972e583 100644 --- a/tests/kyma/tests/cluster/test-kyma-modules.spec.js +++ b/tests/kyma/tests/cluster/test-kyma-modules.spec.js @@ -144,7 +144,7 @@ context('Test Kyma Modules views', () => { .contains('Save') .click(); - cy.get('ui5-message-strip') + cy.get('ui5-toast') .contains('Kyma updated') .should('be.visible'); diff --git a/tests/kyma/tests/cluster/test-kyma-version.spec.js b/tests/kyma/tests/cluster/test-kyma-version.spec.js index 78d854582d..7e19b2017d 100644 --- a/tests/kyma/tests/cluster/test-kyma-version.spec.js +++ b/tests/kyma/tests/cluster/test-kyma-version.spec.js @@ -32,6 +32,7 @@ context('Test Kyma version', () => { it('Fails gracefully', () => { cy.setBusolaFeature('SHOW_KYMA_VERSION', true); mockKymaSystemForbidden(); + cy.loginAndSelectCluster(); cy.contains('Kubernetes:').should('exist'); diff --git a/tests/kyma/tests/namespace/test-dns-entries.spec.js b/tests/kyma/tests/namespace/test-dns-entries.spec.js index 23fbcaa0f5..3d1a3e1b82 100644 --- a/tests/kyma/tests/namespace/test-dns-entries.spec.js +++ b/tests/kyma/tests/namespace/test-dns-entries.spec.js @@ -61,8 +61,7 @@ context('Test DNS Entries', () => { .should('have.attr', 'readonly'); // change from A to CNAME - cy.get('[placeholder^="Enter the A record target"]:visible') - .find('input') + cy.get('input[placeholder^="Enter the A record target"]:visible') .last() .type('example.com', { force: true });