Skip to content

OCPBUGS-38078: Validate HAProxy health check interval time value - #618

Merged
openshift-merge-bot[bot] merged 2 commits into
openshift:masterfrom
grzpiotrowski:OCPBUGS-38078-haproxy-healthcheck-interval
Nov 27, 2024
Merged

OCPBUGS-38078: Validate HAProxy health check interval time value#618
openshift-merge-bot[bot] merged 2 commits into
openshift:masterfrom
grzpiotrowski:OCPBUGS-38078-haproxy-healthcheck-interval

Conversation

@grzpiotrowski

@grzpiotrowski grzpiotrowski commented Aug 20, 2024

Copy link
Copy Markdown
Contributor

The maximum valid time representing value in HAProxy is 2147483647ms (max positive value for a 32-bit signed integer).

Setting time value to one exceeding the maximum handled by HAProxy for router.openshift.io/haproxy.health.check.interval breaks the router-default pods.

Prior to this PR clipHAProxyTimeoutValue was used to validate the timeout values set in annotations like haproxy.router.openshift.io/timeout or haproxy.router.openshift.io/timeout-tunnel.

By reusing the clipHAProxyTimeoutValue function, this PR adds the same validation for the value set in router.openshift.io/haproxy.health.check.interval annotation to ensure it is within the range that HAProxy can parse.

@openshift-ci-robot openshift-ci-robot added jira/severity-moderate Referenced Jira bug's severity is moderate for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. labels Aug 20, 2024
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@grzpiotrowski: This pull request references Jira Issue OCPBUGS-38078, which is valid. The bug has been moved to the POST state.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.18.0) matches configured target version for branch (4.18.0)
  • bug is in the state ASSIGNED, which is one of the valid states (NEW, ASSIGNED, POST)

No GitHub users were found matching the public email listed for the QA contact in Jira (iamin@redhat.com), skipping review request.

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

The maximum valid time representing value in HAProxy is 2147483647ms (max positive value for a 32-bit signed integer).

Setting time value to one exceeding the maximum handled by HAProxy for router.openshift.io/haproxy.health.check.interval breaks he router-default pods.

Prior to this PR clipHAProxyTimeoutValue was used to validate the timeout values set in annotations like haproxy.router.openshift.io/timeout or haproxy.router.openshift.io/timeout-tunnel.

This PR adds the same validation for the value set in router.openshift.io/haproxy.health.check.interval annotation to ensure it is within the range that HAProxy can parse.
clipHAProxyTimeoutValue function is renamed to clipHAProxyTimeValue to reflect the more general purpose of this function, which is to validate time representing values for HAProxy related annotations.

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 requested review from frobware and knobunc August 20, 2024 10:39
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@grzpiotrowski: This pull request references Jira Issue OCPBUGS-38078, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.18.0) matches configured target version for branch (4.18.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

No GitHub users were found matching the public email listed for the QA contact in Jira (iamin@redhat.com), skipping review request.

Details

In response to this:

The maximum valid time representing value in HAProxy is 2147483647ms (max positive value for a 32-bit signed integer).

Setting time value to one exceeding the maximum handled by HAProxy for router.openshift.io/haproxy.health.check.interval breaks the router-default pods.

Prior to this PR clipHAProxyTimeoutValue was used to validate the timeout values set in annotations like haproxy.router.openshift.io/timeout or haproxy.router.openshift.io/timeout-tunnel.

This PR adds the same validation for the value set in router.openshift.io/haproxy.health.check.interval annotation to ensure it is within the range that HAProxy can parse.
clipHAProxyTimeoutValue function is renamed to clipHAProxyTimeValue to reflect the more general purpose of this function, which is to validate time representing values for HAProxy related annotations.

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.

@lihongan

Copy link
Copy Markdown

cc @rhamini3 @melvinjoseph86

@candita

candita commented Aug 20, 2024

Copy link
Copy Markdown
Contributor

@grzpiotrowski unless someone has advised you otherwise, I will request that you do not rename the function or constant. It will make this easier to review and backport, by simplifying the number of changes.

@grzpiotrowski
grzpiotrowski force-pushed the OCPBUGS-38078-haproxy-healthcheck-interval branch from 0e507e4 to 0ecfb1b Compare August 21, 2024 10:11
@grzpiotrowski

Copy link
Copy Markdown
Contributor Author

@grzpiotrowski unless someone has advised you otherwise, I will request that you do not rename the function or constant. It will make this easier to review and backport, by simplifying the number of changes.

Yes, I didn't consider the ease of backporting in this case.
As suggested, I reverted the clipHAProxyTimeValue function name back to clipHAProxyTimeoutValue and all other generalized variable names back to original. Only the minimal changes required to fix the issue are left now.

@grzpiotrowski

Copy link
Copy Markdown
Contributor Author

I was just wondering, should we keep the log messages unchanged or adjust them to say time or time value instead of timeout, as from now the health check interval is also clipped, not only timeouts.
Not sure how this would affect backports.

Example of a log for clipping the health check interval now:

template_helper.go:356] "msg"="route annotation timeout exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"

