-
Notifications
You must be signed in to change notification settings - Fork 169
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f87f198
commit 614efbb
Showing
2 changed files
with
67 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package admin | ||
|
||
import ( | ||
"encoding/json" | ||
"net/http" | ||
|
||
"github.com/Azure/ARO-RP/pkg/api" | ||
) | ||
|
||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the Apache License 2.0. | ||
|
||
type operatorFlagsMergeStrategyStruct struct { | ||
OperatorFlagsMergeStrategy string | ||
Cluster *api.OpenShiftCluster | ||
} | ||
|
||
const ( | ||
operatorFlagsMergeStrategyDefault string = "merge" | ||
operatorFlagsMergeStrategyMerge string = "merge" | ||
operatorFlagsMergeStrategyReset string = "reset" | ||
) | ||
|
||
// When a cluster is edited via the PATCH Cluster Geneva Action (aka an Admin Update) | ||
// the flags given are treated according to the provided Update Strategy, | ||
// provided in operatorFlagsMergeStrategy | ||
|
||
// merge (default): The provided cluster flags are laid on top of the cluster’s existing flags. | ||
// reset: The provided cluster flags are laid on top of the default cluster flags, | ||
// essentially ‘resetting’ the flags if no new flags are provided. | ||
func OperatorFlagsMergeStrategy(oc *api.OpenShiftCluster, body []byte) error { | ||
payload := operatorFlagsMergeStrategyStruct{ | ||
OperatorFlagsMergeStrategy: operatorFlagsMergeStrategyDefault, | ||
Cluster: &api.OpenShiftCluster{}, | ||
} | ||
|
||
err := json.Unmarshal(body, &payload) | ||
if err != nil { | ||
return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidRequestContent, "", "The request content was invalid and could not be deserialized: %q.", err) | ||
} | ||
|
||
// return if payload is empty | ||
if properties := &payload.Cluster.Properties; payload.Cluster == nil || properties == nil || payload.Cluster.Properties.OperatorFlags == nil { | ||
return nil | ||
} | ||
// return error if OperatorFlagsMergeStrategy is not merge or reset, default is merge | ||
if payload.OperatorFlagsMergeStrategy != operatorFlagsMergeStrategyMerge && | ||
payload.OperatorFlagsMergeStrategy != operatorFlagsMergeStrategyReset { | ||
return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "", "invalid operatorFlagsMergeStrategy '%s', can only be 'merge' or 'reset'", payload.OperatorFlagsMergeStrategy) | ||
} | ||
// return nil, if OperatorFlagsMergeStrategy is merge and payload has not operatorFlags | ||
// return operatorFlags of payload, if OperatorFlagsMergeStrategy is merge and payload has operatorFlags | ||
// return defaultOperatorFlags, if OperatorFlagsMergeStrategy is reset and payload has not operatorFlags | ||
// return defaultOperatorFlags + operatorFlags of payload, if OperatorFlagsMergeStrategy is reset and payload has operatorFlags | ||
if payload.OperatorFlagsMergeStrategy == operatorFlagsMergeStrategyReset { | ||
oc.Properties.OperatorFlags = api.DefaultOperatorFlags() | ||
for operatorflag, value := range payload.Cluster.Properties.OperatorFlags { | ||
oc.Properties.OperatorFlags[operatorflag] = value | ||
} | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters