Skip to content

Commit 5bf975e

Browse files
Merge pull request #510 from mumesan/httpd_timeout_configurable
Add configurable API Timeouts <JIRA: OSPRH-10958>
2 parents 3014159 + 131ed8b commit 5bf975e

15 files changed

+117
-2
lines changed

api/bases/ironic.openstack.org_ironicapis.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ spec:
5252
spec:
5353
description: IronicAPISpec defines the desired state of IronicAPI
5454
properties:
55+
apiTimeout:
56+
default: 60
57+
description: APITimeout for HAProxy, Apache
58+
minimum: 10
59+
type: integer
5560
containerImage:
5661
description: ContainerImage - Ironic API Container Image
5762
type: string

api/bases/ironic.openstack.org_ironicinspectors.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ spec:
5252
spec:
5353
description: IronicInspectorSpec defines the desired state of IronicInspector
5454
properties:
55+
apiTimeout:
56+
default: 60
57+
description: APITimeout for HAProxy, Apache
58+
minimum: 10
59+
type: integer
5560
containerImage:
5661
description: ContainerImage - Ironic Inspector Container Image
5762
type: string

api/bases/ironic.openstack.org_ironics.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ spec:
4848
spec:
4949
description: IronicSpec defines the desired state of Ironic
5050
properties:
51+
apiTimeout:
52+
default: 60
53+
description: APITimeout for HAProxy, Apache
54+
minimum: 10
55+
type: integer
5156
customServiceConfig:
5257
default: '# add your customization here'
5358
description: |-

api/v1beta1/ironic_types.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ limitations under the License.
1717
package v1beta1
1818

1919
import (
20+
topologyv1 "github.com/openstack-k8s-operators/infra-operator/apis/topology/v1beta1"
2021
condition "github.com/openstack-k8s-operators/lib-common/modules/common/condition"
2122
"github.com/openstack-k8s-operators/lib-common/modules/common/util"
2223
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23-
topologyv1 "github.com/openstack-k8s-operators/infra-operator/apis/topology/v1beta1"
2424
)
2525

2626
const (
@@ -155,6 +155,12 @@ type IronicSpecCore struct {
155155
// TopologyRef to apply the Topology defined by the associated CR referenced
156156
// by name
157157
TopologyRef *topologyv1.TopoRef `json:"topologyRef,omitempty"`
158+
159+
// +kubebuilder:validation:Optional
160+
// +kubebuilder:default=60
161+
// +kubebuilder:validation:Minimum=10
162+
// APITimeout for HAProxy, Apache
163+
APITimeout int `json:"apiTimeout"`
158164
}
159165

160166
// IronicImages to specify container images required by all ironic services

api/v1beta1/ironic_webhook.go

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"net"
2323
"strings"
2424

25+
topologyv1 "github.com/openstack-k8s-operators/infra-operator/apis/topology/v1beta1"
2526
"github.com/openstack-k8s-operators/lib-common/modules/common/service"
2627
"github.com/openstack-k8s-operators/lib-common/modules/common/util"
2728
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -33,7 +34,6 @@ import (
3334
logf "sigs.k8s.io/controller-runtime/pkg/log"
3435
"sigs.k8s.io/controller-runtime/pkg/webhook"
3536
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
36-
topologyv1 "github.com/openstack-k8s-operators/infra-operator/apis/topology/v1beta1"
3737
)
3838

3939
// log is for logging in this package.
@@ -656,3 +656,55 @@ func (spec *IronicSpec) ValidateIronicTopology(basePath *field.Path, namespace s
656656
}
657657
return allErrs
658658
}
659+
660+
// SetDefaultRouteAnnotations sets HAProxy timeout values of the route
661+
func (spec *IronicAPISpec) SetDefaultRouteAnnotations(annotations map[string]string) {
662+
const haProxyAnno = "haproxy.router.openshift.io/timeout"
663+
// Use a custom annotation to flag when the operator has set the default HAProxy timeout
664+
// The annotation func determines when to overwrite existing HAProxy timeout with the APITimeout
665+
const ironicAnno = "api.ironic.openstack.org/timeout"
666+
667+
valIronic, okIronic := annotations[ironicAnno]
668+
valHAProxy, okHAProxy := annotations[haProxyAnno]
669+
670+
// Human operator sets the HAProxy timeout manually
671+
if !okIronic && okHAProxy {
672+
return
673+
}
674+
675+
// Human operator modified the HAProxy timeout manually without removing the Ironic flag
676+
if okIronic && okHAProxy && valIronic != valHAProxy {
677+
delete(annotations, ironicAnno)
678+
return
679+
}
680+
681+
timeout := fmt.Sprintf("%ds", spec.APITimeout)
682+
annotations[ironicAnno] = timeout
683+
annotations[haProxyAnno] = timeout
684+
}
685+
686+
// SetDefaultRouteAnnotations sets HAProxy timeout values of the route
687+
func (spec *IronicInspectorSpec) SetDefaultRouteAnnotations(annotations map[string]string) {
688+
const haProxyAnno = "haproxy.router.openshift.io/timeout"
689+
// Use a custom annotation to flag when the operator has set the default HAProxy timeout
690+
// The annotation func determines when to overwrite existing HAProxy timeout with the APITimeout
691+
const ironicInspectorAnno = "inspector.ironic.openstack.org/timeout"
692+
693+
valIronic, okIronic := annotations[ironicInspectorAnno]
694+
valHAProxy, okHAProxy := annotations[haProxyAnno]
695+
696+
// Human operator sets the HAProxy timeout manually
697+
if !okIronic && okHAProxy {
698+
return
699+
}
700+
701+
// Human operator modified the HAProxy timeout manually without removing the Ironic flag
702+
if okIronic && okHAProxy && valIronic != valHAProxy {
703+
delete(annotations, ironicInspectorAnno)
704+
return
705+
}
706+
707+
timeout := fmt.Sprintf("%ds", spec.APITimeout)
708+
annotations[ironicInspectorAnno] = timeout
709+
annotations[haProxyAnno] = timeout
710+
}