@rhamini3

Copy link
Copy Markdown
  1. Annotated all available routes with health check interval above the maximum input
oc annotate route -n openshift-ingress-canary canary --overwrite router.openshift.io/haproxy.health.check.interval=50000d
  1. Looked up pods in openshift-ingress namespace, deleted and recreated them
oc get po -n openshift-ingress                                   
NAME                              READY   STATUS    RESTARTS   AGE
router-default-8648b58758-6q8nk   1/1     Running   0          3m11s
router-default-8648b58758-ckp28   1/1     Running   0          2m7s
  1. Looked at pod logs to make sure health check interval successfully clips the input value
oc logs -n openshift-ingress router-default-8648b58758-6q8nk
I0820 19:54:48.602667       1 template.go:560] "msg"="starting router" "logger"="router" "version"="majorFromGit: \nminorFromGit: \ncommitFromGit: 6c1ef257\nversionFromGit: v0.0.0-unknown\ngitTreeState: dirty\nbuildDate: 2024-08-20T17:29:50Z\n"
I0820 19:54:48.605066       1 metrics.go:156] "msg"="router health and metrics port listening on HTTP and HTTPS" "address"="0.0.0.0:1936" "logger"="metrics"
I0820 19:54:48.607465       1 router.go:217] "msg"="creating a new template router" "logger"="template" "writeDir"="/var/lib/haproxy"
I0820 19:54:48.607535       1 router.go:302] "msg"="router will coalesce reloads within an interval of each other" "interval"="5s" "logger"="template"
I0820 19:54:48.607837       1 router.go:372] "msg"="watching for changes" "logger"="template" "path"="/etc/pki/tls/private"
I0820 19:54:48.607898       1 router.go:283] "msg"="router is including routes in all namespaces" "logger"="router"
I0820 19:54:48.621526       1 reflector.go:359] Caches populated for *v1.Route from github.com/openshift/router/pkg/router/controller/factory/factory.go:124
I0820 19:54:48.623961       1 reflector.go:359] Caches populated for *v1.EndpointSlice from github.com/openshift/router/pkg/router/controller/factory/factory.go:124
I0820 19:54:48.624807       1 reflector.go:359] Caches populated for *v1.Service from github.com/openshift/router/pkg/router/template/service_lookup.go:33
I0820 19:54:48.712700       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.712753       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.712801       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713165       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713239       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713411       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713480       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713587       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713631       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713670       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713864       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.713938       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.714134       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.714216       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.714379       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.714443       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.714703       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
I0820 19:54:48.714837       1 template_helper.go:356] "msg"="route annotation time exceeds maximum allowable by HAProxy, clipping to 2147483647ms" "input"="50000d" "logger"="template"
E0820 19:54:48.715494       1 haproxy.go:418] can't scrape HAProxy: dial unix /var/lib/haproxy/run/haproxy.sock: connect: no such file or directory
I0820 19:54:48.746673       1 router.go:669] "msg"="router reloaded" "logger"="template" "output"=" - Checking http://localhost:80 using PROXY protocol ...\n - Health check ok : 0 retry attempt(s).\n"

Mark bug as verified
/label qe-approved

@openshift-ci openshift-ci Bot added the qe-approved Signifies that QE has signed off on this PR label Aug 21, 2024
@grzpiotrowski

Copy link
Copy Markdown
Contributor Author

/retest

@candita

candita commented Aug 22, 2024

Copy link
Copy Markdown
Contributor

/assign

@candita

candita commented Sep 3, 2024

Copy link
Copy Markdown
Contributor

Unrelated failure in e2e-agnostic.

fail [github.com/openshift/origin/test/extended/cpu_partitioning/crio.go:166]: error getting crio container data from node ci-op-2srp6824-4c798-nf4kn-master-0
Unexpected error:
<*errors.errorString | 0xc001a08ee0>:
err execing command jq: error (at :1): Cannot index array with string "info"
jq: error (at :1): Cannot iterate over null (null)
{
s: "err execing command jq: error (at :1): Cannot index array with string "info"\njq: error (at :1): Cannot iterate over null (null)",}

/test e2e-agnostic

@candita

candita commented Sep 3, 2024

Copy link
Copy Markdown
Contributor

As far as gathering a list of other places we may need to clip values, I found some that are not annotations:

timeout connect {{ firstMatch $timeSpecPattern (env "ROUTER_DEFAULT_CONNECT_TIMEOUT") "5s" }}
timeout client {{ firstMatch $timeSpecPattern (env "ROUTER_DEFAULT_CLIENT_TIMEOUT") "30s" }}
timeout client-fin {{ firstMatch $timeSpecPattern (env "ROUTER_CLIENT_FIN_TIMEOUT") "1s" }}
timeout server {{ firstMatch $timeSpecPattern (env "ROUTER_DEFAULT_SERVER_TIMEOUT") "30s" }}
timeout server-fin {{ firstMatch $timeSpecPattern (env "ROUTER_DEFAULT_SERVER_FIN_TIMEOUT") "1s" }}
timeout http-request {{ firstMatch $timeSpecPattern (env "ROUTER_SLOWLORIS_TIMEOUT") "10s" }}
timeout http-keep-alive {{ firstMatch $timeSpecPattern (env "ROUTER_SLOWLORIS_HTTP_KEEPALIVE") "300s" }}
# Long timeout for WebSocket connections.
timeout tunnel {{ firstMatch $timeSpecPattern (env "ROUTER_DEFAULT_TUNNEL_TIMEOUT") "1h" }}

tcp-request inspect-delay {{ firstMatch $timeSpecPattern (env "ROUTER_INSPECT_DELAY") "5s" }}

tcp-request inspect-delay {{ firstMatch $timeSpecPattern (env "ROUTER_INSPECT_DELAY") "5s" }}

However, in https://github.com/openshift/cluster-ingress-operator/blob/8252ac492c04d161fbcf60ef82af2989c99f4a9d/pkg/operator/controller/ingress/deployment.go#L610-L634 we do take care of clipping them.

@candita

candita commented Sep 3, 2024

Copy link
Copy Markdown
Contributor

@grzpiotrowski this looks good, but we will need some kind of test with this to make sure there are no regressions over time, and validate that it works as is. Maybe something like adding a few test cases to the tests in TestConfigTemplate in https://github.com/openshift/router/blob/master/pkg/router/router_test.go.

@grzpiotrowski
grzpiotrowski force-pushed the OCPBUGS-38078-haproxy-healthcheck-interval branch from 0ecfb1b to e9081e6 Compare October 16, 2024 14:24
@grzpiotrowski

