diff --git a/ci-operator/config/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main__metal-5.0-nightly-x86.yaml b/ci-operator/config/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main__metal-5.0-nightly-x86.yaml index 39dd1cf4b63fb..5b17b3473d252 100644 --- a/ci-operator/config/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main__metal-5.0-nightly-x86.yaml +++ b/ci-operator/config/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main__metal-5.0-nightly-x86.yaml @@ -107,6 +107,47 @@ tests: - ref: openshift-qe-installer-bm-day2-network-workloads-post - ref: openshift-qe-egressip - ref: openshift-qe-evpn +- as: daily-telco-core-6nodes + capabilities: + - intranet + cron: 0 19 * * * + reporter_config: + channel: '#ocp-qe-scale-ci-results' + job_states_to_report: + - success + - failure + - error + report_template: '{{if eq .Status.State "success"}} :white_check_mark: Job *{{.Spec.Job}}* + ended with *{{.Status.State}}*. <{{.Status.URL}}|View logs> :white_check_mark: + {{else}} :warning: Job *{{.Spec.Job}}* ended with *{{.Status.State}}*. <{{.Status.URL}}|View + logs> :warning: {{end}}' + restrict_network_access: false + steps: + allow_skip_on_success: true + cluster_profile: metal-perfscale-cpt + env: + CHURN_CYCLES: "2" + CHURN_PERCENT: "50" + EXTRA_FLAGS: --perf-profile=cpt-pao --gc-metrics=false --gc=true --phased=true + --idle-duration=15m + ITERATIONS: "15" + LABEL: node-role.kubernetes.io/worker-dpdk,node-role.kubernetes.io/worker-metallb + OCP_BUILD: dev + OPERATOR_SOURCE_INDEX: prega-operator-index + RUN_ORION: "true" + TELCO: "true" + post: + - ref: openshift-qe-installer-bm-gather-extra + - ref: openshift-qe-installer-bm-must-gather + test: + - ref: openshift-qe-installer-bm-day2-label + - ref: openshift-qe-installer-bm-day2-prega-operators + - ref: openshift-qe-installer-bm-day2-sriov + - ref: openshift-qe-installer-bm-day2-metallb + - ref: openshift-qe-installer-bm-day2-perf-profile-rds-core + - ref: openshift-qe-rds-core + - ref: openshift-qe-orion-rds-core + workflow: openshift-qe-installer-bm-deploy zz_generated_metadata: branch: main org: openshift-eng diff --git a/ci-operator/jobs/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main-periodics.yaml b/ci-operator/jobs/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main-periodics.yaml index 9b754e6a03cc5..1a0bf57ceffb8 100644 --- a/ci-operator/jobs/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main-periodics.yaml +++ b/ci-operator/jobs/openshift-eng/ocp-perfscale/openshift-eng-ocp-perfscale-main-periodics.yaml @@ -5235,6 +5235,101 @@ periodics: - name: result-aggregator secret: secretName: result-aggregator +- agent: kubernetes + cluster: build12 + cron: 0 19 * * * + decorate: true + decoration_config: + skip_cloning: true + extra_refs: + - base_ref: main + org: openshift-eng + repo: ocp-perfscale + labels: + capability/intranet: intranet + ci-operator.openshift.io/cloud: metal-perfscale-cpt + ci-operator.openshift.io/cloud-cluster-profile: metal-perfscale-cpt + ci-operator.openshift.io/variant: metal-5.0-nightly-x86 + ci.openshift.io/generator: prowgen + job-release: "5.0" + pj-rehearse.openshift.io/can-be-rehearsed: "true" + name: periodic-ci-openshift-eng-ocp-perfscale-main-metal-5.0-nightly-x86-daily-telco-core-6nodes + reporter_config: + slack: + channel: '#ocp-qe-scale-ci-results' + job_states_to_report: + - success + - failure + - error + report_template: '{{if eq .Status.State "success"}} :white_check_mark: Job *{{.Spec.Job}}* + ended with *{{.Status.State}}*. <{{.Status.URL}}|View logs> :white_check_mark: + {{else}} :warning: Job *{{.Spec.Job}}* ended with *{{.Status.State}}*. <{{.Status.URL}}|View + logs> :warning: {{end}}' + 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=daily-telco-core-6nodes + - --variant=metal-5.0-nightly-x86 + 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 - agent: kubernetes cluster: build12 cron: 30 0 * * * diff --git a/ci-operator/step-registry/openshift-qe/installer/bm/day2/prega-operators/openshift-qe-installer-bm-day2-prega-operators-commands.sh b/ci-operator/step-registry/openshift-qe/installer/bm/day2/prega-operators/openshift-qe-installer-bm-day2-prega-operators-commands.sh index e8dfcc6f4091a..3364caf007285 100644 --- a/ci-operator/step-registry/openshift-qe/installer/bm/day2/prega-operators/openshift-qe-installer-bm-day2-prega-operators-commands.sh +++ b/ci-operator/step-registry/openshift-qe/installer/bm/day2/prega-operators/openshift-qe-installer-bm-day2-prega-operators-commands.sh @@ -13,17 +13,40 @@ bastion=$(cat ${CLUSTER_PROFILE_DIR}/address) get_idms_manifest() { echo "Getting the ImageDigestMirrorSet manifest from the PREGA build server" QUAY_URL="https://quay.io/api/v1/repository/prega/prega-operator-index/tag/?limit=100&page=1" - OCP_VERSION=$(oc get clusterversion --no-headers | grep -o '[4].[0-9][0-9]' | head -1 | awk '{print "v"$0}') + OCP_VERSION=$(oc get clusterversion --no-headers | grep -oE '[0-9]+\.[0-9]+' | head -1 | awk '{print "v"$0}') DIGEST=$(curl -s -H "Authorization: Bearer ${QUAY_ACCESS_TOKEN}" ${QUAY_URL} | jq -r --arg tag "$OCP_VERSION" '.tags[] | select(.name == $tag) | .manifest_digest' | head -1) OPERATOR_PREGA_VERSION=$(curl -s -H "Authorization: Bearer ${QUAY_ACCESS_TOKEN}" ${QUAY_URL} | jq -r --arg digest "$DIGEST" --arg tag "$OCP_VERSION" '.tags[] | select(.manifest_digest == $digest and .name != $tag) | .name' | sort -u) + if [[ -z "${OPERATOR_PREGA_VERSION}" ]]; then + echo "OPERATOR_PREGA_VERSION could not be resolved from Quay; falling back to OCP_VERSION: ${OCP_VERSION}" + OPERATOR_PREGA_VERSION="${OCP_VERSION}" + fi echo "PREGA Operator Version: ${OPERATOR_PREGA_VERSION} for OCP Version: ${OCP_VERSION}" ssh ${SSH_ARGS} root@${bastion} " set -e set -o pipefail - curl -k -o /tmp/idms.yaml https://${PREGA_BUILD_SERVER_IP}/${OPERATOR_PREGA_VERSION}/imageDigestMirrorSet.yaml + curl -k -o /tmp/idms_${OCP_VERSION}.yaml https://${PREGA_BUILD_SERVER_IP}/${OPERATOR_PREGA_VERSION}/imageDigestMirrorSet.yaml " - scp -q ${SSH_ARGS} root@${bastion}:/tmp/idms.yaml /tmp/idms.yaml - echo "ImageDigestMirrorSet manifest saved to /tmp/idms.yaml" + scp -q ${SSH_ARGS} root@${bastion}:/tmp/idms_${OCP_VERSION}.yaml /tmp/idms_${OCP_VERSION}.yaml + + validate_yaml() { + local f="$1" + [[ -s "$f" ]] || return 1 + if command -v yq &>/dev/null; then + yq eval '.apiVersion == "config.openshift.io/v1" and .kind == "ImageDigestMirrorSet"' "$f" 2>/dev/null | grep -q '^true$' + else + grep -qx 'apiVersion: config.openshift.io/v1' "$f" && + grep -qx 'kind: ImageDigestMirrorSet' "$f" + fi + } + + if ! validate_yaml /tmp/idms_${OCP_VERSION}.yaml; then + echo "Downloaded /tmp/idms_${OCP_VERSION}.yaml is not valid YAML; falling back to bastion artifact for ${OCP_VERSION}" + scp -q ${SSH_ARGS} root@${bastion}:/root/prega_artifacts/idms_${OCP_VERSION}.yaml /tmp/idms_${OCP_VERSION}.yaml + validate_yaml /tmp/idms_${OCP_VERSION}.yaml \ + || { echo "Fallback IDMS /root/prega_artifacts/idms_${OCP_VERSION}.yaml is also invalid or missing"; exit 1; } + fi + + echo "ImageDigestMirrorSet manifest saved to /tmp/idms_${OCP_VERSION}.yaml" } oc config view @@ -39,15 +62,13 @@ if [ ${OCP_BUILD} == "dev" ]; then jq -s '.[0] * .[1]' /tmp/existing_pull_secret.json /tmp/prega_pull_secret.json > /tmp/merged_pull_secret.json oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/merged_pull_secret.json sleep 300 - kubectl wait --for jsonpath='{.status.updatedMachineCount}'="$(oc get node --no-headers -l node-role.kubernetes.io/worker= | wc -l)" --timeout=60m mcp worker - oc adm wait-for-stable-cluster --minimum-stable-period=2m --timeout=20m + oc adm wait-for-stable-cluster --minimum-stable-period=2m --timeout=40m echo "Applying the ImageDigestMirrorSet manifest" get_idms_manifest - oc apply -f /tmp/idms.yaml + oc apply -f /tmp/idms_${OCP_VERSION}.yaml sleep 300 - kubectl wait --for jsonpath='{.status.updatedMachineCount}'="$(oc get node --no-headers -l node-role.kubernetes.io/worker= | wc -l)" --timeout=60m mcp worker - oc adm wait-for-stable-cluster --minimum-stable-period=2m --timeout=20m + oc adm wait-for-stable-cluster --minimum-stable-period=2m --timeout=40m echo "Creating CatalogSource for PREGA Operator Index" cat << EOF| oc apply -f - diff --git a/ci-operator/step-registry/openshift-qe/installer/bm/day2/sriov/openshift-qe-installer-bm-day2-sriov-commands.sh b/ci-operator/step-registry/openshift-qe/installer/bm/day2/sriov/openshift-qe-installer-bm-day2-sriov-commands.sh index c05462e67fe7b..8154afcb7e171 100644 --- a/ci-operator/step-registry/openshift-qe/installer/bm/day2/sriov/openshift-qe-installer-bm-day2-sriov-commands.sh +++ b/ci-operator/step-registry/openshift-qe/installer/bm/day2/sriov/openshift-qe-installer-bm-day2-sriov-commands.sh @@ -6,7 +6,16 @@ set -x cat /etc/os-release SRIOV_NUM_VFS=$(cat ${CLUSTER_PROFILE_DIR}/config | jq ".sriov_num_vfs") -SRIOV_PF_NAME=$(cat ${CLUSTER_PROFILE_DIR}/sriov_pf_name) +RHCOS_VERSION=$(oc get nodes -l node-role.kubernetes.io/worker -o jsonpath='{.items[0].status.nodeInfo.osImage}' | sed -E 's/.*CoreOS ([0-9]+)\..*/RHCOS\1/') +echo "Detected RHCOS version: ${RHCOS_VERSION}" +if [[ "${RHCOS_VERSION}" == "RHCOS10" ]]; then + SRIOV_PF_NAME=$(cat ${CLUSTER_PROFILE_DIR}/sriov_pf_name_rhcos10) +elif [[ "${RHCOS_VERSION}" == "RHCOS9" ]]; then + SRIOV_PF_NAME=$(cat ${CLUSTER_PROFILE_DIR}/sriov_pf_name_rhcos9) +else + echo "ERROR: Unrecognised RHCOS version '${RHCOS_VERSION}'; cannot determine SRIOV_PF_NAME" >&2 + exit 1 +fi KERNEL_VFS_RANGE=$(cat ${CLUSTER_PROFILE_DIR}/sriov_kernel_vfs_range) DPDK_VFS_RANGE=$(cat ${CLUSTER_PROFILE_DIR}/sriov_dpdk_vfs_range)