api/v1beta1/ironicapi_types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ type IronicAPISpec struct {
105105
// +kubebuilder:validation:Optional
106106
// KeystoneEndpoints - Internally used Keystone API endpoints
107107
KeystoneEndpoints KeystoneEndpoints `json:"keystoneEndpoints"`
108+
109+
// +kubebuilder:validation:Optional
110+
// +kubebuilder:default=60
111+
// +kubebuilder:validation:Minimum=10
112+
// APITimeout for HAProxy, Apache
113+
APITimeout int `json:"apiTimeout"`
108114
}
109115

110116
// IronicAPIStatus defines the observed state of IronicAPI

api/v1beta1/ironicinspector_types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,12 @@ type IronicInspectorSpec struct {
172172
// or 'json-rpc' to use JSON RPC transport. NOTE -> ironic-inspector
173173
// requires oslo.messaging transport when not in standalone mode.
174174
RPCTransport string `json:"rpcTransport"`
175+
176+
// +kubebuilder:validation:Optional
177+
// +kubebuilder:default=60
178+
// +kubebuilder:validation:Minimum=10
179+
// APITimeout for HAProxy, Apache
180+
APITimeout int `json:"apiTimeout"`
175181
}
176182

177183
// IronicInspectorStatus defines the observed state of IronicInspector

config/crd/bases/ironic.openstack.org_ironicapis.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ spec:
5252
spec:
5353
description: IronicAPISpec defines the desired state of IronicAPI
5454
properties:
55+
apiTimeout:
56+
default: 60
57+
description: APITimeout for HAProxy, Apache
58+
minimum: 10
59+
type: integer
5560
containerImage:
5661
description: ContainerImage - Ironic API Container Image
5762
type: string

config/crd/bases/ironic.openstack.org_ironicinspectors.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ spec:
5252
spec:
5353
description: IronicInspectorSpec defines the desired state of IronicInspector
5454
properties:
55+
apiTimeout:
56+
default: 60
57+
description: APITimeout for HAProxy, Apache
58+
minimum: 10
59+
type: integer
5560
containerImage:
5661
description: ContainerImage - Ironic Inspector Container Image
5762
type: string

config/crd/bases/ironic.openstack.org_ironics.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ spec:
4848
spec:
4949
description: IronicSpec defines the desired state of Ironic
5050
properties:
51+
apiTimeout:
52+
default: 60
53+
description: APITimeout for HAProxy, Apache
54+
minimum: 10
55+
type: integer
5156
customServiceConfig:
5257
default: '# add your customization here'
5358
description: |-

0 commit comments

Comments
 (0)