Copy link
Copy Markdown
Contributor Author

I finally added the health check interval test cases in the TestConfigTemplate.
I piggybacked on the work of @Miciah by using the new mustCreateEndpointSlice type from PR #627. For this reason I opted to rebase my branch on top of the branch from PR #627. I reckon this means that this PR must go after #627.

@grzpiotrowski
grzpiotrowski force-pushed the OCPBUGS-38078-haproxy-healthcheck-interval branch from e9081e6 to a77cf40 Compare November 19, 2024 09:54
@grzpiotrowski

Copy link
Copy Markdown
Contributor Author

Rebased after #627 has merged.

@grzpiotrowski

Copy link
Copy Markdown
Contributor Author

/retest-required

{{- end }}{{/* end type specific options*/}}

{{- if and (not $endpoint.NoHealthCheck) (gt $cfg.ActiveEndpoints 1) }} check inter {{firstMatch $timeSpecPattern (index $cfg.Annotations "router.openshift.io/haproxy.health.check.interval") (env "ROUTER_BACKEND_CHECK_INTERVAL") "5000ms" }}
{{- if and (not $endpoint.NoHealthCheck) (gt $cfg.ActiveEndpoints 1) }} check inter {{ clipHAProxyTimeoutValue (firstMatch $timeSpecPattern (index $cfg.Annotations "router.openshift.io/haproxy.health.check.interval") (env "ROUTER_BACKEND_CHECK_INTERVAL") "5000ms") }}

@candita candita Nov 25, 2024

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Because the input "abc" (SyntaxError) should return an empty string, I think we want to remove the 5000ms default out of the parameter list for firstMatch. And remove the env variable check. I'll look into the other places we use clipHAProxyTimeoutValue.

Suggested change
{{- if and (not $endpoint.NoHealthCheck) (gt $cfg.ActiveEndpoints 1) }} check inter {{ clipHAProxyTimeoutValue (firstMatch $timeSpecPattern (index $cfg.Annotations "router.openshift.io/haproxy.health.check.interval") (env "ROUTER_BACKEND_CHECK_INTERVAL") "5000ms") }}
{{- if and (not $endpoint.NoHealthCheck) (gt $cfg.ActiveEndpoints 1) }} check inter {{ clipHAProxyTimeoutValue (firstMatch $timeSpecPattern (index $cfg.Annotations "router.openshift.io/haproxy.health.check.interval")) (env "ROUTER_BACKEND_CHECK_INTERVAL") "5000ms" }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

No, I think this is okay after all. Sorry for the noise.

Comment thread pkg/router/router_test.go
section: "backend",
sectionName: insecureBackendName(h.namespace, "r3"),
attribute: "server",
value: "inter 5000ms",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is interesting. I would have thought it would return an empty string instead of the default because it is a SyntaxError: https://github.com/openshift/router/blob/master/pkg/router/template/template_helper.go#L345-L347

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

No, it doesn't return the empty string because the template defaults it to 5000ms when the empty string is returned. We need to consider the logged message in https://github.com/openshift/router/blob/master/pkg/router/template/template_helper.go#L346

Use clipHAProxyTimeoutValue on router.openshift.io/haproxy.health.check.interval
annotation to ensure it is within the range that HAProxy can parse.

This commit fixes OCPBUGS-38078.

https://issues.redhat.com/browse/OCPBUGS-38078

* images/router/haproxy/conf/haproxy-config.template:
Use clipHAProxyTimeoutValue on `router.openshift.io/haproxy.health.check.interval` annotation.
* pkg/router/template/template_helper.go (clipHAProxyTimeoutValue):
Modify log messages and godoc comments to reflect the more generic
use of this function for various HaProxy time annotations.
@grzpiotrowski
grzpiotrowski force-pushed the OCPBUGS-38078-haproxy-healthcheck-interval branch from a77cf40 to 6cc5c3c Compare November 26, 2024 13:47
Comment thread pkg/router/router_test.go
Comment on lines +807 to +813
mustCreateEndpointSlices: []mustCreateEndpointSlice{
{
name: "servicer1",
serviceName: "servicer1",
addresses: []string{"1.1.1.1", "1.1.1.2"},
},
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do you need the mustCreateEndpointSlices in your tests because of the attribute: "server" in the MustMatchConfig?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, this is why it is needed.

* pkg/router/router_test.go:
(TestConfigTemplate): Add test cases for route health check interval
annotation. Verify that the correct value is added to the backend server
line and that the values exceeding the maximum haproxy time value get clipped
to the max limit. Verify that invalid annotation values result in the default
health check interval value applied. Test clipping of the health check interval
for a passthrough route.
(MustCreateEndpointSlice): Add addresses field
((MustCreateEndpointSlice).Apply): Initialize the endpoint's Addresses field
to the addresses array from the mustCreateEndpointSlice parameters if specified.
This enables having at least two endpoints for the route in the test case
and satisfy the conditions needed to configure the check inter in the backend
server line.
(passthroughBackendName): New helper function to construct a config's backend name
for a passthrough route.
@grzpiotrowski
grzpiotrowski force-pushed the OCPBUGS-38078-haproxy-healthcheck-interval branch from 6cc5c3c to bbbe88d Compare November 26, 2024 18:49
Comment thread pkg/router/router_test.go
}

// passthroughBackendName contructs the HAProxy config's backend name for a passthrough route.
func passthroughBackendName(ns, route string) string {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

❤️

@candita

candita commented Nov 26, 2024

Copy link
Copy Markdown
Contributor

Thanks @grzpiotrowski -- impressive work.

/lgtm
/approve

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Nov 26, 2024
@openshift-ci

openshift-ci Bot commented Nov 26, 2024

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: candita

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 Nov 26, 2024
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD be319d0 and 2 for PR HEAD bbbe88d in total

1 similar comment
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD be319d0 and 2 for PR HEAD bbbe88d in total

@openshift-ci

openshift-ci Bot commented Nov 27, 2024

Copy link
Copy Markdown
Contributor

@grzpiotrowski: all tests passed!

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-merge-bot
openshift-merge-bot Bot merged commit be831fa into openshift:master Nov 27, 2024
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@grzpiotrowski: Jira Issue OCPBUGS-38078: All pull requests linked via external trackers have merged:

Jira Issue OCPBUGS-38078 has been moved to the MODIFIED state.

Details

In response to this:

The maximum valid time representing value in HAProxy is 2147483647ms (max positive value for a 32-bit signed integer).

Setting time value to one exceeding the maximum handled by HAProxy for router.openshift.io/haproxy.health.check.interval breaks the router-default pods.

Prior to this PR clipHAProxyTimeoutValue was used to validate the timeout values set in annotations like haproxy.router.openshift.io/timeout or haproxy.router.openshift.io/timeout-tunnel.

By reusing the clipHAProxyTimeoutValue function, this PR adds the same validation for the value set in router.openshift.io/haproxy.health.check.interval annotation to ensure it is within the range that HAProxy can parse.

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-bot

Copy link
Copy Markdown
Contributor

[ART PR BUILD NOTIFIER]

Distgit: ose-haproxy-router-base
This PR has been included in build ose-haproxy-router-base-container-v4.19.0-202411270436.p0.gbe831fa.assembly.stream.el9.
All builds following this will include this PR.

@openshift-bot

Copy link
Copy Markdown
Contributor

[ART PR BUILD NOTIFIER]

Distgit: openshift-enterprise-haproxy-router
This PR has been included in build openshift-enterprise-haproxy-router-container-v4.19.0-202411270436.p0.gbe831fa.assembly.stream.el9.
All builds following this will include this PR.

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. jira/severity-moderate Referenced Jira bug's severity is moderate for the branch this PR is targeting. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. qe-approved Signifies that QE has signed off on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants