diff --git a/CHANGELOG.md b/CHANGELOG.md index 32172ccd..5ef50662 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] +### Added +- Managed Load Balancer: `MatchingCondition` field to frontend rule for controlling which operator to use when combining matchers + ## [8.8.1] ### Changed diff --git a/upcloud/load_balancer.go b/upcloud/load_balancer.go index bd068a67..32c2c585 100644 --- a/upcloud/load_balancer.go +++ b/upcloud/load_balancer.go @@ -7,6 +7,7 @@ import ( type ( LoadBalancerMode string LoadBalancerMatcherType string + LoadBalancerMatchingCondition string LoadBalancerActionType string LoadBalancerActionHTTPRedirectScheme string LoadBalancerStringMatcherMethod string @@ -70,6 +71,9 @@ const ( LoadBalancerMatcherTypeURLParam LoadBalancerMatcherType = "url_param" LoadBalancerMatcherTypeNumMembersUp LoadBalancerMatcherType = "num_members_up" + LoadBalancerMatchingConditionAnd LoadBalancerMatchingCondition = "and" + LoadBalancerMatchingConditionOr LoadBalancerMatchingCondition = "or" + LoadBalancerActionTypeUseBackend LoadBalancerActionType = "use_backend" LoadBalancerActionTypeTCPReject LoadBalancerActionType = "tcp_reject" LoadBalancerActionTypeHTTPReturn LoadBalancerActionType = "http_return" @@ -159,12 +163,13 @@ type LoadBalancerFrontend struct { // LoadBalancerFrontendRule represents frontend rule type LoadBalancerFrontendRule struct { - Name string `json:"name,omitempty"` - Priority int `json:"priority,omitempty"` - Matchers []LoadBalancerMatcher `json:"matchers,omitempty"` - Actions []LoadBalancerAction `json:"actions,omitempty"` - CreatedAt time.Time `json:"created_at,omitempty"` - UpdatedAt time.Time `json:"updated_at,omitempty"` + Name string `json:"name,omitempty"` + Priority int `json:"priority,omitempty"` + MatchingCondition LoadBalancerMatchingCondition `json:"matching_condition,omitempty"` + Matchers []LoadBalancerMatcher `json:"matchers,omitempty"` + Actions []LoadBalancerAction `json:"actions,omitempty"` + CreatedAt time.Time `json:"created_at,omitempty"` + UpdatedAt time.Time `json:"updated_at,omitempty"` } // LoadBalancerFrontendTLSConfig represents frontend TLS configuration diff --git a/upcloud/request/load_balancer.go b/upcloud/request/load_balancer.go index f0bce99c..45afd89d 100644 --- a/upcloud/request/load_balancer.go +++ b/upcloud/request/load_balancer.go @@ -436,8 +436,9 @@ func (r *GetLoadBalancerFrontendRuleRequest) RequestURL() string { // LoadBalancerFrontendRule represents frontend rule payload type LoadBalancerFrontendRule struct { - Name string `json:"name"` - Priority int `json:"priority"` + Name string `json:"name"` + Priority int `json:"priority"` + MatchingCondition upcloud.LoadBalancerMatchingCondition `json:"matching_condition,omitempty"` // Set of rule matchers. // Use NewLoadBalancerMatcher helper functions to define matcher items. @@ -481,8 +482,9 @@ func (r *ReplaceLoadBalancerFrontendRuleRequest) RequestURL() string { // ModifyLoadBalancerFrontendRule represents frontend rule modification payload type ModifyLoadBalancerFrontendRule struct { - Name string `json:"name,omitempty"` - Priority *int `json:"priority,omitempty"` + Name string `json:"name,omitempty"` + Priority *int `json:"priority,omitempty"` + MatchingCondition upcloud.LoadBalancerMatchingCondition `json:"matching_condition,omitempty"` } // ModifyLoadBalancerFrontendRuleRequest represents a request to modify frontend rule diff --git a/upcloud/request/load_balancer_test.go b/upcloud/request/load_balancer_test.go index 65af30d5..18fbb262 100644 --- a/upcloud/request/load_balancer_test.go +++ b/upcloud/request/load_balancer_test.go @@ -864,6 +864,7 @@ func TestCreateLoadBalancerFrontendRuleRequest(t *testing.T) { { "name": "example-rule-1", "priority": 100, + "matching_condition": "or", "matchers": [ { "type": "path", @@ -887,8 +888,9 @@ func TestCreateLoadBalancerFrontendRuleRequest(t *testing.T) { ServiceUUID: "sid", FrontendName: "fename", Rule: LoadBalancerFrontendRule{ - Name: "example-rule-1", - Priority: 100, + Name: "example-rule-1", + Priority: 100, + MatchingCondition: upcloud.LoadBalancerMatchingConditionOr, Matchers: []upcloud.LoadBalancerMatcher{{ Type: upcloud.LoadBalancerMatcherTypePath, Path: &upcloud.LoadBalancerMatcherString{