Repository: nephio-project/test-infra
Pull request #331: Add ocloud e2e
Author: login: efiacor
Labels: name: approved
name: lgtm
name: kind/feature
Created: 2025-03-20T00:22:56Z | Merged: 2025-05-19T21:54:52Z

<!--  Thanks for sending a pull request! -->

**What type of PR is this?**
> Uncomment only one ` /kind <>` line, hit enter to put that in a new line, and remove leading whitespaces from that line:
>
> /kind bug
> /kind cleanup
> /kind design
> /kind documentation
> /kind failing-test
/kind feature

> /kind flake

**What this PR does / why we need it**:
Adds a full e2e ocloud suite and update prow jobs
**Which issue(s) this PR fixes**:
<!--
*Automatically closes linked issue when PR is merged.
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
_If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_*
-->
Fixes #

**Special notes for your reviewer**:

**Does this PR introduce a user-facing change?**:
<!--
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
-->
```release-note
Add O-Cloud Cluster Provisioning e2e test suite
```



Diff:
diff --git a/.prow.yaml b/.prow.yaml
index 210cb96c..c022e43b 100644
--- a/.prow.yaml
+++ b/.prow.yaml
@@ -417,10 +417,10 @@ presubmits:
                 path: id_rsa
               - key: id_rsa.pub
                 path: id_rsa.pub
-  - name: e2e-o2ims-ubuntu-jammy
+  - name: e2e-ocloud-ubuntu-jammy
     annotations:
     labels:
-    run_if_changed: '^(e2e/tests/02ims/|e2e/lib/|e2e/e2e.sh|e2e/defaults.env)'
+    run_if_changed: '^(e2e/tests/ocloud/|e2e/lib/|e2e/e2e.sh|e2e/defaults.env)'
     skip_report: false
     decorate: true
     cluster: default
@@ -433,7 +433,7 @@ presubmits:
             - "-c"
             - |
               set -eE; cd "$(git rev-parse --show-toplevel)/e2e/terraform"; trap 'terraform destroy -target module.gcp-ubuntu-jammy -auto-approve' EXIT;
-              terraform init && timeout 120m terraform apply -target module.gcp-ubuntu-jammy -var="e2e_type=o2ims" -var="fail_fast=true" -auto-approve
+              terraform init && timeout 120m terraform apply -target module.gcp-ubuntu-jammy -var="e2e_type=ocloud" -var="fail_fast=true" -auto-approve
           volumeMounts:
             - name: satoken
               mountPath: "/etc/satoken"
@@ -459,10 +459,10 @@ presubmits:
                 path: id_rsa
               - key: id_rsa.pub
                 path: id_rsa.pub
-  - name: e2e-o2ims-fedora-38
+  - name: e2e-ocloud-fedora-38
     annotations:
     labels:
-    run_if_changed: '^(e2e/tests/02ims/|e2e/lib/|e2e/e2e.sh|e2e/defaults.env)'
+    run_if_changed: '^(e2e/tests/ocloud/|e2e/lib/|e2e/e2e.sh|e2e/defaults.env)'
     skip_report: false
     optional: true
     decorate: true
@@ -476,7 +476,7 @@ presubmits:
             - "-c"
             - |
               set -eE; cd "$(git rev-parse --show-toplevel)/e2e/terraform"; trap 'terraform destroy -target module.gcp-fedora-38 -auto-approve' EXIT;
-              terraform init && timeout 120m terraform apply -target module.gcp-fedora-38 -var="e2e_type=o2ims" -var="fail_fast=true" -auto-approve
+              terraform init && timeout 120m terraform apply -target module.gcp-fedora-38 -var="e2e_type=ocloud" -var="fail_fast=true" -auto-approve
           volumeMounts:
             - name: satoken
               mountPath: "/etc/satoken"
diff --git a/e2e/terraform/modules/gcp/main.tf b/e2e/terraform/modules/gcp/main.tf
index a799b9fb..a54254ba 100644
--- a/e2e/terraform/modules/gcp/main.tf
+++ b/e2e/terraform/modules/gcp/main.tf
@@ -66,37 +66,71 @@ resource "google_compute_instance" "e2e_instances" {
     access_config {
     }
   }
+  connection {
+    host        = self.network_interface[0].access_config[0].nat_ip
+    type        = "ssh"
+    private_key = file(var.ssh_prv_key)
+    user        = var.ansible_user
+    agent       = false
+  }
   provisioner "file" {
     source      = "../../../test-infra"
     destination = "/home/${var.ansible_user}/test-infra"
-    connection {
-      host        = self.network_interface[0].access_config[0].nat_ip
-      type        = "ssh"
-      private_key = file(var.ssh_prv_key)
-      user        = var.ansible_user
-      agent       = false
-    }
   }
   provisioner "remote-exec" {
-    connection {
-      host        = self.network_interface[0].access_config[0].nat_ip
-      type        = "ssh"
-      private_key = file(var.ssh_prv_key)
-      user        = var.ansible_user
-      agent       = false
-    }
+    inline = [
+      "echo '🔍 Detecting OS and disk layout...'",
+
+      "source /etc/os-release || true",
+      "echo \"OS: $ID ($VERSION_ID)\"",
+
+      "ROOT_PART=$(findmnt / -o SOURCE -n | sed 's/\\[.*\\]//')",  # Escaped brackets
+      "DISK=$(echo $ROOT_PART | sed -E 's/[0-9]+$//')",  # Get the parent disk without the partition number
+      "PART_NUM=$(echo $ROOT_PART | grep -o '[0-9]*$')",  # Extract the partition number
+      "FS_TYPE=$(df -T / | tail -1 | awk '{print $2}')",  # Detect filesystem type
+
+      "echo \"ROOT_PART: $ROOT_PART | DISK: $DISK | PART_NUM: $PART_NUM | FS_TYPE: $FS_TYPE\"",
+
+      "echo '📦 Installing necessary packages...'",
+
+      # Install necessary utilities for different distros
+      "if [ -x $(command -v dnf) ]; then sudo dnf install -y cloud-utils-growpart; else sudo apt-get install -y cloud-guest-utils; fi",
+
+      "echo '📈 Expanding partition...'",
+      "if [ -x $(command -v growpart) ]; then sudo growpart $DISK $PART_NUM || echo '⚠️ growpart failed or unnecessary'; else echo '⚠️ growpart not available.'; fi",
+
+      # Resize filesystem based on FS_TYPE
+      "case $FS_TYPE in",
+      "  btrfs)",
+      "    echo '🔧 Resizing Btrfs filesystem...';",
+      "    if ! command -v btrfs; then sudo dnf install -y btrfs-progs || true; fi;",
+      "    sudo btrfs filesystem resize max / || echo '⚠️ Btrfs resize failed' ;;",
+
+      "  ext4)",
+      "    echo '🔧 Resizing ext4 filesystem...';",
+      "    if ! command -v resize2fs; then sudo apt-get install -y e2fsprogs || true; fi;",
+      "    sudo resize2fs $ROOT_PART || echo '⚠️ resize2fs failed' ;;",
+
+      "  xfs)",
+      "    echo '🔧 Resizing XFS filesystem...';",
+      "    if ! command -v xfs_growfs; then sudo apt-get install -y xfsprogs || true; fi;",
+      "    sudo xfs_growfs / || echo '⚠️ xfs_growfs failed' ;;",
+
+      "  *)",
+      "    echo \"❌ Unsupported filesystem type: $FS_TYPE\" ;;",
+      "esac",
+
+      "echo '✅ Final disk layout:'",
+      "df -h /",
+      "lsblk -f"
+    ]
+  }
+  provisioner "remote-exec" {
     inline = [
       "! command -v dnf > /dev/null || sudo -- sh -c 'dnf update kernel-core -y; shutdown -r +1'"
     ]
   }
   provisioner "remote-exec" {
-    connection {
-      host        = self.network_interface[0].access_config[0].nat_ip
-      type        = "ssh"
-      private_key = file(var.ssh_prv_key)
-      user        = var.ansible_user
-      agent       = false
-    }
     inline = [
       "cd /home/${var.ansible_user}/test-infra/e2e/provision/",
       "chmod +x init.sh",
diff --git a/e2e/tests/o2ims/001-sample-provisioning-request.yaml b/e2e/tests/o2ims/001-sample-provisioning-request.yaml
deleted file mode 100644
index 42e0dec9..00000000
--- a/e2e/tests/o2ims/001-sample-provisioning-request.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: o2ims.provisioning.oran.org/v1alpha1
-kind: ProvisioningRequest
-metadata:
-  name: edge-cluster
-spec:
-  name: sample-edge
-  description: "Provisioning request for setting up a sample edge kind cluster."
-  templateName: nephio-workload-cluster
-  templateVersion: main
-  templateParameters:
-    clusterName: edge
-    labels:
-      nephio.org/site-type: edge
-      nephio.org/region: europe-paris-west
-      nephio.org/owner: nephio-o2ims
-
diff --git a/e2e/tests/ocloud/001-focom-provisioning-request.yaml b/e2e/tests/ocloud/001-focom-provisioning-request.yaml
new file mode 100644
index 00000000..f45cf584
--- /dev/null
+++ b/e2e/tests/ocloud/001-focom-provisioning-request.yaml
@@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-main
+  namespace: focom-operator-system
+spec:
+  templateName: nephio-workload-cluster
+  templateVersion: main
+  templateParameterSchema: |
+    {
+      "type": "object",
+      "infra": {
+      "param1": {
+          "type": "string"
+        },
+        "params": {
+          "type": "integer"
+        }
+      },
+      "required": ["param1"]
+    }
+---
+apiVersion: focom.nephio.org/v1alpha1
+kind: FocomProvisioningRequest
+metadata:
+  name: focom-cluster-prov-req-nephio
+  namespace: focom-operator-system
+spec:
+  name: edge-cluster-req
+  description: "Provisioning request for setting up a sample edge kind cluster"
+  oCloudId: ocloud-1
+  oCloudNamespace: focom-operator-system
+  templateName: nephio-workload-cluster
+  templateVersion: main
+  templateParameters:
+    clusterName: edge
+    labels:
+      nephio.org/site-type: edge
+      nephio.org/region: europe-paris-west
+      nephio.org/owner: nephio-o2ims
diff --git a/e2e/tests/o2ims/001.sh b/e2e/tests/ocloud/001.sh
old mode 100755
new mode 100644
similarity index 50%
rename from e2e/tests/o2ims/001.sh
rename to e2e/tests/ocloud/001.sh
index 36309f15..cd716731
--- a/e2e/tests/o2ims/001.sh
+++ b/e2e/tests/ocloud/001.sh
@@ -9,7 +9,7 @@
 ##############################################################################
 
 ## TEST METADATA
-## TEST-NAME: Deploy edge cluster via O2IMS Operator
+## TEST-NAME: Deploy edge cluster via Focom and O2IMS Operators
 ##
 
 set -o pipefail
@@ -26,76 +26,67 @@ source "${LIBDIR}/k8s.sh"
 # shellcheck source=e2e/lib/capi.sh
 source "${LIBDIR}/capi.sh"
 
-# shellcheck source=e2e/lib/porch.sh
-source "${LIBDIR}/porch.sh"
-
 # shellcheck source=e2e/lib/_assertions.sh
 source "${LIBDIR}/_assertions.sh"
 
-# shellcheck source=e2e/lib/_utils.sh
-source "${LIBDIR}/_utils.sh"
-
-# If the packagerevisions endpoint is down, restart the porch-system pod until the endpoint is up
-exit_code=0
-kubectl get packagerevisions || exit_code=$?
-while [ $exit_code -ne 0 ]; do
-    exit_code=0
-    pod="$(kubectl get pods -n porch-system --no-headers -o custom-columns=":metadata.name" | grep server)"
-    kubectl delete pod $pod -n porch-system
-    kubectl wait --for=delete pod $pod -n porch-system --timeout=600s
-    pod="$(kubectl get pods -n porch-system --no-headers -o custom-columns=":metadata.name" | grep server)"
-    k8s_wait_ready "pod" $pod "" "porch-system"
-    kubectl get packagerevisions || exit_code=$?
-done
-
-# Clone the catalog
+
+# Clone the o2ims pkg
 pkg_rev=$(porchctl rpkg clone -n default "https://github.com/nephio-project/catalog.git/nephio/optional/o2ims@$BRANCH" --repository mgmt o2ims | cut -f 1 -d ' ')
 k8s_wait_exists "packagerev" "$pkg_rev"
 
-# Draft
+# Create Draft
 kubectl wait --for jsonpath='{.spec.lifecycle}'=Draft packagerevisions "$pkg_rev" --timeout="600s"
 assert_branch_exists "drafts/o2ims/v1"
 assert_commit_msg_in_branch "Intermediate commit" "drafts/o2ims/v1"
 
-# Proposal
+# Propose
+info "proposing package $pkg_rev"
 porchctl rpkg propose -n default "$pkg_rev"
 kubectl wait --for jsonpath='{.spec.lifecycle}'=Proposed packagerevisions "$pkg_rev" --timeout="600s"
+info "package $pkg_rev proposed"
 assert_branch_exists "proposed/o2ims/v1"
 assert_commit_msg_in_branch "Intermediate commit" "proposed/o2ims/v1"
 
-# Approval
+# Approve
 info "approving package $pkg_rev"
 porchctl rpkg approve -n default "$pkg_rev"
-info "approved package $pkg_rev"
+info "package $pkg_rev approved"
 kubectl wait --for jsonpath='{.spec.lifecycle}'=Published packagerevisions "$pkg_rev" --timeout="600s"
-info "published package $pkg_rev"
+info "package $pkg_rev published"
 
 kpt_wait_pkg "mgmt" "o2ims"
 
-# Wait for the o2ims pod to appear
-exit_code=0
-o2ims_pod="$(kubectl get pods -n o2ims --no-headers -o custom-columns=":metadata.name" | grep o2ims)" || exit_code=$?
-while [ $exit_code -ne 0 ]; do
-    exit_code=0
-    o2ims_pod="$(kubectl get pods -n o2ims --no-headers -o custom-columns=":metadata.name" | grep o2ims)" || exit_code=$?
-    sleep 1
-done
+# Make sure the o2ims operator starts
+k8s_wait_exists "deployment" "o2ims-operator" "" "o2ims"
+kubectl rollout status deployment/o2ims-operator --namespace="o2ims" --timeout="600s"
+
+# Create the simulated SMO cluster
+focom_kubecofig="/tmp/focom-kubeconfig"
+kind create cluster -n focom-cluster --kubeconfig $focom_kubecofig
+
+# Get the focom operator pkg
+tmp_pkg_path="/tmp/focom"
+kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/focom-operator@origin/main $tmp_pkg_path
+# Apply it to the SMO cluster
+kubectl --kubeconfig $focom_kubecofig apply -f $tmp_pkg_path
 
-# Make sure the operator starts
-o2ims_pod="$(kubectl get pods -n o2ims --no-headers -o custom-columns=":metadata.name" | grep o2ims)"
-k8s_wait_ready "pod" $o2ims_pod "" "o2ims"
+# Wait for the focom op to become available
+k8s_wait_exists "deployment" "focom-operator-controller-manager" $focom_kubecofig "focom-operator-system"
+kubectl rollout status deployment/focom-operator-controller-manager --namespace="focom-operator-system" --kubeconfig=$focom_kubecofig --timeout="600s"
 
-# Apply the sample provisioning request
-k8s_apply "$TESTDIR/001-sample-provisioning-request.yaml"
+# Update the kubeconfig IPAddress
+ip=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' kind-control-plane)
+sed "s|https://127.0.0.1:[^ ]*|https://$ip:6443|" ~/.kube/config > /tmp/kubeconfig-bak
 
-# wait for the edge cluster
+#Create a secret to use towards the SMO cluster
+kubectl create secret generic ocloud-kubeconfig --from-file=kubeconfig=/tmp/kubeconfig-bak --kubeconfig $focom_kubecofig
+
+# Apply the sample focom provisioning request
+k8s_apply "$TESTDIR/001-focom-provisioning-request.yaml" $focom_kubecofig
+
+# wait for the edge cluster exists
 k8s_wait_exists "workloadcluster" "edge"
 
-# Wait for the kind edge cluster
-exit_code=0
-kind get clusters | grep edge || exit_code=$?
-while [ $exit_code -ne 0 ]; do
-    exit_code=0
-    sleep 5
-    kind get clusters | grep edge || exit_code=$?
-done
+# Wait for edge cluster to be ready
+capi_cluster_ready "edge"
+
diff --git a/prow/config/config.yaml b/prow/config/config.yaml
index 4ca0190a..adaf2d5d 100644
--- a/prow/config/config.yaml
+++ b/prow/config/config.yaml
@@ -2221,6 +2221,53 @@ periodics:
             requests:
               cpu: 2
               memory: 2Gi
+      volumes:
+        - name: satoken
+          secret:
+            secretName: satoken
+            items:
+              - key: satoken
+                path: satoken
+        - name: ssh-key-vol
+          secret:
+            secretName: ssh-key-e2e
+            defaultMode: 256
+            items:
+              - key: id_rsa
+                path: id_rsa
+              - key: id_rsa.pub
+                path: id_rsa.pub
+  - name: e2e-weekly-ubuntu-jammy-ocloud
+    annotations:
+    labels:
+    cron: "0 3 * * 0"
+    skip_report: false
+    decorate: true
+    cluster: default
+    extra_refs:
+      - org: nephio-project
+        repo: test-infra
+        base_ref: main
+        path_alias: nephio_repo/test-infra
+    spec:
+      containers:
+        - image: "nephio/e2e:latest"
+          command:
+            - "/bin/sh"
+          args:
+            - "-c"
+            - |
+              set -eE; cd "$GOPATH/src/nephio_repo/test-infra/e2e/terraform"; trap 'terraform destroy -target module.gcp-ubuntu-jammy -auto-approve' EXIT;
+              terraform init && timeout 120m terraform apply -target module.gcp-ubuntu-jammy -var="e2e_type=ocloud" -auto-approve
+          volumeMounts:
+            - name: satoken
+              mountPath: "/etc/satoken"
+            - name: ssh-key-vol
+              mountPath: "/etc/ssh-key"
+          resources:
+            requests:
+              cpu: 2
+              memory: 2Gi
       volumes:
         - name: satoken
           secret:


Reviews:
user: login: arora-sagar
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T10:48:20Z
user: login: arora-sagar
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T10:48:26Z
user: login: arora-sagar
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-26T10:50:41Z
user: login: efiacor
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-03-28T08:12:28Z
user: login: efiacor
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-16T11:59:10Z
user: login: efiacor
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-16T11:59:18Z
user: login: efiacor
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-16T11:59:24Z
user: login: arora-sagar
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T10:37:21Z
user: login: efiacor
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-19T11:46:46Z

Review comments:
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-v3.0.0
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: arora-sagar
body: can we change it to v4.0.0?
created_at: 2025-03-26T10:48:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-v3.0.0
+  namespace: focom-operator-system
+spec:
+  templateName: nephio-workload-cluster
+  templateVersion: v3.0.0
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: arora-sagar
body: can we change it to v4.0.0?
created_at: 2025-03-26T10:48:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-v3.0.0
+  namespace: focom-operator-system
+spec:
+  templateName: nephio-workload-cluster
+  templateVersion: v3.0.0
+  templateParameterSchema: |
+    {
+      "type": "object",
+      "infra": {
+      "param1": {
+          "type": "string"
+        },
+        "params": {
+          "type": "integer"
+        }
+      },
+      "required": ["param1"]
+    }
+---
+apiVersion: focom.nephio.org/v1alpha1
+kind: FocomProvisioningRequest
+metadata:
+  name: focom-cluster-prov-req-nephio
+  namespace: focom-operator-system
+spec:
+  name: sample-edge
+  description: "Provisioning request for setting up a sample edge kind cluster"
+  oCloudId: ocloud-1
+  oCloudNamespace: focom-operator-system
+  templateName: nephio-workload-cluster
+  templateVersion: v3.0.0
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: arora-sagar
body: can we change it to v4.0.0?
created_at: 2025-03-26T10:50:41Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-v3.0.0
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: efiacor
body: So, we decided to drop the tagging on the catalog repo so we just have the branch to target now. When I tried using v4.0.0 it failed. I guess because in the stack somewhere it uses the tag.
created_at: 2025-03-28T08:12:24Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-v3.0.0
+  namespace: focom-operator-system
+spec:
+  templateName: nephio-workload-cluster
+  templateVersion: v3.0.0
+  templateParameterSchema: |
+    {
+      "type": "object",
+      "infra": {
+      "param1": {
+          "type": "string"
+        },
+        "params": {
+          "type": "integer"
+        }
+      },
+      "required": ["param1"]
+    }
+---
+apiVersion: focom.nephio.org/v1alpha1
+kind: FocomProvisioningRequest
+metadata:
+  name: focom-cluster-prov-req-nephio
+  namespace: focom-operator-system
+spec:
+  name: sample-edge
+  description: "Provisioning request for setting up a sample edge kind cluster"
+  oCloudId: ocloud-1
+  oCloudNamespace: focom-operator-system
+  templateName: nephio-workload-cluster
+  templateVersion: v3.0.0
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: efiacor
body: Should be addressed now.
Please review @arora-sagar 
created_at: 2025-05-16T11:59:10Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-v3.0.0
+  namespace: focom-operator-system
+spec:
+  templateName: nephio-workload-cluster
+  templateVersion: v3.0.0
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: efiacor
body: Should be addressed now.
Please review @arora-sagar
created_at: 2025-05-16T11:59:18Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-v3.0.0
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: efiacor
body: Should be addressed now.
Please review @arora-sagar
created_at: 2025-05-16T11:59:23Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-main
+  namespace: focom-operator-system
+spec:
+  templateName: nephio-workload-cluster
+  templateVersion: main
+  templateParameterSchema: |
+    {
+      "type": "object",
+      "infra": {
+      "param1": {
+          "type": "string"
+        },
+        "params": {
+          "type": "integer"
+        }
+      },
+      "required": ["param1"]
+    }
+---
+apiVersion: focom.nephio.org/v1alpha1
+kind: FocomProvisioningRequest
+metadata:
+  name: focom-cluster-prov-req-nephio
+  namespace: focom-operator-system
+spec:
+  name: sample-edge
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: arora-sagar
body: Can you call this edge too instead of `sample-edge`
created_at: 2025-05-19T10:37:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,51 @@
+apiVersion: focom.nephio.org/v1alpha1
+kind: OCloud
+metadata:
+  name: ocloud-1
+  namespace: focom-operator-system
+spec:
+  o2imsSecret:
+    secretRef:
+      name: ocloud-kubeconfig
+      namespace: default
+---
+apiVersion: provisioning.oran.org/v1alpha1
+kind: TemplateInfo
+metadata:
+  name: nephio-workload-cluster-main
+  namespace: focom-operator-system
+spec:
+  templateName: nephio-workload-cluster
+  templateVersion: main
+  templateParameterSchema: |
+    {
+      "type": "object",
+      "infra": {
+      "param1": {
+          "type": "string"
+        },
+        "params": {
+          "type": "integer"
+        }
+      },
+      "required": ["param1"]
+    }
+---
+apiVersion: focom.nephio.org/v1alpha1
+kind: FocomProvisioningRequest
+metadata:
+  name: focom-cluster-prov-req-nephio
+  namespace: focom-operator-system
+spec:
+  name: sample-edge
path: e2e/tests/ocloud/001-focom-provisioning-request.yaml
user: login: efiacor
body: Went with "edge-cluster-req" for more clarity and separation
created_at: 2025-05-19T11:46:45Z
author_association: COLLABORATOR

PR comments:
user: login: sonarqubecloud[bot]
created_at: 2025-03-20T08:02:47Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=nephio-project_test-infra&pullRequest=331) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=nephio-project_test-infra&pullRequest=331&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=nephio-project_test-infra&pullRequest=331&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=nephio-project_test-infra&pullRequest=331&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=nephio-project_test-infra&pullRequest=331&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=nephio-project_test-infra&pullRequest=331&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=nephio-project_test-infra&pullRequest=331)


author_association: NONE
user: login: efiacor
created_at: 2025-03-20T09:21:32Z
body: /override e2e-oai-ubuntu-jammy
author_association: COLLABORATOR
user: login: nephio-prow[bot]
created_at: 2025-03-20T09:21:37Z
body: @efiacor: Overrode contexts on behalf of efiacor: e2e-oai-ubuntu-jammy

<details>

In response to [this](https://github.com/nephio-project/test-infra/pull/331#issuecomment-2739706395):

>/override e2e-oai-ubuntu-jammy


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>
author_association: CONTRIBUTOR
user: login: efiacor
created_at: 2025-05-16T10:14:26Z
body: /test e2e-oai-ubuntu-jammy
author_association: COLLABORATOR
user: login: efiacor
created_at: 2025-05-16T11:57:33Z
body: /retest-required
author_association: COLLABORATOR
user: login: efiacor
created_at: 2025-05-16T21:32:28Z
body: /test e2e-ocloud-fedora-38
author_association: COLLABORATOR
user: login: efiacor
created_at: 2025-05-16T22:27:43Z
body: /test e2e-ocloud-fedora-38
author_association: COLLABORATOR
user: login: efiacor
created_at: 2025-05-16T23:21:18Z
body: /test e2e-ocloud-fedora-38
author_association: COLLABORATOR
user: login: efiacor
created_at: 2025-05-16T23:37:46Z
body: /test e2e-ocloud-ubuntu-jammy
author_association: COLLABORATOR
user: login: efiacor
created_at: 2025-05-16T23:59:16Z
body: /test e2e-ocloud-fedora-38
author_association: COLLABORATOR
user: login: efiacor
created_at: 2025-05-17T00:21:44Z
body: /test e2e-ocloud-ubuntu-jammy
author_association: COLLABORATOR
user: login: sonarqubecloud[bot]
created_at: 2025-05-19T11:46:19Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=nephio-project_test-infra&pullRequest=331) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=nephio-project_test-infra&pullRequest=331&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=nephio-project_test-infra&pullRequest=331&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=nephio-project_test-infra&pullRequest=331&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=nephio-project_test-infra&pullRequest=331&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=nephio-project_test-infra&pullRequest=331&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=nephio-project_test-infra&pullRequest=331)


author_association: NONE
user: login: nephio-prow[bot]
created_at: 2025-05-19T12:15:03Z
body: @efiacor: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
e2e-ocloud-fedora-34 | b2c43afe93611c67b7f3a793a7c70b27fad75d1e | [link](http://prow.nephio.io/view/gs/prow-nephio-sig-release/pr-logs/pull/nephio-project_test-infra/331/e2e-ocloud-fedora-34/1923303583659331584) | false | `/test e2e-ocloud-fedora-34`
e2e-oai-fedora-38 | 4b7156c4ecc30f4ade4509f7d3ceb1edcf524340 | [link](http://prow.nephio.io/view/gs/prow-nephio-sig-release/pr-logs/pull/nephio-project_test-infra/331/e2e-oai-fedora-38/1923307901296840704) | false | `/test e2e-oai-fedora-38`
e2e-free5gc-fedora-38 | 4b7156c4ecc30f4ade4509f7d3ceb1edcf524340 | [link](http://prow.nephio.io/view/gs/prow-nephio-sig-release/pr-logs/pull/nephio-project_test-infra/331/e2e-free5gc-fedora-38/1923307901129068544) | false | `/test e2e-free5gc-fedora-38`
e2e-free5gc-ubuntu-jammy | 4b7156c4ecc30f4ade4509f7d3ceb1edcf524340 | [link](http://prow.nephio.io/view/gs/prow-nephio-sig-release/pr-logs/pull/nephio-project_test-infra/331/e2e-free5gc-ubuntu-jammy/1923347129330307072) | true | `/test e2e-free5gc-ubuntu-jammy`
e2e-oai-ubuntu-jammy | 4b7156c4ecc30f4ade4509f7d3ceb1edcf524340 | [link](http://prow.nephio.io/view/gs/prow-nephio-sig-release/pr-logs/pull/nephio-project_test-infra/331/e2e-oai-ubuntu-jammy/1923347129397415936) | true | `/test e2e-oai-ubuntu-jammy`

[Full PR test history](http://prow.nephio.io/pr-history?org=nephio-project&repo=test-infra&pr=331). [Your PR dashboard](http://prow.nephio.io/pr?query=is:pr+state:open+author:efiacor).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
author_association: CONTRIBUTOR
user: login: efiacor
created_at: 2025-05-19T12:35:19Z
body: /test e2e-ocloud-fedora-38
author_association: COLLABORATOR
user: login: arora-sagar
created_at: 2025-05-19T17:04:58Z
body: /approve
/lgtm
author_association: CONTRIBUTOR
user: login: efiacor
created_at: 2025-05-19T21:53:59Z
body: /approve
author_association: COLLABORATOR
user: login: nephio-prow[bot]
created_at: 2025-05-19T21:54:03Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/nephio-project/test-infra/pull/331#issuecomment-2891716266" title="LGTM">arora-sagar</a>*, *<a href="https://github.com/nephio-project/test-infra/pull/331#issuecomment-2892379109" title="Approved">efiacor</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=nephio-project%2Ftest-infra).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/nephio-project/test-infra/blob/main/OWNERS)~~ [efiacor]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR
user: login: nephio-prow[bot]
created_at: 2025-05-19T21:54:54Z
body: @efiacor: Updated the `config` configmap in namespace `prow` at cluster `default` using the following files:
 - key `config.yaml` using file `prow/config/config.yaml`

<details>

In response to [this](https://github.com/nephio-project/test-infra/pull/331):

><!--  Thanks for sending a pull request! -->
>
>**What type of PR is this?**
>> Uncomment only one ` /kind <>` line, hit enter to put that in a new line, and remove leading whitespaces from that line:
>>
>> /kind bug
>> /kind cleanup
>> /kind design
>> /kind documentation
>> /kind failing-test
>/kind feature
>
>> /kind flake
>
>**What this PR does / why we need it**:
>Adds a full e2e ocloud suite and update prow jobs
>**Which issue(s) this PR fixes**:
><!--
>*Automatically closes linked issue when PR is merged.
>Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
>_If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_*
>-->
>Fixes #
>
>**Special notes for your reviewer**:
>
>**Does this PR introduce a user-facing change?**:
><!--
>If no, just write "NONE" in the release-note block below.
>If yes, a release note is required:
>Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
>-->
>```release-note
>Add O-Cloud Cluster Provisioning e2e test suite
>```
>


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>
author_association: CONTRIBUTOR