Skip to content

NE-2126: Migrating Ipfailover test cases to images repo - #245

Draft
melvinjoseph86 wants to merge 1 commit into
openshift:masterfrom
melvinjoseph86:ipfailover-migrate
Draft

NE-2126: Migrating Ipfailover test cases to images repo#245
melvinjoseph86 wants to merge 1 commit into
openshift:masterfrom
melvinjoseph86:ipfailover-migrate

Conversation

@melvinjoseph86

@melvinjoseph86 melvinjoseph86 commented Jul 22, 2026

Copy link
Copy Markdown
➜  ./bin/ipfailover-tests-ext run-suite ipfailover/all --max-concurrency=1
  I0722 22:35:05.065743 23079 test_context.go:566] The --provider flag is not set. Continuing as if --provider=skeleton had been used.
[
  {
    "name": "[OTP][sig-network-edge] Network_Edge Author:hongli-NonHyperShiftHOST-ConnectedOnly-Critical-41025-support to deploy ipfailover [Serial]",
    "lifecycle": "blocking",
    "duration": 58652,
    "startTime": "2026-07-22 17:05:05.236625 UTC",
    "endTime": "2026-07-22 17:06:03.888726 UTC",
    "result": "passed",
    "output": "  STEP: Creating a kubernetes client @ 07/22/26 22:35:05.237\nI0722 22:35:09.460724 23080 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile1449509705\"\nI0722 22:35:09.460818 23080 client.go:368] The user is now \"e2e-test-router-ipfailover-tjr2r-user\"\nI0722 22:35:09.460843 23080 client.go:370] Creating project \"e2e-test-router-ipfailover-tjr2r\"\nI0722 22:35:09.841043 23080 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-tjr2r\" ...\nI0722 22:35:10.849109 23080 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\nI0722 22:35:11.096987 23080 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\nI0722 22:35:11.699374 23080 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\nI0722 22:35:12.313775 23080 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\nI0722 22:35:12.922410 23080 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\nI0722 22:35:13.187856 23080 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\nI0722 22:35:13.446990 23080 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\nI0722 22:35:15.182120 23080 client.go:469] Project \"e2e-test-router-ipfailover-tjr2r\" has been fully provisioned.\n  STEP: Check platforms @ 07/22/26 22:35:15.182\n  STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:35:15.972\nI0722 22:35:17.373584 23080 util.go:61] Linux worker node details:\ngnfq2hk-b5564-9ks7d-worker-0-4bnpj\ngnfq2hk-b5564-9ks7d-worker-0-6fjsr\ngnfq2hk-b5564-9ks7d-worker-0-jdf4g\nI0722 22:35:17.373642 23080 util.go:62] Available linux worker node count is: 3\n  STEP: check the cluster has remote worker profile @ 07/22/26 22:35:20.744\n  STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:35:22.412\n  STEP: Check network type @ 07/22/26 22:35:23.212\n  STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:35:24.045\nI0722 22:35:29.916828 23080 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n  STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:35:29.934\nnamespace/e2e-test-router-ipfailover-tjr2r labeled\nI0722 22:35:32.157571 23080 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-tjr2r\nI0722 22:35:38.301090 23080 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-tjr2r-zpkarvr3-temp-resource.json\ndeployment.apps/ipf-41025 created\nI0722 22:35:45.979804 23080 util.go:363] the Ready status of pod is True True\nI0722 22:35:47.035865 23080 util.go:185] The pod list is [ipf-41025-7b94bb7cf8-8kp8q ipf-41025-7b94bb7cf8-tv4bm]\nI0722 22:36:01.476231 23080 util.go:136] The first pod log's failover status:- Wed Jul 22 17:05:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:36:02.917546 23080 util.go:143] The second pod log's failover status:- Wed Jul 22 17:05:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:05:42 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:36:02.917677 23080 util.go:164] The Master pod is ipf-41025-7b94bb7cf8-tv4bm and Backup pod is ipf-41025-7b94bb7cf8-8kp8q\nI0722 22:36:03.160570 23080 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-tjr2r-user}, err: \u003cnil\u003e\nI0722 22:36:03.405692 23080 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-tjr2r}, err: \u003cnil\u003e\nI0722 22:36:03.644934 23080 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~XsypUcqoliXDUcscW4CtaZviMNhkVKu8U-Y-dwuh9jk}, err: \u003cnil\u003e\n  STEP: Destroying namespace \"e2e-test-router-ipfailover-tjr2r\" for this suite. @ 07/22/26 22:36:03.645\n",
    "error": "    STEP: Creating a kubernetes client @ 07/22/26 22:35:05.237\n  I0722 22:35:09.460724 23080 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile1449509705\"\n  I0722 22:35:09.460818 23080 client.go:368] The user is now \"e2e-test-router-ipfailover-tjr2r-user\"\n  I0722 22:35:09.460843 23080 client.go:370] Creating project \"e2e-test-router-ipfailover-tjr2r\"\n  I0722 22:35:09.841043 23080 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-tjr2r\" ...\n  I0722 22:35:10.849109 23080 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\n  I0722 22:35:11.096987 23080 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\n  I0722 22:35:11.699374 23080 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\n  I0722 22:35:12.313775 23080 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\n  I0722 22:35:12.922410 23080 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\n  I0722 22:35:13.187856 23080 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\n  I0722 22:35:13.446990 23080 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\n  I0722 22:35:15.182120 23080 client.go:469] Project \"e2e-test-router-ipfailover-tjr2r\" has been fully provisioned.\n    STEP: Check platforms @ 07/22/26 22:35:15.182\n    STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:35:15.972\n  I0722 22:35:17.373584 23080 util.go:61] Linux worker node details:\n  gnfq2hk-b5564-9ks7d-worker-0-4bnpj\n  gnfq2hk-b5564-9ks7d-worker-0-6fjsr\n  gnfq2hk-b5564-9ks7d-worker-0-jdf4g\n  I0722 22:35:17.373642 23080 util.go:62] Available linux worker node count is: 3\n    STEP: check the cluster has remote worker profile @ 07/22/26 22:35:20.744\n    STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:35:22.412\n    STEP: Check network type @ 07/22/26 22:35:23.212\n    STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:35:24.045\n  I0722 22:35:29.916828 23080 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n    STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:35:29.934\n  namespace/e2e-test-router-ipfailover-tjr2r labeled\n  I0722 22:35:32.157571 23080 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-tjr2r\n  I0722 22:35:38.301090 23080 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-tjr2r-zpkarvr3-temp-resource.json\n  deployment.apps/ipf-41025 created\n  I0722 22:35:45.979804 23080 util.go:363] the Ready status of pod is True True\n  I0722 22:35:47.035865 23080 util.go:185] The pod list is [ipf-41025-7b94bb7cf8-8kp8q ipf-41025-7b94bb7cf8-tv4bm]\n  I0722 22:36:01.476231 23080 util.go:136] The first pod log's failover status:- Wed Jul 22 17:05:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:36:02.917546 23080 util.go:143] The second pod log's failover status:- Wed Jul 22 17:05:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:05:42 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:36:02.917677 23080 util.go:164] The Master pod is ipf-41025-7b94bb7cf8-tv4bm and Backup pod is ipf-41025-7b94bb7cf8-8kp8q\n  I0722 22:36:03.160570 23080 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-tjr2r-user}, err: \u003cnil\u003e\n  I0722 22:36:03.405692 23080 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-tjr2r}, err: \u003cnil\u003e\n  I0722 22:36:03.644934 23080 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~XsypUcqoliXDUcscW4CtaZviMNhkVKu8U-Y-dwuh9jk}, err: \u003cnil\u003e\n    STEP: Destroying namespace \"e2e-test-router-ipfailover-tjr2r\" for this suite. @ 07/22/26 22:36:03.645\n"
  },
  {
    "name": "[OTP][sig-network-edge] Network_Edge Author:mjoseph-NonHyperShiftHOST-ConnectedOnly-Medium-41027-pod and service automatically switched over to standby when master fails [Disruptive]",
    "lifecycle": "blocking",
    "duration": 138694,
    "startTime": "2026-07-22 17:06:04.483263 UTC",
    "endTime": "2026-07-22 17:08:23.178121 UTC",
    "result": "passed",
    "output": "  STEP: Creating a kubernetes client @ 07/22/26 22:36:04.483\nI0722 22:36:08.805796 23191 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile2173069665\"\nI0722 22:36:08.805834 23191 client.go:368] The user is now \"e2e-test-router-ipfailover-pc82p-user\"\nI0722 22:36:08.805846 23191 client.go:370] Creating project \"e2e-test-router-ipfailover-pc82p\"\nI0722 22:36:09.174807 23191 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-pc82p\" ...\nI0722 22:36:10.238399 23191 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\nI0722 22:36:10.515301 23191 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\nI0722 22:36:12.045617 23191 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\nI0722 22:36:12.676937 23191 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\nI0722 22:36:13.305840 23191 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\nI0722 22:36:13.565583 23191 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\nI0722 22:36:13.823288 23191 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\nI0722 22:36:15.646899 23191 client.go:469] Project \"e2e-test-router-ipfailover-pc82p\" has been fully provisioned.\n  STEP: Check platforms @ 07/22/26 22:36:15.647\n  STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:36:16.76\nI0722 22:36:18.035220 23191 util.go:61] Linux worker node details:\ngnfq2hk-b5564-9ks7d-worker-0-4bnpj\ngnfq2hk-b5564-9ks7d-worker-0-6fjsr\ngnfq2hk-b5564-9ks7d-worker-0-jdf4g\nI0722 22:36:18.035267 23191 util.go:62] Available linux worker node count is: 3\n  STEP: check the cluster has remote worker profile @ 07/22/26 22:36:21.468\n  STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:36:23.087\n  STEP: Check network type @ 07/22/26 22:36:23.866\n  STEP: 1. Get pull spec of ipfailover image from payload @ 07/22/26 22:36:24.753\nI0722 22:36:30.972027 23191 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n  STEP: 2. Create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:36:30.99\nnamespace/e2e-test-router-ipfailover-pc82p labeled\nI0722 22:36:32.124377 23191 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-pc82p\nI0722 22:36:38.287868 23191 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-pc82p-w1q5zs0t-temp-resource.json\ndeployment.apps/ipf-41027 created\nI0722 22:36:46.155249 23191 util.go:363] the Ready status of pod is True True\nI0722 22:36:47.171938 23191 util.go:185] The pod list is [ipf-41027-7b94bb7cf8-wchsm ipf-41027-7b94bb7cf8-xzlxn]\nI0722 22:37:01.662686 23191 util.go:136] The first pod log's failover status:- Wed Jul 22 17:06:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:06:42 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:37:03.078051 23191 util.go:143] The second pod log's failover status:- Wed Jul 22 17:06:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:37:03.078102 23191 util.go:164] The Master pod is ipf-41027-7b94bb7cf8-wchsm and Backup pod is ipf-41027-7b94bb7cf8-xzlxn\n  STEP: 3. Set the HA virtual IP for the failover group @ 07/22/26 22:37:03.078\nI0722 22:37:04.705772 23191 util.go:302] The pod  ipf-41027-7b94bb7cf8-wchsm IP in namespace e2e-test-router-ipfailover-pc82p is \"10.0.2.136\"\nI0722 22:37:04.705830 23191 util.go:176] The modified ipaddress is 10.0.2.100 \ndeployment.apps/ipf-41027 updated\n  STEP: 4. Verify the HA virtual ip ENV variable @ 07/22/26 22:37:15.813\nI0722 22:37:22.135036 23191 util.go:363] the Ready status of pod is True True\nI0722 22:37:23.243090 23191 util.go:185] The pod list is [ipf-41027-cc767d447-6h66q ipf-41027-cc767d447-hhvgw]\nI0722 22:37:37.630567 23191 util.go:136] The first pod log's failover status:- Wed Jul 22 17:07:06 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:07:09 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:37:39.056730 23191 util.go:143] The second pod log's failover status:- Wed Jul 22 17:07:06 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:37:39.056831 23191 util.go:164] The Master pod is ipf-41027-cc767d447-6h66q and Backup pod is ipf-41027-cc767d447-hhvgw\nI0722 22:37:45.967186 23191 util.go:264] the matching part is: OPENSHIFT_HA_VIRTUAL_IPS=10.0.2.100\n  STEP: 5. Find the primary and the secondary pod using the virtual IP @ 07/22/26 22:37:45.968\nI0722 22:37:47.631666 23191 util.go:207] The pod owning the VIP is ipf-41027-cc767d447-6h66q\n  STEP: 6. Restarting the ipfailover primary pod @ 07/22/26 22:37:47.631\npod \"ipf-41027-cc767d447-6h66q\" deleted\n  STEP: 6a. Wait for replica replacement after pod deletion @ 07/22/26 22:37:49.528\n  STEP: 7. Verify the virtual IP is floated onto the new MASTER node @ 07/22/26 22:37:55.343\nI0722 22:37:56.512171 23191 util.go:185] The pod list is [ipf-41027-cc767d447-hhvgw ipf-41027-cc767d447-wrs2n]\nI0722 22:38:10.765942 23191 util.go:136] The first pod log's failover status:- Wed Jul 22 17:07:06 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:07:49 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:38:12.252562 23191 util.go:143] The second pod log's failover status:- Wed Jul 22 17:07:49 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:38:12.252757 23191 util.go:164] The Master pod is ipf-41027-cc767d447-hhvgw and Backup pod is ipf-41027-cc767d447-wrs2n\nI0722 22:38:19.240679 23191 util.go:241] The new pod ipf-41027-cc767d447-hhvgw is the master\nI0722 22:38:22.338061 23191 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-pc82p-user}, err: \u003cnil\u003e\nI0722 22:38:22.616212 23191 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-pc82p}, err: \u003cnil\u003e\nI0722 22:38:22.894930 23191 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~mWr9ElxsNakVbOwaL-ssK00WlPvaA4Q_JqpqTh9jJq0}, err: \u003cnil\u003e\n  STEP: Destroying namespace \"e2e-test-router-ipfailover-pc82p\" for this suite. @ 07/22/26 22:38:22.897\n",
    "error": "    STEP: Creating a kubernetes client @ 07/22/26 22:36:04.483\n  I0722 22:36:08.805796 23191 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile2173069665\"\n  I0722 22:36:08.805834 23191 client.go:368] The user is now \"e2e-test-router-ipfailover-pc82p-user\"\n  I0722 22:36:08.805846 23191 client.go:370] Creating project \"e2e-test-router-ipfailover-pc82p\"\n  I0722 22:36:09.174807 23191 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-pc82p\" ...\n  I0722 22:36:10.238399 23191 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\n  I0722 22:36:10.515301 23191 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\n  I0722 22:36:12.045617 23191 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\n  I0722 22:36:12.676937 23191 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\n  I0722 22:36:13.305840 23191 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\n  I0722 22:36:13.565583 23191 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\n  I0722 22:36:13.823288 23191 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\n  I0722 22:36:15.646899 23191 client.go:469] Project \"e2e-test-router-ipfailover-pc82p\" has been fully provisioned.\n    STEP: Check platforms @ 07/22/26 22:36:15.647\n    STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:36:16.76\n  I0722 22:36:18.035220 23191 util.go:61] Linux worker node details:\n  gnfq2hk-b5564-9ks7d-worker-0-4bnpj\n  gnfq2hk-b5564-9ks7d-worker-0-6fjsr\n  gnfq2hk-b5564-9ks7d-worker-0-jdf4g\n  I0722 22:36:18.035267 23191 util.go:62] Available linux worker node count is: 3\n    STEP: check the cluster has remote worker profile @ 07/22/26 22:36:21.468\n    STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:36:23.087\n    STEP: Check network type @ 07/22/26 22:36:23.866\n    STEP: 1. Get pull spec of ipfailover image from payload @ 07/22/26 22:36:24.753\n  I0722 22:36:30.972027 23191 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n    STEP: 2. Create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:36:30.99\n  namespace/e2e-test-router-ipfailover-pc82p labeled\n  I0722 22:36:32.124377 23191 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-pc82p\n  I0722 22:36:38.287868 23191 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-pc82p-w1q5zs0t-temp-resource.json\n  deployment.apps/ipf-41027 created\n  I0722 22:36:46.155249 23191 util.go:363] the Ready status of pod is True True\n  I0722 22:36:47.171938 23191 util.go:185] The pod list is [ipf-41027-7b94bb7cf8-wchsm ipf-41027-7b94bb7cf8-xzlxn]\n  I0722 22:37:01.662686 23191 util.go:136] The first pod log's failover status:- Wed Jul 22 17:06:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:06:42 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:37:03.078051 23191 util.go:143] The second pod log's failover status:- Wed Jul 22 17:06:39 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:37:03.078102 23191 util.go:164] The Master pod is ipf-41027-7b94bb7cf8-wchsm and Backup pod is ipf-41027-7b94bb7cf8-xzlxn\n    STEP: 3. Set the HA virtual IP for the failover group @ 07/22/26 22:37:03.078\n  I0722 22:37:04.705772 23191 util.go:302] The pod  ipf-41027-7b94bb7cf8-wchsm IP in namespace e2e-test-router-ipfailover-pc82p is \"10.0.2.136\"\n  I0722 22:37:04.705830 23191 util.go:176] The modified ipaddress is 10.0.2.100 \n  deployment.apps/ipf-41027 updated\n    STEP: 4. Verify the HA virtual ip ENV variable @ 07/22/26 22:37:15.813\n  I0722 22:37:22.135036 23191 util.go:363] the Ready status of pod is True True\n  I0722 22:37:23.243090 23191 util.go:185] The pod list is [ipf-41027-cc767d447-6h66q ipf-41027-cc767d447-hhvgw]\n  I0722 22:37:37.630567 23191 util.go:136] The first pod log's failover status:- Wed Jul 22 17:07:06 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:07:09 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:37:39.056730 23191 util.go:143] The second pod log's failover status:- Wed Jul 22 17:07:06 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:37:39.056831 23191 util.go:164] The Master pod is ipf-41027-cc767d447-6h66q and Backup pod is ipf-41027-cc767d447-hhvgw\n  I0722 22:37:45.967186 23191 util.go:264] the matching part is: OPENSHIFT_HA_VIRTUAL_IPS=10.0.2.100\n    STEP: 5. Find the primary and the secondary pod using the virtual IP @ 07/22/26 22:37:45.968\n  I0722 22:37:47.631666 23191 util.go:207] The pod owning the VIP is ipf-41027-cc767d447-6h66q\n    STEP: 6. Restarting the ipfailover primary pod @ 07/22/26 22:37:47.631\n  pod \"ipf-41027-cc767d447-6h66q\" deleted\n    STEP: 6a. Wait for replica replacement after pod deletion @ 07/22/26 22:37:49.528\n    STEP: 7. Verify the virtual IP is floated onto the new MASTER node @ 07/22/26 22:37:55.343\n  I0722 22:37:56.512171 23191 util.go:185] The pod list is [ipf-41027-cc767d447-hhvgw ipf-41027-cc767d447-wrs2n]\n  I0722 22:38:10.765942 23191 util.go:136] The first pod log's failover status:- Wed Jul 22 17:07:06 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:07:49 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:38:12.252562 23191 util.go:143] The second pod log's failover status:- Wed Jul 22 17:07:49 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:38:12.252757 23191 util.go:164] The Master pod is ipf-41027-cc767d447-hhvgw and Backup pod is ipf-41027-cc767d447-wrs2n\n  I0722 22:38:19.240679 23191 util.go:241] The new pod ipf-41027-cc767d447-hhvgw is the master\n  I0722 22:38:22.338061 23191 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-pc82p-user}, err: \u003cnil\u003e\n  I0722 22:38:22.616212 23191 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-pc82p}, err: \u003cnil\u003e\n  I0722 22:38:22.894930 23191 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~mWr9ElxsNakVbOwaL-ssK00WlPvaA4Q_JqpqTh9jJq0}, err: \u003cnil\u003e\n    STEP: Destroying namespace \"e2e-test-router-ipfailover-pc82p\" for this suite. @ 07/22/26 22:38:22.897\n"
  },
  {
    "name": "[OTP][sig-network-edge] Network_Edge Author:mjoseph-NonHyperShiftHOST-ConnectedOnly-Medium-41028-ipfailover configuration can be customized by ENV [Serial]",
    "lifecycle": "blocking",
    "duration": 212493,
    "startTime": "2026-07-22 17:08:23.498163 UTC",
    "endTime": "2026-07-22 17:11:55.991846 UTC",
    "result": "passed",
    "output": "  STEP: Creating a kubernetes client @ 07/22/26 22:38:23.498\nI0722 22:38:27.667750 23543 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile689012487\"\nI0722 22:38:27.667803 23543 client.go:368] The user is now \"e2e-test-router-ipfailover-ncxn6-user\"\nI0722 22:38:27.667810 23543 client.go:370] Creating project \"e2e-test-router-ipfailover-ncxn6\"\nI0722 22:38:28.036250 23543 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-ncxn6\" ...\nI0722 22:38:29.068812 23543 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\nI0722 22:38:29.323203 23543 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\nI0722 22:38:29.950014 23543 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\nI0722 22:38:30.578281 23543 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\nI0722 22:38:31.211135 23543 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\nI0722 22:38:31.490350 23543 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\nI0722 22:38:31.758479 23543 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\nI0722 22:38:33.661757 23543 client.go:469] Project \"e2e-test-router-ipfailover-ncxn6\" has been fully provisioned.\n  STEP: Check platforms @ 07/22/26 22:38:33.662\n  STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:38:34.693\nI0722 22:38:36.076431 23543 util.go:61] Linux worker node details:\ngnfq2hk-b5564-9ks7d-worker-0-4bnpj\ngnfq2hk-b5564-9ks7d-worker-0-6fjsr\ngnfq2hk-b5564-9ks7d-worker-0-jdf4g\nI0722 22:38:36.076480 23543 util.go:62] Available linux worker node count is: 3\n  STEP: check the cluster has remote worker profile @ 07/22/26 22:38:39.519\n  STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:38:41.193\n  STEP: Check network type @ 07/22/26 22:38:42.012\n  STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:38:42.867\nI0722 22:38:49.406071 23543 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n  STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:38:49.433\nnamespace/e2e-test-router-ipfailover-ncxn6 labeled\nI0722 22:38:50.540835 23543 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-ncxn6\nI0722 22:38:56.567236 23543 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-ncxn6-ouc8z9eb-temp-resource.json\ndeployment.apps/ipf-41028 created\nI0722 22:39:04.310895 23543 util.go:363] the Ready status of pod is True True\n  STEP: set the HA virtual IP for the failover group @ 07/22/26 22:39:04.311\nI0722 22:39:05.398904 23543 util.go:185] The pod list is [ipf-41028-7b94bb7cf8-5n5jw ipf-41028-7b94bb7cf8-l9vn5]\nI0722 22:39:07.056221 23543 util.go:302] The pod  ipf-41028-7b94bb7cf8-5n5jw IP in namespace e2e-test-router-ipfailover-ncxn6 is \"10.0.0.127\"\nI0722 22:39:07.056293 23543 util.go:176] The modified ipaddress is 10.0.0.100 \ndeployment.apps/ipf-41028 updated\n  STEP: set other ipfailover env varibales @ 07/22/26 22:39:18.194\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\ndeployment.apps/ipf-41028 updated\n  STEP: verify the HA virtual ip ENV variable @ 07/22/26 22:41:21.388\nI0722 22:41:27.615429 23543 util.go:363] the Ready status of pod is True True\nI0722 22:41:29.574614 23543 util.go:185] The pod list is [ipf-41028-6958b878f-5l5xr ipf-41028-6958b878f-dh8wq]\nI0722 22:41:44.429594 23543 util.go:136] The first pod log's failover status:- Wed Jul 22 17:11:12 2026: (ipfailover_VIP_1) Entering BACKUP STATE (init)\nWed Jul 22 17:11:15 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:41:45.788035 23543 util.go:143] The second pod log's failover status:- Wed Jul 22 17:11:12 2026: (ipfailover_VIP_1) Entering BACKUP STATE (init)\n\nI0722 22:41:45.788133 23543 util.go:164] The Master pod is ipf-41028-6958b878f-5l5xr and Backup pod is ipf-41028-6958b878f-dh8wq\nI0722 22:41:53.065280 23543 util.go:264] the matching part is: E0722 22:41:53.026079   23861 websocket.go:296] Unknown stream id 1, discarding message\nOPENSHIFT_HA_VIRTUAL_IPS=10.0.0.100\n  STEP: check the ipfailover configurations and verify the other ENV variables @ 07/22/26 22:41:53.065\nI0722 22:41:55.287164 23543 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-ncxn6-user}, err: \u003cnil\u003e\nI0722 22:41:55.518581 23543 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-ncxn6}, err: \u003cnil\u003e\nI0722 22:41:55.752656 23543 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~ENTCG7xyk8Nsbcc-Prj5IoTLZEmBWgFr3-0c3J-kzyM}, err: \u003cnil\u003e\n  STEP: Destroying namespace \"e2e-test-router-ipfailover-ncxn6\" for this suite. @ 07/22/26 22:41:55.753\n",
    "error": "    STEP: Creating a kubernetes client @ 07/22/26 22:38:23.498\n  I0722 22:38:27.667750 23543 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile689012487\"\n  I0722 22:38:27.667803 23543 client.go:368] The user is now \"e2e-test-router-ipfailover-ncxn6-user\"\n  I0722 22:38:27.667810 23543 client.go:370] Creating project \"e2e-test-router-ipfailover-ncxn6\"\n  I0722 22:38:28.036250 23543 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-ncxn6\" ...\n  I0722 22:38:29.068812 23543 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\n  I0722 22:38:29.323203 23543 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\n  I0722 22:38:29.950014 23543 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\n  I0722 22:38:30.578281 23543 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\n  I0722 22:38:31.211135 23543 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\n  I0722 22:38:31.490350 23543 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\n  I0722 22:38:31.758479 23543 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\n  I0722 22:38:33.661757 23543 client.go:469] Project \"e2e-test-router-ipfailover-ncxn6\" has been fully provisioned.\n    STEP: Check platforms @ 07/22/26 22:38:33.662\n    STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:38:34.693\n  I0722 22:38:36.076431 23543 util.go:61] Linux worker node details:\n  gnfq2hk-b5564-9ks7d-worker-0-4bnpj\n  gnfq2hk-b5564-9ks7d-worker-0-6fjsr\n  gnfq2hk-b5564-9ks7d-worker-0-jdf4g\n  I0722 22:38:36.076480 23543 util.go:62] Available linux worker node count is: 3\n    STEP: check the cluster has remote worker profile @ 07/22/26 22:38:39.519\n    STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:38:41.193\n    STEP: Check network type @ 07/22/26 22:38:42.012\n    STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:38:42.867\n  I0722 22:38:49.406071 23543 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n    STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:38:49.433\n  namespace/e2e-test-router-ipfailover-ncxn6 labeled\n  I0722 22:38:50.540835 23543 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-ncxn6\n  I0722 22:38:56.567236 23543 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-ncxn6-ouc8z9eb-temp-resource.json\n  deployment.apps/ipf-41028 created\n  I0722 22:39:04.310895 23543 util.go:363] the Ready status of pod is True True\n    STEP: set the HA virtual IP for the failover group @ 07/22/26 22:39:04.311\n  I0722 22:39:05.398904 23543 util.go:185] The pod list is [ipf-41028-7b94bb7cf8-5n5jw ipf-41028-7b94bb7cf8-l9vn5]\n  I0722 22:39:07.056221 23543 util.go:302] The pod  ipf-41028-7b94bb7cf8-5n5jw IP in namespace e2e-test-router-ipfailover-ncxn6 is \"10.0.0.127\"\n  I0722 22:39:07.056293 23543 util.go:176] The modified ipaddress is 10.0.0.100 \n  deployment.apps/ipf-41028 updated\n    STEP: set other ipfailover env varibales @ 07/22/26 22:39:18.194\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n  deployment.apps/ipf-41028 updated\n    STEP: verify the HA virtual ip ENV variable @ 07/22/26 22:41:21.388\n  I0722 22:41:27.615429 23543 util.go:363] the Ready status of pod is True True\n  I0722 22:41:29.574614 23543 util.go:185] The pod list is [ipf-41028-6958b878f-5l5xr ipf-41028-6958b878f-dh8wq]\n  I0722 22:41:44.429594 23543 util.go:136] The first pod log's failover status:- Wed Jul 22 17:11:12 2026: (ipfailover_VIP_1) Entering BACKUP STATE (init)\n  Wed Jul 22 17:11:15 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:41:45.788035 23543 util.go:143] The second pod log's failover status:- Wed Jul 22 17:11:12 2026: (ipfailover_VIP_1) Entering BACKUP STATE (init)\n\n  I0722 22:41:45.788133 23543 util.go:164] The Master pod is ipf-41028-6958b878f-5l5xr and Backup pod is ipf-41028-6958b878f-dh8wq\n  I0722 22:41:53.065280 23543 util.go:264] the matching part is: E0722 22:41:53.026079   23861 websocket.go:296] Unknown stream id 1, discarding message\n  OPENSHIFT_HA_VIRTUAL_IPS=10.0.0.100\n    STEP: check the ipfailover configurations and verify the other ENV variables @ 07/22/26 22:41:53.065\n  I0722 22:41:55.287164 23543 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-ncxn6-user}, err: \u003cnil\u003e\n  I0722 22:41:55.518581 23543 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-ncxn6}, err: \u003cnil\u003e\n  I0722 22:41:55.752656 23543 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~ENTCG7xyk8Nsbcc-Prj5IoTLZEmBWgFr3-0c3J-kzyM}, err: \u003cnil\u003e\n    STEP: Destroying namespace \"e2e-test-router-ipfailover-ncxn6\" for this suite. @ 07/22/26 22:41:55.753\n"
  },
  {
    "name": "[OTP][sig-network-edge] Network_Edge Author:mjoseph-NonHyperShiftHOST-ConnectedOnly-Medium-41029-ipfailover can support up to a maximum of 255 VIPs for the entire cluster [Serial]",
    "lifecycle": "blocking",
    "duration": 112469,
    "startTime": "2026-07-22 17:11:56.237167 UTC",
    "endTime": "2026-07-22 17:13:48.706310 UTC",
    "result": "passed",
    "output": "  STEP: Creating a kubernetes client @ 07/22/26 22:41:56.237\nI0722 22:42:00.818175 23866 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile3515751469\"\nI0722 22:42:00.818227 23866 client.go:368] The user is now \"e2e-test-router-ipfailover-sdbjh-user\"\nI0722 22:42:00.818236 23866 client.go:370] Creating project \"e2e-test-router-ipfailover-sdbjh\"\nI0722 22:42:01.198944 23866 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-sdbjh\" ...\nI0722 22:42:02.157501 23866 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\nI0722 22:42:02.396168 23866 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\nI0722 22:42:02.987693 23866 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\nI0722 22:42:03.582075 23866 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\nI0722 22:42:04.164098 23866 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\nI0722 22:42:04.400702 23866 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\nI0722 22:42:04.650018 23866 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\nI0722 22:42:06.347231 23866 client.go:469] Project \"e2e-test-router-ipfailover-sdbjh\" has been fully provisioned.\n  STEP: Check platforms @ 07/22/26 22:42:06.347\n  STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:42:07.828\nI0722 22:42:09.244987 23866 util.go:61] Linux worker node details:\ngnfq2hk-b5564-9ks7d-worker-0-4bnpj\ngnfq2hk-b5564-9ks7d-worker-0-6fjsr\ngnfq2hk-b5564-9ks7d-worker-0-jdf4g\nI0722 22:42:09.245060 23866 util.go:62] Available linux worker node count is: 3\n  STEP: check the cluster has remote worker profile @ 07/22/26 22:42:12.862\n  STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:42:14.382\n  STEP: Check network type @ 07/22/26 22:42:15.21\n  STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:42:16.928\nI0722 22:42:24.622975 23866 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n  STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:42:24.647\nnamespace/e2e-test-router-ipfailover-sdbjh labeled\nI0722 22:42:25.760687 23866 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-sdbjh\nI0722 22:42:31.967935 23866 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-sdbjh-tswoknxp-temp-resource.json\ndeployment.apps/ipf-41029 created\nI0722 22:42:39.942025 23866 util.go:363] the Ready status of pod is True True\nI0722 22:42:41.097159 23866 util.go:185] The pod list is [ipf-41029-7b94bb7cf8-959q5 ipf-41029-7b94bb7cf8-rqdpm]\nI0722 22:42:55.786112 23866 util.go:136] The first pod log's failover status:- Wed Jul 22 17:12:33 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:42:57.162911 23866 util.go:143] The second pod log's failover status:- Wed Jul 22 17:12:33 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:12:36 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:42:57.163007 23866 util.go:164] The Master pod is ipf-41029-7b94bb7cf8-rqdpm and Backup pod is ipf-41029-7b94bb7cf8-959q5\n  STEP: add some VIP configuration for the failover group @ 07/22/26 22:42:57.163\ndeployment.apps/ipf-41029 updated\ndeployment.apps/ipf-41029 updated\ndeployment.apps/ipf-41029 updated\n  STEP: verify from the ipfailover pod, the 255 VIPs are added @ 07/22/26 22:43:31.363\nI0722 22:43:38.259061 23866 util.go:363] the Ready status of pod is True True\nI0722 22:43:39.324208 23866 util.go:185] The pod list is [ipf-41029-88dc7654-554vt ipf-41029-88dc7654-s9ksr]\nI0722 22:43:45.998422 23866 util.go:264] the matching part is: E0722 22:43:45.943725   23961 websocket.go:296] Unknown stream id 1, discarding message\nOPENSHIFT_HA_VIP_GROUPS=238\nI0722 22:43:47.921873 23866 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-sdbjh-user}, err: \u003cnil\u003e\nI0722 22:43:48.189494 23866 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-sdbjh}, err: \u003cnil\u003e\nI0722 22:43:48.446303 23866 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~ylCo7gGXaygSwLSBw4fS_zYk65G4fnGr6gReznhFQJA}, err: \u003cnil\u003e\n  STEP: Destroying namespace \"e2e-test-router-ipfailover-sdbjh\" for this suite. @ 07/22/26 22:43:48.446\n",
    "error": "    STEP: Creating a kubernetes client @ 07/22/26 22:41:56.237\n  I0722 22:42:00.818175 23866 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile3515751469\"\n  I0722 22:42:00.818227 23866 client.go:368] The user is now \"e2e-test-router-ipfailover-sdbjh-user\"\n  I0722 22:42:00.818236 23866 client.go:370] Creating project \"e2e-test-router-ipfailover-sdbjh\"\n  I0722 22:42:01.198944 23866 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-sdbjh\" ...\n  I0722 22:42:02.157501 23866 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\n  I0722 22:42:02.396168 23866 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\n  I0722 22:42:02.987693 23866 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\n  I0722 22:42:03.582075 23866 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\n  I0722 22:42:04.164098 23866 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\n  I0722 22:42:04.400702 23866 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\n  I0722 22:42:04.650018 23866 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\n  I0722 22:42:06.347231 23866 client.go:469] Project \"e2e-test-router-ipfailover-sdbjh\" has been fully provisioned.\n    STEP: Check platforms @ 07/22/26 22:42:06.347\n    STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:42:07.828\n  I0722 22:42:09.244987 23866 util.go:61] Linux worker node details:\n  gnfq2hk-b5564-9ks7d-worker-0-4bnpj\n  gnfq2hk-b5564-9ks7d-worker-0-6fjsr\n  gnfq2hk-b5564-9ks7d-worker-0-jdf4g\n  I0722 22:42:09.245060 23866 util.go:62] Available linux worker node count is: 3\n    STEP: check the cluster has remote worker profile @ 07/22/26 22:42:12.862\n    STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:42:14.382\n    STEP: Check network type @ 07/22/26 22:42:15.21\n    STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:42:16.928\n  I0722 22:42:24.622975 23866 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n    STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:42:24.647\n  namespace/e2e-test-router-ipfailover-sdbjh labeled\n  I0722 22:42:25.760687 23866 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-sdbjh\n  I0722 22:42:31.967935 23866 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-sdbjh-tswoknxp-temp-resource.json\n  deployment.apps/ipf-41029 created\n  I0722 22:42:39.942025 23866 util.go:363] the Ready status of pod is True True\n  I0722 22:42:41.097159 23866 util.go:185] The pod list is [ipf-41029-7b94bb7cf8-959q5 ipf-41029-7b94bb7cf8-rqdpm]\n  I0722 22:42:55.786112 23866 util.go:136] The first pod log's failover status:- Wed Jul 22 17:12:33 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:42:57.162911 23866 util.go:143] The second pod log's failover status:- Wed Jul 22 17:12:33 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:12:36 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:42:57.163007 23866 util.go:164] The Master pod is ipf-41029-7b94bb7cf8-rqdpm and Backup pod is ipf-41029-7b94bb7cf8-959q5\n    STEP: add some VIP configuration for the failover group @ 07/22/26 22:42:57.163\n  deployment.apps/ipf-41029 updated\n  deployment.apps/ipf-41029 updated\n  deployment.apps/ipf-41029 updated\n    STEP: verify from the ipfailover pod, the 255 VIPs are added @ 07/22/26 22:43:31.363\n  I0722 22:43:38.259061 23866 util.go:363] the Ready status of pod is True True\n  I0722 22:43:39.324208 23866 util.go:185] The pod list is [ipf-41029-88dc7654-554vt ipf-41029-88dc7654-s9ksr]\n  I0722 22:43:45.998422 23866 util.go:264] the matching part is: E0722 22:43:45.943725   23961 websocket.go:296] Unknown stream id 1, discarding message\n  OPENSHIFT_HA_VIP_GROUPS=238\n  I0722 22:43:47.921873 23866 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-sdbjh-user}, err: \u003cnil\u003e\n  I0722 22:43:48.189494 23866 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-sdbjh}, err: \u003cnil\u003e\n  I0722 22:43:48.446303 23866 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~ylCo7gGXaygSwLSBw4fS_zYk65G4fnGr6gReznhFQJA}, err: \u003cnil\u003e\n    STEP: Destroying namespace \"e2e-test-router-ipfailover-sdbjh\" for this suite. @ 07/22/26 22:43:48.446\n"
  },
  {
    "name": "[OTP][sig-network-edge] Network_Edge Author:mjoseph-NonHyperShiftHOST-ConnectedOnly-High-41030-preemption strategy for keepalived ipfailover [Disruptive]",
    "lifecycle": "blocking",
    "duration": 301986,
    "startTime": "2026-07-22 17:13:48.983365 UTC",
    "endTime": "2026-07-22 17:18:50.969461 UTC",
    "result": "passed",
    "output": "  STEP: Creating a kubernetes client @ 07/22/26 22:43:48.983\nI0722 22:43:53.367467 23972 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile1265874192\"\nI0722 22:43:53.367598 23972 client.go:368] The user is now \"e2e-test-router-ipfailover-vr5xf-user\"\nI0722 22:43:53.367664 23972 client.go:370] Creating project \"e2e-test-router-ipfailover-vr5xf\"\nI0722 22:43:53.717634 23972 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-vr5xf\" ...\nI0722 22:43:54.777874 23972 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\nI0722 22:43:55.050263 23972 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\nI0722 22:43:55.668535 23972 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\nI0722 22:43:56.276997 23972 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\nI0722 22:43:56.892934 23972 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\nI0722 22:43:57.136045 23972 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\nI0722 22:43:57.378148 23972 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\nI0722 22:43:59.196972 23972 client.go:469] Project \"e2e-test-router-ipfailover-vr5xf\" has been fully provisioned.\n  STEP: Check platforms @ 07/22/26 22:43:59.197\n  STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:44:00.024\nI0722 22:44:01.330503 23972 util.go:61] Linux worker node details:\ngnfq2hk-b5564-9ks7d-worker-0-4bnpj\ngnfq2hk-b5564-9ks7d-worker-0-6fjsr\ngnfq2hk-b5564-9ks7d-worker-0-jdf4g\nI0722 22:44:01.330599 23972 util.go:62] Available linux worker node count is: 3\n  STEP: check the cluster has remote worker profile @ 07/22/26 22:44:04.691\n  STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:44:06.217\n  STEP: Check network type @ 07/22/26 22:44:07.1\n  STEP: 1. Get pull spec of ipfailover image from payload @ 07/22/26 22:44:08.079\nI0722 22:44:15.331560 23972 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n  STEP: 2. Create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:44:15.349\nnamespace/e2e-test-router-ipfailover-vr5xf labeled\nI0722 22:44:16.402498 23972 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-vr5xf\nI0722 22:44:23.209768 23972 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-vr5xf-ughjtayh-temp-resource.json\ndeployment.apps/ipf-41030 created\nI0722 22:44:31.005650 23972 util.go:363] the Ready status of pod is True True\nI0722 22:44:32.202188 23972 util.go:185] The pod list is [ipf-41030-7b94bb7cf8-btv75 ipf-41030-7b94bb7cf8-f6m2j]\nI0722 22:44:46.906992 23972 util.go:136] The first pod log's failover status:- Wed Jul 22 17:14:24 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:14:27 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:44:48.069074 23972 util.go:143] The second pod log's failover status:- Wed Jul 22 17:14:24 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:44:48.069206 23972 util.go:164] The Master pod is ipf-41030-7b94bb7cf8-btv75 and Backup pod is ipf-41030-7b94bb7cf8-f6m2j\n  STEP: 3. Set the HA virtual IP for the failover group @ 07/22/26 22:44:48.069\nI0722 22:44:49.199686 23972 util.go:185] The pod list is [ipf-41030-7b94bb7cf8-btv75 ipf-41030-7b94bb7cf8-f6m2j]\nI0722 22:44:51.085516 23972 util.go:302] The pod  ipf-41030-7b94bb7cf8-btv75 IP in namespace e2e-test-router-ipfailover-vr5xf is \"10.0.2.136\"\nI0722 22:44:51.085571 23972 util.go:176] The modified ipaddress is 10.0.2.100 \ndeployment.apps/ipf-41030 updated\n  STEP: 4. Verify the HA virtual ip ENV variable @ 07/22/26 22:45:02.151\nI0722 22:45:08.259251 23972 util.go:363] the Ready status of pod is True True\nI0722 22:45:09.345920 23972 util.go:185] The pod list is [ipf-41030-cc767d447-pbdfw ipf-41030-cc767d447-xz8tb]\nI0722 22:45:23.738035 23972 util.go:136] The first pod log's failover status:- Wed Jul 22 17:14:53 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:14:56 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:45:25.159566 23972 util.go:143] The second pod log's failover status:- Wed Jul 22 17:14:52 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:45:25.159670 23972 util.go:164] The Master pod is ipf-41030-cc767d447-pbdfw and Backup pod is ipf-41030-cc767d447-xz8tb\nI0722 22:45:32.242805 23972 util.go:264] the matching part is: E0722 22:45:32.207133   24038 websocket.go:296] Unknown stream id 1, discarding message\nOPENSHIFT_HA_VIRTUAL_IPS=10.0.2.100\nI0722 22:45:38.947453 23972 util.go:264] the matching part is: OPENSHIFT_HA_PREEMPTION=nopreempt\n  STEP: 5. Find the primary and the secondary pod @ 07/22/26 22:45:38.947\nI0722 22:45:40.518275 23972 util.go:207] The pod owning the VIP is ipf-41030-cc767d447-pbdfw\nI0722 22:45:40.518409 23972 util.go:223] The remaining pod/s in the list is [ipf-41030-cc767d447-xz8tb]\n  STEP: 6. Restarting the ipfailover primary pod @ 07/22/26 22:45:40.519\npod \"ipf-41030-cc767d447-pbdfw\" deleted\n  STEP: 7. Verify whether the other pod becomes primary and it has the VIP @ 07/22/26 22:45:42.244\nI0722 22:45:48.910104 23972 util.go:241] The new pod ipf-41030-cc767d447-xz8tb is the master\n  STEP: 8. Now set the preemption delay timer of 120s for the failover group @ 07/22/26 22:45:50.774\ndeployment.apps/ipf-41030 updated\nI0722 22:46:08.306450 23972 util.go:363] the Ready status of pod is True True\nI0722 22:46:09.442697 23972 util.go:185] The pod list is [ipf-41030-6889776bc9-f49km ipf-41030-6889776bc9-pnhrk]\nI0722 22:46:23.916147 23972 util.go:136] The first pod log's failover status:- Wed Jul 22 17:15:52 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:46:25.400970 23972 util.go:143] The second pod log's failover status:- Wed Jul 22 17:15:52 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:15:55 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:46:25.401088 23972 util.go:164] The Master pod is ipf-41030-6889776bc9-pnhrk and Backup pod is ipf-41030-6889776bc9-f49km\nI0722 22:46:32.333815 23972 util.go:264] the matching part is: OPENSHIFT_HA_PREEMPTION=preempt_delay 120\n  STEP: 9. Again restart the ipfailover primary(master) pod @ 07/22/26 22:46:32.334\npod \"ipf-41030-6889776bc9-pnhrk\" deleted\n  STEP: 10. Verify the newly created pod preempts the exiting primary after the delay expires @ 07/22/26 22:46:34.237\nI0722 22:46:35.523792 23972 util.go:185] The pod list is [ipf-41030-6889776bc9-f49km ipf-41030-6889776bc9-mlln8]\nI0722 22:46:35.523908 23972 util.go:223] The remaining pod/s in the list is [ipf-41030-6889776bc9-mlln8]\nI0722 22:48:47.781998 23972 util.go:241] The new pod ipf-41030-6889776bc9-mlln8 is the master\nI0722 22:48:50.240868 23972 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-vr5xf-user}, err: \u003cnil\u003e\nI0722 22:48:50.482611 23972 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-vr5xf}, err: \u003cnil\u003e\nI0722 22:48:50.725985 23972 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~XbjpnyBGVpFopP1Exfm9DpWCrxJ8ZS6v_8zeY_YfhiM}, err: \u003cnil\u003e\n  STEP: Destroying namespace \"e2e-test-router-ipfailover-vr5xf\" for this suite. @ 07/22/26 22:48:50.726\n",
    "error": "    STEP: Creating a kubernetes client @ 07/22/26 22:43:48.983\n  I0722 22:43:53.367467 23972 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile1265874192\"\n  I0722 22:43:53.367598 23972 client.go:368] The user is now \"e2e-test-router-ipfailover-vr5xf-user\"\n  I0722 22:43:53.367664 23972 client.go:370] Creating project \"e2e-test-router-ipfailover-vr5xf\"\n  I0722 22:43:53.717634 23972 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-vr5xf\" ...\n  I0722 22:43:54.777874 23972 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\n  I0722 22:43:55.050263 23972 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\n  I0722 22:43:55.668535 23972 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\n  I0722 22:43:56.276997 23972 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\n  I0722 22:43:56.892934 23972 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\n  I0722 22:43:57.136045 23972 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\n  I0722 22:43:57.378148 23972 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\n  I0722 22:43:59.196972 23972 client.go:469] Project \"e2e-test-router-ipfailover-vr5xf\" has been fully provisioned.\n    STEP: Check platforms @ 07/22/26 22:43:59.197\n    STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:44:00.024\n  I0722 22:44:01.330503 23972 util.go:61] Linux worker node details:\n  gnfq2hk-b5564-9ks7d-worker-0-4bnpj\n  gnfq2hk-b5564-9ks7d-worker-0-6fjsr\n  gnfq2hk-b5564-9ks7d-worker-0-jdf4g\n  I0722 22:44:01.330599 23972 util.go:62] Available linux worker node count is: 3\n    STEP: check the cluster has remote worker profile @ 07/22/26 22:44:04.691\n    STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:44:06.217\n    STEP: Check network type @ 07/22/26 22:44:07.1\n    STEP: 1. Get pull spec of ipfailover image from payload @ 07/22/26 22:44:08.079\n  I0722 22:44:15.331560 23972 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n    STEP: 2. Create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:44:15.349\n  namespace/e2e-test-router-ipfailover-vr5xf labeled\n  I0722 22:44:16.402498 23972 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-vr5xf\n  I0722 22:44:23.209768 23972 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-vr5xf-ughjtayh-temp-resource.json\n  deployment.apps/ipf-41030 created\n  I0722 22:44:31.005650 23972 util.go:363] the Ready status of pod is True True\n  I0722 22:44:32.202188 23972 util.go:185] The pod list is [ipf-41030-7b94bb7cf8-btv75 ipf-41030-7b94bb7cf8-f6m2j]\n  I0722 22:44:46.906992 23972 util.go:136] The first pod log's failover status:- Wed Jul 22 17:14:24 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:14:27 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:44:48.069074 23972 util.go:143] The second pod log's failover status:- Wed Jul 22 17:14:24 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:44:48.069206 23972 util.go:164] The Master pod is ipf-41030-7b94bb7cf8-btv75 and Backup pod is ipf-41030-7b94bb7cf8-f6m2j\n    STEP: 3. Set the HA virtual IP for the failover group @ 07/22/26 22:44:48.069\n  I0722 22:44:49.199686 23972 util.go:185] The pod list is [ipf-41030-7b94bb7cf8-btv75 ipf-41030-7b94bb7cf8-f6m2j]\n  I0722 22:44:51.085516 23972 util.go:302] The pod  ipf-41030-7b94bb7cf8-btv75 IP in namespace e2e-test-router-ipfailover-vr5xf is \"10.0.2.136\"\n  I0722 22:44:51.085571 23972 util.go:176] The modified ipaddress is 10.0.2.100 \n  deployment.apps/ipf-41030 updated\n    STEP: 4. Verify the HA virtual ip ENV variable @ 07/22/26 22:45:02.151\n  I0722 22:45:08.259251 23972 util.go:363] the Ready status of pod is True True\n  I0722 22:45:09.345920 23972 util.go:185] The pod list is [ipf-41030-cc767d447-pbdfw ipf-41030-cc767d447-xz8tb]\n  I0722 22:45:23.738035 23972 util.go:136] The first pod log's failover status:- Wed Jul 22 17:14:53 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:14:56 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:45:25.159566 23972 util.go:143] The second pod log's failover status:- Wed Jul 22 17:14:52 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:45:25.159670 23972 util.go:164] The Master pod is ipf-41030-cc767d447-pbdfw and Backup pod is ipf-41030-cc767d447-xz8tb\n  I0722 22:45:32.242805 23972 util.go:264] the matching part is: E0722 22:45:32.207133   24038 websocket.go:296] Unknown stream id 1, discarding message\n  OPENSHIFT_HA_VIRTUAL_IPS=10.0.2.100\n  I0722 22:45:38.947453 23972 util.go:264] the matching part is: OPENSHIFT_HA_PREEMPTION=nopreempt\n    STEP: 5. Find the primary and the secondary pod @ 07/22/26 22:45:38.947\n  I0722 22:45:40.518275 23972 util.go:207] The pod owning the VIP is ipf-41030-cc767d447-pbdfw\n  I0722 22:45:40.518409 23972 util.go:223] The remaining pod/s in the list is [ipf-41030-cc767d447-xz8tb]\n    STEP: 6. Restarting the ipfailover primary pod @ 07/22/26 22:45:40.519\n  pod \"ipf-41030-cc767d447-pbdfw\" deleted\n    STEP: 7. Verify whether the other pod becomes primary and it has the VIP @ 07/22/26 22:45:42.244\n  I0722 22:45:48.910104 23972 util.go:241] The new pod ipf-41030-cc767d447-xz8tb is the master\n    STEP: 8. Now set the preemption delay timer of 120s for the failover group @ 07/22/26 22:45:50.774\n  deployment.apps/ipf-41030 updated\n  I0722 22:46:08.306450 23972 util.go:363] the Ready status of pod is True True\n  I0722 22:46:09.442697 23972 util.go:185] The pod list is [ipf-41030-6889776bc9-f49km ipf-41030-6889776bc9-pnhrk]\n  I0722 22:46:23.916147 23972 util.go:136] The first pod log's failover status:- Wed Jul 22 17:15:52 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:46:25.400970 23972 util.go:143] The second pod log's failover status:- Wed Jul 22 17:15:52 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:15:55 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:46:25.401088 23972 util.go:164] The Master pod is ipf-41030-6889776bc9-pnhrk and Backup pod is ipf-41030-6889776bc9-f49km\n  I0722 22:46:32.333815 23972 util.go:264] the matching part is: OPENSHIFT_HA_PREEMPTION=preempt_delay 120\n    STEP: 9. Again restart the ipfailover primary(master) pod @ 07/22/26 22:46:32.334\n  pod \"ipf-41030-6889776bc9-pnhrk\" deleted\n    STEP: 10. Verify the newly created pod preempts the exiting primary after the delay expires @ 07/22/26 22:46:34.237\n  I0722 22:46:35.523792 23972 util.go:185] The pod list is [ipf-41030-6889776bc9-f49km ipf-41030-6889776bc9-mlln8]\n  I0722 22:46:35.523908 23972 util.go:223] The remaining pod/s in the list is [ipf-41030-6889776bc9-mlln8]\n  I0722 22:48:47.781998 23972 util.go:241] The new pod ipf-41030-6889776bc9-mlln8 is the master\n  I0722 22:48:50.240868 23972 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-vr5xf-user}, err: \u003cnil\u003e\n  I0722 22:48:50.482611 23972 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-vr5xf}, err: \u003cnil\u003e\n  I0722 22:48:50.725985 23972 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~XbjpnyBGVpFopP1Exfm9DpWCrxJ8ZS6v_8zeY_YfhiM}, err: \u003cnil\u003e\n    STEP: Destroying namespace \"e2e-test-router-ipfailover-vr5xf\" for this suite. @ 07/22/26 22:48:50.726\n"
  },
  {
    "name": "[OTP][sig-network-edge] Network_Edge Author:mjoseph-NonHyperShiftHOST-ConnectedOnly-Medium-49214-Excluding the existing VRRP cluster ID from ipfailover deployments [Serial]",
    "lifecycle": "blocking",
    "duration": 104946,
    "startTime": "2026-07-22 17:18:51.270912 UTC",
    "endTime": "2026-07-22 17:20:36.217040 UTC",
    "result": "passed",
    "output": "  STEP: Creating a kubernetes client @ 07/22/26 22:48:51.271\nI0722 22:48:55.716456 24179 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile342872708\"\nI0722 22:48:55.716536 24179 client.go:368] The user is now \"e2e-test-router-ipfailover-6kj4p-user\"\nI0722 22:48:55.716564 24179 client.go:370] Creating project \"e2e-test-router-ipfailover-6kj4p\"\nI0722 22:48:56.099059 24179 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-6kj4p\" ...\nI0722 22:48:57.225029 24179 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\nI0722 22:48:57.494843 24179 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\nI0722 22:48:58.097690 24179 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\nI0722 22:48:58.702188 24179 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\nI0722 22:48:59.304715 24179 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\nI0722 22:48:59.552334 24179 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\nI0722 22:48:59.803416 24179 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\nI0722 22:49:01.572693 24179 client.go:469] Project \"e2e-test-router-ipfailover-6kj4p\" has been fully provisioned.\n  STEP: Check platforms @ 07/22/26 22:49:01.572\n  STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:49:02.649\nI0722 22:49:03.974069 24179 util.go:61] Linux worker node details:\ngnfq2hk-b5564-9ks7d-worker-0-4bnpj\ngnfq2hk-b5564-9ks7d-worker-0-6fjsr\ngnfq2hk-b5564-9ks7d-worker-0-jdf4g\nI0722 22:49:03.974172 24179 util.go:62] Available linux worker node count is: 3\n  STEP: check the cluster has remote worker profile @ 07/22/26 22:49:07.562\n  STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:49:09.25\n  STEP: Check network type @ 07/22/26 22:49:10.131\n  STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:49:10.952\nI0722 22:49:17.395202 24179 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n  STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:49:17.418\nnamespace/e2e-test-router-ipfailover-6kj4p labeled\nI0722 22:49:18.584802 24179 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-6kj4p\nI0722 22:49:24.699854 24179 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-6kj4p-jsgniyqi-temp-resource.json\ndeployment.apps/ipf-49214 created\nI0722 22:49:32.579448 24179 util.go:363] the Ready status of pod is True True\nI0722 22:49:33.677306 24179 util.go:185] The pod list is [ipf-49214-7b94bb7cf8-pz5wr ipf-49214-7b94bb7cf8-xzgd7]\nI0722 22:49:48.303426 24179 util.go:136] The first pod log's failover status:- Wed Jul 22 17:19:26 2026: (ipfailover_VIP_1) Entering BACKUP STATE\nWed Jul 22 17:19:29 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\nI0722 22:49:49.499919 24179 util.go:143] The second pod log's failover status:- Wed Jul 22 17:19:26 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\nI0722 22:49:49.500163 24179 util.go:164] The Master pod is ipf-49214-7b94bb7cf8-pz5wr and Backup pod is ipf-49214-7b94bb7cf8-xzgd7\n  STEP: add 254 VIPs for the failover group @ 07/22/26 22:49:49.5\ndeployment.apps/ipf-49214 updated\n  STEP: Exclude VIP '9' from the ipfailover group @ 07/22/26 22:50:00.601\nI0722 22:50:01.912147 24179 util.go:185] The pod list is [ipf-49214-6c875f9f7b-jff5r ipf-49214-6c875f9f7b-vhkzq]\ndeployment.apps/ipf-49214 updated\n  STEP: verify from the ipfailover pod, the excluded VRRP_ID is configured @ 07/22/26 22:50:12.98\nI0722 22:50:19.413903 24179 util.go:363] the Ready status of pod is True True\nI0722 22:50:20.612602 24179 util.go:185] The pod list is [ipf-49214-f8c479674-5ls8r ipf-49214-f8c479674-rj2nx]\nI0722 22:50:27.633542 24179 util.go:264] the matching part is: E0722 22:50:27.597341   24257 websocket.go:296] Unknown stream id 1, discarding message\nHA_EXCLUDED_VRRP_IDS=9\n  STEP: verify the excluded VIP is removed from the router_ids of ipfailover pods @ 07/22/26 22:50:27.633\nI0722 22:50:34.603661 24179 util.go:264] the matching part is: virtual_router_id 10\n   virtual_router_id 11\n   virtual_router_id 12\n   virtual_router_id 13\n   virtual_router_id 14\n   virtual_router_id 15\n   virtual_router_id 16\n   virtual_router_id 17\n   virtual_router_id 18\n   virtual_router_id 19\nI0722 22:50:35.415750 24179 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-6kj4p-user}, err: \u003cnil\u003e\nI0722 22:50:35.682550 24179 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-6kj4p}, err: \u003cnil\u003e\nI0722 22:50:35.950750 24179 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~HhaZRLffihRqRdknee1uohaNwMLg7CnEB8CHE5VYKmo}, err: \u003cnil\u003e\n  STEP: Destroying namespace \"e2e-test-router-ipfailover-6kj4p\" for this suite. @ 07/22/26 22:50:35.951\n",
    "error": "    STEP: Creating a kubernetes client @ 07/22/26 22:48:51.271\n  I0722 22:48:55.716456 24179 client.go:293] configPath is now \"/var/folders/7h/zgpvgd5946bcf53ktsvp95_40000gn/T/configfile342872708\"\n  I0722 22:48:55.716536 24179 client.go:368] The user is now \"e2e-test-router-ipfailover-6kj4p-user\"\n  I0722 22:48:55.716564 24179 client.go:370] Creating project \"e2e-test-router-ipfailover-6kj4p\"\n  I0722 22:48:56.099059 24179 client.go:378] Waiting on permissions in project \"e2e-test-router-ipfailover-6kj4p\" ...\n  I0722 22:48:57.225029 24179 client.go:407] DeploymentConfig capability is enabled, adding 'deployer' SA to the list of default SAs\n  I0722 22:48:57.494843 24179 client.go:422] Waiting for ServiceAccount \"default\" to be provisioned...\n  I0722 22:48:58.097690 24179 client.go:422] Waiting for ServiceAccount \"builder\" to be provisioned...\n  I0722 22:48:58.702188 24179 client.go:422] Waiting for ServiceAccount \"deployer\" to be provisioned...\n  I0722 22:48:59.304715 24179 client.go:432] Waiting for RoleBinding \"system:image-pullers\" to be provisioned...\n  I0722 22:48:59.552334 24179 client.go:432] Waiting for RoleBinding \"system:image-builders\" to be provisioned...\n  I0722 22:48:59.803416 24179 client.go:432] Waiting for RoleBinding \"system:deployers\" to be provisioned...\n  I0722 22:49:01.572693 24179 client.go:469] Project \"e2e-test-router-ipfailover-6kj4p\" has been fully provisioned.\n    STEP: Check platforms @ 07/22/26 22:49:01.572\n    STEP: check whether there are two worker nodes present for testing hostnetwork @ 07/22/26 22:49:02.649\n  I0722 22:49:03.974069 24179 util.go:61] Linux worker node details:\n  gnfq2hk-b5564-9ks7d-worker-0-4bnpj\n  gnfq2hk-b5564-9ks7d-worker-0-6fjsr\n  gnfq2hk-b5564-9ks7d-worker-0-jdf4g\n  I0722 22:49:03.974172 24179 util.go:62] Available linux worker node count is: 3\n    STEP: check the cluster has remote worker profile @ 07/22/26 22:49:07.562\n    STEP: check whether the cluster is not ipv6 single stack @ 07/22/26 22:49:09.25\n    STEP: Check network type @ 07/22/26 22:49:10.131\n    STEP: get pull spec of ipfailover image from payload @ 07/22/26 22:49:10.952\n  I0722 22:49:17.395202 24179 util.go:121] the pull spec of image keepalived-ipfailover is: quay.io/openshift-release-dev/ocp-v5.0-art-dev@sha256:93c0a2b5ccfa1b27c43b02d4e8773e2641056c8ce85490a1a5c1dfaada6d1ad2\n    STEP: create ipfailover deployment and ensure one of pod enter MASTER state @ 07/22/26 22:49:17.418\n  namespace/e2e-test-router-ipfailover-6kj4p labeled\n  I0722 22:49:18.584802 24179 util.go:275] Successfully added privileged labels (enforce, audit, warn) to namespace e2e-test-router-ipfailover-6kj4p\n  I0722 22:49:24.699854 24179 util.go:356] the file of resource is /tmp/e2e-test-router-ipfailover-6kj4p-jsgniyqi-temp-resource.json\n  deployment.apps/ipf-49214 created\n  I0722 22:49:32.579448 24179 util.go:363] the Ready status of pod is True True\n  I0722 22:49:33.677306 24179 util.go:185] The pod list is [ipf-49214-7b94bb7cf8-pz5wr ipf-49214-7b94bb7cf8-xzgd7]\n  I0722 22:49:48.303426 24179 util.go:136] The first pod log's failover status:- Wed Jul 22 17:19:26 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n  Wed Jul 22 17:19:29 2026: (ipfailover_VIP_1) Entering MASTER STATE\n\n  I0722 22:49:49.499919 24179 util.go:143] The second pod log's failover status:- Wed Jul 22 17:19:26 2026: (ipfailover_VIP_1) Entering BACKUP STATE\n\n  I0722 22:49:49.500163 24179 util.go:164] The Master pod is ipf-49214-7b94bb7cf8-pz5wr and Backup pod is ipf-49214-7b94bb7cf8-xzgd7\n    STEP: add 254 VIPs for the failover group @ 07/22/26 22:49:49.5\n  deployment.apps/ipf-49214 updated\n    STEP: Exclude VIP '9' from the ipfailover group @ 07/22/26 22:50:00.601\n  I0722 22:50:01.912147 24179 util.go:185] The pod list is [ipf-49214-6c875f9f7b-jff5r ipf-49214-6c875f9f7b-vhkzq]\n  deployment.apps/ipf-49214 updated\n    STEP: verify from the ipfailover pod, the excluded VRRP_ID is configured @ 07/22/26 22:50:12.98\n  I0722 22:50:19.413903 24179 util.go:363] the Ready status of pod is True True\n  I0722 22:50:20.612602 24179 util.go:185] The pod list is [ipf-49214-f8c479674-5ls8r ipf-49214-f8c479674-rj2nx]\n  I0722 22:50:27.633542 24179 util.go:264] the matching part is: E0722 22:50:27.597341   24257 websocket.go:296] Unknown stream id 1, discarding message\n  HA_EXCLUDED_VRRP_IDS=9\n    STEP: verify the excluded VIP is removed from the router_ids of ipfailover pods @ 07/22/26 22:50:27.633\n  I0722 22:50:34.603661 24179 util.go:264] the matching part is: virtual_router_id 10\n     virtual_router_id 11\n     virtual_router_id 12\n     virtual_router_id 13\n     virtual_router_id 14\n     virtual_router_id 15\n     virtual_router_id 16\n     virtual_router_id 17\n     virtual_router_id 18\n     virtual_router_id 19\n  I0722 22:50:35.415750 24179 client.go:689] Deleted {user.openshift.io/v1, Resource=users  e2e-test-router-ipfailover-6kj4p-user}, err: \u003cnil\u003e\n  I0722 22:50:35.682550 24179 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthclients  e2e-client-e2e-test-router-ipfailover-6kj4p}, err: \u003cnil\u003e\n  I0722 22:50:35.950750 24179 client.go:689] Deleted {oauth.openshift.io/v1, Resource=oauthaccesstokens  sha256~HhaZRLffihRqRdknee1uohaNwMLg7CnEB8CHE5VYKmo}, err: \u003cnil\u003e\n    STEP: Destroying namespace \"e2e-test-router-ipfailover-6kj4p\" for this suite. @ 07/22/26 22:50:35.951\n"
  }
]%  

Summary by CodeRabbit

  • New Features

    • Added an automated end-to-end test extension for IP failover behavior.
    • Added coverage for failover, master/backup election, virtual IP configuration, preemption, and multi-VIP scenarios.
    • Added container packaging so the test extension is available in the final image.
  • Documentation

    • Added instructions for building, running, and understanding the test suites.
  • Chores

    • Added build and cleanup tooling for the test extension.

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 22, 2026
@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 22, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

@melvinjoseph86: This pull request references NE-2126 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci

openshift-ci Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Walkthrough

Adds a Go-based ipfailover OTE test extension with cluster utilities, six E2E scenarios, named suite registration, and Docker image packaging.

Changes

ipfailover test extension

Layer / File(s) Summary
Build and package the extension
ipfailover/keepalived/tests/go.mod, ipfailover/keepalived/tests/Makefile, ipfailover/keepalived/Dockerfile, ipfailover/keepalived/tests/.gitignore, ipfailover/keepalived/tests/README.md
Defines the Go module and build targets. The Dockerfile builds the extension and copies its tarball into the final image. Supporting documentation and ignore rules are added.
Create the cluster test harness
ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml, ipfailover/keepalived/tests/e2e/util.go
Adds the privileged host-networked deployment template and utilities for cluster inspection, resource creation, networking, readiness, failover polling, and diagnostics.
Implement ipfailover E2E scenarios
ipfailover/keepalived/tests/e2e/ipfailover.go
Adds tests for election, VIP failover, configuration, large VIP sets, delayed preemption, and VRRP ID exclusion.
Register and run test suites
ipfailover/keepalived/tests/cmd/main.go
Adds the extension entrypoint, spec filtering, platform filtering, lifecycle assignment, Cobra command setup, and named suite registration.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant testExtension as test extension
  participant ginkgoSuite as OpenShift Ginkgo suite
  participant e2eTests as ipfailover E2E tests
  participant cluster as OpenShift cluster
  testExtension->>ginkgoSuite: build test specs
  ginkgoSuite->>e2eTests: filter local e2e specs
  testExtension->>e2eTests: register suites and lifecycle
  e2eTests->>cluster: create ipfailover deployment
  cluster-->>e2eTests: return pod state and logs
  e2eTests-->>testExtension: report test results
Loading

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (4 errors, 4 warnings)

Check name Status Explanation Resolution
Stable And Deterministic Test Names ❌ Error All six Ginkgo titles are static, but each includes author, environment profile, priority, and case-ID metadata (for example 41025), which is overly specific and likely to change. Rename the six It() titles to concise behavior-focused descriptions. Keep [Serial] and [Disruptive] only if suite classification requires them.
No-Weak-Crypto ❌ Error The PR vendors weak crypto usage, including SHA-1 in go-jose, MD5 in gomega, and DES/RC4 in x/crypto/ssh. Remove or update vendored dependencies that contain weak algorithms, or prove these legacy paths are excluded from the built extension.
Container-Privileges ❌ Error The added Deployment template sets privileged: true at lines 24 and 36 and hostNetwork: true at line 25. Remove privileged mode and host networking from the manifest, or obtain an explicit approved exception and restrict the required privileges to the smallest possible scope.
No-Sensitive-Data-In-Logs ❌ Error util.go logs worker/node details and raw pod logs; the supplied output also exposes internal hostnames and sha256~ OAuth access-token identifiers. Redact node, pod, namespace, and token-like identifiers, and never log raw pod or command output without secret filtering.
Test Structure And Quality ⚠️ Warning 47 o.Expect calls in the new suite and helpers have no diagnostic message, including cluster-operation errors at ipfailover.go:161 and util.go:321. Add a meaningful failure message to every assertion, especially each HaveOccurred check, with the operation and resource identified.
Microshift Test Compatibility ⚠️ Warning All six Ginkgo tests lack MicroShift guards/tags and use config.openshift.io infrastructure, network.operator.openshift.io, template.openshift.io, plus two-worker/HA assumptions. Add [Skipped:MicroShift] or suitable [apigroup:...] tags, or guard with IsMicroShiftCluster and g.Skip; verify with the required MicroShift serial/parallel job.
Single Node Openshift (Sno) Test Compatibility ⚠️ Warning All six added It() cases inherit a BeforeEach requiring at least two ready Linux workers, and the manifest uses hostNetwork; no listed SNO topology guard exists. Run serial cases with /payload-job periodic-ci-openshift-release-master-nightly-4.22-e2e-aws-ovn-single-node-serial and disruptive cases with /payload-job periodic-ci-openshift-release-master-ci-4.22-e2e-aws-upgrade-ovn-single-node, or a...
Ipv6 And Disconnected Network Test Compatibility ⚠️ Warning The new Ginkgo tests hardcode IPv4 VIPs (192.168.254.1-255, 192.168.254.1-254, and template default 192.168.123.123) and replace IP octets with strings.Split("."). Apply IPv6-aware VIP generation and parsing, or skip IPv4-only cases with an explicit IPv4-cluster guard; do not use hardcoded IPv4 defaults.
✅ Passed checks (7 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: migrating Ipfailover test cases into the images repository.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Topology-Aware Scheduling Compatibility ✅ Passed The Deployment uses only a worker selector and Recreate strategy; the suite checks for at least two ready Linux workers before creation and skips otherwise, with no affinity, spread, toleration, or...
Ote Binary Stdout Contract ✅ Passed Process-level code redirects klog and REST warnings to os.Stderr; Ginkgo setup also uses os.Stderr, and project-owned main/init code has no direct stdout writes.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@melvinjoseph86

Copy link
Copy Markdown
Author

/test tests-extension
/test e2e-metal-ipi-tests-ext
/test e2e-vsphere-ovn-tests-ext
/test e2e-openstack-ipi-tests-ext

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ipfailover/keepalived/Dockerfile`:
- Line 4: Replace the broad COPY . . instruction in the Dockerfile with explicit
COPY directives for only the test module’s required files and directories,
ensuring unrelated files and secrets are excluded from the builder context.
- Around line 24-25: Update the final base-rhel9 stage in the Dockerfile to run
with a non-root USER, not only the builder stage. Verify keepalived still
functions with that identity; if elevated privileges are required, document the
exception and restrict execution to the minimum necessary capabilities.
- Around line 24-25: The final image lacks a healthcheck for the keepalived
service. Add a Docker HEALTHCHECK to the keepalived Dockerfile that verifies
both monitor.sh and the keepalived process are running successfully, using an
appropriate command and interval, timeout, retries, and startup grace period.

In `@ipfailover/keepalived/tests/e2e/util.go`:
- Around line 107-123: Update the temporary directory creation in
getImagePullSpecFromPayload to use owner-only permissions instead of 0755,
ensuring the extracted pull-secret and its parent directory are inaccessible to
other local users while preserving the existing extraction and cleanup flow.
- Around line 414-437: Update getSpecificPodLogs to remove the bash-based
exec.Command filtering and extra cat process. Read podLogs directly in Go, apply
the optional case-insensitive filter in memory, and return the matching log
content while preserving the existing error logging and return behavior.

In `@ipfailover/keepalived/tests/README.md`:
- Line 49: Update the fenced directory-tree code block in the README to specify
the text language, changing the untyped fence to a text fence while preserving
its contents.

In `@tests-extension/README.md`:
- Line 38: Update the documented CI command in the execution instructions to
include --max-concurrency=1 when invoking run-suite for ipfailover/all,
preserving serial test execution required by the hostNetwork-based tests.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 10b4db7b-9654-4cb0-94fa-6e7281579f0b

📥 Commits

Reviewing files that changed from the base of the PR and between c29cc6c and 1bed137.

⛔ Files ignored due to path filters (1)
  • ipfailover/keepalived/tests/go.sum is excluded by !**/*.sum
📒 Files selected for processing (13)
  • ipfailover/keepalived/.dockerignore
  • ipfailover/keepalived/Dockerfile
  • ipfailover/keepalived/tests/.gitignore
  • ipfailover/keepalived/tests/Makefile
  • ipfailover/keepalived/tests/README.md
  • ipfailover/keepalived/tests/cmd/main.go
  • ipfailover/keepalived/tests/e2e/ipfailover.go
  • ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml
  • ipfailover/keepalived/tests/e2e/util.go
  • ipfailover/keepalived/tests/go.mod
  • tests-extension/.gitignore
  • tests-extension/Makefile
  • tests-extension/README.md
💤 Files with no reviewable changes (1)
  • ipfailover/keepalived/.dockerignore

Comment thread ipfailover/keepalived/Dockerfile Outdated
Comment thread ipfailover/keepalived/Dockerfile
Comment thread ipfailover/keepalived/tests/e2e/util.go
Comment thread ipfailover/keepalived/tests/e2e/util.go
Comment thread ipfailover/keepalived/tests/README.md Outdated
Comment thread tests-extension/README.md Outdated
@openshift-ci

openshift-ci Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

@melvinjoseph86: 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
ci/prow/tests-extension 1bed137 link true /test tests-extension
ci/prow/e2e-metal-ipi-tests-ext 1bed137 link false /test e2e-metal-ipi-tests-ext
ci/prow/e2e-vsphere-ovn-tests-ext 1bed137 link false /test e2e-vsphere-ovn-tests-ext
ci/prow/e2e-openstack-ipi-tests-ext 1bed137 link false /test e2e-openstack-ipi-tests-ext

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: melvinjoseph86

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 31, 2026
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
Validation Failed: {"resource":"IssueComment","code":"custom","field":"body","message":"body is too long (maximum is 65536 characters)"} - https://docs.github.com/rest/issues/comments#update-an-issue-comment

@melvinjoseph86

Copy link
Copy Markdown
Author

/test tests-extension
/test e2e-metal-ipi-tests-ext
/test e2e-vsphere-ovn-tests-ext
/test e2e-openstack-ipi-tests-ext

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ipfailover/keepalived/Dockerfile`:
- Around line 8-9: Update the Dockerfile artifact packaging commands to
gzip-compress the built ipfailover-tests-ext executable with gzip rather than
creating a tar archive, and publish the resulting raw gzip artifact at the
registered /usr/bin/ipfailover-test-extension.tar.gz path while preserving the
expected executable build flow.

In `@ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml`:
- Around line 69-74: Add a readinessProbe alongside the existing livenessProbe
in the Deployment container configuration, using a check that confirms
keepalived initialization and VRRP/VIP readiness (or the VRRP controller port)
rather than merely checking that the process is running. Keep the existing
livenessProbe unchanged.
- Around line 28-69: Add a resources block to the openshift-ipfailover container
definition, specifying both CPU and memory requests and limits. Keep the
existing container configuration unchanged and use the repository’s established
resource values or conventions if available.
- Around line 14-27: Update the ipfailover e2e setup around the deployment
replica configuration and OPENSHIFT_HA_REPLICA_COUNT to derive the count from
eligible worker nodes rather than assuming two workers. Inspect
infrastructure.Status.ControlPlaneTopology before running these tests, and
explicitly skip SingleReplica, HyperShift, arbiter, and External topologies;
keep the node-role.kubernetes.io/worker selection aligned with the computed
placement.
- Around line 22-47: Harden the ipfailover test PodSpec by removing the invalid
PodSpec-level privileged setting, hostNetwork, and host-slash host-path mount
unless each is demonstrably required; retain only required host integrations.
For the remaining container configuration, remove unnecessary privileges and add
allowPrivilegeEscalation: false, runAsNonRoot: true, and readOnlyRootFilesystem:
true where supported, using only verified capabilities if host networking must
remain.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

Comment on lines +8 to +9
tar -czvf ipfailover-test-extension.tar.gz ipfailover-tests-ext && \
rm -f ipfailover-tests-ext

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Search OTE artifact registrations and extractors:"
rg -n --hidden --glob '!vendor/**' \
  'ipfailover-test-extension|ipfailover-tests-ext|tests-ext\.gz|tar -x|gzip|decompress|extract' . || true

echo
echo "Inspect the changed packaging paths:"
nl -ba ipfailover/keepalived/Dockerfile | sed -n '1,35p'
nl -ba ipfailover/keepalived/tests/Makefile | sed -n '1,25p'

Repository: openshift/images

Length of output: 50375


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Changed files summary:"
git diff --stat HEAD~1..HEAD 2>/dev/null || git diff --stat || true

echo
echo "Locate keepalived Dockerfile and Makefile:"
fd -a '^(Dockerfile|Makefile)$' ipfailover/keepalived 2>/dev/null || find ipfailover/keepalived -maxdepth 3 -type f \( -name Dockerfile -o -name Makefile \) | sort

echo
echo "Packaging files (no vendor, no huge log):"
rg -n --hidden --glob '!ipfailover/keepalived/tests/vendor/**' --glob '!vendor/**' \
  'ipfailover-test-extension|ipfailover-tests-ext|tests-ext\.gz|tar -czv|cp.*test-extension|BUILD|Extension|extension' ipfailover || true

echo
echo "Relevant Dockerfile:"
nl -ba ipfailover/keepalived/Dockerfile | sed -n '1,80p'

echo
echo "Relevant Makefile:"
nl -ba ipfailover/keepalived/tests/Makefile | sed -n '1,120p'

echo
echo "Focused OTE string search:"
rg -n --hidden --glob '!ipfailover/keepalived/tests/vendor/**' \
  'openshift/tests-extension|tests-extension|tests-ext\.gz|test-extension' . || true

Repository: openshift/images

Length of output: 50375


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Focused keepalived files without vendor/log:"
find ipfailover/keepalived -maxdepth 3 -type f \( -name Dockerfile -o -name Makefile \) -print | sort

echo
echo "Relevant Dockerfile excerpts:"
for f in $(find ipfailover/keepalived -maxdepth 3 -type f -name Dockerfile -print | sort); do
  echo "--- $f"
  nl -ba "$f" | sed -n '1,120p'
done

echo
echo "Relevant Makefile excerpts:"
for f in $(find ipfailover/keepalived -maxdepth 3 -type f -name Makefile -print | sort); do
  echo "--- $f"
  nl -ba "$f" | sed -n '1,160p'
done

echo
echo "Focused OTE strings excluding vendor directories/files:"
python3 - <<'PY'
import re, os
root='ipfailover/keepalived'
for dirpath, dirnames, filenames in os.walk(root):
    dirnames[:] = [d for d in dirnames if d != 'vendor']
    for name in filenames:
        if name == 'vendor' or name.endswith(('.md','.png','.jpg')):
            continue
        path=os.path.join(dirpath, name)
        try:
            data=open(path, encoding='utf-8', errors='ignore').read()
        except Exception:
            continue
        for i,line in enumerate(data.splitlines(),1):
            if re.search(r'ipfailover-test-extension|ipfailover-tests-ext|tests-ext\.gz|test-extension|archive|tar |gzip -n|COPY --from=test-extension-builder|Extension|extension', line):
                print(f'{path}:{i}:{line}')
PY

Repository: openshift/images

Length of output: 378


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- ipfailover/keepalived/Dockerfile'
awk '{printf "%6d\t%s\n", NR, $0}' ipfailover/keepalived/Dockerfile | sed -n '1,120p'

printf '%s\n' '--- ipfailover/keepalived/tests/Makefile'
awk '{printf "%6d\t%s\n", NR, $0}' ipfailover/keepalived/tests/Makefile | sed -n '1,160p'

printf '%s\n' '--- focused OTE strings'
python3 - <<'PY'
import re, os
root='ipfailover/keepalived'
for dirpath, dirnames, filenames in os.walk(root):
    dirnames[:] = [d for d in dirnames if d != 'vendor']
    for name in filenames:
        if name == 'vendor' or name.endswith(('.md','.png','.jpg','.gz')):
            continue
        path=os.path.join(dirpath, name)
        line=1
        try:
            data=open(path, encoding='utf-8', errors='ignore').read()
        except Exception:
            continue
        for raw in data.splitlines():
            if re.search(r'ipfailover-test-extension|ipfailover-tests-ext|tests-ext\.gz|test-extension|archive|tar |gzip -n|COPY --from=test-extension-builder|Extension|extension', raw):
                print(f'{path}:{line}:{raw}')
            line += 1
PY

Repository: openshift/images

Length of output: 6235


🌐 Web query:

openshift-eng openshift-tests-extension OTE gzip tests-ext.gz extractor

💡 Result:

The openshift-tests-extension (OTE) is a framework that allows OpenShift component teams to contribute end-to-end tests to the core OpenShift test suite without needing to merge code directly into the main openshift/origin repository [1][2]. Key technical aspects include: 1. OTE Protocol: A command-line protocol used by the core openshift-tests binary to discover and execute these component-specific test binaries [1]. 2. Binary Packaging: Component teams build their tests as standalone Go executables, which are then compressed using gzip (typically resulting in filenames ending in .gz) to reduce image size [1][3][4]. These compressed binaries are placed at well-known paths (commonly /usr/bin/) within the component's payload images [1]. 3. Discovery and Extraction: The OpenShift test framework discovers these binaries via a registration process in openshift/origin [1]. During execution, the test framework automatically extracts these binaries from their respective payload images (e.g., using oc image extract), decompresses them, makes them executable, and runs them as part of the broader test suite [1][5][6]. This modular approach allows for decentralized test management while maintaining centralized orchestration through the openshift-tests binary [6][2].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Check local archive module API if available:"
go doc github.com/moby/go-archive Archive 2>&1 || true

echo
echo "Simulate Dockerfile archive behavior with a small ELF-like payload:"
python3 - <<'PY'
import tarfile, gzip, os, stat, tempfile, subprocess, shutil

payload_path = os.path.join(tempfile.mkdtemp(prefix="ote-payload-"), "ipfailover-tests-ext")
with open(payload_path, "wb") as f:
    f.write(b"\x7fELF-tests-extension-payload")

with tempfile.TemporaryDirectory() as tmp:
    os.chmod(payload_path, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
    tarball = os.path.join(tmp, "ipfailover-test-extension.tar.gz")
    with tarfile.open(tarball, "w:gz") as tf:
        tf.add(payload_path, "ipfailover-tests-ext")
    with gzip.open(os.path.join(tmp, "ipfailover-tests-ext.gz"), "wb") as gz:
        with open(payload_path, "rb") as src:
            gz.write(src.read())
    print("tarball size:", os.stat(tarball).st_size)
    print("raw gzip size:", os.path.getsize(os.path.join(tmp, "ipfailover-tests-ext.gz")))
    with subprocess.Popen(["sh", "-c", "tar -xzf /tmp/*.tar.gz 2>&1 || true"], stdin=subprocess.DEVNULL, cwd=tmp, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as p:
        stdout, stderr = p.communicate()
        print("tar extraction returncode:", p.returncode)
        print("tar extraction stdout:", stdout.decode(errors="replace"))
        print("tar extraction stderr:", stderr.decode(errors="replace"))
PY

Repository: openshift/images

Length of output: 620


🌐 Web query:

site:github.com/openshift/oc registry payload image extract gzip *.gz executable tests-ext.gz

💡 Result:

The artifact oc-tests-ext.gz is a gzip-compressed binary typically found in OpenShift CLI test images (e.g., cli-tests) [1][2][3]. Because it is stored in a compressed state to reduce image size, it cannot be executed directly from the container image [1][2]. To extract, decompress, and use the oc-tests-ext binary, follow these steps [1][2]: 1. Extract the file from the image: You can use docker cp or podman cp to copy the file from a container, or oc image extract to pull it directly from the registry [1][4]. Example using container runtime: docker create --name temp-container docker cp temp-container:/usr/bin/oc-tests-ext.gz. docker rm temp-container 2. Decompress the binary: gunzip oc-tests-ext.gz 3. Set executable permissions: chmod +x oc-tests-ext 4. Execute the binary:./oc-tests-ext Alternatively, you can perform these actions in a single pipeline: docker run --rm cat /usr/bin/oc-tests-ext.gz | gunzip > oc-tests-ext && chmod +x oc-tests-ext [1]

Citations:


Package the OTE artifact as a gzip-compressed binary.

The Dockerfile copies a tar archive to /usr/bin/ipfailover-test-extension.tar.gz, but OTE payloads are raw gzip-compressed executables, typically named *-tests-ext.gz. Build ipfailover-tests-ext, compress it with raw gzip, and copy/publish that artifact at the registered /usr/bin path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ipfailover/keepalived/Dockerfile` around lines 8 - 9, Update the Dockerfile
artifact packaging commands to gzip-compress the built ipfailover-tests-ext
executable with gzip rather than creating a tar archive, and publish the
resulting raw gzip artifact at the registered
/usr/bin/ipfailover-test-extension.tar.gz path while preserving the expected
executable build flow.

Comment on lines +14 to +27
replicas: 2
selector:
matchLabels:
ipfailover: hello-openshift
template:
metadata:
labels:
ipfailover: hello-openshift
spec:
serviceAccountName: ipfailover
privileged: true
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/worker: ""

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 4 --glob '*.go' \
  'ControlPlaneTopology|Infrastructure|ipfailover\.yaml|node-role\.kubernetes\.io/worker|REPLICA_COUNT|replicas' \
  ipfailover/keepalived/tests

Repository: openshift/images

Length of output: 50373


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'File outline:\n'
wc -l ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml
printf '\nRelevant manifest:\n'
cat -n ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml

printf '\nNon-vendor matches in ipfailover/keepalived/tests:\n'
rg -n -C 3 --glob '!vendor/**' \
  'ControlPlaneTopology|Infra|infrastructure\.Status|HyperShift|SingleReplica|DualReplica|HighlyAvailableArbiter|External|node-role\.kubernetes\.io/worker|REPLICA_COUNT|replicas|ipfailover\.yaml' \
  ipfailover/keepalived/tests || true

printf '\nList ipfailover/keepalived/tests top-level:\n'
fd . ipfailover/keepalived/tests -maxdepth 3 -t f | sed -n '1,200p'

Repository: openshift/images

Length of output: 50373


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Target file size:\n'
wc -l ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml 2>/dev/null || true

printf '\nRelevant non-vendor matches:\n'
rg -n -C 3 --glob '!ipfailover/keepalived/tests/vendor/**' \
  'ControlPlaneTopology|Infra|infrastructure\.Status|HyperShift|SingleReplica|DualReplica|HighlyAvailableArbiter|External|node-role\.kubernetes\.io/worker|REPLICA_COUNT|replicas|ipfailover\.yaml' \
  ipfailover/keepalived/tests || true

printf '\nNon-vendor Go file count/listing:\n'
git ls-files ipfailover/keepalived/tests | rg '\.go$|\.yaml$|\.yml$' | sed -n '1,200p'

Repository: openshift/images

Length of output: 29536


Make replica placement topology-aware.

replicas: 2 plus the node-role.kubernetes.io/worker selector and OPENSHIFT_HA_REPLICA_COUNT=2 assume two worker nodes. The ipfailover e2e tests do not inspect infrastructure.Status.ControlPlaneTopology, so this can fail on SingleReplica clusters, HyperShift, arbiter, or External topologies. Set replicas and OPENSHIFT_HA_REPLICA_COUNT based on eligible worker nodes and skip unsupported topologies explicitly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml` around lines
14 - 27, Update the ipfailover e2e setup around the deployment replica
configuration and OPENSHIFT_HA_REPLICA_COUNT to derive the count from eligible
worker nodes rather than assuming two workers. Inspect
infrastructure.Status.ControlPlaneTopology before running these tests, and
explicitly skip SingleReplica, HyperShift, arbiter, and External topologies;
keep the node-role.kubernetes.io/worker selection aligned with the computed
placement.

Source: Coding guidelines

Comment on lines +22 to +47
spec:
serviceAccountName: ipfailover
privileged: true
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/worker: ""
containers:
- name: openshift-ipfailover
image: ${IMAGE}
ports:
- containerPort: 63000
hostPort: 63000
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
volumeMounts:
- name: lib-modules
mountPath: /lib/modules
readOnly: true
- name: host-slash
mountPath: /host
readOnly: true
mountPropagation: HostToContainer
- name: etc-sysconfig
mountPath: /etc/sysconfig
readOnly: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

oc process -f ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml \
  -p NAME=ipfailover \
  -p NAMESPACE=default \
  -p IMAGE=example.invalid/ipfailover:latest \
  -p HAINTERFACE=eth0 |
  oc apply --dry-run=server --field-validation=Strict -f -

Repository: openshift/images

Length of output: 230


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'File stats:\n'
wc -l ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml 2>/dev/null || true

printf '\nFile contents:\n'
cat -n ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml

printf '\nRelevant manifests/tests references:\n'
rg -n "ipfailover.yaml|hostNetwork|privileged|allowPrivilegeEscalation|runAsNonRoot|readOnlyRootFilesystem|host-slash|lib-modules|ipfailover" ipfailover/keepalived/tests ipfailover/keepalived 2>/dev/null || true

printf '\nKubernetes API docs in vendored/deps? (no-op listing):\n'
git ls-files | rg -i 'kubernetes|schema|api|docs|templates|README|Makefile|Dockerfile' | head -200

Repository: openshift/images

Length of output: 50373


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

path = Path("ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml")
text = path.read_text()
lines = text.splitlines()

print("Target lines:")
for i, line in enumerate(lines, start=1):
    if 1 <= i <= 100:
        # Print lines that would contain hostNetwork/privileged/securityContext volume mount contexts.
        if i in range(1, 90):
            print(f"{i:3}: {line}")

print("\nPodSpec-level privileged occurrences:")
for i, line in enumerate(lines, start=1):
    if re.match(r"^\s{0,6}{0,2}privileged:\s*true\s*$", line):
        print(f"line {i}: {line.strip()}")

print("\nContainer securityContext context (lines 30-50):")
for i, line in enumerate(lines, start=1):
    if 30 <= i <= 50:
        print(f"{i:3}: {line}")

print("\nHost-path volumes below PodSpec:")
for i, line in enumerate(lines, start=1):
    s = line.strip()
    if s.startswith("hostPath:") or "/host" in s or "lib-modules" in s:
        print(f"line {i}: {line.rstrip()}")

print("\nSecurity context hints:")
for field in ["allowPrivilegeEscalation:", "runAsNonRoot:", "readOnlyRootFilesystem:", "capabilities:", "hostNetwork:", "privileged:"]:
    matches = [(idx+1, line.rstrip()) for idx, line in enumerate(lines) if field in line]
    if matches:
        print(field, "=>", matches)
PY

Repository: openshift/images

Length of output: 3855


Remove the host-level privilege configuration.

Line 23 sets privileged on PodSpec, where it is not a valid field. Line 35 still runs the container as privileged. Combined with hostNetwork and the / host-path mount, a compromise of this container can modify the node. Remove privileged, hostNetwork, and the host-path mounts unless the test requires each one. If host networking is required, drop ALL capabilities and add only the verified capabilities. Set allowPrivilegeEscalation: false, runAsNonRoot: true, and readOnlyRootFilesystem: true where the image supports them.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml` around lines
22 - 47, Harden the ipfailover test PodSpec by removing the invalid
PodSpec-level privileged setting, hostNetwork, and host-slash host-path mount
unless each is demonstrably required; retain only required host integrations.
For the remaining container configuration, remove unnecessary privileges and add
allowPrivilegeEscalation: false, runAsNonRoot: true, and readOnlyRootFilesystem:
true where supported, using only verified capabilities if host networking must
remain.

Sources: Coding guidelines, Path instructions

Comment on lines +28 to +69
containers:
- name: openshift-ipfailover
image: ${IMAGE}
ports:
- containerPort: 63000
hostPort: 63000
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
volumeMounts:
- name: lib-modules
mountPath: /lib/modules
readOnly: true
- name: host-slash
mountPath: /host
readOnly: true
mountPropagation: HostToContainer
- name: etc-sysconfig
mountPath: /etc/sysconfig
readOnly: true
env:
- name: OPENSHIFT_HA_CONFIG_NAME
value: "ipfailover"
- name: OPENSHIFT_HA_VIRTUAL_IPS
value: ${VIRTUALIPS}
- name: OPENSHIFT_HA_VIP_GROUPS
value: "10"
- name: OPENSHIFT_HA_NETWORK_INTERFACE
value: ${HAINTERFACE}
- name: OPENSHIFT_HA_MONITOR_PORT
value: ${MONITORPORT}
- name: OPENSHIFT_HA_VRRP_ID_OFFSET
value: ${VRRP_ID_OFFSET}
- name: OPENSHIFT_HA_REPLICA_COUNT
value: "2"
- name: OPENSHIFT_HA_NFTABLES_RULE
value: "INPUT"
- name: OPENSHIFT_HA_PREEMPTION
value: "nopreempt"
- name: OPENSHIFT_HA_CHECK_INTERVAL
value: "5"
livenessProbe:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀 Performance & Scalability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate and inspect the referenced YAML and nearby container specs.
printf '== file exists and size ==\n'
wc -l ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml 2>/dev/null || true

printf '\n== relevant YAML lines ==\n'
sed -n '1,120p' ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml 2>/dev/null

printf '\n== resource declarations in referenced file ==\n'
rg -n '^\s*resources:|^\s*limits:|^\s*requests:' ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml || echo 'none found'

Repository: openshift/images

Length of output: 2871


Add CPU and memory requests and limits.

openshift-ipfailover has no resources configuration. This Kubernetes manifest container should define CPU and memory requests and limits.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml` around lines
28 - 69, Add a resources block to the openshift-ipfailover container definition,
specifying both CPU and memory requests and limits. Keep the existing container
configuration unchanged and use the repository’s established resource values or
conventions if available.

Source: Path instructions

Comment on lines +69 to +74
livenessProbe:
initialDelaySeconds: 10
exec:
command:
- pgrep
- keepalived

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

file="ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml"
if [ -f "$file" ]; then
  echo "== file exists =="
  wc -l "$file"
  echo "== relevant sections =="
  cat -n "$file" | sed -n '1,140p'
else
  echo "missing: $file"
fi

echo "== locate keepalived readyness/liveness probes in manifests =="
rg -n "readinessProbe|livenessProbe|pgrep keepalived|keepalived" -S .

Repository: openshift/images

Length of output: 50372


Add a readiness probe.

This Deployment only defines livenessProbe. Absent a readiness probe, Kubernetes considers the container ready as soon as it starts running. Add a readiness probe that checks keepalived initialization state, such as VRRP/VIP readiness or the VRRP controller port.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ipfailover/keepalived/tests/e2e/testdata/router/ipfailover.yaml` around lines
69 - 74, Add a readinessProbe alongside the existing livenessProbe in the
Deployment container configuration, using a check that confirms keepalived
initialization and VRRP/VIP readiness (or the VRRP controller port) rather than
merely checking that the process is running. Keep the existing livenessProbe
unchanged.

Source: Path instructions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants