services/google/gkehub/beta/membership_internal.go (3,019 lines of code) (raw):
// Copyright 2025 Google LLC. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package beta
import (
"bytes"
"context"
"encoding/json"
"fmt"
"io/ioutil"
"strings"
"github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl"
"github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl/operations"
)
func (r *Membership) validate() error {
if err := dcl.Required(r, "name"); err != nil {
return err
}
if err := dcl.RequiredParameter(r.Project, "Project"); err != nil {
return err
}
if err := dcl.RequiredParameter(r.Location, "Location"); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(r.Endpoint) {
if err := r.Endpoint.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.State) {
if err := r.State.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.Authority) {
if err := r.Authority.validate(); err != nil {
return err
}
}
return nil
}
func (r *MembershipEndpoint) validate() error {
if !dcl.IsEmptyValueIndirect(r.GkeCluster) {
if err := r.GkeCluster.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.KubernetesMetadata) {
if err := r.KubernetesMetadata.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.KubernetesResource) {
if err := r.KubernetesResource.validate(); err != nil {
return err
}
}
return nil
}
func (r *MembershipEndpointGkeCluster) validate() error {
return nil
}
func (r *MembershipEndpointKubernetesMetadata) validate() error {
return nil
}
func (r *MembershipEndpointKubernetesResource) validate() error {
if !dcl.IsEmptyValueIndirect(r.ResourceOptions) {
if err := r.ResourceOptions.validate(); err != nil {
return err
}
}
return nil
}
func (r *MembershipEndpointKubernetesResourceMembershipResources) validate() error {
return nil
}
func (r *MembershipEndpointKubernetesResourceConnectResources) validate() error {
return nil
}
func (r *MembershipEndpointKubernetesResourceResourceOptions) validate() error {
return nil
}
func (r *MembershipState) validate() error {
return nil
}
func (r *MembershipAuthority) validate() error {
return nil
}
func (r *Membership) basePath() string {
params := map[string]interface{}{}
return dcl.Nprintf("https://gkehub.googleapis.com/v1beta1/", params)
}
func (r *Membership) getURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"project": dcl.ValueOrEmptyString(nr.Project),
"location": dcl.ValueOrEmptyString(nr.Location),
"name": dcl.ValueOrEmptyString(nr.Name),
}
return dcl.URL("projects/{{project}}/locations/{{location}}/memberships/{{name}}", nr.basePath(), userBasePath, params), nil
}
func (r *Membership) listURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"project": dcl.ValueOrEmptyString(nr.Project),
"location": dcl.ValueOrEmptyString(nr.Location),
}
return dcl.URL("projects/{{project}}/locations/{{location}}/memberships", nr.basePath(), userBasePath, params), nil
}
func (r *Membership) createURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"project": dcl.ValueOrEmptyString(nr.Project),
"location": dcl.ValueOrEmptyString(nr.Location),
"name": dcl.ValueOrEmptyString(nr.Name),
}
return dcl.URL("projects/{{project}}/locations/{{location}}/memberships?membershipId={{name}}", nr.basePath(), userBasePath, params), nil
}
func (r *Membership) deleteURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"project": dcl.ValueOrEmptyString(nr.Project),
"location": dcl.ValueOrEmptyString(nr.Location),
"name": dcl.ValueOrEmptyString(nr.Name),
}
return dcl.URL("projects/{{project}}/locations/{{location}}/memberships/{{name}}", nr.basePath(), userBasePath, params), nil
}
func (r *Membership) SetPolicyURL(userBasePath string) string {
nr := r.urlNormalized()
fields := map[string]interface{}{}
return dcl.URL("", nr.basePath(), userBasePath, fields)
}
func (r *Membership) SetPolicyVerb() string {
return ""
}
func (r *Membership) getPolicyURL(userBasePath string) string {
nr := r.urlNormalized()
fields := map[string]interface{}{}
return dcl.URL("", nr.basePath(), userBasePath, fields)
}
func (r *Membership) IAMPolicyVersion() int {
return 3
}
// membershipApiOperation represents a mutable operation in the underlying REST
// API such as Create, Update, or Delete.
type membershipApiOperation interface {
do(context.Context, *Membership, *Client) error
}
// newUpdateMembershipUpdateMembershipRequest creates a request for an
// Membership resource's UpdateMembership update type by filling in the update
// fields based on the intended state of the resource.
func newUpdateMembershipUpdateMembershipRequest(ctx context.Context, f *Membership, c *Client) (map[string]interface{}, error) {
req := map[string]interface{}{}
res := f
_ = res
if v, err := expandMembershipEndpoint(c, f.Endpoint, res); err != nil {
return nil, fmt.Errorf("error expanding Endpoint into endpoint: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
req["endpoint"] = v
}
if v := f.Labels; !dcl.IsEmptyValueIndirect(v) {
req["labels"] = v
}
if v := f.Description; !dcl.IsEmptyValueIndirect(v) {
req["description"] = v
}
if v := f.ExternalId; !dcl.IsEmptyValueIndirect(v) {
req["externalId"] = v
}
if v, err := expandMembershipAuthority(c, f.Authority, res); err != nil {
return nil, fmt.Errorf("error expanding Authority into authority: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
req["authority"] = v
}
if v := f.InfrastructureType; !dcl.IsEmptyValueIndirect(v) {
req["infrastructureType"] = v
}
return req, nil
}
// marshalUpdateMembershipUpdateMembershipRequest converts the update into
// the final JSON request body.
func marshalUpdateMembershipUpdateMembershipRequest(c *Client, m map[string]interface{}) ([]byte, error) {
return json.Marshal(m)
}
type updateMembershipUpdateMembershipOperation struct {
// If the update operation has the REQUIRES_APPLY_OPTIONS trait, this will be populated.
// Usually it will be nil - this is to prevent us from accidentally depending on apply
// options, which should usually be unnecessary.
ApplyOptions []dcl.ApplyOption
FieldDiffs []*dcl.FieldDiff
}
// do creates a request and sends it to the appropriate URL. In most operations,
// do will transcribe a subset of the resource into a request object and send a
// PUT request to a single URL.
func (op *updateMembershipUpdateMembershipOperation) do(ctx context.Context, r *Membership, c *Client) error {
_, err := c.GetMembership(ctx, r)
if err != nil {
return err
}
u, err := r.updateURL(c.Config.BasePath, "UpdateMembership")
if err != nil {
return err
}
mask := dcl.UpdateMask(op.FieldDiffs)
u, err = dcl.AddQueryParams(u, map[string]string{"updateMask": mask})
if err != nil {
return err
}
req, err := newUpdateMembershipUpdateMembershipRequest(ctx, r, c)
if err != nil {
return err
}
c.Config.Logger.InfoWithContextf(ctx, "Created update: %#v", req)
body, err := marshalUpdateMembershipUpdateMembershipRequest(c, req)
if err != nil {
return err
}
resp, err := dcl.SendRequest(ctx, c.Config, "PATCH", u, bytes.NewBuffer(body), c.Config.RetryProvider)
if err != nil {
return err
}
var o operations.StandardGCPOperation
if err := dcl.ParseResponse(resp.Response, &o); err != nil {
return err
}
err = o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET")
if err != nil {
return err
}
return nil
}
func (c *Client) listMembershipRaw(ctx context.Context, r *Membership, pageToken string, pageSize int32) ([]byte, error) {
u, err := r.urlNormalized().listURL(c.Config.BasePath)
if err != nil {
return nil, err
}
m := make(map[string]string)
if pageToken != "" {
m["pageToken"] = pageToken
}
if pageSize != MembershipMaxPage {
m["pageSize"] = fmt.Sprintf("%v", pageSize)
}
u, err = dcl.AddQueryParams(u, m)
if err != nil {
return nil, err
}
resp, err := dcl.SendRequest(ctx, c.Config, "GET", u, &bytes.Buffer{}, c.Config.RetryProvider)
if err != nil {
return nil, err
}
defer resp.Response.Body.Close()
return ioutil.ReadAll(resp.Response.Body)
}
type listMembershipOperation struct {
Resources []map[string]interface{} `json:"resources"`
Token string `json:"nextPageToken"`
}
func (c *Client) listMembership(ctx context.Context, r *Membership, pageToken string, pageSize int32) ([]*Membership, string, error) {
b, err := c.listMembershipRaw(ctx, r, pageToken, pageSize)
if err != nil {
return nil, "", err
}
var m listMembershipOperation
if err := json.Unmarshal(b, &m); err != nil {
return nil, "", err
}
var l []*Membership
for _, v := range m.Resources {
res, err := unmarshalMapMembership(v, c, r)
if err != nil {
return nil, m.Token, err
}
res.Project = r.Project
res.Location = r.Location
l = append(l, res)
}
return l, m.Token, nil
}
func (c *Client) deleteAllMembership(ctx context.Context, f func(*Membership) bool, resources []*Membership) error {
var errors []string
for _, res := range resources {
if f(res) {
// We do not want deleteAll to fail on a deletion or else it will stop deleting other resources.
err := c.DeleteMembership(ctx, res)
if err != nil {
errors = append(errors, err.Error())
}
}
}
if len(errors) > 0 {
return fmt.Errorf("%v", strings.Join(errors, "\n"))
} else {
return nil
}
}
type deleteMembershipOperation struct{}
func (op *deleteMembershipOperation) do(ctx context.Context, r *Membership, c *Client) error {
r, err := c.GetMembership(ctx, r)
if err != nil {
if dcl.IsNotFound(err) {
c.Config.Logger.InfoWithContextf(ctx, "Membership not found, returning. Original error: %v", err)
return nil
}
c.Config.Logger.WarningWithContextf(ctx, "GetMembership checking for existence. error: %v", err)
return err
}
u, err := r.deleteURL(c.Config.BasePath)
if err != nil {
return err
}
// Delete should never have a body
body := &bytes.Buffer{}
resp, err := dcl.SendRequest(ctx, c.Config, "DELETE", u, body, c.Config.RetryProvider)
if err != nil {
return err
}
// wait for object to be deleted.
var o operations.StandardGCPOperation
if err := dcl.ParseResponse(resp.Response, &o); err != nil {
return err
}
if err := o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET"); err != nil {
return err
}
// We saw a race condition where for some successful delete operation, the Get calls returned resources for a short duration.
// This is the reason we are adding retry to handle that case.
retriesRemaining := 10
dcl.Do(ctx, func(ctx context.Context) (*dcl.RetryDetails, error) {
_, err := c.GetMembership(ctx, r)
if dcl.IsNotFound(err) {
return nil, nil
}
if retriesRemaining > 0 {
retriesRemaining--
return &dcl.RetryDetails{}, dcl.OperationNotDone{}
}
return nil, dcl.NotDeletedError{ExistingResource: r}
}, c.Config.RetryProvider)
return nil
}
// Create operations are similar to Update operations, although they do not have
// specific request objects. The Create request object is the json encoding of
// the resource, which is modified by res.marshal to form the base request body.
type createMembershipOperation struct {
response map[string]interface{}
}
func (op *createMembershipOperation) FirstResponse() (map[string]interface{}, bool) {
return op.response, len(op.response) > 0
}
func (op *createMembershipOperation) do(ctx context.Context, r *Membership, c *Client) error {
c.Config.Logger.InfoWithContextf(ctx, "Attempting to create %v", r)
u, err := r.createURL(c.Config.BasePath)
if err != nil {
return err
}
req, err := r.marshal(c)
if err != nil {
return err
}
resp, err := dcl.SendRequest(ctx, c.Config, "POST", u, bytes.NewBuffer(req), c.Config.RetryProvider)
if err != nil {
return err
}
// wait for object to be created.
var o operations.StandardGCPOperation
if err := dcl.ParseResponse(resp.Response, &o); err != nil {
return err
}
if err := o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET"); err != nil {
c.Config.Logger.Warningf("Creation failed after waiting for operation: %v", err)
return err
}
c.Config.Logger.InfoWithContextf(ctx, "Successfully waited for operation")
op.response, _ = o.FirstResponse()
if _, err := c.GetMembership(ctx, r); err != nil {
c.Config.Logger.WarningWithContextf(ctx, "get returned error: %v", err)
return err
}
return nil
}
func (c *Client) getMembershipRaw(ctx context.Context, r *Membership) ([]byte, error) {
u, err := r.getURL(c.Config.BasePath)
if err != nil {
return nil, err
}
resp, err := dcl.SendRequest(ctx, c.Config, "GET", u, &bytes.Buffer{}, c.Config.RetryProvider)
if err != nil {
return nil, err
}
defer resp.Response.Body.Close()
b, err := ioutil.ReadAll(resp.Response.Body)
if err != nil {
return nil, err
}
return b, nil
}
func (c *Client) membershipDiffsForRawDesired(ctx context.Context, rawDesired *Membership, opts ...dcl.ApplyOption) (initial, desired *Membership, diffs []*dcl.FieldDiff, err error) {
c.Config.Logger.InfoWithContext(ctx, "Fetching initial state...")
// First, let us see if the user provided a state hint. If they did, we will start fetching based on that.
var fetchState *Membership
if sh := dcl.FetchStateHint(opts); sh != nil {
if r, ok := sh.(*Membership); !ok {
c.Config.Logger.WarningWithContextf(ctx, "Initial state hint was of the wrong type; expected Membership, got %T", sh)
} else {
fetchState = r
}
}
if fetchState == nil {
fetchState = rawDesired
}
// 1.2: Retrieval of raw initial state from API
rawInitial, err := c.GetMembership(ctx, fetchState)
if rawInitial == nil {
if !dcl.IsNotFound(err) {
c.Config.Logger.WarningWithContextf(ctx, "Failed to retrieve whether a Membership resource already exists: %s", err)
return nil, nil, nil, fmt.Errorf("failed to retrieve Membership resource: %v", err)
}
c.Config.Logger.InfoWithContext(ctx, "Found that Membership resource did not exist.")
// Perform canonicalization to pick up defaults.
desired, err = canonicalizeMembershipDesiredState(rawDesired, rawInitial)
return nil, desired, nil, err
}
c.Config.Logger.InfoWithContextf(ctx, "Found initial state for Membership: %v", rawInitial)
c.Config.Logger.InfoWithContextf(ctx, "Initial desired state for Membership: %v", rawDesired)
// The Get call applies postReadExtract and so the result may contain fields that are not part of API version.
if err := extractMembershipFields(rawInitial); err != nil {
return nil, nil, nil, err
}
// 1.3: Canonicalize raw initial state into initial state.
initial, err = canonicalizeMembershipInitialState(rawInitial, rawDesired)
if err != nil {
return nil, nil, nil, err
}
c.Config.Logger.InfoWithContextf(ctx, "Canonicalized initial state for Membership: %v", initial)
// 1.4: Canonicalize raw desired state into desired state.
desired, err = canonicalizeMembershipDesiredState(rawDesired, rawInitial, opts...)
if err != nil {
return nil, nil, nil, err
}
c.Config.Logger.InfoWithContextf(ctx, "Canonicalized desired state for Membership: %v", desired)
// 2.1: Comparison of initial and desired state.
diffs, err = diffMembership(c, desired, initial, opts...)
return initial, desired, diffs, err
}
func canonicalizeMembershipInitialState(rawInitial, rawDesired *Membership) (*Membership, error) {
// TODO(magic-modules-eng): write canonicalizer once relevant traits are added.
return rawInitial, nil
}
/*
* Canonicalizers
*
* These are responsible for converting either a user-specified config or a
* GCP API response to a standard format that can be used for difference checking.
* */
func canonicalizeMembershipDesiredState(rawDesired, rawInitial *Membership, opts ...dcl.ApplyOption) (*Membership, error) {
if rawInitial == nil {
// Since the initial state is empty, the desired state is all we have.
// We canonicalize the remaining nested objects with nil to pick up defaults.
rawDesired.Endpoint = canonicalizeMembershipEndpoint(rawDesired.Endpoint, nil, opts...)
rawDesired.State = canonicalizeMembershipState(rawDesired.State, nil, opts...)
rawDesired.Authority = canonicalizeMembershipAuthority(rawDesired.Authority, nil, opts...)
return rawDesired, nil
}
canonicalDesired := &Membership{}
canonicalDesired.Endpoint = canonicalizeMembershipEndpoint(rawDesired.Endpoint, rawInitial.Endpoint, opts...)
if dcl.PartialSelfLinkToSelfLink(rawDesired.Name, rawInitial.Name) {
canonicalDesired.Name = rawInitial.Name
} else {
canonicalDesired.Name = rawDesired.Name
}
if dcl.IsZeroValue(rawDesired.Labels) || (dcl.IsEmptyValueIndirect(rawDesired.Labels) && dcl.IsEmptyValueIndirect(rawInitial.Labels)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
canonicalDesired.Labels = rawInitial.Labels
} else {
canonicalDesired.Labels = rawDesired.Labels
}
if dcl.StringCanonicalize(rawDesired.Description, rawInitial.Description) {
canonicalDesired.Description = rawInitial.Description
} else {
canonicalDesired.Description = rawDesired.Description
}
if dcl.StringCanonicalize(rawDesired.ExternalId, rawInitial.ExternalId) {
canonicalDesired.ExternalId = rawInitial.ExternalId
} else {
canonicalDesired.ExternalId = rawDesired.ExternalId
}
canonicalDesired.Authority = canonicalizeMembershipAuthority(rawDesired.Authority, rawInitial.Authority, opts...)
if dcl.IsZeroValue(rawDesired.InfrastructureType) || (dcl.IsEmptyValueIndirect(rawDesired.InfrastructureType) && dcl.IsEmptyValueIndirect(rawInitial.InfrastructureType)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
canonicalDesired.InfrastructureType = rawInitial.InfrastructureType
} else {
canonicalDesired.InfrastructureType = rawDesired.InfrastructureType
}
if dcl.NameToSelfLink(rawDesired.Project, rawInitial.Project) {
canonicalDesired.Project = rawInitial.Project
} else {
canonicalDesired.Project = rawDesired.Project
}
if dcl.NameToSelfLink(rawDesired.Location, rawInitial.Location) {
canonicalDesired.Location = rawInitial.Location
} else {
canonicalDesired.Location = rawDesired.Location
}
return canonicalDesired, nil
}
func canonicalizeMembershipNewState(c *Client, rawNew, rawDesired *Membership) (*Membership, error) {
if dcl.IsEmptyValueIndirect(rawNew.Endpoint) && dcl.IsEmptyValueIndirect(rawDesired.Endpoint) {
rawNew.Endpoint = rawDesired.Endpoint
} else {
rawNew.Endpoint = canonicalizeNewMembershipEndpoint(c, rawDesired.Endpoint, rawNew.Endpoint)
}
if dcl.IsEmptyValueIndirect(rawNew.Name) && dcl.IsEmptyValueIndirect(rawDesired.Name) {
rawNew.Name = rawDesired.Name
} else {
if dcl.PartialSelfLinkToSelfLink(rawDesired.Name, rawNew.Name) {
rawNew.Name = rawDesired.Name
}
}
if dcl.IsEmptyValueIndirect(rawNew.Labels) && dcl.IsEmptyValueIndirect(rawDesired.Labels) {
rawNew.Labels = rawDesired.Labels
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.Description) && dcl.IsEmptyValueIndirect(rawDesired.Description) {
rawNew.Description = rawDesired.Description
} else {
if dcl.StringCanonicalize(rawDesired.Description, rawNew.Description) {
rawNew.Description = rawDesired.Description
}
}
if dcl.IsEmptyValueIndirect(rawNew.State) && dcl.IsEmptyValueIndirect(rawDesired.State) {
rawNew.State = rawDesired.State
} else {
rawNew.State = canonicalizeNewMembershipState(c, rawDesired.State, rawNew.State)
}
if dcl.IsEmptyValueIndirect(rawNew.CreateTime) && dcl.IsEmptyValueIndirect(rawDesired.CreateTime) {
rawNew.CreateTime = rawDesired.CreateTime
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.UpdateTime) && dcl.IsEmptyValueIndirect(rawDesired.UpdateTime) {
rawNew.UpdateTime = rawDesired.UpdateTime
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.DeleteTime) && dcl.IsEmptyValueIndirect(rawDesired.DeleteTime) {
rawNew.DeleteTime = rawDesired.DeleteTime
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.ExternalId) && dcl.IsEmptyValueIndirect(rawDesired.ExternalId) {
rawNew.ExternalId = rawDesired.ExternalId
} else {
if dcl.StringCanonicalize(rawDesired.ExternalId, rawNew.ExternalId) {
rawNew.ExternalId = rawDesired.ExternalId
}
}
if dcl.IsEmptyValueIndirect(rawNew.LastConnectionTime) && dcl.IsEmptyValueIndirect(rawDesired.LastConnectionTime) {
rawNew.LastConnectionTime = rawDesired.LastConnectionTime
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.UniqueId) && dcl.IsEmptyValueIndirect(rawDesired.UniqueId) {
rawNew.UniqueId = rawDesired.UniqueId
} else {
if dcl.StringCanonicalize(rawDesired.UniqueId, rawNew.UniqueId) {
rawNew.UniqueId = rawDesired.UniqueId
}
}
if dcl.IsEmptyValueIndirect(rawNew.Authority) && dcl.IsEmptyValueIndirect(rawDesired.Authority) {
rawNew.Authority = rawDesired.Authority
} else {
rawNew.Authority = canonicalizeNewMembershipAuthority(c, rawDesired.Authority, rawNew.Authority)
}
if dcl.IsEmptyValueIndirect(rawNew.InfrastructureType) && dcl.IsEmptyValueIndirect(rawDesired.InfrastructureType) {
rawNew.InfrastructureType = rawDesired.InfrastructureType
} else {
}
rawNew.Project = rawDesired.Project
rawNew.Location = rawDesired.Location
return rawNew, nil
}
func canonicalizeMembershipEndpoint(des, initial *MembershipEndpoint, opts ...dcl.ApplyOption) *MembershipEndpoint {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipEndpoint{}
cDes.GkeCluster = canonicalizeMembershipEndpointGkeCluster(des.GkeCluster, initial.GkeCluster, opts...)
cDes.KubernetesResource = canonicalizeMembershipEndpointKubernetesResource(des.KubernetesResource, initial.KubernetesResource, opts...)
return cDes
}
func canonicalizeMembershipEndpointSlice(des, initial []MembershipEndpoint, opts ...dcl.ApplyOption) []MembershipEndpoint {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipEndpoint, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipEndpoint(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipEndpoint, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipEndpoint(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipEndpoint(c *Client, des, nw *MembershipEndpoint) *MembershipEndpoint {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipEndpoint while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
nw.GkeCluster = canonicalizeNewMembershipEndpointGkeCluster(c, des.GkeCluster, nw.GkeCluster)
nw.KubernetesMetadata = canonicalizeNewMembershipEndpointKubernetesMetadata(c, des.KubernetesMetadata, nw.KubernetesMetadata)
nw.KubernetesResource = canonicalizeNewMembershipEndpointKubernetesResource(c, des.KubernetesResource, nw.KubernetesResource)
return nw
}
func canonicalizeNewMembershipEndpointSet(c *Client, des, nw []MembershipEndpoint) []MembershipEndpoint {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipEndpoint
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipEndpointNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipEndpoint(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipEndpointSlice(c *Client, des, nw []MembershipEndpoint) []MembershipEndpoint {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipEndpoint
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipEndpoint(c, &d, &n))
}
return items
}
func canonicalizeMembershipEndpointGkeCluster(des, initial *MembershipEndpointGkeCluster, opts ...dcl.ApplyOption) *MembershipEndpointGkeCluster {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipEndpointGkeCluster{}
if dcl.IsZeroValue(des.ResourceLink) || (dcl.IsEmptyValueIndirect(des.ResourceLink) && dcl.IsEmptyValueIndirect(initial.ResourceLink)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.ResourceLink = initial.ResourceLink
} else {
cDes.ResourceLink = des.ResourceLink
}
return cDes
}
func canonicalizeMembershipEndpointGkeClusterSlice(des, initial []MembershipEndpointGkeCluster, opts ...dcl.ApplyOption) []MembershipEndpointGkeCluster {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipEndpointGkeCluster, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipEndpointGkeCluster(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipEndpointGkeCluster, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipEndpointGkeCluster(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipEndpointGkeCluster(c *Client, des, nw *MembershipEndpointGkeCluster) *MembershipEndpointGkeCluster {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipEndpointGkeCluster while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
return nw
}
func canonicalizeNewMembershipEndpointGkeClusterSet(c *Client, des, nw []MembershipEndpointGkeCluster) []MembershipEndpointGkeCluster {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipEndpointGkeCluster
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipEndpointGkeClusterNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipEndpointGkeCluster(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipEndpointGkeClusterSlice(c *Client, des, nw []MembershipEndpointGkeCluster) []MembershipEndpointGkeCluster {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipEndpointGkeCluster
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipEndpointGkeCluster(c, &d, &n))
}
return items
}
func canonicalizeMembershipEndpointKubernetesMetadata(des, initial *MembershipEndpointKubernetesMetadata, opts ...dcl.ApplyOption) *MembershipEndpointKubernetesMetadata {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipEndpointKubernetesMetadata{}
return cDes
}
func canonicalizeMembershipEndpointKubernetesMetadataSlice(des, initial []MembershipEndpointKubernetesMetadata, opts ...dcl.ApplyOption) []MembershipEndpointKubernetesMetadata {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipEndpointKubernetesMetadata, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipEndpointKubernetesMetadata(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipEndpointKubernetesMetadata, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipEndpointKubernetesMetadata(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipEndpointKubernetesMetadata(c *Client, des, nw *MembershipEndpointKubernetesMetadata) *MembershipEndpointKubernetesMetadata {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipEndpointKubernetesMetadata while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.StringCanonicalize(des.KubernetesApiServerVersion, nw.KubernetesApiServerVersion) {
nw.KubernetesApiServerVersion = des.KubernetesApiServerVersion
}
if dcl.StringCanonicalize(des.NodeProviderId, nw.NodeProviderId) {
nw.NodeProviderId = des.NodeProviderId
}
return nw
}
func canonicalizeNewMembershipEndpointKubernetesMetadataSet(c *Client, des, nw []MembershipEndpointKubernetesMetadata) []MembershipEndpointKubernetesMetadata {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipEndpointKubernetesMetadata
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipEndpointKubernetesMetadataNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipEndpointKubernetesMetadata(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipEndpointKubernetesMetadataSlice(c *Client, des, nw []MembershipEndpointKubernetesMetadata) []MembershipEndpointKubernetesMetadata {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipEndpointKubernetesMetadata
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipEndpointKubernetesMetadata(c, &d, &n))
}
return items
}
func canonicalizeMembershipEndpointKubernetesResource(des, initial *MembershipEndpointKubernetesResource, opts ...dcl.ApplyOption) *MembershipEndpointKubernetesResource {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipEndpointKubernetesResource{}
if dcl.StringCanonicalize(des.MembershipCrManifest, initial.MembershipCrManifest) || dcl.IsZeroValue(des.MembershipCrManifest) {
cDes.MembershipCrManifest = initial.MembershipCrManifest
} else {
cDes.MembershipCrManifest = des.MembershipCrManifest
}
cDes.ResourceOptions = canonicalizeMembershipEndpointKubernetesResourceResourceOptions(des.ResourceOptions, initial.ResourceOptions, opts...)
return cDes
}
func canonicalizeMembershipEndpointKubernetesResourceSlice(des, initial []MembershipEndpointKubernetesResource, opts ...dcl.ApplyOption) []MembershipEndpointKubernetesResource {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipEndpointKubernetesResource, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResource(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipEndpointKubernetesResource, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResource(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipEndpointKubernetesResource(c *Client, des, nw *MembershipEndpointKubernetesResource) *MembershipEndpointKubernetesResource {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipEndpointKubernetesResource while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
nw.MembershipCrManifest = des.MembershipCrManifest
nw.MembershipResources = canonicalizeNewMembershipEndpointKubernetesResourceMembershipResourcesSlice(c, des.MembershipResources, nw.MembershipResources)
nw.ConnectResources = canonicalizeNewMembershipEndpointKubernetesResourceConnectResourcesSlice(c, des.ConnectResources, nw.ConnectResources)
nw.ResourceOptions = canonicalizeNewMembershipEndpointKubernetesResourceResourceOptions(c, des.ResourceOptions, nw.ResourceOptions)
return nw
}
func canonicalizeNewMembershipEndpointKubernetesResourceSet(c *Client, des, nw []MembershipEndpointKubernetesResource) []MembershipEndpointKubernetesResource {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipEndpointKubernetesResource
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipEndpointKubernetesResourceNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResource(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipEndpointKubernetesResourceSlice(c *Client, des, nw []MembershipEndpointKubernetesResource) []MembershipEndpointKubernetesResource {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipEndpointKubernetesResource
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResource(c, &d, &n))
}
return items
}
func canonicalizeMembershipEndpointKubernetesResourceMembershipResources(des, initial *MembershipEndpointKubernetesResourceMembershipResources, opts ...dcl.ApplyOption) *MembershipEndpointKubernetesResourceMembershipResources {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipEndpointKubernetesResourceMembershipResources{}
if dcl.StringCanonicalize(des.Manifest, initial.Manifest) || dcl.IsZeroValue(des.Manifest) {
cDes.Manifest = initial.Manifest
} else {
cDes.Manifest = des.Manifest
}
if dcl.BoolCanonicalize(des.ClusterScoped, initial.ClusterScoped) || dcl.IsZeroValue(des.ClusterScoped) {
cDes.ClusterScoped = initial.ClusterScoped
} else {
cDes.ClusterScoped = des.ClusterScoped
}
return cDes
}
func canonicalizeMembershipEndpointKubernetesResourceMembershipResourcesSlice(des, initial []MembershipEndpointKubernetesResourceMembershipResources, opts ...dcl.ApplyOption) []MembershipEndpointKubernetesResourceMembershipResources {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipEndpointKubernetesResourceMembershipResources, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResourceMembershipResources(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipEndpointKubernetesResourceMembershipResources, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResourceMembershipResources(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipEndpointKubernetesResourceMembershipResources(c *Client, des, nw *MembershipEndpointKubernetesResourceMembershipResources) *MembershipEndpointKubernetesResourceMembershipResources {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipEndpointKubernetesResourceMembershipResources while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.StringCanonicalize(des.Manifest, nw.Manifest) {
nw.Manifest = des.Manifest
}
if dcl.BoolCanonicalize(des.ClusterScoped, nw.ClusterScoped) {
nw.ClusterScoped = des.ClusterScoped
}
return nw
}
func canonicalizeNewMembershipEndpointKubernetesResourceMembershipResourcesSet(c *Client, des, nw []MembershipEndpointKubernetesResourceMembershipResources) []MembershipEndpointKubernetesResourceMembershipResources {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipEndpointKubernetesResourceMembershipResources
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipEndpointKubernetesResourceMembershipResourcesNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResourceMembershipResources(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipEndpointKubernetesResourceMembershipResourcesSlice(c *Client, des, nw []MembershipEndpointKubernetesResourceMembershipResources) []MembershipEndpointKubernetesResourceMembershipResources {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipEndpointKubernetesResourceMembershipResources
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResourceMembershipResources(c, &d, &n))
}
return items
}
func canonicalizeMembershipEndpointKubernetesResourceConnectResources(des, initial *MembershipEndpointKubernetesResourceConnectResources, opts ...dcl.ApplyOption) *MembershipEndpointKubernetesResourceConnectResources {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipEndpointKubernetesResourceConnectResources{}
if dcl.StringCanonicalize(des.Manifest, initial.Manifest) || dcl.IsZeroValue(des.Manifest) {
cDes.Manifest = initial.Manifest
} else {
cDes.Manifest = des.Manifest
}
if dcl.BoolCanonicalize(des.ClusterScoped, initial.ClusterScoped) || dcl.IsZeroValue(des.ClusterScoped) {
cDes.ClusterScoped = initial.ClusterScoped
} else {
cDes.ClusterScoped = des.ClusterScoped
}
return cDes
}
func canonicalizeMembershipEndpointKubernetesResourceConnectResourcesSlice(des, initial []MembershipEndpointKubernetesResourceConnectResources, opts ...dcl.ApplyOption) []MembershipEndpointKubernetesResourceConnectResources {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipEndpointKubernetesResourceConnectResources, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResourceConnectResources(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipEndpointKubernetesResourceConnectResources, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResourceConnectResources(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipEndpointKubernetesResourceConnectResources(c *Client, des, nw *MembershipEndpointKubernetesResourceConnectResources) *MembershipEndpointKubernetesResourceConnectResources {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipEndpointKubernetesResourceConnectResources while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.StringCanonicalize(des.Manifest, nw.Manifest) {
nw.Manifest = des.Manifest
}
if dcl.BoolCanonicalize(des.ClusterScoped, nw.ClusterScoped) {
nw.ClusterScoped = des.ClusterScoped
}
return nw
}
func canonicalizeNewMembershipEndpointKubernetesResourceConnectResourcesSet(c *Client, des, nw []MembershipEndpointKubernetesResourceConnectResources) []MembershipEndpointKubernetesResourceConnectResources {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipEndpointKubernetesResourceConnectResources
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipEndpointKubernetesResourceConnectResourcesNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResourceConnectResources(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipEndpointKubernetesResourceConnectResourcesSlice(c *Client, des, nw []MembershipEndpointKubernetesResourceConnectResources) []MembershipEndpointKubernetesResourceConnectResources {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipEndpointKubernetesResourceConnectResources
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResourceConnectResources(c, &d, &n))
}
return items
}
func canonicalizeMembershipEndpointKubernetesResourceResourceOptions(des, initial *MembershipEndpointKubernetesResourceResourceOptions, opts ...dcl.ApplyOption) *MembershipEndpointKubernetesResourceResourceOptions {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipEndpointKubernetesResourceResourceOptions{}
if dcl.StringCanonicalize(des.ConnectVersion, initial.ConnectVersion) || dcl.IsZeroValue(des.ConnectVersion) {
cDes.ConnectVersion = initial.ConnectVersion
} else {
cDes.ConnectVersion = des.ConnectVersion
}
if dcl.BoolCanonicalize(des.V1Beta1Crd, initial.V1Beta1Crd) || dcl.IsZeroValue(des.V1Beta1Crd) {
cDes.V1Beta1Crd = initial.V1Beta1Crd
} else {
cDes.V1Beta1Crd = des.V1Beta1Crd
}
return cDes
}
func canonicalizeMembershipEndpointKubernetesResourceResourceOptionsSlice(des, initial []MembershipEndpointKubernetesResourceResourceOptions, opts ...dcl.ApplyOption) []MembershipEndpointKubernetesResourceResourceOptions {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipEndpointKubernetesResourceResourceOptions, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResourceResourceOptions(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipEndpointKubernetesResourceResourceOptions, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipEndpointKubernetesResourceResourceOptions(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipEndpointKubernetesResourceResourceOptions(c *Client, des, nw *MembershipEndpointKubernetesResourceResourceOptions) *MembershipEndpointKubernetesResourceResourceOptions {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipEndpointKubernetesResourceResourceOptions while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.StringCanonicalize(des.ConnectVersion, nw.ConnectVersion) {
nw.ConnectVersion = des.ConnectVersion
}
if dcl.BoolCanonicalize(des.V1Beta1Crd, nw.V1Beta1Crd) {
nw.V1Beta1Crd = des.V1Beta1Crd
}
return nw
}
func canonicalizeNewMembershipEndpointKubernetesResourceResourceOptionsSet(c *Client, des, nw []MembershipEndpointKubernetesResourceResourceOptions) []MembershipEndpointKubernetesResourceResourceOptions {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipEndpointKubernetesResourceResourceOptions
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipEndpointKubernetesResourceResourceOptionsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResourceResourceOptions(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipEndpointKubernetesResourceResourceOptionsSlice(c *Client, des, nw []MembershipEndpointKubernetesResourceResourceOptions) []MembershipEndpointKubernetesResourceResourceOptions {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipEndpointKubernetesResourceResourceOptions
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipEndpointKubernetesResourceResourceOptions(c, &d, &n))
}
return items
}
func canonicalizeMembershipState(des, initial *MembershipState, opts ...dcl.ApplyOption) *MembershipState {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipState{}
return cDes
}
func canonicalizeMembershipStateSlice(des, initial []MembershipState, opts ...dcl.ApplyOption) []MembershipState {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipState, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipState(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipState, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipState(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipState(c *Client, des, nw *MembershipState) *MembershipState {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipState while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
return nw
}
func canonicalizeNewMembershipStateSet(c *Client, des, nw []MembershipState) []MembershipState {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipState
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipStateNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipState(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipStateSlice(c *Client, des, nw []MembershipState) []MembershipState {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipState
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipState(c, &d, &n))
}
return items
}
func canonicalizeMembershipAuthority(des, initial *MembershipAuthority, opts ...dcl.ApplyOption) *MembershipAuthority {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &MembershipAuthority{}
if dcl.StringCanonicalize(des.Issuer, initial.Issuer) || dcl.IsZeroValue(des.Issuer) {
cDes.Issuer = initial.Issuer
} else {
cDes.Issuer = des.Issuer
}
return cDes
}
func canonicalizeMembershipAuthoritySlice(des, initial []MembershipAuthority, opts ...dcl.ApplyOption) []MembershipAuthority {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]MembershipAuthority, 0, len(des))
for _, d := range des {
cd := canonicalizeMembershipAuthority(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]MembershipAuthority, 0, len(des))
for i, d := range des {
cd := canonicalizeMembershipAuthority(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewMembershipAuthority(c *Client, des, nw *MembershipAuthority) *MembershipAuthority {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for MembershipAuthority while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.StringCanonicalize(des.Issuer, nw.Issuer) {
nw.Issuer = des.Issuer
}
if dcl.StringCanonicalize(des.WorkloadIdentityPool, nw.WorkloadIdentityPool) {
nw.WorkloadIdentityPool = des.WorkloadIdentityPool
}
if dcl.StringCanonicalize(des.IdentityProvider, nw.IdentityProvider) {
nw.IdentityProvider = des.IdentityProvider
}
return nw
}
func canonicalizeNewMembershipAuthoritySet(c *Client, des, nw []MembershipAuthority) []MembershipAuthority {
if des == nil {
return nw
}
// Find the elements in des that are also in nw and canonicalize them. Remove matched elements from nw.
var items []MembershipAuthority
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareMembershipAuthorityNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewMembershipAuthority(c, &d, &nw[matchedIndex]))
nw = append(nw[:matchedIndex], nw[matchedIndex+1:]...)
}
}
// Also include elements in nw that are not matched in des.
items = append(items, nw...)
return items
}
func canonicalizeNewMembershipAuthoritySlice(c *Client, des, nw []MembershipAuthority) []MembershipAuthority {
if des == nil {
return nw
}
// Lengths are unequal. A diff will occur later, so we shouldn't canonicalize.
// Return the original array.
if len(des) != len(nw) {
return nw
}
var items []MembershipAuthority
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewMembershipAuthority(c, &d, &n))
}
return items
}
// The differ returns a list of diffs, along with a list of operations that should be taken
// to remedy them. Right now, it does not attempt to consolidate operations - if several
// fields can be fixed with a patch update, it will perform the patch several times.
// Diffs on some fields will be ignored if the `desired` state has an empty (nil)
// value. This empty value indicates that the user does not care about the state for
// the field. Empty fields on the actual object will cause diffs.
// TODO(magic-modules-eng): for efficiency in some resources, add batching.
func diffMembership(c *Client, desired, actual *Membership, opts ...dcl.ApplyOption) ([]*dcl.FieldDiff, error) {
if desired == nil || actual == nil {
return nil, fmt.Errorf("nil resource passed to diff - always a programming error: %#v, %#v", desired, actual)
}
c.Config.Logger.Infof("Diff function called with desired state: %v", desired)
c.Config.Logger.Infof("Diff function called with actual state: %v", actual)
var fn dcl.FieldName
var newDiffs []*dcl.FieldDiff
// New style diffs.
if ds, err := dcl.Diff(desired.Endpoint, actual.Endpoint, dcl.DiffInfo{ObjectFunction: compareMembershipEndpointNewStyle, EmptyObject: EmptyMembershipEndpoint, OperationSelector: dcl.TriggersOperation("updateMembershipUpdateMembershipOperation")}, fn.AddNest("Endpoint")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Name")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Labels, actual.Labels, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateMembershipUpdateMembershipOperation")}, fn.AddNest("Labels")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Description, actual.Description, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateMembershipUpdateMembershipOperation")}, fn.AddNest("Description")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.State, actual.State, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareMembershipStateNewStyle, EmptyObject: EmptyMembershipState, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("State")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.CreateTime, actual.CreateTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("CreateTime")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.UpdateTime, actual.UpdateTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("UpdateTime")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.DeleteTime, actual.DeleteTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("DeleteTime")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.ExternalId, actual.ExternalId, dcl.DiffInfo{ServerDefault: true, OperationSelector: dcl.TriggersOperation("updateMembershipUpdateMembershipOperation")}, fn.AddNest("ExternalId")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.LastConnectionTime, actual.LastConnectionTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("LastConnectionTime")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.UniqueId, actual.UniqueId, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("UniqueId")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Authority, actual.Authority, dcl.DiffInfo{ObjectFunction: compareMembershipAuthorityNewStyle, EmptyObject: EmptyMembershipAuthority, OperationSelector: dcl.TriggersOperation("updateMembershipUpdateMembershipOperation")}, fn.AddNest("Authority")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.InfrastructureType, actual.InfrastructureType, dcl.DiffInfo{ServerDefault: true, Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateMembershipUpdateMembershipOperation")}, fn.AddNest("InfrastructureType")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Project, actual.Project, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Project")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Location, actual.Location, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Location")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if len(newDiffs) > 0 {
c.Config.Logger.Infof("Diff function found diffs: %v", newDiffs)
}
return newDiffs, nil
}
func compareMembershipEndpointNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipEndpoint)
if !ok {
desiredNotPointer, ok := d.(MembershipEndpoint)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpoint or *MembershipEndpoint", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipEndpoint)
if !ok {
actualNotPointer, ok := a.(MembershipEndpoint)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpoint", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.GkeCluster, actual.GkeCluster, dcl.DiffInfo{ObjectFunction: compareMembershipEndpointGkeClusterNewStyle, EmptyObject: EmptyMembershipEndpointGkeCluster, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("GkeCluster")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.KubernetesMetadata, actual.KubernetesMetadata, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareMembershipEndpointKubernetesMetadataNewStyle, EmptyObject: EmptyMembershipEndpointKubernetesMetadata, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("KubernetesMetadata")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.KubernetesResource, actual.KubernetesResource, dcl.DiffInfo{ObjectFunction: compareMembershipEndpointKubernetesResourceNewStyle, EmptyObject: EmptyMembershipEndpointKubernetesResource, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("KubernetesResource")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipEndpointGkeClusterNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipEndpointGkeCluster)
if !ok {
desiredNotPointer, ok := d.(MembershipEndpointGkeCluster)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointGkeCluster or *MembershipEndpointGkeCluster", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipEndpointGkeCluster)
if !ok {
actualNotPointer, ok := a.(MembershipEndpointGkeCluster)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointGkeCluster", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.ResourceLink, actual.ResourceLink, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ResourceLink")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipEndpointKubernetesMetadataNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipEndpointKubernetesMetadata)
if !ok {
desiredNotPointer, ok := d.(MembershipEndpointKubernetesMetadata)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesMetadata or *MembershipEndpointKubernetesMetadata", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipEndpointKubernetesMetadata)
if !ok {
actualNotPointer, ok := a.(MembershipEndpointKubernetesMetadata)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesMetadata", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.KubernetesApiServerVersion, actual.KubernetesApiServerVersion, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("KubernetesApiServerVersion")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.NodeProviderId, actual.NodeProviderId, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("NodeProviderId")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.NodeCount, actual.NodeCount, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("NodeCount")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.VcpuCount, actual.VcpuCount, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("VcpuCount")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.MemoryMb, actual.MemoryMb, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("MemoryMb")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.UpdateTime, actual.UpdateTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("UpdateTime")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipEndpointKubernetesResourceNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipEndpointKubernetesResource)
if !ok {
desiredNotPointer, ok := d.(MembershipEndpointKubernetesResource)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResource or *MembershipEndpointKubernetesResource", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipEndpointKubernetesResource)
if !ok {
actualNotPointer, ok := a.(MembershipEndpointKubernetesResource)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResource", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.MembershipCrManifest, actual.MembershipCrManifest, dcl.DiffInfo{Ignore: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("MembershipCrManifest")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.MembershipResources, actual.MembershipResources, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareMembershipEndpointKubernetesResourceMembershipResourcesNewStyle, EmptyObject: EmptyMembershipEndpointKubernetesResourceMembershipResources, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("MembershipResources")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.ConnectResources, actual.ConnectResources, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareMembershipEndpointKubernetesResourceConnectResourcesNewStyle, EmptyObject: EmptyMembershipEndpointKubernetesResourceConnectResources, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ConnectResources")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.ResourceOptions, actual.ResourceOptions, dcl.DiffInfo{ObjectFunction: compareMembershipEndpointKubernetesResourceResourceOptionsNewStyle, EmptyObject: EmptyMembershipEndpointKubernetesResourceResourceOptions, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ResourceOptions")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipEndpointKubernetesResourceMembershipResourcesNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipEndpointKubernetesResourceMembershipResources)
if !ok {
desiredNotPointer, ok := d.(MembershipEndpointKubernetesResourceMembershipResources)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResourceMembershipResources or *MembershipEndpointKubernetesResourceMembershipResources", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipEndpointKubernetesResourceMembershipResources)
if !ok {
actualNotPointer, ok := a.(MembershipEndpointKubernetesResourceMembershipResources)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResourceMembershipResources", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.Manifest, actual.Manifest, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Manifest")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.ClusterScoped, actual.ClusterScoped, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ClusterScoped")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipEndpointKubernetesResourceConnectResourcesNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipEndpointKubernetesResourceConnectResources)
if !ok {
desiredNotPointer, ok := d.(MembershipEndpointKubernetesResourceConnectResources)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResourceConnectResources or *MembershipEndpointKubernetesResourceConnectResources", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipEndpointKubernetesResourceConnectResources)
if !ok {
actualNotPointer, ok := a.(MembershipEndpointKubernetesResourceConnectResources)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResourceConnectResources", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.Manifest, actual.Manifest, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Manifest")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.ClusterScoped, actual.ClusterScoped, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ClusterScoped")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipEndpointKubernetesResourceResourceOptionsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipEndpointKubernetesResourceResourceOptions)
if !ok {
desiredNotPointer, ok := d.(MembershipEndpointKubernetesResourceResourceOptions)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResourceResourceOptions or *MembershipEndpointKubernetesResourceResourceOptions", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipEndpointKubernetesResourceResourceOptions)
if !ok {
actualNotPointer, ok := a.(MembershipEndpointKubernetesResourceResourceOptions)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipEndpointKubernetesResourceResourceOptions", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.ConnectVersion, actual.ConnectVersion, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ConnectVersion")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.V1Beta1Crd, actual.V1Beta1Crd, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("V1beta1Crd")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipStateNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipState)
if !ok {
desiredNotPointer, ok := d.(MembershipState)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipState or *MembershipState", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipState)
if !ok {
actualNotPointer, ok := a.(MembershipState)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipState", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.Code, actual.Code, dcl.DiffInfo{OutputOnly: true, Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Code")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareMembershipAuthorityNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*MembershipAuthority)
if !ok {
desiredNotPointer, ok := d.(MembershipAuthority)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipAuthority or *MembershipAuthority", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*MembershipAuthority)
if !ok {
actualNotPointer, ok := a.(MembershipAuthority)
if !ok {
return nil, fmt.Errorf("obj %v is not a MembershipAuthority", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.Issuer, actual.Issuer, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateMembershipUpdateMembershipOperation")}, fn.AddNest("Issuer")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.WorkloadIdentityPool, actual.WorkloadIdentityPool, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("WorkloadIdentityPool")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.IdentityProvider, actual.IdentityProvider, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("IdentityProvider")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
// urlNormalized returns a copy of the resource struct with values normalized
// for URL substitutions. For instance, it converts long-form self-links to
// short-form so they can be substituted in.
func (r *Membership) urlNormalized() *Membership {
normalized := dcl.Copy(*r).(Membership)
normalized.Name = dcl.SelfLinkToName(r.Name)
normalized.Description = dcl.SelfLinkToName(r.Description)
normalized.ExternalId = dcl.SelfLinkToName(r.ExternalId)
normalized.UniqueId = dcl.SelfLinkToName(r.UniqueId)
normalized.Project = dcl.SelfLinkToName(r.Project)
normalized.Location = dcl.SelfLinkToName(r.Location)
return &normalized
}
func (r *Membership) updateURL(userBasePath, updateName string) (string, error) {
nr := r.urlNormalized()
if updateName == "UpdateMembership" {
fields := map[string]interface{}{
"project": dcl.ValueOrEmptyString(nr.Project),
"location": dcl.ValueOrEmptyString(nr.Location),
"name": dcl.ValueOrEmptyString(nr.Name),
}
return dcl.URL("projects/{{project}}/locations/{{location}}/memberships/{{name}}", nr.basePath(), userBasePath, fields), nil
}
return "", fmt.Errorf("unknown update name: %s", updateName)
}
// marshal encodes the Membership resource into JSON for a Create request, and
// performs transformations from the resource schema to the API schema if
// necessary.
func (r *Membership) marshal(c *Client) ([]byte, error) {
m, err := expandMembership(c, r)
if err != nil {
return nil, fmt.Errorf("error marshalling Membership: %w", err)
}
return json.Marshal(m)
}
// unmarshalMembership decodes JSON responses into the Membership resource schema.
func unmarshalMembership(b []byte, c *Client, res *Membership) (*Membership, error) {
var m map[string]interface{}
if err := json.Unmarshal(b, &m); err != nil {
return nil, err
}
return unmarshalMapMembership(m, c, res)
}
func unmarshalMapMembership(m map[string]interface{}, c *Client, res *Membership) (*Membership, error) {
flattened := flattenMembership(c, m, res)
if flattened == nil {
return nil, fmt.Errorf("attempted to flatten empty json object")
}
return flattened, nil
}
// expandMembership expands Membership into a JSON request object.
func expandMembership(c *Client, f *Membership) (map[string]interface{}, error) {
m := make(map[string]interface{})
res := f
_ = res
if v, err := expandMembershipEndpoint(c, f.Endpoint, res); err != nil {
return nil, fmt.Errorf("error expanding Endpoint into endpoint: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["endpoint"] = v
}
if v, err := dcl.DeriveField("projects/%s/locations/%s/memberships/%s", f.Name, dcl.SelfLinkToName(f.Project), dcl.SelfLinkToName(f.Location), dcl.SelfLinkToName(f.Name)); err != nil {
return nil, fmt.Errorf("error expanding Name into name: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["name"] = v
}
if v := f.Labels; dcl.ValueShouldBeSent(v) {
m["labels"] = v
}
if v := f.Description; dcl.ValueShouldBeSent(v) {
m["description"] = v
}
if v := f.ExternalId; dcl.ValueShouldBeSent(v) {
m["externalId"] = v
}
if v, err := expandMembershipAuthority(c, f.Authority, res); err != nil {
return nil, fmt.Errorf("error expanding Authority into authority: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["authority"] = v
}
if v := f.InfrastructureType; dcl.ValueShouldBeSent(v) {
m["infrastructureType"] = v
}
if v, err := dcl.EmptyValue(); err != nil {
return nil, fmt.Errorf("error expanding Project into project: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["project"] = v
}
if v, err := dcl.EmptyValue(); err != nil {
return nil, fmt.Errorf("error expanding Location into location: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["location"] = v
}
return m, nil
}
// flattenMembership flattens Membership from a JSON request object into the
// Membership type.
func flattenMembership(c *Client, i interface{}, res *Membership) *Membership {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
if len(m) == 0 {
return nil
}
resultRes := &Membership{}
resultRes.Endpoint = flattenMembershipEndpoint(c, m["endpoint"], res)
resultRes.Name = dcl.FlattenString(m["name"])
resultRes.Labels = dcl.FlattenKeyValuePairs(m["labels"])
resultRes.Description = dcl.FlattenString(m["description"])
resultRes.State = flattenMembershipState(c, m["state"], res)
resultRes.CreateTime = dcl.FlattenString(m["createTime"])
resultRes.UpdateTime = dcl.FlattenString(m["updateTime"])
resultRes.DeleteTime = dcl.FlattenString(m["deleteTime"])
resultRes.ExternalId = dcl.FlattenString(m["externalId"])
resultRes.LastConnectionTime = dcl.FlattenString(m["lastConnectionTime"])
resultRes.UniqueId = dcl.FlattenString(m["uniqueId"])
resultRes.Authority = flattenMembershipAuthority(c, m["authority"], res)
resultRes.InfrastructureType = flattenMembershipInfrastructureTypeEnum(m["infrastructureType"])
resultRes.Project = dcl.FlattenString(m["project"])
resultRes.Location = dcl.FlattenString(m["location"])
return resultRes
}
// expandMembershipEndpointMap expands the contents of MembershipEndpoint into a JSON
// request object.
func expandMembershipEndpointMap(c *Client, f map[string]MembershipEndpoint, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipEndpoint(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipEndpointSlice expands the contents of MembershipEndpoint into a JSON
// request object.
func expandMembershipEndpointSlice(c *Client, f []MembershipEndpoint, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipEndpoint(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipEndpointMap flattens the contents of MembershipEndpoint from a JSON
// response object.
func flattenMembershipEndpointMap(c *Client, i interface{}, res *Membership) map[string]MembershipEndpoint {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipEndpoint{}
}
if len(a) == 0 {
return map[string]MembershipEndpoint{}
}
items := make(map[string]MembershipEndpoint)
for k, item := range a {
items[k] = *flattenMembershipEndpoint(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipEndpointSlice flattens the contents of MembershipEndpoint from a JSON
// response object.
func flattenMembershipEndpointSlice(c *Client, i interface{}, res *Membership) []MembershipEndpoint {
a, ok := i.([]interface{})
if !ok {
return []MembershipEndpoint{}
}
if len(a) == 0 {
return []MembershipEndpoint{}
}
items := make([]MembershipEndpoint, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipEndpoint(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipEndpoint expands an instance of MembershipEndpoint into a JSON
// request object.
func expandMembershipEndpoint(c *Client, f *MembershipEndpoint, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v, err := expandMembershipEndpointGkeCluster(c, f.GkeCluster, res); err != nil {
return nil, fmt.Errorf("error expanding GkeCluster into gkeCluster: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["gkeCluster"] = v
}
if v, err := expandMembershipEndpointKubernetesResource(c, f.KubernetesResource, res); err != nil {
return nil, fmt.Errorf("error expanding KubernetesResource into kubernetesResource: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["kubernetesResource"] = v
}
return m, nil
}
// flattenMembershipEndpoint flattens an instance of MembershipEndpoint from a JSON
// response object.
func flattenMembershipEndpoint(c *Client, i interface{}, res *Membership) *MembershipEndpoint {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipEndpoint{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipEndpoint
}
r.GkeCluster = flattenMembershipEndpointGkeCluster(c, m["gkeCluster"], res)
r.KubernetesMetadata = flattenMembershipEndpointKubernetesMetadata(c, m["kubernetesMetadata"], res)
r.KubernetesResource = flattenMembershipEndpointKubernetesResource(c, m["kubernetesResource"], res)
return r
}
// expandMembershipEndpointGkeClusterMap expands the contents of MembershipEndpointGkeCluster into a JSON
// request object.
func expandMembershipEndpointGkeClusterMap(c *Client, f map[string]MembershipEndpointGkeCluster, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipEndpointGkeCluster(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipEndpointGkeClusterSlice expands the contents of MembershipEndpointGkeCluster into a JSON
// request object.
func expandMembershipEndpointGkeClusterSlice(c *Client, f []MembershipEndpointGkeCluster, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipEndpointGkeCluster(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipEndpointGkeClusterMap flattens the contents of MembershipEndpointGkeCluster from a JSON
// response object.
func flattenMembershipEndpointGkeClusterMap(c *Client, i interface{}, res *Membership) map[string]MembershipEndpointGkeCluster {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipEndpointGkeCluster{}
}
if len(a) == 0 {
return map[string]MembershipEndpointGkeCluster{}
}
items := make(map[string]MembershipEndpointGkeCluster)
for k, item := range a {
items[k] = *flattenMembershipEndpointGkeCluster(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipEndpointGkeClusterSlice flattens the contents of MembershipEndpointGkeCluster from a JSON
// response object.
func flattenMembershipEndpointGkeClusterSlice(c *Client, i interface{}, res *Membership) []MembershipEndpointGkeCluster {
a, ok := i.([]interface{})
if !ok {
return []MembershipEndpointGkeCluster{}
}
if len(a) == 0 {
return []MembershipEndpointGkeCluster{}
}
items := make([]MembershipEndpointGkeCluster, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipEndpointGkeCluster(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipEndpointGkeCluster expands an instance of MembershipEndpointGkeCluster into a JSON
// request object.
func expandMembershipEndpointGkeCluster(c *Client, f *MembershipEndpointGkeCluster, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v, err := expandHubReferenceLink(c, f.ResourceLink, res); err != nil {
return nil, fmt.Errorf("error expanding ResourceLink into resourceLink: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["resourceLink"] = v
}
return m, nil
}
// flattenMembershipEndpointGkeCluster flattens an instance of MembershipEndpointGkeCluster from a JSON
// response object.
func flattenMembershipEndpointGkeCluster(c *Client, i interface{}, res *Membership) *MembershipEndpointGkeCluster {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipEndpointGkeCluster{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipEndpointGkeCluster
}
r.ResourceLink = flattenHubReferenceLink(c, m["resourceLink"], res)
return r
}
// expandMembershipEndpointKubernetesMetadataMap expands the contents of MembershipEndpointKubernetesMetadata into a JSON
// request object.
func expandMembershipEndpointKubernetesMetadataMap(c *Client, f map[string]MembershipEndpointKubernetesMetadata, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipEndpointKubernetesMetadata(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipEndpointKubernetesMetadataSlice expands the contents of MembershipEndpointKubernetesMetadata into a JSON
// request object.
func expandMembershipEndpointKubernetesMetadataSlice(c *Client, f []MembershipEndpointKubernetesMetadata, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipEndpointKubernetesMetadata(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipEndpointKubernetesMetadataMap flattens the contents of MembershipEndpointKubernetesMetadata from a JSON
// response object.
func flattenMembershipEndpointKubernetesMetadataMap(c *Client, i interface{}, res *Membership) map[string]MembershipEndpointKubernetesMetadata {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipEndpointKubernetesMetadata{}
}
if len(a) == 0 {
return map[string]MembershipEndpointKubernetesMetadata{}
}
items := make(map[string]MembershipEndpointKubernetesMetadata)
for k, item := range a {
items[k] = *flattenMembershipEndpointKubernetesMetadata(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipEndpointKubernetesMetadataSlice flattens the contents of MembershipEndpointKubernetesMetadata from a JSON
// response object.
func flattenMembershipEndpointKubernetesMetadataSlice(c *Client, i interface{}, res *Membership) []MembershipEndpointKubernetesMetadata {
a, ok := i.([]interface{})
if !ok {
return []MembershipEndpointKubernetesMetadata{}
}
if len(a) == 0 {
return []MembershipEndpointKubernetesMetadata{}
}
items := make([]MembershipEndpointKubernetesMetadata, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipEndpointKubernetesMetadata(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipEndpointKubernetesMetadata expands an instance of MembershipEndpointKubernetesMetadata into a JSON
// request object.
func expandMembershipEndpointKubernetesMetadata(c *Client, f *MembershipEndpointKubernetesMetadata, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
return m, nil
}
// flattenMembershipEndpointKubernetesMetadata flattens an instance of MembershipEndpointKubernetesMetadata from a JSON
// response object.
func flattenMembershipEndpointKubernetesMetadata(c *Client, i interface{}, res *Membership) *MembershipEndpointKubernetesMetadata {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipEndpointKubernetesMetadata{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipEndpointKubernetesMetadata
}
r.KubernetesApiServerVersion = dcl.FlattenString(m["kubernetesApiServerVersion"])
r.NodeProviderId = dcl.FlattenString(m["nodeProviderId"])
r.NodeCount = dcl.FlattenInteger(m["nodeCount"])
r.VcpuCount = dcl.FlattenInteger(m["vcpuCount"])
r.MemoryMb = dcl.FlattenInteger(m["memoryMb"])
r.UpdateTime = dcl.FlattenString(m["updateTime"])
return r
}
// expandMembershipEndpointKubernetesResourceMap expands the contents of MembershipEndpointKubernetesResource into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceMap(c *Client, f map[string]MembershipEndpointKubernetesResource, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipEndpointKubernetesResource(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipEndpointKubernetesResourceSlice expands the contents of MembershipEndpointKubernetesResource into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceSlice(c *Client, f []MembershipEndpointKubernetesResource, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipEndpointKubernetesResource(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipEndpointKubernetesResourceMap flattens the contents of MembershipEndpointKubernetesResource from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceMap(c *Client, i interface{}, res *Membership) map[string]MembershipEndpointKubernetesResource {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipEndpointKubernetesResource{}
}
if len(a) == 0 {
return map[string]MembershipEndpointKubernetesResource{}
}
items := make(map[string]MembershipEndpointKubernetesResource)
for k, item := range a {
items[k] = *flattenMembershipEndpointKubernetesResource(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipEndpointKubernetesResourceSlice flattens the contents of MembershipEndpointKubernetesResource from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceSlice(c *Client, i interface{}, res *Membership) []MembershipEndpointKubernetesResource {
a, ok := i.([]interface{})
if !ok {
return []MembershipEndpointKubernetesResource{}
}
if len(a) == 0 {
return []MembershipEndpointKubernetesResource{}
}
items := make([]MembershipEndpointKubernetesResource, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipEndpointKubernetesResource(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipEndpointKubernetesResource expands an instance of MembershipEndpointKubernetesResource into a JSON
// request object.
func expandMembershipEndpointKubernetesResource(c *Client, f *MembershipEndpointKubernetesResource, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.MembershipCrManifest; !dcl.IsEmptyValueIndirect(v) {
m["membershipCrManifest"] = v
}
if v, err := expandMembershipEndpointKubernetesResourceResourceOptions(c, f.ResourceOptions, res); err != nil {
return nil, fmt.Errorf("error expanding ResourceOptions into resourceOptions: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["resourceOptions"] = v
}
return m, nil
}
// flattenMembershipEndpointKubernetesResource flattens an instance of MembershipEndpointKubernetesResource from a JSON
// response object.
func flattenMembershipEndpointKubernetesResource(c *Client, i interface{}, res *Membership) *MembershipEndpointKubernetesResource {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipEndpointKubernetesResource{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipEndpointKubernetesResource
}
r.MembershipCrManifest = dcl.FlattenSecretValue(m["membershipCrManifest"])
r.MembershipResources = flattenMembershipEndpointKubernetesResourceMembershipResourcesSlice(c, m["membershipResources"], res)
r.ConnectResources = flattenMembershipEndpointKubernetesResourceConnectResourcesSlice(c, m["connectResources"], res)
r.ResourceOptions = flattenMembershipEndpointKubernetesResourceResourceOptions(c, m["resourceOptions"], res)
return r
}
// expandMembershipEndpointKubernetesResourceMembershipResourcesMap expands the contents of MembershipEndpointKubernetesResourceMembershipResources into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceMembershipResourcesMap(c *Client, f map[string]MembershipEndpointKubernetesResourceMembershipResources, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipEndpointKubernetesResourceMembershipResources(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipEndpointKubernetesResourceMembershipResourcesSlice expands the contents of MembershipEndpointKubernetesResourceMembershipResources into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceMembershipResourcesSlice(c *Client, f []MembershipEndpointKubernetesResourceMembershipResources, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipEndpointKubernetesResourceMembershipResources(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipEndpointKubernetesResourceMembershipResourcesMap flattens the contents of MembershipEndpointKubernetesResourceMembershipResources from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceMembershipResourcesMap(c *Client, i interface{}, res *Membership) map[string]MembershipEndpointKubernetesResourceMembershipResources {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipEndpointKubernetesResourceMembershipResources{}
}
if len(a) == 0 {
return map[string]MembershipEndpointKubernetesResourceMembershipResources{}
}
items := make(map[string]MembershipEndpointKubernetesResourceMembershipResources)
for k, item := range a {
items[k] = *flattenMembershipEndpointKubernetesResourceMembershipResources(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipEndpointKubernetesResourceMembershipResourcesSlice flattens the contents of MembershipEndpointKubernetesResourceMembershipResources from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceMembershipResourcesSlice(c *Client, i interface{}, res *Membership) []MembershipEndpointKubernetesResourceMembershipResources {
a, ok := i.([]interface{})
if !ok {
return []MembershipEndpointKubernetesResourceMembershipResources{}
}
if len(a) == 0 {
return []MembershipEndpointKubernetesResourceMembershipResources{}
}
items := make([]MembershipEndpointKubernetesResourceMembershipResources, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipEndpointKubernetesResourceMembershipResources(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipEndpointKubernetesResourceMembershipResources expands an instance of MembershipEndpointKubernetesResourceMembershipResources into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceMembershipResources(c *Client, f *MembershipEndpointKubernetesResourceMembershipResources, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.Manifest; !dcl.IsEmptyValueIndirect(v) {
m["manifest"] = v
}
if v := f.ClusterScoped; !dcl.IsEmptyValueIndirect(v) {
m["clusterScoped"] = v
}
return m, nil
}
// flattenMembershipEndpointKubernetesResourceMembershipResources flattens an instance of MembershipEndpointKubernetesResourceMembershipResources from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceMembershipResources(c *Client, i interface{}, res *Membership) *MembershipEndpointKubernetesResourceMembershipResources {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipEndpointKubernetesResourceMembershipResources{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipEndpointKubernetesResourceMembershipResources
}
r.Manifest = dcl.FlattenString(m["manifest"])
r.ClusterScoped = dcl.FlattenBool(m["clusterScoped"])
return r
}
// expandMembershipEndpointKubernetesResourceConnectResourcesMap expands the contents of MembershipEndpointKubernetesResourceConnectResources into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceConnectResourcesMap(c *Client, f map[string]MembershipEndpointKubernetesResourceConnectResources, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipEndpointKubernetesResourceConnectResources(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipEndpointKubernetesResourceConnectResourcesSlice expands the contents of MembershipEndpointKubernetesResourceConnectResources into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceConnectResourcesSlice(c *Client, f []MembershipEndpointKubernetesResourceConnectResources, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipEndpointKubernetesResourceConnectResources(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipEndpointKubernetesResourceConnectResourcesMap flattens the contents of MembershipEndpointKubernetesResourceConnectResources from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceConnectResourcesMap(c *Client, i interface{}, res *Membership) map[string]MembershipEndpointKubernetesResourceConnectResources {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipEndpointKubernetesResourceConnectResources{}
}
if len(a) == 0 {
return map[string]MembershipEndpointKubernetesResourceConnectResources{}
}
items := make(map[string]MembershipEndpointKubernetesResourceConnectResources)
for k, item := range a {
items[k] = *flattenMembershipEndpointKubernetesResourceConnectResources(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipEndpointKubernetesResourceConnectResourcesSlice flattens the contents of MembershipEndpointKubernetesResourceConnectResources from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceConnectResourcesSlice(c *Client, i interface{}, res *Membership) []MembershipEndpointKubernetesResourceConnectResources {
a, ok := i.([]interface{})
if !ok {
return []MembershipEndpointKubernetesResourceConnectResources{}
}
if len(a) == 0 {
return []MembershipEndpointKubernetesResourceConnectResources{}
}
items := make([]MembershipEndpointKubernetesResourceConnectResources, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipEndpointKubernetesResourceConnectResources(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipEndpointKubernetesResourceConnectResources expands an instance of MembershipEndpointKubernetesResourceConnectResources into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceConnectResources(c *Client, f *MembershipEndpointKubernetesResourceConnectResources, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.Manifest; !dcl.IsEmptyValueIndirect(v) {
m["manifest"] = v
}
if v := f.ClusterScoped; !dcl.IsEmptyValueIndirect(v) {
m["clusterScoped"] = v
}
return m, nil
}
// flattenMembershipEndpointKubernetesResourceConnectResources flattens an instance of MembershipEndpointKubernetesResourceConnectResources from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceConnectResources(c *Client, i interface{}, res *Membership) *MembershipEndpointKubernetesResourceConnectResources {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipEndpointKubernetesResourceConnectResources{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipEndpointKubernetesResourceConnectResources
}
r.Manifest = dcl.FlattenString(m["manifest"])
r.ClusterScoped = dcl.FlattenBool(m["clusterScoped"])
return r
}
// expandMembershipEndpointKubernetesResourceResourceOptionsMap expands the contents of MembershipEndpointKubernetesResourceResourceOptions into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceResourceOptionsMap(c *Client, f map[string]MembershipEndpointKubernetesResourceResourceOptions, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipEndpointKubernetesResourceResourceOptions(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipEndpointKubernetesResourceResourceOptionsSlice expands the contents of MembershipEndpointKubernetesResourceResourceOptions into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceResourceOptionsSlice(c *Client, f []MembershipEndpointKubernetesResourceResourceOptions, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipEndpointKubernetesResourceResourceOptions(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipEndpointKubernetesResourceResourceOptionsMap flattens the contents of MembershipEndpointKubernetesResourceResourceOptions from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceResourceOptionsMap(c *Client, i interface{}, res *Membership) map[string]MembershipEndpointKubernetesResourceResourceOptions {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipEndpointKubernetesResourceResourceOptions{}
}
if len(a) == 0 {
return map[string]MembershipEndpointKubernetesResourceResourceOptions{}
}
items := make(map[string]MembershipEndpointKubernetesResourceResourceOptions)
for k, item := range a {
items[k] = *flattenMembershipEndpointKubernetesResourceResourceOptions(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipEndpointKubernetesResourceResourceOptionsSlice flattens the contents of MembershipEndpointKubernetesResourceResourceOptions from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceResourceOptionsSlice(c *Client, i interface{}, res *Membership) []MembershipEndpointKubernetesResourceResourceOptions {
a, ok := i.([]interface{})
if !ok {
return []MembershipEndpointKubernetesResourceResourceOptions{}
}
if len(a) == 0 {
return []MembershipEndpointKubernetesResourceResourceOptions{}
}
items := make([]MembershipEndpointKubernetesResourceResourceOptions, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipEndpointKubernetesResourceResourceOptions(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipEndpointKubernetesResourceResourceOptions expands an instance of MembershipEndpointKubernetesResourceResourceOptions into a JSON
// request object.
func expandMembershipEndpointKubernetesResourceResourceOptions(c *Client, f *MembershipEndpointKubernetesResourceResourceOptions, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.ConnectVersion; !dcl.IsEmptyValueIndirect(v) {
m["connectVersion"] = v
}
if v := f.V1Beta1Crd; !dcl.IsEmptyValueIndirect(v) {
m["v1beta1Crd"] = v
}
return m, nil
}
// flattenMembershipEndpointKubernetesResourceResourceOptions flattens an instance of MembershipEndpointKubernetesResourceResourceOptions from a JSON
// response object.
func flattenMembershipEndpointKubernetesResourceResourceOptions(c *Client, i interface{}, res *Membership) *MembershipEndpointKubernetesResourceResourceOptions {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipEndpointKubernetesResourceResourceOptions{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipEndpointKubernetesResourceResourceOptions
}
r.ConnectVersion = dcl.FlattenString(m["connectVersion"])
r.V1Beta1Crd = dcl.FlattenBool(m["v1beta1Crd"])
return r
}
// expandMembershipStateMap expands the contents of MembershipState into a JSON
// request object.
func expandMembershipStateMap(c *Client, f map[string]MembershipState, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipState(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipStateSlice expands the contents of MembershipState into a JSON
// request object.
func expandMembershipStateSlice(c *Client, f []MembershipState, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipState(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipStateMap flattens the contents of MembershipState from a JSON
// response object.
func flattenMembershipStateMap(c *Client, i interface{}, res *Membership) map[string]MembershipState {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipState{}
}
if len(a) == 0 {
return map[string]MembershipState{}
}
items := make(map[string]MembershipState)
for k, item := range a {
items[k] = *flattenMembershipState(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipStateSlice flattens the contents of MembershipState from a JSON
// response object.
func flattenMembershipStateSlice(c *Client, i interface{}, res *Membership) []MembershipState {
a, ok := i.([]interface{})
if !ok {
return []MembershipState{}
}
if len(a) == 0 {
return []MembershipState{}
}
items := make([]MembershipState, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipState(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipState expands an instance of MembershipState into a JSON
// request object.
func expandMembershipState(c *Client, f *MembershipState, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
return m, nil
}
// flattenMembershipState flattens an instance of MembershipState from a JSON
// response object.
func flattenMembershipState(c *Client, i interface{}, res *Membership) *MembershipState {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipState{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipState
}
r.Code = flattenMembershipStateCodeEnum(m["code"])
return r
}
// expandMembershipAuthorityMap expands the contents of MembershipAuthority into a JSON
// request object.
func expandMembershipAuthorityMap(c *Client, f map[string]MembershipAuthority, res *Membership) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandMembershipAuthority(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandMembershipAuthoritySlice expands the contents of MembershipAuthority into a JSON
// request object.
func expandMembershipAuthoritySlice(c *Client, f []MembershipAuthority, res *Membership) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandMembershipAuthority(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenMembershipAuthorityMap flattens the contents of MembershipAuthority from a JSON
// response object.
func flattenMembershipAuthorityMap(c *Client, i interface{}, res *Membership) map[string]MembershipAuthority {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipAuthority{}
}
if len(a) == 0 {
return map[string]MembershipAuthority{}
}
items := make(map[string]MembershipAuthority)
for k, item := range a {
items[k] = *flattenMembershipAuthority(c, item.(map[string]interface{}), res)
}
return items
}
// flattenMembershipAuthoritySlice flattens the contents of MembershipAuthority from a JSON
// response object.
func flattenMembershipAuthoritySlice(c *Client, i interface{}, res *Membership) []MembershipAuthority {
a, ok := i.([]interface{})
if !ok {
return []MembershipAuthority{}
}
if len(a) == 0 {
return []MembershipAuthority{}
}
items := make([]MembershipAuthority, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipAuthority(c, item.(map[string]interface{}), res))
}
return items
}
// expandMembershipAuthority expands an instance of MembershipAuthority into a JSON
// request object.
func expandMembershipAuthority(c *Client, f *MembershipAuthority, res *Membership) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.Issuer; !dcl.IsEmptyValueIndirect(v) {
m["issuer"] = v
}
return m, nil
}
// flattenMembershipAuthority flattens an instance of MembershipAuthority from a JSON
// response object.
func flattenMembershipAuthority(c *Client, i interface{}, res *Membership) *MembershipAuthority {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &MembershipAuthority{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyMembershipAuthority
}
r.Issuer = dcl.FlattenString(m["issuer"])
r.WorkloadIdentityPool = dcl.FlattenString(m["workloadIdentityPool"])
r.IdentityProvider = dcl.FlattenString(m["identityProvider"])
return r
}
// flattenMembershipStateCodeEnumMap flattens the contents of MembershipStateCodeEnum from a JSON
// response object.
func flattenMembershipStateCodeEnumMap(c *Client, i interface{}, res *Membership) map[string]MembershipStateCodeEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipStateCodeEnum{}
}
if len(a) == 0 {
return map[string]MembershipStateCodeEnum{}
}
items := make(map[string]MembershipStateCodeEnum)
for k, item := range a {
items[k] = *flattenMembershipStateCodeEnum(item.(interface{}))
}
return items
}
// flattenMembershipStateCodeEnumSlice flattens the contents of MembershipStateCodeEnum from a JSON
// response object.
func flattenMembershipStateCodeEnumSlice(c *Client, i interface{}, res *Membership) []MembershipStateCodeEnum {
a, ok := i.([]interface{})
if !ok {
return []MembershipStateCodeEnum{}
}
if len(a) == 0 {
return []MembershipStateCodeEnum{}
}
items := make([]MembershipStateCodeEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipStateCodeEnum(item.(interface{})))
}
return items
}
// flattenMembershipStateCodeEnum asserts that an interface is a string, and returns a
// pointer to a *MembershipStateCodeEnum with the same value as that string.
func flattenMembershipStateCodeEnum(i interface{}) *MembershipStateCodeEnum {
s, ok := i.(string)
if !ok {
return nil
}
return MembershipStateCodeEnumRef(s)
}
// flattenMembershipInfrastructureTypeEnumMap flattens the contents of MembershipInfrastructureTypeEnum from a JSON
// response object.
func flattenMembershipInfrastructureTypeEnumMap(c *Client, i interface{}, res *Membership) map[string]MembershipInfrastructureTypeEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]MembershipInfrastructureTypeEnum{}
}
if len(a) == 0 {
return map[string]MembershipInfrastructureTypeEnum{}
}
items := make(map[string]MembershipInfrastructureTypeEnum)
for k, item := range a {
items[k] = *flattenMembershipInfrastructureTypeEnum(item.(interface{}))
}
return items
}
// flattenMembershipInfrastructureTypeEnumSlice flattens the contents of MembershipInfrastructureTypeEnum from a JSON
// response object.
func flattenMembershipInfrastructureTypeEnumSlice(c *Client, i interface{}, res *Membership) []MembershipInfrastructureTypeEnum {
a, ok := i.([]interface{})
if !ok {
return []MembershipInfrastructureTypeEnum{}
}
if len(a) == 0 {
return []MembershipInfrastructureTypeEnum{}
}
items := make([]MembershipInfrastructureTypeEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenMembershipInfrastructureTypeEnum(item.(interface{})))
}
return items
}
// flattenMembershipInfrastructureTypeEnum asserts that an interface is a string, and returns a
// pointer to a *MembershipInfrastructureTypeEnum with the same value as that string.
func flattenMembershipInfrastructureTypeEnum(i interface{}) *MembershipInfrastructureTypeEnum {
s, ok := i.(string)
if !ok {
return nil
}
return MembershipInfrastructureTypeEnumRef(s)
}
// This function returns a matcher that checks whether a serialized resource matches this resource
// in its parameters (as defined by the fields in a Get, which definitionally define resource
// identity). This is useful in extracting the element from a List call.
func (r *Membership) matcher(c *Client) func([]byte) bool {
return func(b []byte) bool {
cr, err := unmarshalMembership(b, c, r)
if err != nil {
c.Config.Logger.Warning("failed to unmarshal provided resource in matcher.")
return false
}
nr := r.urlNormalized()
ncr := cr.urlNormalized()
c.Config.Logger.Infof("looking for %v\nin %v", nr, ncr)
if nr.Project == nil && ncr.Project == nil {
c.Config.Logger.Info("Both Project fields null - considering equal.")
} else if nr.Project == nil || ncr.Project == nil {
c.Config.Logger.Info("Only one Project field is null - considering unequal.")
return false
} else if *nr.Project != *ncr.Project {
return false
}
if nr.Location == nil && ncr.Location == nil {
c.Config.Logger.Info("Both Location fields null - considering equal.")
} else if nr.Location == nil || ncr.Location == nil {
c.Config.Logger.Info("Only one Location field is null - considering unequal.")
return false
} else if *nr.Location != *ncr.Location {
return false
}
if nr.Name == nil && ncr.Name == nil {
c.Config.Logger.Info("Both Name fields null - considering equal.")
} else if nr.Name == nil || ncr.Name == nil {
c.Config.Logger.Info("Only one Name field is null - considering unequal.")
return false
} else if *nr.Name != *ncr.Name {
return false
}
return true
}
}
type membershipDiff struct {
// The diff should include one or the other of RequiresRecreate or UpdateOp.
RequiresRecreate bool
UpdateOp membershipApiOperation
FieldName string // used for error logging
}
func convertFieldDiffsToMembershipDiffs(config *dcl.Config, fds []*dcl.FieldDiff, opts []dcl.ApplyOption) ([]membershipDiff, error) {
opNamesToFieldDiffs := make(map[string][]*dcl.FieldDiff)
// Map each operation name to the field diffs associated with it.
for _, fd := range fds {
for _, ro := range fd.ResultingOperation {
if fieldDiffs, ok := opNamesToFieldDiffs[ro]; ok {
fieldDiffs = append(fieldDiffs, fd)
opNamesToFieldDiffs[ro] = fieldDiffs
} else {
config.Logger.Infof("%s required due to diff: %v", ro, fd)
opNamesToFieldDiffs[ro] = []*dcl.FieldDiff{fd}
}
}
}
var diffs []membershipDiff
// For each operation name, create a membershipDiff which contains the operation.
for opName, fieldDiffs := range opNamesToFieldDiffs {
// Use the first field diff's field name for logging required recreate error.
diff := membershipDiff{FieldName: fieldDiffs[0].FieldName}
if opName == "Recreate" {
diff.RequiresRecreate = true
} else {
apiOp, err := convertOpNameToMembershipApiOperation(opName, fieldDiffs, opts...)
if err != nil {
return diffs, err
}
diff.UpdateOp = apiOp
}
diffs = append(diffs, diff)
}
return diffs, nil
}
func convertOpNameToMembershipApiOperation(opName string, fieldDiffs []*dcl.FieldDiff, opts ...dcl.ApplyOption) (membershipApiOperation, error) {
switch opName {
case "updateMembershipUpdateMembershipOperation":
return &updateMembershipUpdateMembershipOperation{FieldDiffs: fieldDiffs}, nil
default:
return nil, fmt.Errorf("no such operation with name: %v", opName)
}
}
func extractMembershipFields(r *Membership) error {
vEndpoint := r.Endpoint
if vEndpoint == nil {
// note: explicitly not the empty object.
vEndpoint = &MembershipEndpoint{}
}
if err := extractMembershipEndpointFields(r, vEndpoint); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vEndpoint) {
r.Endpoint = vEndpoint
}
vState := r.State
if vState == nil {
// note: explicitly not the empty object.
vState = &MembershipState{}
}
if err := extractMembershipStateFields(r, vState); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vState) {
r.State = vState
}
vAuthority := r.Authority
if vAuthority == nil {
// note: explicitly not the empty object.
vAuthority = &MembershipAuthority{}
}
if err := extractMembershipAuthorityFields(r, vAuthority); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vAuthority) {
r.Authority = vAuthority
}
return nil
}
func extractMembershipEndpointFields(r *Membership, o *MembershipEndpoint) error {
vGkeCluster := o.GkeCluster
if vGkeCluster == nil {
// note: explicitly not the empty object.
vGkeCluster = &MembershipEndpointGkeCluster{}
}
if err := extractMembershipEndpointGkeClusterFields(r, vGkeCluster); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vGkeCluster) {
o.GkeCluster = vGkeCluster
}
vKubernetesMetadata := o.KubernetesMetadata
if vKubernetesMetadata == nil {
// note: explicitly not the empty object.
vKubernetesMetadata = &MembershipEndpointKubernetesMetadata{}
}
if err := extractMembershipEndpointKubernetesMetadataFields(r, vKubernetesMetadata); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vKubernetesMetadata) {
o.KubernetesMetadata = vKubernetesMetadata
}
vKubernetesResource := o.KubernetesResource
if vKubernetesResource == nil {
// note: explicitly not the empty object.
vKubernetesResource = &MembershipEndpointKubernetesResource{}
}
if err := extractMembershipEndpointKubernetesResourceFields(r, vKubernetesResource); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vKubernetesResource) {
o.KubernetesResource = vKubernetesResource
}
return nil
}
func extractMembershipEndpointGkeClusterFields(r *Membership, o *MembershipEndpointGkeCluster) error {
return nil
}
func extractMembershipEndpointKubernetesMetadataFields(r *Membership, o *MembershipEndpointKubernetesMetadata) error {
return nil
}
func extractMembershipEndpointKubernetesResourceFields(r *Membership, o *MembershipEndpointKubernetesResource) error {
vResourceOptions := o.ResourceOptions
if vResourceOptions == nil {
// note: explicitly not the empty object.
vResourceOptions = &MembershipEndpointKubernetesResourceResourceOptions{}
}
if err := extractMembershipEndpointKubernetesResourceResourceOptionsFields(r, vResourceOptions); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vResourceOptions) {
o.ResourceOptions = vResourceOptions
}
return nil
}
func extractMembershipEndpointKubernetesResourceMembershipResourcesFields(r *Membership, o *MembershipEndpointKubernetesResourceMembershipResources) error {
return nil
}
func extractMembershipEndpointKubernetesResourceConnectResourcesFields(r *Membership, o *MembershipEndpointKubernetesResourceConnectResources) error {
return nil
}
func extractMembershipEndpointKubernetesResourceResourceOptionsFields(r *Membership, o *MembershipEndpointKubernetesResourceResourceOptions) error {
return nil
}
func extractMembershipStateFields(r *Membership, o *MembershipState) error {
return nil
}
func extractMembershipAuthorityFields(r *Membership, o *MembershipAuthority) error {
return nil
}
func postReadExtractMembershipFields(r *Membership) error {
vEndpoint := r.Endpoint
if vEndpoint == nil {
// note: explicitly not the empty object.
vEndpoint = &MembershipEndpoint{}
}
if err := postReadExtractMembershipEndpointFields(r, vEndpoint); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vEndpoint) {
r.Endpoint = vEndpoint
}
vState := r.State
if vState == nil {
// note: explicitly not the empty object.
vState = &MembershipState{}
}
if err := postReadExtractMembershipStateFields(r, vState); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vState) {
r.State = vState
}
vAuthority := r.Authority
if vAuthority == nil {
// note: explicitly not the empty object.
vAuthority = &MembershipAuthority{}
}
if err := postReadExtractMembershipAuthorityFields(r, vAuthority); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vAuthority) {
r.Authority = vAuthority
}
return nil
}
func postReadExtractMembershipEndpointFields(r *Membership, o *MembershipEndpoint) error {
vGkeCluster := o.GkeCluster
if vGkeCluster == nil {
// note: explicitly not the empty object.
vGkeCluster = &MembershipEndpointGkeCluster{}
}
if err := extractMembershipEndpointGkeClusterFields(r, vGkeCluster); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vGkeCluster) {
o.GkeCluster = vGkeCluster
}
vKubernetesMetadata := o.KubernetesMetadata
if vKubernetesMetadata == nil {
// note: explicitly not the empty object.
vKubernetesMetadata = &MembershipEndpointKubernetesMetadata{}
}
if err := extractMembershipEndpointKubernetesMetadataFields(r, vKubernetesMetadata); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vKubernetesMetadata) {
o.KubernetesMetadata = vKubernetesMetadata
}
vKubernetesResource := o.KubernetesResource
if vKubernetesResource == nil {
// note: explicitly not the empty object.
vKubernetesResource = &MembershipEndpointKubernetesResource{}
}
if err := extractMembershipEndpointKubernetesResourceFields(r, vKubernetesResource); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vKubernetesResource) {
o.KubernetesResource = vKubernetesResource
}
return nil
}
func postReadExtractMembershipEndpointGkeClusterFields(r *Membership, o *MembershipEndpointGkeCluster) error {
return nil
}
func postReadExtractMembershipEndpointKubernetesMetadataFields(r *Membership, o *MembershipEndpointKubernetesMetadata) error {
return nil
}
func postReadExtractMembershipEndpointKubernetesResourceFields(r *Membership, o *MembershipEndpointKubernetesResource) error {
vResourceOptions := o.ResourceOptions
if vResourceOptions == nil {
// note: explicitly not the empty object.
vResourceOptions = &MembershipEndpointKubernetesResourceResourceOptions{}
}
if err := extractMembershipEndpointKubernetesResourceResourceOptionsFields(r, vResourceOptions); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vResourceOptions) {
o.ResourceOptions = vResourceOptions
}
return nil
}
func postReadExtractMembershipEndpointKubernetesResourceMembershipResourcesFields(r *Membership, o *MembershipEndpointKubernetesResourceMembershipResources) error {
return nil
}
func postReadExtractMembershipEndpointKubernetesResourceConnectResourcesFields(r *Membership, o *MembershipEndpointKubernetesResourceConnectResources) error {
return nil
}
func postReadExtractMembershipEndpointKubernetesResourceResourceOptionsFields(r *Membership, o *MembershipEndpointKubernetesResourceResourceOptions) error {
return nil
}
func postReadExtractMembershipStateFields(r *Membership, o *MembershipState) error {
return nil
}
func postReadExtractMembershipAuthorityFields(r *Membership, o *MembershipAuthority) error {
return nil
}