diff --git a/ci-operator/config/osac-project/fulfillment-service/osac-project-fulfillment-service-main.yaml b/ci-operator/config/osac-project/fulfillment-service/osac-project-fulfillment-service-main.yaml index 5507d96052af7..625bfdf27d8d0 100644 --- a/ci-operator/config/osac-project/fulfillment-service/osac-project-fulfillment-service-main.yaml +++ b/ci-operator/config/osac-project/fulfillment-service/osac-project-fulfillment-service-main.yaml @@ -34,6 +34,8 @@ images: - destination_dir: . source_path: /tmp/osac to: osac-cli + - dockerfile_path: Containerfile + to: fulfillment-service - dockerfile_path: Containerfile to: fulfillment-service-pr - dockerfile_literal: | diff --git a/ci-operator/config/osac-project/osac-test-infra/osac-project-osac-test-infra-main.yaml b/ci-operator/config/osac-project/osac-test-infra/osac-project-osac-test-infra-main.yaml index 76c52924fedb3..5d23279324877 100644 --- a/ci-operator/config/osac-project/osac-test-infra/osac-project-osac-test-infra-main.yaml +++ b/ci-operator/config/osac-project/osac-test-infra/osac-project-osac-test-infra-main.yaml @@ -27,10 +27,22 @@ base_images: name: test namespace: ocp-kni tag: dev-scripts + fulfillment-service: + name: latest + namespace: osac-project + tag: fulfillment-service + osac-aap: + name: latest + namespace: osac-project + tag: osac-aap osac-installer: name: latest namespace: osac-project tag: osac-installer + osac-operator: + name: latest + namespace: osac-project + tag: osac-operator build_root: image_stream_tag: name: release @@ -67,6 +79,23 @@ tests: - intranet steps: workflow: osac-project-cluster-tool-vmaas +- as: nightly-e2e-vmaas + capabilities: + - intranet + cron: 0 3 * * * + steps: + cluster_profile: packet-assisted + env: + ASSISTED_CONFIG: | + OLM_OPERATORS=cnv,lvm + NUM_MASTERS=1 + NUM_WORKERS=0 + MASTER_MEMORY=65536 + MASTER_DISK_COUNT=2 + MASTER_DISK=200000000000 + MASTER_CPU=24 + OPENSHIFT_VERSION=4.20 + workflow: osac-project-ofcir-baremetal-nightly - as: e2e-metal-vmaas-compute-instance-creation capabilities: - intranet diff --git a/ci-operator/jobs/osac-project/osac-test-infra/osac-project-osac-test-infra-main-periodics.yaml b/ci-operator/jobs/osac-project/osac-test-infra/osac-project-osac-test-infra-main-periodics.yaml index 0f6874ef2bb98..8a533aa34e8f2 100644 --- a/ci-operator/jobs/osac-project/osac-test-infra/osac-project-osac-test-infra-main-periodics.yaml +++ b/ci-operator/jobs/osac-project/osac-test-infra/osac-project-osac-test-infra-main-periodics.yaml @@ -679,3 +679,88 @@ periodics: - name: result-aggregator secret: secretName: result-aggregator +- agent: kubernetes + cluster: build03 + cron: 0 3 * * * + decorate: true + decoration_config: + sparse_checkout_files: + - Containerfile + extra_refs: + - base_ref: main + org: osac-project + repo: osac-test-infra + sparse_checkout_files: + - Containerfile + labels: + capability/intranet: intranet + ci-operator.openshift.io/cloud: packet-edge + ci-operator.openshift.io/cloud-cluster-profile: packet-assisted + ci.openshift.io/generator: prowgen + job-release: "4.20" + pj-rehearse.openshift.io/can-be-rehearsed: "true" + name: periodic-ci-osac-project-osac-test-infra-main-nightly-e2e-vmaas + spec: + containers: + - args: + - --gcs-upload-secret=/secrets/gcs/service-account.json + - --image-import-pull-secret=/etc/pull-secret/.dockerconfigjson + - --lease-server-credentials-file=/etc/boskos/credentials + - --report-credentials-file=/etc/report/credentials + - --secret-dir=/secrets/ci-pull-credentials + - --target=nightly-e2e-vmaas + command: + - ci-operator + env: + - name: HTTP_SERVER_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + image: quay-proxy.ci.openshift.org/openshift/ci:ci_ci-operator_latest + imagePullPolicy: Always + name: "" + ports: + - containerPort: 8080 + name: http + resources: + requests: + cpu: 10m + volumeMounts: + - mountPath: /etc/boskos + name: boskos + readOnly: true + - mountPath: /secrets/ci-pull-credentials + name: ci-pull-credentials + readOnly: true + - mountPath: /secrets/gcs + name: gcs-credentials + readOnly: true + - mountPath: /secrets/manifest-tool + name: manifest-tool-local-pusher + readOnly: true + - mountPath: /etc/pull-secret + name: pull-secret + readOnly: true + - mountPath: /etc/report + name: result-aggregator + readOnly: true + serviceAccountName: ci-operator + volumes: + - name: boskos + secret: + items: + - key: credentials + path: credentials + secretName: boskos-credentials + - name: ci-pull-credentials + secret: + secretName: ci-pull-credentials + - name: manifest-tool-local-pusher + secret: + secretName: manifest-tool-local-pusher + - name: pull-secret + secret: + secretName: registry-pull-credentials + - name: result-aggregator + secret: + secretName: result-aggregator diff --git a/ci-operator/step-registry/osac-project/baremetal/test-all/OWNERS b/ci-operator/step-registry/osac-project/baremetal/test-all/OWNERS new file mode 100644 index 0000000000000..1511b88a190fd --- /dev/null +++ b/ci-operator/step-registry/osac-project/baremetal/test-all/OWNERS @@ -0,0 +1,4 @@ +approvers: + - osac-cicd +reviewers: + - osac-cicd diff --git a/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-commands.sh b/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-commands.sh new file mode 100755 index 0000000000000..675700bc3cbfc --- /dev/null +++ b/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-commands.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +set -o nounset +set -o errexit +set -o pipefail + +echo "Running ALL vmaas E2E tests" + +REMOTE_RESULTS_DIR="/tmp/test-results" + +function collect_artifacts() { + echo "Collecting test artifacts..." + timeout -s 9 2m scp -F "${SHARED_DIR}/ssh_config" \ + "ci_machine:${REMOTE_RESULTS_DIR}/junit_vmaas.xml" \ + "${ARTIFACT_DIR}/junit_vmaas.xml" 2>/dev/null || true +} +trap collect_artifacts EXIT + +echo "Collecting deployed component versions..." +ssh -F "${SHARED_DIR}/ssh_config" ci_machine bash -s "${E2E_NAMESPACE}" <<'VERSION_EOF' > "${SHARED_DIR}/versions.txt" +KUBECONFIG=$(find ${KUBECONFIG} -type f -print -quit 2>/dev/null) +NS="$1" +for deploy in fulfillment-grpc-server fulfillment-controller osac-operator-controller-manager; do + IMG=$(oc get deploy "${deploy}" -n "${NS}" -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null) || continue + echo "${deploy}=${IMG}" +done +VERSION_EOF +echo "Versions written to SHARED_DIR" + +TEST_EXIT=0 +timeout -s 9 90m ssh -F "${SHARED_DIR}/ssh_config" ci_machine bash -s \ + "${E2E_NAMESPACE}" \ + "${E2E_VM_TEMPLATE}" \ + "${E2E_CLUSTER_TEMPLATE}" \ + "${OSAC_TEST_IMAGE}" \ + "${REMOTE_RESULTS_DIR}" \ + <<'REMOTE_EOF' || TEST_EXIT=$? +set -euo pipefail + +NAMESPACE="$1" +VM_TEMPLATE="$2" +CLUSTER_TEMPLATE="$3" +TEST_IMAGE="$4" +RESULTS_DIR="$5" + +mkdir -p "${RESULTS_DIR}" + +KUBECONFIG=$(find ${KUBECONFIG} -type f -print -quit 2>/dev/null) +[[ -z "${KUBECONFIG}" ]] && echo "ERROR: No kubeconfig found" && exit 1 + +PULL_SECRET_PATH="/root/pull-secret" + +set +x +podman run --authfile "${PULL_SECRET_PATH}" --rm --network=host \ + -v "${KUBECONFIG}:/root/.kube/config:z" \ + -v "${PULL_SECRET_PATH}:/root/pull-secret:z" \ + -v "${RESULTS_DIR}":/tmp/test-results:z \ + -e KUBECONFIG=/root/.kube/config \ + -e OSAC_VM_KUBECONFIG=/root/.kube/config \ + -e OSAC_NAMESPACE="${NAMESPACE}" \ + -e OSAC_VM_TEMPLATE="${VM_TEMPLATE}" \ + -e OSAC_CLUSTER_TEMPLATE="${CLUSTER_TEMPLATE}" \ + -e OSAC_PULL_SECRET_PATH=/root/pull-secret \ + "${TEST_IMAGE}" \ + make test-vmaas +REMOTE_EOF + +if [[ "${TEST_EXIT}" -ne 0 ]]; then + echo "FAILED" > "${SHARED_DIR}/test-result" + echo "Some tests failed (exit code: ${TEST_EXIT})" + exit "${TEST_EXIT}" +fi + +echo "PASSED" > "${SHARED_DIR}/test-result" +echo "All tests passed." diff --git a/ci-operator/step-registry/osac-project/installer/component/osac-project-installer-component-ref.metadata.json b/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-ref.metadata.json similarity index 51% rename from ci-operator/step-registry/osac-project/installer/component/osac-project-installer-component-ref.metadata.json rename to ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-ref.metadata.json index d126d5daa3c9d..77e2b54103ec9 100644 --- a/ci-operator/step-registry/osac-project/installer/component/osac-project-installer-component-ref.metadata.json +++ b/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-ref.metadata.json @@ -1,5 +1,5 @@ { - "path": "osac-project/installer/component/osac-project-installer-component-ref.yaml", + "path": "osac-project/baremetal/test-all/osac-project-baremetal-test-all-ref.yaml", "owners": { "approvers": [ "osac-cicd" diff --git a/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-ref.yaml b/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-ref.yaml new file mode 100644 index 0000000000000..d54dc5a43e4f4 --- /dev/null +++ b/ci-operator/step-registry/osac-project/baremetal/test-all/osac-project-baremetal-test-all-ref.yaml @@ -0,0 +1,26 @@ +ref: + as: osac-project-baremetal-test-all + from: dev-scripts + dependencies: + - name: osac-test-infra + env: OSAC_TEST_IMAGE + grace_period: 10m + timeout: 2h0m0s + commands: osac-project-baremetal-test-all-commands.sh + resources: + requests: + cpu: 100m + memory: 200Mi + env: + - name: E2E_NAMESPACE + default: "osac-e2e-ci" + documentation: The namespace to use for the e2e tests + - name: E2E_VM_TEMPLATE + default: "osac.templates.ocp_virt_vm" + documentation: The VM template to use for vmaas tests + - name: E2E_CLUSTER_TEMPLATE + default: "osac.templates.ocp_4_17_small" + documentation: The cluster template to use for CaaS tests + documentation: |- + Runs all vmaas e2e tests on a full-installation cluster via make test-vmaas. + Produces JUnit XML for per-test reporting in Prow. diff --git a/ci-operator/step-registry/osac-project/installer/all-latest/OWNERS b/ci-operator/step-registry/osac-project/installer/all-latest/OWNERS new file mode 100644 index 0000000000000..1511b88a190fd --- /dev/null +++ b/ci-operator/step-registry/osac-project/installer/all-latest/OWNERS @@ -0,0 +1,4 @@ +approvers: + - osac-cicd +reviewers: + - osac-cicd diff --git a/ci-operator/step-registry/osac-project/installer/all-latest/osac-project-installer-all-latest-commands.sh b/ci-operator/step-registry/osac-project/installer/all-latest/osac-project-installer-all-latest-commands.sh new file mode 100755 index 0000000000000..0f45674d2bead --- /dev/null +++ b/ci-operator/step-registry/osac-project/installer/all-latest/osac-project-installer-all-latest-commands.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +set -o nounset +set -o errexit +set -o pipefail + +echo "************ osac-installer-all-latest commands ************" +echo "E2E_NAMESPACE: ${E2E_NAMESPACE}" +echo "E2E_KUSTOMIZE_OVERLAY: ${E2E_KUSTOMIZE_OVERLAY}" +echo "E2E_VM_TEMPLATE: ${E2E_VM_TEMPLATE}" +echo "OSAC_INSTALLER_IMAGE: ${OSAC_INSTALLER_IMAGE}" +echo "FULFILLMENT_IMAGE: ${FULFILLMENT_IMAGE}" +echo "OPERATOR_IMAGE: ${OPERATOR_IMAGE}" +echo "AAP_IMAGE: ${AAP_IMAGE}" +echo "-------------------------------------------" + +base64 -d /var/run/osac-installer-aap/license > /tmp/license.zip + +timeout -s 9 10m scp -F "${SHARED_DIR}/ssh_config" /tmp/license.zip ci_machine:/tmp/license.zip + +timeout -s 9 120m ssh -F "${SHARED_DIR}/ssh_config" ci_machine bash - << EOF|& sed -e 's/.*auths\{0,1\}".*/*** PULL_SECRET ***/g' +set -euo pipefail + +export KUBECONFIG=\$(find \${KUBECONFIG} -type f -print -quit) + +oc annotate sc lvms-vg1 storageclass.kubernetes.io/is-default-class=true --overwrite + +echo "Waiting for OpenShift Virtualization to be ready..." +oc wait --for=condition=Available hyperconverged/kubevirt-hyperconverged -n openshift-cnv --timeout=900s + +cat < /tmp/license.zip - -timeout -s 9 10m scp -F "${SHARED_DIR}/ssh_config" /tmp/license.zip ci_machine:/tmp/license.zip - -timeout -s 9 120m ssh -F "${SHARED_DIR}/ssh_config" ci_machine bash - << EOF|& sed -e 's/.*auths\{0,1\}".*/*** PULL_SECRET ***/g' - -export KUBECONFIG=\$(find \${KUBECONFIG} -type f -print -quit) - -oc annotate sc lvms-vg1 storageclass.kubernetes.io/is-default-class=true --overwrite - -echo "Waiting for OpenShift Virtualization to be ready..." -oc wait --for=condition=Available hyperconverged/kubevirt-hyperconverged -n openshift-cnv --timeout=900s - -cat < \${COMPONENT_IMAGE}" -cd /installer/base - -if ! grep -Fq "name: \${COMPONENT_IMAGE_NAME}" kustomization.yaml; then - echo "ERROR: image name \${COMPONENT_IMAGE_NAME} not found in /installer/base/kustomization.yaml" >&2 - cat kustomization.yaml >&2 - exit 1 -fi - -if grep -A1 "name: \${COMPONENT_IMAGE_NAME}" kustomization.yaml | grep -q "newName:"; then - sed -i "\#name: \${COMPONENT_IMAGE_NAME}#,/newTag:/{ - s|newName:.*|newName: \${COMPONENT_REGISTRY}| - s|newTag:.*|newTag: \${COMPONENT_TAG}| - }" kustomization.yaml -else - sed -i "\#name: \${COMPONENT_IMAGE_NAME}#{ - a\\ newName: \${COMPONENT_REGISTRY} - n - s|newTag:.*|newTag: \${COMPONENT_TAG}| - }" kustomization.yaml -fi - -if ! grep -Fq "\${COMPONENT_REGISTRY}" kustomization.yaml || ! grep -Fq "newTag: \${COMPONENT_TAG}" kustomization.yaml; then - echo "ERROR: kustomize image override failed — expected \${COMPONENT_REGISTRY}:\${COMPONENT_TAG}" >&2 - cat kustomization.yaml >&2 - exit 1 -fi - -if [ -n "\${AAP_EE_IMAGE_OVERRIDE}" ]; then - overlay_file="/installer/overlays/\${INSTALLER_KUSTOMIZE_OVERLAY}/kustomization.yaml" - if ! grep -q "AAP_EE_IMAGE=" "\${overlay_file}"; then - echo "ERROR: AAP_EE_IMAGE entry not found in \${overlay_file}" >&2 - exit 1 - fi - echo "Overriding AAP_EE_IMAGE -> \${COMPONENT_IMAGE}" - sed -i "s|AAP_EE_IMAGE=.*|AAP_EE_IMAGE=\${COMPONENT_IMAGE}|" "\${overlay_file}" -fi - -cd /installer -sh scripts/setup.sh -' - -EOF diff --git a/ci-operator/step-registry/osac-project/ofcir/baremetal/component/OWNERS b/ci-operator/step-registry/osac-project/ofcir/baremetal/component/OWNERS deleted file mode 100644 index 423362005a084..0000000000000 --- a/ci-operator/step-registry/osac-project/ofcir/baremetal/component/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -approvers: -- osac-cicd -options: {} -reviewers: -- osac-cicd diff --git a/ci-operator/step-registry/osac-project/ofcir/baremetal/component/osac-project-ofcir-baremetal-component-workflow.metadata.json b/ci-operator/step-registry/osac-project/ofcir/baremetal/component/osac-project-ofcir-baremetal-component-workflow.metadata.json deleted file mode 100644 index 4d748eaa533e5..0000000000000 --- a/ci-operator/step-registry/osac-project/ofcir/baremetal/component/osac-project-ofcir-baremetal-component-workflow.metadata.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "path": "osac-project/ofcir/baremetal/component/osac-project-ofcir-baremetal-component-workflow.yaml", - "owners": { - "approvers": [ - "osac-cicd" - ], - "reviewers": [ - "osac-cicd" - ] - } -} \ No newline at end of file diff --git a/ci-operator/step-registry/osac-project/ofcir/baremetal/component/osac-project-ofcir-baremetal-component-workflow.yaml b/ci-operator/step-registry/osac-project/ofcir/baremetal/component/osac-project-ofcir-baremetal-component-workflow.yaml deleted file mode 100644 index 678b0ef9a27ad..0000000000000 --- a/ci-operator/step-registry/osac-project/ofcir/baremetal/component/osac-project-ofcir-baremetal-component-workflow.yaml +++ /dev/null @@ -1,24 +0,0 @@ -workflow: - as: osac-project-ofcir-baremetal-component - steps: - cluster_profile: packet-assisted - allow_best_effort_post_steps: true - allow_skip_on_success: true - pre: - - ref: ofcir-acquire - - ref: assisted-ofcir-setup - - chain: assisted-common-pre - - ref: osac-project-installer-component - test: - - ref: osac-project-baremetal-test - post: - - ref: osac-project-gather - - ref: ofcir-gather - - ref: ofcir-release - env: - CLUSTERTYPE: "assisted_medium_el9" - documentation: |- - This workflow executes the common end-to-end osac-test-infra test suite on a cluster - provisioned by running assisted-installer on a packet server. Unlike the base workflow, - this variant overrides a single component image with a CI-built version from a PR, - enabling E2E validation of component repo changes before merge. diff --git a/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/OWNERS b/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/OWNERS new file mode 100644 index 0000000000000..1511b88a190fd --- /dev/null +++ b/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/OWNERS @@ -0,0 +1,4 @@ +approvers: + - osac-cicd +reviewers: + - osac-cicd diff --git a/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/osac-project-ofcir-baremetal-nightly-workflow.metadata.json b/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/osac-project-ofcir-baremetal-nightly-workflow.metadata.json new file mode 100644 index 0000000000000..16f261d14ca90 --- /dev/null +++ b/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/osac-project-ofcir-baremetal-nightly-workflow.metadata.json @@ -0,0 +1,11 @@ +{ + "path": "osac-project/ofcir/baremetal/nightly/osac-project-ofcir-baremetal-nightly-workflow.yaml", + "owners": { + "approvers": [ + "osac-cicd" + ], + "reviewers": [ + "osac-cicd" + ] + } +} \ No newline at end of file diff --git a/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/osac-project-ofcir-baremetal-nightly-workflow.yaml b/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/osac-project-ofcir-baremetal-nightly-workflow.yaml new file mode 100644 index 0000000000000..af01f89974b3a --- /dev/null +++ b/ci-operator/step-registry/osac-project/ofcir/baremetal/nightly/osac-project-ofcir-baremetal-nightly-workflow.yaml @@ -0,0 +1,25 @@ +workflow: + as: osac-project-ofcir-baremetal-nightly + steps: + cluster_profile: packet-assisted + allow_best_effort_post_steps: true + pre: + - ref: ofcir-acquire + - ref: assisted-ofcir-setup + - chain: assisted-common-pre + - ref: osac-project-installer-all-latest + test: + - ref: osac-project-baremetal-test-all + post: + - ref: osac-project-notify + - ref: osac-project-gather + - ref: ofcir-gather + - ref: ofcir-release + env: + CLUSTERTYPE: "assisted_large_el9" + documentation: |- + Nightly full-installation E2E workflow. Provisions a baremetal cluster + via assisted-installer, installs OSAC with all component images + overridden to latest, runs all vmaas tests, and sends a Slack + notification with pass/fail, component versions, and Prow log link. + Notifications only fire for periodic jobs.