services/google/assuredworkloads/beta/workload_internal.go (3,237 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 *Workload) validate() error {
if err := dcl.Required(r, "displayName"); err != nil {
return err
}
if err := dcl.Required(r, "complianceRegime"); err != nil {
return err
}
if err := dcl.RequiredParameter(r.Organization, "Organization"); err != nil {
return err
}
if err := dcl.RequiredParameter(r.Location, "Location"); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(r.KmsSettings) {
if err := r.KmsSettings.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.SaaEnrollmentResponse) {
if err := r.SaaEnrollmentResponse.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.ComplianceStatus) {
if err := r.ComplianceStatus.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.PartnerPermissions) {
if err := r.PartnerPermissions.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.WorkloadOptions) {
if err := r.WorkloadOptions.validate(); err != nil {
return err
}
}
if !dcl.IsEmptyValueIndirect(r.EkmProvisioningResponse) {
if err := r.EkmProvisioningResponse.validate(); err != nil {
return err
}
}
return nil
}
func (r *WorkloadResources) validate() error {
return nil
}
func (r *WorkloadKmsSettings) validate() error {
if err := dcl.Required(r, "nextRotationTime"); err != nil {
return err
}
if err := dcl.Required(r, "rotationPeriod"); err != nil {
return err
}
return nil
}
func (r *WorkloadResourceSettings) validate() error {
return nil
}
func (r *WorkloadSaaEnrollmentResponse) validate() error {
return nil
}
func (r *WorkloadComplianceStatus) validate() error {
return nil
}
func (r *WorkloadPartnerPermissions) validate() error {
return nil
}
func (r *WorkloadWorkloadOptions) validate() error {
return nil
}
func (r *WorkloadEkmProvisioningResponse) validate() error {
return nil
}
func (r *Workload) basePath() string {
params := map[string]interface{}{
"location": dcl.ValueOrEmptyString(r.Location),
}
return dcl.Nprintf("https://{{location}}-assuredworkloads.googleapis.com/v1beta1/", params)
}
func (r *Workload) getURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"organization": dcl.ValueOrEmptyString(nr.Organization),
"location": dcl.ValueOrEmptyString(nr.Location),
"name": dcl.ValueOrEmptyString(nr.Name),
}
return dcl.URL("organizations/{{organization}}/locations/{{location}}/workloads/{{name}}", nr.basePath(), userBasePath, params), nil
}
func (r *Workload) listURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"organization": dcl.ValueOrEmptyString(nr.Organization),
"location": dcl.ValueOrEmptyString(nr.Location),
}
return dcl.URL("organizations/{{organization}}/locations/{{location}}/workloads", nr.basePath(), userBasePath, params), nil
}
func (r *Workload) createURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"organization": dcl.ValueOrEmptyString(nr.Organization),
"location": dcl.ValueOrEmptyString(nr.Location),
}
return dcl.URL("organizations/{{organization}}/locations/{{location}}/workloads", nr.basePath(), userBasePath, params), nil
}
func (r *Workload) deleteURL(userBasePath string) (string, error) {
nr := r.urlNormalized()
params := map[string]interface{}{
"organization": dcl.ValueOrEmptyString(nr.Organization),
"location": dcl.ValueOrEmptyString(nr.Location),
"name": dcl.ValueOrEmptyString(nr.Name),
}
return dcl.URL("organizations/{{organization}}/locations/{{location}}/workloads/{{name}}", nr.basePath(), userBasePath, params), nil
}
// workloadApiOperation represents a mutable operation in the underlying REST
// API such as Create, Update, or Delete.
type workloadApiOperation interface {
do(context.Context, *Workload, *Client) error
}
// newUpdateWorkloadUpdateWorkloadRequest creates a request for an
// Workload resource's UpdateWorkload update type by filling in the update
// fields based on the intended state of the resource.
func newUpdateWorkloadUpdateWorkloadRequest(ctx context.Context, f *Workload, c *Client) (map[string]interface{}, error) {
req := map[string]interface{}{}
res := f
_ = res
if v := f.DisplayName; !dcl.IsEmptyValueIndirect(v) {
req["displayName"] = v
}
if v := f.Labels; !dcl.IsEmptyValueIndirect(v) {
req["labels"] = v
}
b, err := c.getWorkloadRaw(ctx, f)
if err != nil {
return nil, err
}
var m map[string]interface{}
if err := json.Unmarshal(b, &m); err != nil {
return nil, err
}
rawEtag, err := dcl.GetMapEntry(
m,
[]string{"etag"},
)
if err != nil {
c.Config.Logger.WarningWithContextf(ctx, "Failed to fetch from JSON Path: %v", err)
} else {
req["etag"] = rawEtag.(string)
}
return req, nil
}
// marshalUpdateWorkloadUpdateWorkloadRequest converts the update into
// the final JSON request body.
func marshalUpdateWorkloadUpdateWorkloadRequest(c *Client, m map[string]interface{}) ([]byte, error) {
return json.Marshal(m)
}
type updateWorkloadUpdateWorkloadOperation 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 *updateWorkloadUpdateWorkloadOperation) do(ctx context.Context, r *Workload, c *Client) error {
_, err := c.GetWorkload(ctx, r)
if err != nil {
return err
}
u, err := r.updateURL(c.Config.BasePath, "UpdateWorkload")
if err != nil {
return err
}
mask := dcl.UpdateMaskWithPrefix(op.FieldDiffs, "Workload")
u, err = dcl.AddQueryParams(u, map[string]string{"updateMask": mask})
if err != nil {
return err
}
req, err := newUpdateWorkloadUpdateWorkloadRequest(ctx, r, c)
if err != nil {
return err
}
c.Config.Logger.InfoWithContextf(ctx, "Created update: %#v", req)
body, err := marshalUpdateWorkloadUpdateWorkloadRequest(c, req)
if err != nil {
return err
}
_, err = dcl.SendRequest(ctx, c.Config, "PATCH", u, bytes.NewBuffer(body), c.Config.RetryProvider)
if err != nil {
return err
}
return nil
}
func (c *Client) listWorkloadRaw(ctx context.Context, r *Workload, 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 != WorkloadMaxPage {
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 listWorkloadOperation struct {
Workloads []map[string]interface{} `json:"workloads"`
Token string `json:"nextPageToken"`
}
func (c *Client) listWorkload(ctx context.Context, r *Workload, pageToken string, pageSize int32) ([]*Workload, string, error) {
b, err := c.listWorkloadRaw(ctx, r, pageToken, pageSize)
if err != nil {
return nil, "", err
}
var m listWorkloadOperation
if err := json.Unmarshal(b, &m); err != nil {
return nil, "", err
}
var l []*Workload
for _, v := range m.Workloads {
res, err := unmarshalMapWorkload(v, c, r)
if err != nil {
return nil, m.Token, err
}
res.Organization = r.Organization
res.Location = r.Location
l = append(l, res)
}
return l, m.Token, nil
}
func (c *Client) deleteAllWorkload(ctx context.Context, f func(*Workload) bool, resources []*Workload) 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.DeleteWorkload(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 deleteWorkloadOperation struct{}
func (op *deleteWorkloadOperation) do(ctx context.Context, r *Workload, c *Client) error {
r, err := c.GetWorkload(ctx, r)
if err != nil {
if dcl.IsNotFound(err) {
c.Config.Logger.InfoWithContextf(ctx, "Workload not found, returning. Original error: %v", err)
return nil
}
c.Config.Logger.WarningWithContextf(ctx, "GetWorkload checking for existence. error: %v", err)
return err
}
err = r.deleteResources(ctx, c)
if err != nil {
return err
}
u, err := r.deleteURL(c.Config.BasePath)
if err != nil {
return err
}
// Delete should never have a body
body := &bytes.Buffer{}
_, err = dcl.SendRequest(ctx, c.Config, "DELETE", u, body, c.Config.RetryProvider)
if err != nil {
return fmt.Errorf("failed to delete Workload: %w", 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.GetWorkload(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 createWorkloadOperation struct {
response map[string]interface{}
}
func (op *createWorkloadOperation) FirstResponse() (map[string]interface{}, bool) {
return op.response, len(op.response) > 0
}
func (op *createWorkloadOperation) do(ctx context.Context, r *Workload, 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
}
if r.Name != nil {
// Allowing creation to continue with Name set could result in a Workload with the wrong Name.
return fmt.Errorf("server-generated parameter Name was specified by user as %v, should be unspecified", dcl.ValueOrEmptyString(r.Name))
}
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()
// Include Name in URL substitution for initial GET request.
m := op.response
r.Name = dcl.SelfLinkToName(dcl.FlattenString(m["name"]))
if _, err := c.GetWorkload(ctx, r); err != nil {
c.Config.Logger.WarningWithContextf(ctx, "get returned error: %v", err)
return err
}
return nil
}
func (c *Client) getWorkloadRaw(ctx context.Context, r *Workload) ([]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) workloadDiffsForRawDesired(ctx context.Context, rawDesired *Workload, opts ...dcl.ApplyOption) (initial, desired *Workload, 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 *Workload
if sh := dcl.FetchStateHint(opts); sh != nil {
if r, ok := sh.(*Workload); !ok {
c.Config.Logger.WarningWithContextf(ctx, "Initial state hint was of the wrong type; expected Workload, got %T", sh)
} else {
fetchState = r
}
}
if fetchState == nil {
fetchState = rawDesired
}
if fetchState.Name == nil {
// We cannot perform a get because of lack of information. We have to assume
// that this is being created for the first time.
desired, err := canonicalizeWorkloadDesiredState(rawDesired, nil)
return nil, desired, nil, err
}
// 1.2: Retrieval of raw initial state from API
rawInitial, err := c.GetWorkload(ctx, fetchState)
if rawInitial == nil {
if !dcl.IsNotFound(err) {
c.Config.Logger.WarningWithContextf(ctx, "Failed to retrieve whether a Workload resource already exists: %s", err)
return nil, nil, nil, fmt.Errorf("failed to retrieve Workload resource: %v", err)
}
c.Config.Logger.InfoWithContext(ctx, "Found that Workload resource did not exist.")
// Perform canonicalization to pick up defaults.
desired, err = canonicalizeWorkloadDesiredState(rawDesired, rawInitial)
return nil, desired, nil, err
}
c.Config.Logger.InfoWithContextf(ctx, "Found initial state for Workload: %v", rawInitial)
c.Config.Logger.InfoWithContextf(ctx, "Initial desired state for Workload: %v", rawDesired)
// The Get call applies postReadExtract and so the result may contain fields that are not part of API version.
if err := extractWorkloadFields(rawInitial); err != nil {
return nil, nil, nil, err
}
// 1.3: Canonicalize raw initial state into initial state.
initial, err = canonicalizeWorkloadInitialState(rawInitial, rawDesired)
if err != nil {
return nil, nil, nil, err
}
c.Config.Logger.InfoWithContextf(ctx, "Canonicalized initial state for Workload: %v", initial)
// 1.4: Canonicalize raw desired state into desired state.
desired, err = canonicalizeWorkloadDesiredState(rawDesired, rawInitial, opts...)
if err != nil {
return nil, nil, nil, err
}
c.Config.Logger.InfoWithContextf(ctx, "Canonicalized desired state for Workload: %v", desired)
// 2.1: Comparison of initial and desired state.
diffs, err = diffWorkload(c, desired, initial, opts...)
return initial, desired, diffs, err
}
func canonicalizeWorkloadInitialState(rawInitial, rawDesired *Workload) (*Workload, 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 canonicalizeWorkloadDesiredState(rawDesired, rawInitial *Workload, opts ...dcl.ApplyOption) (*Workload, 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.KmsSettings = canonicalizeWorkloadKmsSettings(rawDesired.KmsSettings, nil, opts...)
rawDesired.SaaEnrollmentResponse = canonicalizeWorkloadSaaEnrollmentResponse(rawDesired.SaaEnrollmentResponse, nil, opts...)
rawDesired.ComplianceStatus = canonicalizeWorkloadComplianceStatus(rawDesired.ComplianceStatus, nil, opts...)
rawDesired.PartnerPermissions = canonicalizeWorkloadPartnerPermissions(rawDesired.PartnerPermissions, nil, opts...)
rawDesired.WorkloadOptions = canonicalizeWorkloadWorkloadOptions(rawDesired.WorkloadOptions, nil, opts...)
rawDesired.EkmProvisioningResponse = canonicalizeWorkloadEkmProvisioningResponse(rawDesired.EkmProvisioningResponse, nil, opts...)
return rawDesired, nil
}
canonicalDesired := &Workload{}
if dcl.IsZeroValue(rawDesired.Name) || (dcl.IsEmptyValueIndirect(rawDesired.Name) && dcl.IsEmptyValueIndirect(rawInitial.Name)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
canonicalDesired.Name = rawInitial.Name
} else {
canonicalDesired.Name = rawDesired.Name
}
if dcl.StringCanonicalize(rawDesired.DisplayName, rawInitial.DisplayName) {
canonicalDesired.DisplayName = rawInitial.DisplayName
} else {
canonicalDesired.DisplayName = rawDesired.DisplayName
}
if dcl.IsZeroValue(rawDesired.ComplianceRegime) || (dcl.IsEmptyValueIndirect(rawDesired.ComplianceRegime) && dcl.IsEmptyValueIndirect(rawInitial.ComplianceRegime)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
canonicalDesired.ComplianceRegime = rawInitial.ComplianceRegime
} else {
canonicalDesired.ComplianceRegime = rawDesired.ComplianceRegime
}
if dcl.StringCanonicalize(rawDesired.BillingAccount, rawInitial.BillingAccount) {
canonicalDesired.BillingAccount = rawInitial.BillingAccount
} else {
canonicalDesired.BillingAccount = rawDesired.BillingAccount
}
if dcl.StringCanonicalize(rawDesired.PartnerServicesBillingAccount, rawInitial.PartnerServicesBillingAccount) {
canonicalDesired.PartnerServicesBillingAccount = rawInitial.PartnerServicesBillingAccount
} else {
canonicalDesired.PartnerServicesBillingAccount = rawDesired.PartnerServicesBillingAccount
}
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.ProvisionedResourcesParent, rawInitial.ProvisionedResourcesParent) {
canonicalDesired.ProvisionedResourcesParent = rawInitial.ProvisionedResourcesParent
} else {
canonicalDesired.ProvisionedResourcesParent = rawDesired.ProvisionedResourcesParent
}
canonicalDesired.KmsSettings = canonicalizeWorkloadKmsSettings(rawDesired.KmsSettings, rawInitial.KmsSettings, opts...)
canonicalDesired.ResourceSettings = canonicalizeWorkloadResourceSettingsSlice(rawDesired.ResourceSettings, rawInitial.ResourceSettings, opts...)
if dcl.BoolCanonicalize(rawDesired.EnableSovereignControls, rawInitial.EnableSovereignControls) {
canonicalDesired.EnableSovereignControls = rawInitial.EnableSovereignControls
} else {
canonicalDesired.EnableSovereignControls = rawDesired.EnableSovereignControls
}
if dcl.IsZeroValue(rawDesired.Partner) || (dcl.IsEmptyValueIndirect(rawDesired.Partner) && dcl.IsEmptyValueIndirect(rawInitial.Partner)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
canonicalDesired.Partner = rawInitial.Partner
} else {
canonicalDesired.Partner = rawDesired.Partner
}
canonicalDesired.PartnerPermissions = canonicalizeWorkloadPartnerPermissions(rawDesired.PartnerPermissions, rawInitial.PartnerPermissions, opts...)
canonicalDesired.WorkloadOptions = canonicalizeWorkloadWorkloadOptions(rawDesired.WorkloadOptions, rawInitial.WorkloadOptions, opts...)
if dcl.BoolCanonicalize(rawDesired.ViolationNotificationsEnabled, rawInitial.ViolationNotificationsEnabled) {
canonicalDesired.ViolationNotificationsEnabled = rawInitial.ViolationNotificationsEnabled
} else {
canonicalDesired.ViolationNotificationsEnabled = rawDesired.ViolationNotificationsEnabled
}
if dcl.NameToSelfLink(rawDesired.Organization, rawInitial.Organization) {
canonicalDesired.Organization = rawInitial.Organization
} else {
canonicalDesired.Organization = rawDesired.Organization
}
if dcl.NameToSelfLink(rawDesired.Location, rawInitial.Location) {
canonicalDesired.Location = rawInitial.Location
} else {
canonicalDesired.Location = rawDesired.Location
}
return canonicalDesired, nil
}
func canonicalizeWorkloadNewState(c *Client, rawNew, rawDesired *Workload) (*Workload, error) {
if dcl.IsEmptyValueIndirect(rawNew.Name) && dcl.IsEmptyValueIndirect(rawDesired.Name) {
rawNew.Name = rawDesired.Name
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.DisplayName) && dcl.IsEmptyValueIndirect(rawDesired.DisplayName) {
rawNew.DisplayName = rawDesired.DisplayName
} else {
if dcl.StringCanonicalize(rawDesired.DisplayName, rawNew.DisplayName) {
rawNew.DisplayName = rawDesired.DisplayName
}
}
if dcl.IsEmptyValueIndirect(rawNew.Resources) && dcl.IsEmptyValueIndirect(rawDesired.Resources) {
rawNew.Resources = rawDesired.Resources
} else {
rawNew.Resources = canonicalizeNewWorkloadResourcesSlice(c, rawDesired.Resources, rawNew.Resources)
}
if dcl.IsEmptyValueIndirect(rawNew.ComplianceRegime) && dcl.IsEmptyValueIndirect(rawDesired.ComplianceRegime) {
rawNew.ComplianceRegime = rawDesired.ComplianceRegime
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.CreateTime) && dcl.IsEmptyValueIndirect(rawDesired.CreateTime) {
rawNew.CreateTime = rawDesired.CreateTime
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.BillingAccount) && dcl.IsEmptyValueIndirect(rawDesired.BillingAccount) {
rawNew.BillingAccount = rawDesired.BillingAccount
} else {
rawNew.BillingAccount = rawDesired.BillingAccount
}
if dcl.IsEmptyValueIndirect(rawNew.PartnerServicesBillingAccount) && dcl.IsEmptyValueIndirect(rawDesired.PartnerServicesBillingAccount) {
rawNew.PartnerServicesBillingAccount = rawDesired.PartnerServicesBillingAccount
} else {
rawNew.PartnerServicesBillingAccount = rawDesired.PartnerServicesBillingAccount
}
if dcl.IsEmptyValueIndirect(rawNew.Labels) && dcl.IsEmptyValueIndirect(rawDesired.Labels) {
rawNew.Labels = rawDesired.Labels
} else {
}
rawNew.ProvisionedResourcesParent = rawDesired.ProvisionedResourcesParent
rawNew.KmsSettings = rawDesired.KmsSettings
rawNew.ResourceSettings = rawDesired.ResourceSettings
if dcl.IsEmptyValueIndirect(rawNew.KajEnrollmentState) && dcl.IsEmptyValueIndirect(rawDesired.KajEnrollmentState) {
rawNew.KajEnrollmentState = rawDesired.KajEnrollmentState
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.EnableSovereignControls) && dcl.IsEmptyValueIndirect(rawDesired.EnableSovereignControls) {
rawNew.EnableSovereignControls = rawDesired.EnableSovereignControls
} else {
if dcl.BoolCanonicalize(rawDesired.EnableSovereignControls, rawNew.EnableSovereignControls) {
rawNew.EnableSovereignControls = rawDesired.EnableSovereignControls
}
}
if dcl.IsEmptyValueIndirect(rawNew.SaaEnrollmentResponse) && dcl.IsEmptyValueIndirect(rawDesired.SaaEnrollmentResponse) {
rawNew.SaaEnrollmentResponse = rawDesired.SaaEnrollmentResponse
} else {
rawNew.SaaEnrollmentResponse = canonicalizeNewWorkloadSaaEnrollmentResponse(c, rawDesired.SaaEnrollmentResponse, rawNew.SaaEnrollmentResponse)
}
if dcl.IsEmptyValueIndirect(rawNew.ComplianceStatus) && dcl.IsEmptyValueIndirect(rawDesired.ComplianceStatus) {
rawNew.ComplianceStatus = rawDesired.ComplianceStatus
} else {
rawNew.ComplianceStatus = canonicalizeNewWorkloadComplianceStatus(c, rawDesired.ComplianceStatus, rawNew.ComplianceStatus)
}
if dcl.IsEmptyValueIndirect(rawNew.CompliantButDisallowedServices) && dcl.IsEmptyValueIndirect(rawDesired.CompliantButDisallowedServices) {
rawNew.CompliantButDisallowedServices = rawDesired.CompliantButDisallowedServices
} else {
if dcl.StringArrayCanonicalize(rawDesired.CompliantButDisallowedServices, rawNew.CompliantButDisallowedServices) {
rawNew.CompliantButDisallowedServices = rawDesired.CompliantButDisallowedServices
}
}
if dcl.IsEmptyValueIndirect(rawNew.Partner) && dcl.IsEmptyValueIndirect(rawDesired.Partner) {
rawNew.Partner = rawDesired.Partner
} else {
}
if dcl.IsEmptyValueIndirect(rawNew.PartnerPermissions) && dcl.IsEmptyValueIndirect(rawDesired.PartnerPermissions) {
rawNew.PartnerPermissions = rawDesired.PartnerPermissions
} else {
rawNew.PartnerPermissions = canonicalizeNewWorkloadPartnerPermissions(c, rawDesired.PartnerPermissions, rawNew.PartnerPermissions)
}
rawNew.WorkloadOptions = rawDesired.WorkloadOptions
if dcl.IsEmptyValueIndirect(rawNew.EkmProvisioningResponse) && dcl.IsEmptyValueIndirect(rawDesired.EkmProvisioningResponse) {
rawNew.EkmProvisioningResponse = rawDesired.EkmProvisioningResponse
} else {
rawNew.EkmProvisioningResponse = canonicalizeNewWorkloadEkmProvisioningResponse(c, rawDesired.EkmProvisioningResponse, rawNew.EkmProvisioningResponse)
}
if dcl.IsEmptyValueIndirect(rawNew.ViolationNotificationsEnabled) && dcl.IsEmptyValueIndirect(rawDesired.ViolationNotificationsEnabled) {
rawNew.ViolationNotificationsEnabled = rawDesired.ViolationNotificationsEnabled
} else {
if dcl.BoolCanonicalize(rawDesired.ViolationNotificationsEnabled, rawNew.ViolationNotificationsEnabled) {
rawNew.ViolationNotificationsEnabled = rawDesired.ViolationNotificationsEnabled
}
}
rawNew.Organization = rawDesired.Organization
rawNew.Location = rawDesired.Location
return rawNew, nil
}
func canonicalizeWorkloadResources(des, initial *WorkloadResources, opts ...dcl.ApplyOption) *WorkloadResources {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadResources{}
if dcl.IsZeroValue(des.ResourceId) || (dcl.IsEmptyValueIndirect(des.ResourceId) && dcl.IsEmptyValueIndirect(initial.ResourceId)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.ResourceId = initial.ResourceId
} else {
cDes.ResourceId = des.ResourceId
}
if dcl.IsZeroValue(des.ResourceType) || (dcl.IsEmptyValueIndirect(des.ResourceType) && dcl.IsEmptyValueIndirect(initial.ResourceType)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.ResourceType = initial.ResourceType
} else {
cDes.ResourceType = des.ResourceType
}
return cDes
}
func canonicalizeWorkloadResourcesSlice(des, initial []WorkloadResources, opts ...dcl.ApplyOption) []WorkloadResources {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadResources, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadResources(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadResources, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadResources(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadResources(c *Client, des, nw *WorkloadResources) *WorkloadResources {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadResources while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
return nw
}
func canonicalizeNewWorkloadResourcesSet(c *Client, des, nw []WorkloadResources) []WorkloadResources {
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 []WorkloadResources
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadResourcesNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadResources(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 canonicalizeNewWorkloadResourcesSlice(c *Client, des, nw []WorkloadResources) []WorkloadResources {
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 []WorkloadResources
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadResources(c, &d, &n))
}
return items
}
func canonicalizeWorkloadKmsSettings(des, initial *WorkloadKmsSettings, opts ...dcl.ApplyOption) *WorkloadKmsSettings {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadKmsSettings{}
if dcl.IsZeroValue(des.NextRotationTime) || (dcl.IsEmptyValueIndirect(des.NextRotationTime) && dcl.IsEmptyValueIndirect(initial.NextRotationTime)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.NextRotationTime = initial.NextRotationTime
} else {
cDes.NextRotationTime = des.NextRotationTime
}
if dcl.StringCanonicalize(des.RotationPeriod, initial.RotationPeriod) || dcl.IsZeroValue(des.RotationPeriod) {
cDes.RotationPeriod = initial.RotationPeriod
} else {
cDes.RotationPeriod = des.RotationPeriod
}
return cDes
}
func canonicalizeWorkloadKmsSettingsSlice(des, initial []WorkloadKmsSettings, opts ...dcl.ApplyOption) []WorkloadKmsSettings {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadKmsSettings, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadKmsSettings(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadKmsSettings, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadKmsSettings(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadKmsSettings(c *Client, des, nw *WorkloadKmsSettings) *WorkloadKmsSettings {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadKmsSettings while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.StringCanonicalize(des.RotationPeriod, nw.RotationPeriod) {
nw.RotationPeriod = des.RotationPeriod
}
return nw
}
func canonicalizeNewWorkloadKmsSettingsSet(c *Client, des, nw []WorkloadKmsSettings) []WorkloadKmsSettings {
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 []WorkloadKmsSettings
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadKmsSettingsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadKmsSettings(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 canonicalizeNewWorkloadKmsSettingsSlice(c *Client, des, nw []WorkloadKmsSettings) []WorkloadKmsSettings {
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 []WorkloadKmsSettings
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadKmsSettings(c, &d, &n))
}
return items
}
func canonicalizeWorkloadResourceSettings(des, initial *WorkloadResourceSettings, opts ...dcl.ApplyOption) *WorkloadResourceSettings {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadResourceSettings{}
if dcl.StringCanonicalize(des.ResourceId, initial.ResourceId) || dcl.IsZeroValue(des.ResourceId) {
cDes.ResourceId = initial.ResourceId
} else {
cDes.ResourceId = des.ResourceId
}
if dcl.IsZeroValue(des.ResourceType) || (dcl.IsEmptyValueIndirect(des.ResourceType) && dcl.IsEmptyValueIndirect(initial.ResourceType)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.ResourceType = initial.ResourceType
} else {
cDes.ResourceType = des.ResourceType
}
if dcl.StringCanonicalize(des.DisplayName, initial.DisplayName) || dcl.IsZeroValue(des.DisplayName) {
cDes.DisplayName = initial.DisplayName
} else {
cDes.DisplayName = des.DisplayName
}
return cDes
}
func canonicalizeWorkloadResourceSettingsSlice(des, initial []WorkloadResourceSettings, opts ...dcl.ApplyOption) []WorkloadResourceSettings {
if des == nil {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadResourceSettings, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadResourceSettings(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadResourceSettings, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadResourceSettings(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadResourceSettings(c *Client, des, nw *WorkloadResourceSettings) *WorkloadResourceSettings {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadResourceSettings while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.StringCanonicalize(des.ResourceId, nw.ResourceId) {
nw.ResourceId = des.ResourceId
}
if dcl.StringCanonicalize(des.DisplayName, nw.DisplayName) {
nw.DisplayName = des.DisplayName
}
return nw
}
func canonicalizeNewWorkloadResourceSettingsSet(c *Client, des, nw []WorkloadResourceSettings) []WorkloadResourceSettings {
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 []WorkloadResourceSettings
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadResourceSettingsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadResourceSettings(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 canonicalizeNewWorkloadResourceSettingsSlice(c *Client, des, nw []WorkloadResourceSettings) []WorkloadResourceSettings {
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 []WorkloadResourceSettings
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadResourceSettings(c, &d, &n))
}
return items
}
func canonicalizeWorkloadSaaEnrollmentResponse(des, initial *WorkloadSaaEnrollmentResponse, opts ...dcl.ApplyOption) *WorkloadSaaEnrollmentResponse {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadSaaEnrollmentResponse{}
if dcl.IsZeroValue(des.SetupErrors) || (dcl.IsEmptyValueIndirect(des.SetupErrors) && dcl.IsEmptyValueIndirect(initial.SetupErrors)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.SetupErrors = initial.SetupErrors
} else {
cDes.SetupErrors = des.SetupErrors
}
if dcl.IsZeroValue(des.SetupStatus) || (dcl.IsEmptyValueIndirect(des.SetupStatus) && dcl.IsEmptyValueIndirect(initial.SetupStatus)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.SetupStatus = initial.SetupStatus
} else {
cDes.SetupStatus = des.SetupStatus
}
return cDes
}
func canonicalizeWorkloadSaaEnrollmentResponseSlice(des, initial []WorkloadSaaEnrollmentResponse, opts ...dcl.ApplyOption) []WorkloadSaaEnrollmentResponse {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadSaaEnrollmentResponse, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadSaaEnrollmentResponse(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadSaaEnrollmentResponse, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadSaaEnrollmentResponse(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadSaaEnrollmentResponse(c *Client, des, nw *WorkloadSaaEnrollmentResponse) *WorkloadSaaEnrollmentResponse {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadSaaEnrollmentResponse while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
return nw
}
func canonicalizeNewWorkloadSaaEnrollmentResponseSet(c *Client, des, nw []WorkloadSaaEnrollmentResponse) []WorkloadSaaEnrollmentResponse {
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 []WorkloadSaaEnrollmentResponse
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadSaaEnrollmentResponseNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadSaaEnrollmentResponse(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 canonicalizeNewWorkloadSaaEnrollmentResponseSlice(c *Client, des, nw []WorkloadSaaEnrollmentResponse) []WorkloadSaaEnrollmentResponse {
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 []WorkloadSaaEnrollmentResponse
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadSaaEnrollmentResponse(c, &d, &n))
}
return items
}
func canonicalizeWorkloadComplianceStatus(des, initial *WorkloadComplianceStatus, opts ...dcl.ApplyOption) *WorkloadComplianceStatus {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadComplianceStatus{}
if dcl.IsZeroValue(des.ActiveViolationCount) || (dcl.IsEmptyValueIndirect(des.ActiveViolationCount) && dcl.IsEmptyValueIndirect(initial.ActiveViolationCount)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.ActiveViolationCount = initial.ActiveViolationCount
} else {
cDes.ActiveViolationCount = des.ActiveViolationCount
}
if dcl.IsZeroValue(des.AcknowledgedViolationCount) || (dcl.IsEmptyValueIndirect(des.AcknowledgedViolationCount) && dcl.IsEmptyValueIndirect(initial.AcknowledgedViolationCount)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.AcknowledgedViolationCount = initial.AcknowledgedViolationCount
} else {
cDes.AcknowledgedViolationCount = des.AcknowledgedViolationCount
}
return cDes
}
func canonicalizeWorkloadComplianceStatusSlice(des, initial []WorkloadComplianceStatus, opts ...dcl.ApplyOption) []WorkloadComplianceStatus {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadComplianceStatus, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadComplianceStatus(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadComplianceStatus, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadComplianceStatus(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadComplianceStatus(c *Client, des, nw *WorkloadComplianceStatus) *WorkloadComplianceStatus {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadComplianceStatus while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
return nw
}
func canonicalizeNewWorkloadComplianceStatusSet(c *Client, des, nw []WorkloadComplianceStatus) []WorkloadComplianceStatus {
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 []WorkloadComplianceStatus
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadComplianceStatusNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadComplianceStatus(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 canonicalizeNewWorkloadComplianceStatusSlice(c *Client, des, nw []WorkloadComplianceStatus) []WorkloadComplianceStatus {
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 []WorkloadComplianceStatus
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadComplianceStatus(c, &d, &n))
}
return items
}
func canonicalizeWorkloadPartnerPermissions(des, initial *WorkloadPartnerPermissions, opts ...dcl.ApplyOption) *WorkloadPartnerPermissions {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadPartnerPermissions{}
if dcl.BoolCanonicalize(des.DataLogsViewer, initial.DataLogsViewer) || dcl.IsZeroValue(des.DataLogsViewer) {
cDes.DataLogsViewer = initial.DataLogsViewer
} else {
cDes.DataLogsViewer = des.DataLogsViewer
}
if dcl.BoolCanonicalize(des.ServiceAccessApprover, initial.ServiceAccessApprover) || dcl.IsZeroValue(des.ServiceAccessApprover) {
cDes.ServiceAccessApprover = initial.ServiceAccessApprover
} else {
cDes.ServiceAccessApprover = des.ServiceAccessApprover
}
if dcl.BoolCanonicalize(des.AssuredWorkloadsMonitoring, initial.AssuredWorkloadsMonitoring) || dcl.IsZeroValue(des.AssuredWorkloadsMonitoring) {
cDes.AssuredWorkloadsMonitoring = initial.AssuredWorkloadsMonitoring
} else {
cDes.AssuredWorkloadsMonitoring = des.AssuredWorkloadsMonitoring
}
return cDes
}
func canonicalizeWorkloadPartnerPermissionsSlice(des, initial []WorkloadPartnerPermissions, opts ...dcl.ApplyOption) []WorkloadPartnerPermissions {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadPartnerPermissions, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadPartnerPermissions(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadPartnerPermissions, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadPartnerPermissions(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadPartnerPermissions(c *Client, des, nw *WorkloadPartnerPermissions) *WorkloadPartnerPermissions {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadPartnerPermissions while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
if dcl.BoolCanonicalize(des.DataLogsViewer, nw.DataLogsViewer) {
nw.DataLogsViewer = des.DataLogsViewer
}
if dcl.BoolCanonicalize(des.ServiceAccessApprover, nw.ServiceAccessApprover) {
nw.ServiceAccessApprover = des.ServiceAccessApprover
}
if dcl.BoolCanonicalize(des.AssuredWorkloadsMonitoring, nw.AssuredWorkloadsMonitoring) {
nw.AssuredWorkloadsMonitoring = des.AssuredWorkloadsMonitoring
}
return nw
}
func canonicalizeNewWorkloadPartnerPermissionsSet(c *Client, des, nw []WorkloadPartnerPermissions) []WorkloadPartnerPermissions {
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 []WorkloadPartnerPermissions
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadPartnerPermissionsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadPartnerPermissions(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 canonicalizeNewWorkloadPartnerPermissionsSlice(c *Client, des, nw []WorkloadPartnerPermissions) []WorkloadPartnerPermissions {
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 []WorkloadPartnerPermissions
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadPartnerPermissions(c, &d, &n))
}
return items
}
func canonicalizeWorkloadWorkloadOptions(des, initial *WorkloadWorkloadOptions, opts ...dcl.ApplyOption) *WorkloadWorkloadOptions {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadWorkloadOptions{}
if dcl.IsZeroValue(des.KajEnrollmentType) || (dcl.IsEmptyValueIndirect(des.KajEnrollmentType) && dcl.IsEmptyValueIndirect(initial.KajEnrollmentType)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.KajEnrollmentType = initial.KajEnrollmentType
} else {
cDes.KajEnrollmentType = des.KajEnrollmentType
}
return cDes
}
func canonicalizeWorkloadWorkloadOptionsSlice(des, initial []WorkloadWorkloadOptions, opts ...dcl.ApplyOption) []WorkloadWorkloadOptions {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadWorkloadOptions, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadWorkloadOptions(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadWorkloadOptions, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadWorkloadOptions(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadWorkloadOptions(c *Client, des, nw *WorkloadWorkloadOptions) *WorkloadWorkloadOptions {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadWorkloadOptions while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
return nw
}
func canonicalizeNewWorkloadWorkloadOptionsSet(c *Client, des, nw []WorkloadWorkloadOptions) []WorkloadWorkloadOptions {
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 []WorkloadWorkloadOptions
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadWorkloadOptionsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadWorkloadOptions(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 canonicalizeNewWorkloadWorkloadOptionsSlice(c *Client, des, nw []WorkloadWorkloadOptions) []WorkloadWorkloadOptions {
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 []WorkloadWorkloadOptions
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadWorkloadOptions(c, &d, &n))
}
return items
}
func canonicalizeWorkloadEkmProvisioningResponse(des, initial *WorkloadEkmProvisioningResponse, opts ...dcl.ApplyOption) *WorkloadEkmProvisioningResponse {
if des == nil {
return initial
}
if des.empty {
return des
}
if initial == nil {
return des
}
cDes := &WorkloadEkmProvisioningResponse{}
if dcl.IsZeroValue(des.EkmProvisioningState) || (dcl.IsEmptyValueIndirect(des.EkmProvisioningState) && dcl.IsEmptyValueIndirect(initial.EkmProvisioningState)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.EkmProvisioningState = initial.EkmProvisioningState
} else {
cDes.EkmProvisioningState = des.EkmProvisioningState
}
if dcl.IsZeroValue(des.EkmProvisioningErrorDomain) || (dcl.IsEmptyValueIndirect(des.EkmProvisioningErrorDomain) && dcl.IsEmptyValueIndirect(initial.EkmProvisioningErrorDomain)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.EkmProvisioningErrorDomain = initial.EkmProvisioningErrorDomain
} else {
cDes.EkmProvisioningErrorDomain = des.EkmProvisioningErrorDomain
}
if dcl.IsZeroValue(des.EkmProvisioningErrorMapping) || (dcl.IsEmptyValueIndirect(des.EkmProvisioningErrorMapping) && dcl.IsEmptyValueIndirect(initial.EkmProvisioningErrorMapping)) {
// Desired and initial values are equivalent, so set canonical desired value to initial value.
cDes.EkmProvisioningErrorMapping = initial.EkmProvisioningErrorMapping
} else {
cDes.EkmProvisioningErrorMapping = des.EkmProvisioningErrorMapping
}
return cDes
}
func canonicalizeWorkloadEkmProvisioningResponseSlice(des, initial []WorkloadEkmProvisioningResponse, opts ...dcl.ApplyOption) []WorkloadEkmProvisioningResponse {
if dcl.IsEmptyValueIndirect(des) {
return initial
}
if len(des) != len(initial) {
items := make([]WorkloadEkmProvisioningResponse, 0, len(des))
for _, d := range des {
cd := canonicalizeWorkloadEkmProvisioningResponse(&d, nil, opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
items := make([]WorkloadEkmProvisioningResponse, 0, len(des))
for i, d := range des {
cd := canonicalizeWorkloadEkmProvisioningResponse(&d, &initial[i], opts...)
if cd != nil {
items = append(items, *cd)
}
}
return items
}
func canonicalizeNewWorkloadEkmProvisioningResponse(c *Client, des, nw *WorkloadEkmProvisioningResponse) *WorkloadEkmProvisioningResponse {
if des == nil {
return nw
}
if nw == nil {
if dcl.IsEmptyValueIndirect(des) {
c.Config.Logger.Info("Found explicitly empty value for WorkloadEkmProvisioningResponse while comparing non-nil desired to nil actual. Returning desired object.")
return des
}
return nil
}
return nw
}
func canonicalizeNewWorkloadEkmProvisioningResponseSet(c *Client, des, nw []WorkloadEkmProvisioningResponse) []WorkloadEkmProvisioningResponse {
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 []WorkloadEkmProvisioningResponse
for _, d := range des {
matchedIndex := -1
for i, n := range nw {
if diffs, _ := compareWorkloadEkmProvisioningResponseNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 {
matchedIndex = i
break
}
}
if matchedIndex != -1 {
items = append(items, *canonicalizeNewWorkloadEkmProvisioningResponse(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 canonicalizeNewWorkloadEkmProvisioningResponseSlice(c *Client, des, nw []WorkloadEkmProvisioningResponse) []WorkloadEkmProvisioningResponse {
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 []WorkloadEkmProvisioningResponse
for i, d := range des {
n := nw[i]
items = append(items, *canonicalizeNewWorkloadEkmProvisioningResponse(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 diffWorkload(c *Client, desired, actual *Workload, 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.Name, actual.Name, dcl.DiffInfo{Type: "ReferenceType", 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.DisplayName, actual.DisplayName, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateWorkloadUpdateWorkloadOperation")}, fn.AddNest("DisplayName")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Resources, actual.Resources, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareWorkloadResourcesNewStyle, EmptyObject: EmptyWorkloadResources, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Resources")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.ComplianceRegime, actual.ComplianceRegime, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ComplianceRegime")); 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.BillingAccount, actual.BillingAccount, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("BillingAccount")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.PartnerServicesBillingAccount, actual.PartnerServicesBillingAccount, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("PartnerServicesBillingAccount")); 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("updateWorkloadUpdateWorkloadOperation")}, fn.AddNest("Labels")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.ProvisionedResourcesParent, actual.ProvisionedResourcesParent, dcl.DiffInfo{Ignore: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ProvisionedResourcesParent")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.KmsSettings, actual.KmsSettings, dcl.DiffInfo{Ignore: true, ObjectFunction: compareWorkloadKmsSettingsNewStyle, EmptyObject: EmptyWorkloadKmsSettings, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("KmsSettings")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.ResourceSettings, actual.ResourceSettings, dcl.DiffInfo{Ignore: true, ObjectFunction: compareWorkloadResourceSettingsNewStyle, EmptyObject: EmptyWorkloadResourceSettings, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ResourceSettings")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.KajEnrollmentState, actual.KajEnrollmentState, dcl.DiffInfo{OutputOnly: true, Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("KajEnrollmentState")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.EnableSovereignControls, actual.EnableSovereignControls, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("EnableSovereignControls")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.SaaEnrollmentResponse, actual.SaaEnrollmentResponse, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareWorkloadSaaEnrollmentResponseNewStyle, EmptyObject: EmptyWorkloadSaaEnrollmentResponse, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("SaaEnrollmentResponse")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.ComplianceStatus, actual.ComplianceStatus, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareWorkloadComplianceStatusNewStyle, EmptyObject: EmptyWorkloadComplianceStatus, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ComplianceStatus")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.CompliantButDisallowedServices, actual.CompliantButDisallowedServices, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("CompliantButDisallowedServices")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Partner, actual.Partner, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Partner")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.PartnerPermissions, actual.PartnerPermissions, dcl.DiffInfo{ObjectFunction: compareWorkloadPartnerPermissionsNewStyle, EmptyObject: EmptyWorkloadPartnerPermissions, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("PartnerPermissions")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.WorkloadOptions, actual.WorkloadOptions, dcl.DiffInfo{Ignore: true, ObjectFunction: compareWorkloadWorkloadOptionsNewStyle, EmptyObject: EmptyWorkloadWorkloadOptions, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("WorkloadOptions")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.EkmProvisioningResponse, actual.EkmProvisioningResponse, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareWorkloadEkmProvisioningResponseNewStyle, EmptyObject: EmptyWorkloadEkmProvisioningResponse, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("EkmProvisioningResponse")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.ViolationNotificationsEnabled, actual.ViolationNotificationsEnabled, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ViolationNotificationsEnabled")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
newDiffs = append(newDiffs, ds...)
}
if ds, err := dcl.Diff(desired.Organization, actual.Organization, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Organization")); 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 compareWorkloadResourcesNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadResources)
if !ok {
desiredNotPointer, ok := d.(WorkloadResources)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadResources or *WorkloadResources", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadResources)
if !ok {
actualNotPointer, ok := a.(WorkloadResources)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadResources", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.ResourceId, actual.ResourceId, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ResourceId")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.ResourceType, actual.ResourceType, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ResourceType")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareWorkloadKmsSettingsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadKmsSettings)
if !ok {
desiredNotPointer, ok := d.(WorkloadKmsSettings)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadKmsSettings or *WorkloadKmsSettings", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadKmsSettings)
if !ok {
actualNotPointer, ok := a.(WorkloadKmsSettings)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadKmsSettings", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.NextRotationTime, actual.NextRotationTime, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("NextRotationTime")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.RotationPeriod, actual.RotationPeriod, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("RotationPeriod")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareWorkloadResourceSettingsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadResourceSettings)
if !ok {
desiredNotPointer, ok := d.(WorkloadResourceSettings)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadResourceSettings or *WorkloadResourceSettings", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadResourceSettings)
if !ok {
actualNotPointer, ok := a.(WorkloadResourceSettings)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadResourceSettings", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.ResourceId, actual.ResourceId, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ResourceId")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.ResourceType, actual.ResourceType, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ResourceType")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.DisplayName, actual.DisplayName, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("DisplayName")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareWorkloadSaaEnrollmentResponseNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadSaaEnrollmentResponse)
if !ok {
desiredNotPointer, ok := d.(WorkloadSaaEnrollmentResponse)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadSaaEnrollmentResponse or *WorkloadSaaEnrollmentResponse", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadSaaEnrollmentResponse)
if !ok {
actualNotPointer, ok := a.(WorkloadSaaEnrollmentResponse)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadSaaEnrollmentResponse", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.SetupErrors, actual.SetupErrors, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("SetupErrors")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.SetupStatus, actual.SetupStatus, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("SetupStatus")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareWorkloadComplianceStatusNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadComplianceStatus)
if !ok {
desiredNotPointer, ok := d.(WorkloadComplianceStatus)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadComplianceStatus or *WorkloadComplianceStatus", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadComplianceStatus)
if !ok {
actualNotPointer, ok := a.(WorkloadComplianceStatus)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadComplianceStatus", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.ActiveViolationCount, actual.ActiveViolationCount, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ActiveViolationCount")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.AcknowledgedViolationCount, actual.AcknowledgedViolationCount, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("AcknowledgedViolationCount")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareWorkloadPartnerPermissionsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadPartnerPermissions)
if !ok {
desiredNotPointer, ok := d.(WorkloadPartnerPermissions)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadPartnerPermissions or *WorkloadPartnerPermissions", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadPartnerPermissions)
if !ok {
actualNotPointer, ok := a.(WorkloadPartnerPermissions)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadPartnerPermissions", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.DataLogsViewer, actual.DataLogsViewer, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("DataLogsViewer")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.ServiceAccessApprover, actual.ServiceAccessApprover, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ServiceAccessApprover")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.AssuredWorkloadsMonitoring, actual.AssuredWorkloadsMonitoring, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("AssuredWorkloadsMonitoring")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareWorkloadWorkloadOptionsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadWorkloadOptions)
if !ok {
desiredNotPointer, ok := d.(WorkloadWorkloadOptions)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadWorkloadOptions or *WorkloadWorkloadOptions", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadWorkloadOptions)
if !ok {
actualNotPointer, ok := a.(WorkloadWorkloadOptions)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadWorkloadOptions", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.KajEnrollmentType, actual.KajEnrollmentType, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("KajEnrollmentType")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
return diffs, nil
}
func compareWorkloadEkmProvisioningResponseNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) {
var diffs []*dcl.FieldDiff
desired, ok := d.(*WorkloadEkmProvisioningResponse)
if !ok {
desiredNotPointer, ok := d.(WorkloadEkmProvisioningResponse)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadEkmProvisioningResponse or *WorkloadEkmProvisioningResponse", d)
}
desired = &desiredNotPointer
}
actual, ok := a.(*WorkloadEkmProvisioningResponse)
if !ok {
actualNotPointer, ok := a.(WorkloadEkmProvisioningResponse)
if !ok {
return nil, fmt.Errorf("obj %v is not a WorkloadEkmProvisioningResponse", a)
}
actual = &actualNotPointer
}
if ds, err := dcl.Diff(desired.EkmProvisioningState, actual.EkmProvisioningState, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("EkmProvisioningState")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.EkmProvisioningErrorDomain, actual.EkmProvisioningErrorDomain, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("EkmProvisioningErrorDomain")); len(ds) != 0 || err != nil {
if err != nil {
return nil, err
}
diffs = append(diffs, ds...)
}
if ds, err := dcl.Diff(desired.EkmProvisioningErrorMapping, actual.EkmProvisioningErrorMapping, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("EkmProvisioningErrorMapping")); 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 *Workload) urlNormalized() *Workload {
normalized := dcl.Copy(*r).(Workload)
normalized.Name = dcl.SelfLinkToName(r.Name)
normalized.DisplayName = dcl.SelfLinkToName(r.DisplayName)
normalized.BillingAccount = dcl.SelfLinkToName(r.BillingAccount)
normalized.PartnerServicesBillingAccount = dcl.SelfLinkToName(r.PartnerServicesBillingAccount)
normalized.ProvisionedResourcesParent = dcl.SelfLinkToName(r.ProvisionedResourcesParent)
normalized.Organization = dcl.SelfLinkToName(r.Organization)
normalized.Location = dcl.SelfLinkToName(r.Location)
return &normalized
}
func (r *Workload) updateURL(userBasePath, updateName string) (string, error) {
nr := r.urlNormalized()
if updateName == "UpdateWorkload" {
fields := map[string]interface{}{
"organization": dcl.ValueOrEmptyString(nr.Organization),
"location": dcl.ValueOrEmptyString(nr.Location),
"name": dcl.ValueOrEmptyString(nr.Name),
}
return dcl.URL("organizations/{{organization}}/locations/{{location}}/workloads/{{name}}", nr.basePath(), userBasePath, fields), nil
}
return "", fmt.Errorf("unknown update name: %s", updateName)
}
// marshal encodes the Workload resource into JSON for a Create request, and
// performs transformations from the resource schema to the API schema if
// necessary.
func (r *Workload) marshal(c *Client) ([]byte, error) {
m, err := expandWorkload(c, r)
if err != nil {
return nil, fmt.Errorf("error marshalling Workload: %w", err)
}
return json.Marshal(m)
}
// unmarshalWorkload decodes JSON responses into the Workload resource schema.
func unmarshalWorkload(b []byte, c *Client, res *Workload) (*Workload, error) {
var m map[string]interface{}
if err := json.Unmarshal(b, &m); err != nil {
return nil, err
}
return unmarshalMapWorkload(m, c, res)
}
func unmarshalMapWorkload(m map[string]interface{}, c *Client, res *Workload) (*Workload, error) {
flattened := flattenWorkload(c, m, res)
if flattened == nil {
return nil, fmt.Errorf("attempted to flatten empty json object")
}
return flattened, nil
}
// expandWorkload expands Workload into a JSON request object.
func expandWorkload(c *Client, f *Workload) (map[string]interface{}, error) {
m := make(map[string]interface{})
res := f
_ = res
if v, err := dcl.DeriveField("organizations/%s/locations/%s/workloads/%s", f.Name, dcl.SelfLinkToName(f.Organization), 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.DisplayName; dcl.ValueShouldBeSent(v) {
m["displayName"] = v
}
if v := f.ComplianceRegime; dcl.ValueShouldBeSent(v) {
m["complianceRegime"] = v
}
if v := f.BillingAccount; dcl.ValueShouldBeSent(v) {
m["billingAccount"] = v
}
if v := f.PartnerServicesBillingAccount; dcl.ValueShouldBeSent(v) {
m["partnerServicesBillingAccount"] = v
}
if v := f.Labels; dcl.ValueShouldBeSent(v) {
m["labels"] = v
}
if v := f.ProvisionedResourcesParent; dcl.ValueShouldBeSent(v) {
m["provisionedResourcesParent"] = v
}
if v, err := expandWorkloadKmsSettings(c, f.KmsSettings, res); err != nil {
return nil, fmt.Errorf("error expanding KmsSettings into kmsSettings: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["kmsSettings"] = v
}
if v, err := expandWorkloadResourceSettingsSlice(c, f.ResourceSettings, res); err != nil {
return nil, fmt.Errorf("error expanding ResourceSettings into resourceSettings: %w", err)
} else if v != nil {
m["resourceSettings"] = v
}
if v := f.EnableSovereignControls; dcl.ValueShouldBeSent(v) {
m["enableSovereignControls"] = v
}
if v := f.Partner; dcl.ValueShouldBeSent(v) {
m["partner"] = v
}
if v, err := expandWorkloadPartnerPermissions(c, f.PartnerPermissions, res); err != nil {
return nil, fmt.Errorf("error expanding PartnerPermissions into partnerPermissions: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["partnerPermissions"] = v
}
if v, err := expandWorkloadWorkloadOptions(c, f.WorkloadOptions, res); err != nil {
return nil, fmt.Errorf("error expanding WorkloadOptions into workloadOptions: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["workloadOptions"] = v
}
if v := f.ViolationNotificationsEnabled; dcl.ValueShouldBeSent(v) {
m["violationNotificationsEnabled"] = v
}
if v, err := dcl.EmptyValue(); err != nil {
return nil, fmt.Errorf("error expanding Organization into organization: %w", err)
} else if !dcl.IsEmptyValueIndirect(v) {
m["organization"] = 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
}
// flattenWorkload flattens Workload from a JSON request object into the
// Workload type.
func flattenWorkload(c *Client, i interface{}, res *Workload) *Workload {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
if len(m) == 0 {
return nil
}
resultRes := &Workload{}
resultRes.Name = dcl.SelfLinkToName(dcl.FlattenString(m["name"]))
resultRes.DisplayName = dcl.FlattenString(m["displayName"])
resultRes.Resources = flattenWorkloadResourcesSlice(c, m["resources"], res)
resultRes.ComplianceRegime = flattenWorkloadComplianceRegimeEnum(m["complianceRegime"])
resultRes.CreateTime = dcl.FlattenString(m["createTime"])
resultRes.BillingAccount = dcl.FlattenString(m["billingAccount"])
resultRes.PartnerServicesBillingAccount = dcl.FlattenString(m["partnerServicesBillingAccount"])
resultRes.Labels = dcl.FlattenKeyValuePairs(m["labels"])
resultRes.ProvisionedResourcesParent = dcl.FlattenSecretValue(m["provisionedResourcesParent"])
resultRes.KmsSettings = flattenWorkloadKmsSettings(c, m["kmsSettings"], res)
resultRes.ResourceSettings = flattenWorkloadResourceSettingsSlice(c, m["resourceSettings"], res)
resultRes.KajEnrollmentState = flattenWorkloadKajEnrollmentStateEnum(m["kajEnrollmentState"])
resultRes.EnableSovereignControls = dcl.FlattenBool(m["enableSovereignControls"])
resultRes.SaaEnrollmentResponse = flattenWorkloadSaaEnrollmentResponse(c, m["saaEnrollmentResponse"], res)
resultRes.ComplianceStatus = flattenWorkloadComplianceStatus(c, m["complianceStatus"], res)
resultRes.CompliantButDisallowedServices = dcl.FlattenStringSlice(m["compliantButDisallowedServices"])
resultRes.Partner = flattenWorkloadPartnerEnum(m["partner"])
resultRes.PartnerPermissions = flattenWorkloadPartnerPermissions(c, m["partnerPermissions"], res)
resultRes.WorkloadOptions = flattenWorkloadWorkloadOptions(c, m["workloadOptions"], res)
resultRes.EkmProvisioningResponse = flattenWorkloadEkmProvisioningResponse(c, m["ekmProvisioningResponse"], res)
resultRes.ViolationNotificationsEnabled = dcl.FlattenBool(m["violationNotificationsEnabled"])
resultRes.Organization = dcl.FlattenString(m["organization"])
resultRes.Location = dcl.FlattenString(m["location"])
return resultRes
}
// expandWorkloadResourcesMap expands the contents of WorkloadResources into a JSON
// request object.
func expandWorkloadResourcesMap(c *Client, f map[string]WorkloadResources, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadResources(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadResourcesSlice expands the contents of WorkloadResources into a JSON
// request object.
func expandWorkloadResourcesSlice(c *Client, f []WorkloadResources, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadResources(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadResourcesMap flattens the contents of WorkloadResources from a JSON
// response object.
func flattenWorkloadResourcesMap(c *Client, i interface{}, res *Workload) map[string]WorkloadResources {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadResources{}
}
if len(a) == 0 {
return map[string]WorkloadResources{}
}
items := make(map[string]WorkloadResources)
for k, item := range a {
items[k] = *flattenWorkloadResources(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadResourcesSlice flattens the contents of WorkloadResources from a JSON
// response object.
func flattenWorkloadResourcesSlice(c *Client, i interface{}, res *Workload) []WorkloadResources {
a, ok := i.([]interface{})
if !ok {
return []WorkloadResources{}
}
if len(a) == 0 {
return []WorkloadResources{}
}
items := make([]WorkloadResources, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadResources(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadResources expands an instance of WorkloadResources into a JSON
// request object.
func expandWorkloadResources(c *Client, f *WorkloadResources, res *Workload) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.ResourceId; !dcl.IsEmptyValueIndirect(v) {
m["resourceId"] = v
}
if v := f.ResourceType; !dcl.IsEmptyValueIndirect(v) {
m["resourceType"] = v
}
return m, nil
}
// flattenWorkloadResources flattens an instance of WorkloadResources from a JSON
// response object.
func flattenWorkloadResources(c *Client, i interface{}, res *Workload) *WorkloadResources {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadResources{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadResources
}
r.ResourceId = dcl.FlattenInteger(m["resourceId"])
r.ResourceType = flattenWorkloadResourcesResourceTypeEnum(m["resourceType"])
return r
}
// expandWorkloadKmsSettingsMap expands the contents of WorkloadKmsSettings into a JSON
// request object.
func expandWorkloadKmsSettingsMap(c *Client, f map[string]WorkloadKmsSettings, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadKmsSettings(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadKmsSettingsSlice expands the contents of WorkloadKmsSettings into a JSON
// request object.
func expandWorkloadKmsSettingsSlice(c *Client, f []WorkloadKmsSettings, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadKmsSettings(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadKmsSettingsMap flattens the contents of WorkloadKmsSettings from a JSON
// response object.
func flattenWorkloadKmsSettingsMap(c *Client, i interface{}, res *Workload) map[string]WorkloadKmsSettings {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadKmsSettings{}
}
if len(a) == 0 {
return map[string]WorkloadKmsSettings{}
}
items := make(map[string]WorkloadKmsSettings)
for k, item := range a {
items[k] = *flattenWorkloadKmsSettings(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadKmsSettingsSlice flattens the contents of WorkloadKmsSettings from a JSON
// response object.
func flattenWorkloadKmsSettingsSlice(c *Client, i interface{}, res *Workload) []WorkloadKmsSettings {
a, ok := i.([]interface{})
if !ok {
return []WorkloadKmsSettings{}
}
if len(a) == 0 {
return []WorkloadKmsSettings{}
}
items := make([]WorkloadKmsSettings, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadKmsSettings(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadKmsSettings expands an instance of WorkloadKmsSettings into a JSON
// request object.
func expandWorkloadKmsSettings(c *Client, f *WorkloadKmsSettings, res *Workload) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.NextRotationTime; !dcl.IsEmptyValueIndirect(v) {
m["nextRotationTime"] = v
}
if v := f.RotationPeriod; !dcl.IsEmptyValueIndirect(v) {
m["rotationPeriod"] = v
}
return m, nil
}
// flattenWorkloadKmsSettings flattens an instance of WorkloadKmsSettings from a JSON
// response object.
func flattenWorkloadKmsSettings(c *Client, i interface{}, res *Workload) *WorkloadKmsSettings {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadKmsSettings{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadKmsSettings
}
r.NextRotationTime = dcl.FlattenString(m["nextRotationTime"])
r.RotationPeriod = dcl.FlattenString(m["rotationPeriod"])
return r
}
// expandWorkloadResourceSettingsMap expands the contents of WorkloadResourceSettings into a JSON
// request object.
func expandWorkloadResourceSettingsMap(c *Client, f map[string]WorkloadResourceSettings, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadResourceSettings(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadResourceSettingsSlice expands the contents of WorkloadResourceSettings into a JSON
// request object.
func expandWorkloadResourceSettingsSlice(c *Client, f []WorkloadResourceSettings, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadResourceSettings(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadResourceSettingsMap flattens the contents of WorkloadResourceSettings from a JSON
// response object.
func flattenWorkloadResourceSettingsMap(c *Client, i interface{}, res *Workload) map[string]WorkloadResourceSettings {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadResourceSettings{}
}
if len(a) == 0 {
return map[string]WorkloadResourceSettings{}
}
items := make(map[string]WorkloadResourceSettings)
for k, item := range a {
items[k] = *flattenWorkloadResourceSettings(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadResourceSettingsSlice flattens the contents of WorkloadResourceSettings from a JSON
// response object.
func flattenWorkloadResourceSettingsSlice(c *Client, i interface{}, res *Workload) []WorkloadResourceSettings {
a, ok := i.([]interface{})
if !ok {
return []WorkloadResourceSettings{}
}
if len(a) == 0 {
return []WorkloadResourceSettings{}
}
items := make([]WorkloadResourceSettings, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadResourceSettings(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadResourceSettings expands an instance of WorkloadResourceSettings into a JSON
// request object.
func expandWorkloadResourceSettings(c *Client, f *WorkloadResourceSettings, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
m := make(map[string]interface{})
if v := f.ResourceId; !dcl.IsEmptyValueIndirect(v) {
m["resourceId"] = v
}
if v := f.ResourceType; !dcl.IsEmptyValueIndirect(v) {
m["resourceType"] = v
}
if v := f.DisplayName; !dcl.IsEmptyValueIndirect(v) {
m["displayName"] = v
}
return m, nil
}
// flattenWorkloadResourceSettings flattens an instance of WorkloadResourceSettings from a JSON
// response object.
func flattenWorkloadResourceSettings(c *Client, i interface{}, res *Workload) *WorkloadResourceSettings {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadResourceSettings{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadResourceSettings
}
r.ResourceId = dcl.FlattenString(m["resourceId"])
r.ResourceType = flattenWorkloadResourceSettingsResourceTypeEnum(m["resourceType"])
r.DisplayName = dcl.FlattenString(m["displayName"])
return r
}
// expandWorkloadSaaEnrollmentResponseMap expands the contents of WorkloadSaaEnrollmentResponse into a JSON
// request object.
func expandWorkloadSaaEnrollmentResponseMap(c *Client, f map[string]WorkloadSaaEnrollmentResponse, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadSaaEnrollmentResponse(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadSaaEnrollmentResponseSlice expands the contents of WorkloadSaaEnrollmentResponse into a JSON
// request object.
func expandWorkloadSaaEnrollmentResponseSlice(c *Client, f []WorkloadSaaEnrollmentResponse, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadSaaEnrollmentResponse(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadSaaEnrollmentResponseMap flattens the contents of WorkloadSaaEnrollmentResponse from a JSON
// response object.
func flattenWorkloadSaaEnrollmentResponseMap(c *Client, i interface{}, res *Workload) map[string]WorkloadSaaEnrollmentResponse {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadSaaEnrollmentResponse{}
}
if len(a) == 0 {
return map[string]WorkloadSaaEnrollmentResponse{}
}
items := make(map[string]WorkloadSaaEnrollmentResponse)
for k, item := range a {
items[k] = *flattenWorkloadSaaEnrollmentResponse(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadSaaEnrollmentResponseSlice flattens the contents of WorkloadSaaEnrollmentResponse from a JSON
// response object.
func flattenWorkloadSaaEnrollmentResponseSlice(c *Client, i interface{}, res *Workload) []WorkloadSaaEnrollmentResponse {
a, ok := i.([]interface{})
if !ok {
return []WorkloadSaaEnrollmentResponse{}
}
if len(a) == 0 {
return []WorkloadSaaEnrollmentResponse{}
}
items := make([]WorkloadSaaEnrollmentResponse, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadSaaEnrollmentResponse(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadSaaEnrollmentResponse expands an instance of WorkloadSaaEnrollmentResponse into a JSON
// request object.
func expandWorkloadSaaEnrollmentResponse(c *Client, f *WorkloadSaaEnrollmentResponse, res *Workload) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.SetupErrors; v != nil {
m["setupErrors"] = v
}
if v := f.SetupStatus; !dcl.IsEmptyValueIndirect(v) {
m["setupStatus"] = v
}
return m, nil
}
// flattenWorkloadSaaEnrollmentResponse flattens an instance of WorkloadSaaEnrollmentResponse from a JSON
// response object.
func flattenWorkloadSaaEnrollmentResponse(c *Client, i interface{}, res *Workload) *WorkloadSaaEnrollmentResponse {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadSaaEnrollmentResponse{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadSaaEnrollmentResponse
}
r.SetupErrors = flattenWorkloadSaaEnrollmentResponseSetupErrorsEnumSlice(c, m["setupErrors"], res)
r.SetupStatus = flattenWorkloadSaaEnrollmentResponseSetupStatusEnum(m["setupStatus"])
return r
}
// expandWorkloadComplianceStatusMap expands the contents of WorkloadComplianceStatus into a JSON
// request object.
func expandWorkloadComplianceStatusMap(c *Client, f map[string]WorkloadComplianceStatus, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadComplianceStatus(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadComplianceStatusSlice expands the contents of WorkloadComplianceStatus into a JSON
// request object.
func expandWorkloadComplianceStatusSlice(c *Client, f []WorkloadComplianceStatus, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadComplianceStatus(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadComplianceStatusMap flattens the contents of WorkloadComplianceStatus from a JSON
// response object.
func flattenWorkloadComplianceStatusMap(c *Client, i interface{}, res *Workload) map[string]WorkloadComplianceStatus {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadComplianceStatus{}
}
if len(a) == 0 {
return map[string]WorkloadComplianceStatus{}
}
items := make(map[string]WorkloadComplianceStatus)
for k, item := range a {
items[k] = *flattenWorkloadComplianceStatus(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadComplianceStatusSlice flattens the contents of WorkloadComplianceStatus from a JSON
// response object.
func flattenWorkloadComplianceStatusSlice(c *Client, i interface{}, res *Workload) []WorkloadComplianceStatus {
a, ok := i.([]interface{})
if !ok {
return []WorkloadComplianceStatus{}
}
if len(a) == 0 {
return []WorkloadComplianceStatus{}
}
items := make([]WorkloadComplianceStatus, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadComplianceStatus(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadComplianceStatus expands an instance of WorkloadComplianceStatus into a JSON
// request object.
func expandWorkloadComplianceStatus(c *Client, f *WorkloadComplianceStatus, res *Workload) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.ActiveViolationCount; v != nil {
m["activeViolationCount"] = v
}
if v := f.AcknowledgedViolationCount; v != nil {
m["acknowledgedViolationCount"] = v
}
return m, nil
}
// flattenWorkloadComplianceStatus flattens an instance of WorkloadComplianceStatus from a JSON
// response object.
func flattenWorkloadComplianceStatus(c *Client, i interface{}, res *Workload) *WorkloadComplianceStatus {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadComplianceStatus{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadComplianceStatus
}
r.ActiveViolationCount = dcl.FlattenIntSlice(m["activeViolationCount"])
r.AcknowledgedViolationCount = dcl.FlattenIntSlice(m["acknowledgedViolationCount"])
return r
}
// expandWorkloadPartnerPermissionsMap expands the contents of WorkloadPartnerPermissions into a JSON
// request object.
func expandWorkloadPartnerPermissionsMap(c *Client, f map[string]WorkloadPartnerPermissions, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadPartnerPermissions(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadPartnerPermissionsSlice expands the contents of WorkloadPartnerPermissions into a JSON
// request object.
func expandWorkloadPartnerPermissionsSlice(c *Client, f []WorkloadPartnerPermissions, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadPartnerPermissions(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadPartnerPermissionsMap flattens the contents of WorkloadPartnerPermissions from a JSON
// response object.
func flattenWorkloadPartnerPermissionsMap(c *Client, i interface{}, res *Workload) map[string]WorkloadPartnerPermissions {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadPartnerPermissions{}
}
if len(a) == 0 {
return map[string]WorkloadPartnerPermissions{}
}
items := make(map[string]WorkloadPartnerPermissions)
for k, item := range a {
items[k] = *flattenWorkloadPartnerPermissions(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadPartnerPermissionsSlice flattens the contents of WorkloadPartnerPermissions from a JSON
// response object.
func flattenWorkloadPartnerPermissionsSlice(c *Client, i interface{}, res *Workload) []WorkloadPartnerPermissions {
a, ok := i.([]interface{})
if !ok {
return []WorkloadPartnerPermissions{}
}
if len(a) == 0 {
return []WorkloadPartnerPermissions{}
}
items := make([]WorkloadPartnerPermissions, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadPartnerPermissions(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadPartnerPermissions expands an instance of WorkloadPartnerPermissions into a JSON
// request object.
func expandWorkloadPartnerPermissions(c *Client, f *WorkloadPartnerPermissions, res *Workload) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.DataLogsViewer; !dcl.IsEmptyValueIndirect(v) {
m["dataLogsViewer"] = v
}
if v := f.ServiceAccessApprover; !dcl.IsEmptyValueIndirect(v) {
m["serviceAccessApprover"] = v
}
if v := f.AssuredWorkloadsMonitoring; !dcl.IsEmptyValueIndirect(v) {
m["assuredWorkloadsMonitoring"] = v
}
return m, nil
}
// flattenWorkloadPartnerPermissions flattens an instance of WorkloadPartnerPermissions from a JSON
// response object.
func flattenWorkloadPartnerPermissions(c *Client, i interface{}, res *Workload) *WorkloadPartnerPermissions {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadPartnerPermissions{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadPartnerPermissions
}
r.DataLogsViewer = dcl.FlattenBool(m["dataLogsViewer"])
r.ServiceAccessApprover = dcl.FlattenBool(m["serviceAccessApprover"])
r.AssuredWorkloadsMonitoring = dcl.FlattenBool(m["assuredWorkloadsMonitoring"])
return r
}
// expandWorkloadWorkloadOptionsMap expands the contents of WorkloadWorkloadOptions into a JSON
// request object.
func expandWorkloadWorkloadOptionsMap(c *Client, f map[string]WorkloadWorkloadOptions, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadWorkloadOptions(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadWorkloadOptionsSlice expands the contents of WorkloadWorkloadOptions into a JSON
// request object.
func expandWorkloadWorkloadOptionsSlice(c *Client, f []WorkloadWorkloadOptions, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadWorkloadOptions(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadWorkloadOptionsMap flattens the contents of WorkloadWorkloadOptions from a JSON
// response object.
func flattenWorkloadWorkloadOptionsMap(c *Client, i interface{}, res *Workload) map[string]WorkloadWorkloadOptions {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadWorkloadOptions{}
}
if len(a) == 0 {
return map[string]WorkloadWorkloadOptions{}
}
items := make(map[string]WorkloadWorkloadOptions)
for k, item := range a {
items[k] = *flattenWorkloadWorkloadOptions(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadWorkloadOptionsSlice flattens the contents of WorkloadWorkloadOptions from a JSON
// response object.
func flattenWorkloadWorkloadOptionsSlice(c *Client, i interface{}, res *Workload) []WorkloadWorkloadOptions {
a, ok := i.([]interface{})
if !ok {
return []WorkloadWorkloadOptions{}
}
if len(a) == 0 {
return []WorkloadWorkloadOptions{}
}
items := make([]WorkloadWorkloadOptions, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadWorkloadOptions(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadWorkloadOptions expands an instance of WorkloadWorkloadOptions into a JSON
// request object.
func expandWorkloadWorkloadOptions(c *Client, f *WorkloadWorkloadOptions, res *Workload) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.KajEnrollmentType; !dcl.IsEmptyValueIndirect(v) {
m["kajEnrollmentType"] = v
}
return m, nil
}
// flattenWorkloadWorkloadOptions flattens an instance of WorkloadWorkloadOptions from a JSON
// response object.
func flattenWorkloadWorkloadOptions(c *Client, i interface{}, res *Workload) *WorkloadWorkloadOptions {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadWorkloadOptions{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadWorkloadOptions
}
r.KajEnrollmentType = flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnum(m["kajEnrollmentType"])
return r
}
// expandWorkloadEkmProvisioningResponseMap expands the contents of WorkloadEkmProvisioningResponse into a JSON
// request object.
func expandWorkloadEkmProvisioningResponseMap(c *Client, f map[string]WorkloadEkmProvisioningResponse, res *Workload) (map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := make(map[string]interface{})
for k, item := range f {
i, err := expandWorkloadEkmProvisioningResponse(c, &item, res)
if err != nil {
return nil, err
}
if i != nil {
items[k] = i
}
}
return items, nil
}
// expandWorkloadEkmProvisioningResponseSlice expands the contents of WorkloadEkmProvisioningResponse into a JSON
// request object.
func expandWorkloadEkmProvisioningResponseSlice(c *Client, f []WorkloadEkmProvisioningResponse, res *Workload) ([]map[string]interface{}, error) {
if f == nil {
return nil, nil
}
items := []map[string]interface{}{}
for _, item := range f {
i, err := expandWorkloadEkmProvisioningResponse(c, &item, res)
if err != nil {
return nil, err
}
items = append(items, i)
}
return items, nil
}
// flattenWorkloadEkmProvisioningResponseMap flattens the contents of WorkloadEkmProvisioningResponse from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseMap(c *Client, i interface{}, res *Workload) map[string]WorkloadEkmProvisioningResponse {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadEkmProvisioningResponse{}
}
if len(a) == 0 {
return map[string]WorkloadEkmProvisioningResponse{}
}
items := make(map[string]WorkloadEkmProvisioningResponse)
for k, item := range a {
items[k] = *flattenWorkloadEkmProvisioningResponse(c, item.(map[string]interface{}), res)
}
return items
}
// flattenWorkloadEkmProvisioningResponseSlice flattens the contents of WorkloadEkmProvisioningResponse from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseSlice(c *Client, i interface{}, res *Workload) []WorkloadEkmProvisioningResponse {
a, ok := i.([]interface{})
if !ok {
return []WorkloadEkmProvisioningResponse{}
}
if len(a) == 0 {
return []WorkloadEkmProvisioningResponse{}
}
items := make([]WorkloadEkmProvisioningResponse, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadEkmProvisioningResponse(c, item.(map[string]interface{}), res))
}
return items
}
// expandWorkloadEkmProvisioningResponse expands an instance of WorkloadEkmProvisioningResponse into a JSON
// request object.
func expandWorkloadEkmProvisioningResponse(c *Client, f *WorkloadEkmProvisioningResponse, res *Workload) (map[string]interface{}, error) {
if dcl.IsEmptyValueIndirect(f) {
return nil, nil
}
m := make(map[string]interface{})
if v := f.EkmProvisioningState; !dcl.IsEmptyValueIndirect(v) {
m["ekmProvisioningState"] = v
}
if v := f.EkmProvisioningErrorDomain; !dcl.IsEmptyValueIndirect(v) {
m["ekmProvisioningErrorDomain"] = v
}
if v := f.EkmProvisioningErrorMapping; !dcl.IsEmptyValueIndirect(v) {
m["ekmProvisioningErrorMapping"] = v
}
return m, nil
}
// flattenWorkloadEkmProvisioningResponse flattens an instance of WorkloadEkmProvisioningResponse from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponse(c *Client, i interface{}, res *Workload) *WorkloadEkmProvisioningResponse {
m, ok := i.(map[string]interface{})
if !ok {
return nil
}
r := &WorkloadEkmProvisioningResponse{}
if dcl.IsEmptyValueIndirect(i) {
return EmptyWorkloadEkmProvisioningResponse
}
r.EkmProvisioningState = flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnum(m["ekmProvisioningState"])
r.EkmProvisioningErrorDomain = flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum(m["ekmProvisioningErrorDomain"])
r.EkmProvisioningErrorMapping = flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum(m["ekmProvisioningErrorMapping"])
return r
}
// flattenWorkloadResourcesResourceTypeEnumMap flattens the contents of WorkloadResourcesResourceTypeEnum from a JSON
// response object.
func flattenWorkloadResourcesResourceTypeEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadResourcesResourceTypeEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadResourcesResourceTypeEnum{}
}
if len(a) == 0 {
return map[string]WorkloadResourcesResourceTypeEnum{}
}
items := make(map[string]WorkloadResourcesResourceTypeEnum)
for k, item := range a {
items[k] = *flattenWorkloadResourcesResourceTypeEnum(item.(interface{}))
}
return items
}
// flattenWorkloadResourcesResourceTypeEnumSlice flattens the contents of WorkloadResourcesResourceTypeEnum from a JSON
// response object.
func flattenWorkloadResourcesResourceTypeEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadResourcesResourceTypeEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadResourcesResourceTypeEnum{}
}
if len(a) == 0 {
return []WorkloadResourcesResourceTypeEnum{}
}
items := make([]WorkloadResourcesResourceTypeEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadResourcesResourceTypeEnum(item.(interface{})))
}
return items
}
// flattenWorkloadResourcesResourceTypeEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadResourcesResourceTypeEnum with the same value as that string.
func flattenWorkloadResourcesResourceTypeEnum(i interface{}) *WorkloadResourcesResourceTypeEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadResourcesResourceTypeEnumRef(s)
}
// flattenWorkloadComplianceRegimeEnumMap flattens the contents of WorkloadComplianceRegimeEnum from a JSON
// response object.
func flattenWorkloadComplianceRegimeEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadComplianceRegimeEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadComplianceRegimeEnum{}
}
if len(a) == 0 {
return map[string]WorkloadComplianceRegimeEnum{}
}
items := make(map[string]WorkloadComplianceRegimeEnum)
for k, item := range a {
items[k] = *flattenWorkloadComplianceRegimeEnum(item.(interface{}))
}
return items
}
// flattenWorkloadComplianceRegimeEnumSlice flattens the contents of WorkloadComplianceRegimeEnum from a JSON
// response object.
func flattenWorkloadComplianceRegimeEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadComplianceRegimeEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadComplianceRegimeEnum{}
}
if len(a) == 0 {
return []WorkloadComplianceRegimeEnum{}
}
items := make([]WorkloadComplianceRegimeEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadComplianceRegimeEnum(item.(interface{})))
}
return items
}
// flattenWorkloadComplianceRegimeEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadComplianceRegimeEnum with the same value as that string.
func flattenWorkloadComplianceRegimeEnum(i interface{}) *WorkloadComplianceRegimeEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadComplianceRegimeEnumRef(s)
}
// flattenWorkloadResourceSettingsResourceTypeEnumMap flattens the contents of WorkloadResourceSettingsResourceTypeEnum from a JSON
// response object.
func flattenWorkloadResourceSettingsResourceTypeEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadResourceSettingsResourceTypeEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadResourceSettingsResourceTypeEnum{}
}
if len(a) == 0 {
return map[string]WorkloadResourceSettingsResourceTypeEnum{}
}
items := make(map[string]WorkloadResourceSettingsResourceTypeEnum)
for k, item := range a {
items[k] = *flattenWorkloadResourceSettingsResourceTypeEnum(item.(interface{}))
}
return items
}
// flattenWorkloadResourceSettingsResourceTypeEnumSlice flattens the contents of WorkloadResourceSettingsResourceTypeEnum from a JSON
// response object.
func flattenWorkloadResourceSettingsResourceTypeEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadResourceSettingsResourceTypeEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadResourceSettingsResourceTypeEnum{}
}
if len(a) == 0 {
return []WorkloadResourceSettingsResourceTypeEnum{}
}
items := make([]WorkloadResourceSettingsResourceTypeEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadResourceSettingsResourceTypeEnum(item.(interface{})))
}
return items
}
// flattenWorkloadResourceSettingsResourceTypeEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadResourceSettingsResourceTypeEnum with the same value as that string.
func flattenWorkloadResourceSettingsResourceTypeEnum(i interface{}) *WorkloadResourceSettingsResourceTypeEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadResourceSettingsResourceTypeEnumRef(s)
}
// flattenWorkloadKajEnrollmentStateEnumMap flattens the contents of WorkloadKajEnrollmentStateEnum from a JSON
// response object.
func flattenWorkloadKajEnrollmentStateEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadKajEnrollmentStateEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadKajEnrollmentStateEnum{}
}
if len(a) == 0 {
return map[string]WorkloadKajEnrollmentStateEnum{}
}
items := make(map[string]WorkloadKajEnrollmentStateEnum)
for k, item := range a {
items[k] = *flattenWorkloadKajEnrollmentStateEnum(item.(interface{}))
}
return items
}
// flattenWorkloadKajEnrollmentStateEnumSlice flattens the contents of WorkloadKajEnrollmentStateEnum from a JSON
// response object.
func flattenWorkloadKajEnrollmentStateEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadKajEnrollmentStateEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadKajEnrollmentStateEnum{}
}
if len(a) == 0 {
return []WorkloadKajEnrollmentStateEnum{}
}
items := make([]WorkloadKajEnrollmentStateEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadKajEnrollmentStateEnum(item.(interface{})))
}
return items
}
// flattenWorkloadKajEnrollmentStateEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadKajEnrollmentStateEnum with the same value as that string.
func flattenWorkloadKajEnrollmentStateEnum(i interface{}) *WorkloadKajEnrollmentStateEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadKajEnrollmentStateEnumRef(s)
}
// flattenWorkloadSaaEnrollmentResponseSetupErrorsEnumMap flattens the contents of WorkloadSaaEnrollmentResponseSetupErrorsEnum from a JSON
// response object.
func flattenWorkloadSaaEnrollmentResponseSetupErrorsEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadSaaEnrollmentResponseSetupErrorsEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadSaaEnrollmentResponseSetupErrorsEnum{}
}
if len(a) == 0 {
return map[string]WorkloadSaaEnrollmentResponseSetupErrorsEnum{}
}
items := make(map[string]WorkloadSaaEnrollmentResponseSetupErrorsEnum)
for k, item := range a {
items[k] = *flattenWorkloadSaaEnrollmentResponseSetupErrorsEnum(item.(interface{}))
}
return items
}
// flattenWorkloadSaaEnrollmentResponseSetupErrorsEnumSlice flattens the contents of WorkloadSaaEnrollmentResponseSetupErrorsEnum from a JSON
// response object.
func flattenWorkloadSaaEnrollmentResponseSetupErrorsEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadSaaEnrollmentResponseSetupErrorsEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadSaaEnrollmentResponseSetupErrorsEnum{}
}
if len(a) == 0 {
return []WorkloadSaaEnrollmentResponseSetupErrorsEnum{}
}
items := make([]WorkloadSaaEnrollmentResponseSetupErrorsEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadSaaEnrollmentResponseSetupErrorsEnum(item.(interface{})))
}
return items
}
// flattenWorkloadSaaEnrollmentResponseSetupErrorsEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadSaaEnrollmentResponseSetupErrorsEnum with the same value as that string.
func flattenWorkloadSaaEnrollmentResponseSetupErrorsEnum(i interface{}) *WorkloadSaaEnrollmentResponseSetupErrorsEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadSaaEnrollmentResponseSetupErrorsEnumRef(s)
}
// flattenWorkloadSaaEnrollmentResponseSetupStatusEnumMap flattens the contents of WorkloadSaaEnrollmentResponseSetupStatusEnum from a JSON
// response object.
func flattenWorkloadSaaEnrollmentResponseSetupStatusEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadSaaEnrollmentResponseSetupStatusEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadSaaEnrollmentResponseSetupStatusEnum{}
}
if len(a) == 0 {
return map[string]WorkloadSaaEnrollmentResponseSetupStatusEnum{}
}
items := make(map[string]WorkloadSaaEnrollmentResponseSetupStatusEnum)
for k, item := range a {
items[k] = *flattenWorkloadSaaEnrollmentResponseSetupStatusEnum(item.(interface{}))
}
return items
}
// flattenWorkloadSaaEnrollmentResponseSetupStatusEnumSlice flattens the contents of WorkloadSaaEnrollmentResponseSetupStatusEnum from a JSON
// response object.
func flattenWorkloadSaaEnrollmentResponseSetupStatusEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadSaaEnrollmentResponseSetupStatusEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadSaaEnrollmentResponseSetupStatusEnum{}
}
if len(a) == 0 {
return []WorkloadSaaEnrollmentResponseSetupStatusEnum{}
}
items := make([]WorkloadSaaEnrollmentResponseSetupStatusEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadSaaEnrollmentResponseSetupStatusEnum(item.(interface{})))
}
return items
}
// flattenWorkloadSaaEnrollmentResponseSetupStatusEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadSaaEnrollmentResponseSetupStatusEnum with the same value as that string.
func flattenWorkloadSaaEnrollmentResponseSetupStatusEnum(i interface{}) *WorkloadSaaEnrollmentResponseSetupStatusEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadSaaEnrollmentResponseSetupStatusEnumRef(s)
}
// flattenWorkloadPartnerEnumMap flattens the contents of WorkloadPartnerEnum from a JSON
// response object.
func flattenWorkloadPartnerEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadPartnerEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadPartnerEnum{}
}
if len(a) == 0 {
return map[string]WorkloadPartnerEnum{}
}
items := make(map[string]WorkloadPartnerEnum)
for k, item := range a {
items[k] = *flattenWorkloadPartnerEnum(item.(interface{}))
}
return items
}
// flattenWorkloadPartnerEnumSlice flattens the contents of WorkloadPartnerEnum from a JSON
// response object.
func flattenWorkloadPartnerEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadPartnerEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadPartnerEnum{}
}
if len(a) == 0 {
return []WorkloadPartnerEnum{}
}
items := make([]WorkloadPartnerEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadPartnerEnum(item.(interface{})))
}
return items
}
// flattenWorkloadPartnerEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadPartnerEnum with the same value as that string.
func flattenWorkloadPartnerEnum(i interface{}) *WorkloadPartnerEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadPartnerEnumRef(s)
}
// flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnumMap flattens the contents of WorkloadWorkloadOptionsKajEnrollmentTypeEnum from a JSON
// response object.
func flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadWorkloadOptionsKajEnrollmentTypeEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadWorkloadOptionsKajEnrollmentTypeEnum{}
}
if len(a) == 0 {
return map[string]WorkloadWorkloadOptionsKajEnrollmentTypeEnum{}
}
items := make(map[string]WorkloadWorkloadOptionsKajEnrollmentTypeEnum)
for k, item := range a {
items[k] = *flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnum(item.(interface{}))
}
return items
}
// flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnumSlice flattens the contents of WorkloadWorkloadOptionsKajEnrollmentTypeEnum from a JSON
// response object.
func flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadWorkloadOptionsKajEnrollmentTypeEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadWorkloadOptionsKajEnrollmentTypeEnum{}
}
if len(a) == 0 {
return []WorkloadWorkloadOptionsKajEnrollmentTypeEnum{}
}
items := make([]WorkloadWorkloadOptionsKajEnrollmentTypeEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnum(item.(interface{})))
}
return items
}
// flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadWorkloadOptionsKajEnrollmentTypeEnum with the same value as that string.
func flattenWorkloadWorkloadOptionsKajEnrollmentTypeEnum(i interface{}) *WorkloadWorkloadOptionsKajEnrollmentTypeEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadWorkloadOptionsKajEnrollmentTypeEnumRef(s)
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnumMap flattens the contents of WorkloadEkmProvisioningResponseEkmProvisioningStateEnum from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadEkmProvisioningResponseEkmProvisioningStateEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadEkmProvisioningResponseEkmProvisioningStateEnum{}
}
if len(a) == 0 {
return map[string]WorkloadEkmProvisioningResponseEkmProvisioningStateEnum{}
}
items := make(map[string]WorkloadEkmProvisioningResponseEkmProvisioningStateEnum)
for k, item := range a {
items[k] = *flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnum(item.(interface{}))
}
return items
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnumSlice flattens the contents of WorkloadEkmProvisioningResponseEkmProvisioningStateEnum from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadEkmProvisioningResponseEkmProvisioningStateEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadEkmProvisioningResponseEkmProvisioningStateEnum{}
}
if len(a) == 0 {
return []WorkloadEkmProvisioningResponseEkmProvisioningStateEnum{}
}
items := make([]WorkloadEkmProvisioningResponseEkmProvisioningStateEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnum(item.(interface{})))
}
return items
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadEkmProvisioningResponseEkmProvisioningStateEnum with the same value as that string.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningStateEnum(i interface{}) *WorkloadEkmProvisioningResponseEkmProvisioningStateEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadEkmProvisioningResponseEkmProvisioningStateEnumRef(s)
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnumMap flattens the contents of WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum{}
}
if len(a) == 0 {
return map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum{}
}
items := make(map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum)
for k, item := range a {
items[k] = *flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum(item.(interface{}))
}
return items
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnumSlice flattens the contents of WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum{}
}
if len(a) == 0 {
return []WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum{}
}
items := make([]WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum(item.(interface{})))
}
return items
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum with the same value as that string.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum(i interface{}) *WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadEkmProvisioningResponseEkmProvisioningErrorDomainEnumRef(s)
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnumMap flattens the contents of WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnumMap(c *Client, i interface{}, res *Workload) map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum {
a, ok := i.(map[string]interface{})
if !ok {
return map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum{}
}
if len(a) == 0 {
return map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum{}
}
items := make(map[string]WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum)
for k, item := range a {
items[k] = *flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum(item.(interface{}))
}
return items
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnumSlice flattens the contents of WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum from a JSON
// response object.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnumSlice(c *Client, i interface{}, res *Workload) []WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum {
a, ok := i.([]interface{})
if !ok {
return []WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum{}
}
if len(a) == 0 {
return []WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum{}
}
items := make([]WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum, 0, len(a))
for _, item := range a {
items = append(items, *flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum(item.(interface{})))
}
return items
}
// flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum asserts that an interface is a string, and returns a
// pointer to a *WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum with the same value as that string.
func flattenWorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum(i interface{}) *WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnum {
s, ok := i.(string)
if !ok {
return nil
}
return WorkloadEkmProvisioningResponseEkmProvisioningErrorMappingEnumRef(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 *Workload) matcher(c *Client) func([]byte) bool {
return func(b []byte) bool {
cr, err := unmarshalWorkload(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.Organization == nil && ncr.Organization == nil {
c.Config.Logger.Info("Both Organization fields null - considering equal.")
} else if nr.Organization == nil || ncr.Organization == nil {
c.Config.Logger.Info("Only one Organization field is null - considering unequal.")
return false
} else if *nr.Organization != *ncr.Organization {
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 workloadDiff struct {
// The diff should include one or the other of RequiresRecreate or UpdateOp.
RequiresRecreate bool
UpdateOp workloadApiOperation
FieldName string // used for error logging
}
func convertFieldDiffsToWorkloadDiffs(config *dcl.Config, fds []*dcl.FieldDiff, opts []dcl.ApplyOption) ([]workloadDiff, 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 []workloadDiff
// For each operation name, create a workloadDiff which contains the operation.
for opName, fieldDiffs := range opNamesToFieldDiffs {
// Use the first field diff's field name for logging required recreate error.
diff := workloadDiff{FieldName: fieldDiffs[0].FieldName}
if opName == "Recreate" {
diff.RequiresRecreate = true
} else {
apiOp, err := convertOpNameToWorkloadApiOperation(opName, fieldDiffs, opts...)
if err != nil {
return diffs, err
}
diff.UpdateOp = apiOp
}
diffs = append(diffs, diff)
}
return diffs, nil
}
func convertOpNameToWorkloadApiOperation(opName string, fieldDiffs []*dcl.FieldDiff, opts ...dcl.ApplyOption) (workloadApiOperation, error) {
switch opName {
case "updateWorkloadUpdateWorkloadOperation":
return &updateWorkloadUpdateWorkloadOperation{FieldDiffs: fieldDiffs}, nil
default:
return nil, fmt.Errorf("no such operation with name: %v", opName)
}
}
func extractWorkloadFields(r *Workload) error {
vKmsSettings := r.KmsSettings
if vKmsSettings == nil {
// note: explicitly not the empty object.
vKmsSettings = &WorkloadKmsSettings{}
}
if err := extractWorkloadKmsSettingsFields(r, vKmsSettings); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vKmsSettings) {
r.KmsSettings = vKmsSettings
}
vSaaEnrollmentResponse := r.SaaEnrollmentResponse
if vSaaEnrollmentResponse == nil {
// note: explicitly not the empty object.
vSaaEnrollmentResponse = &WorkloadSaaEnrollmentResponse{}
}
if err := extractWorkloadSaaEnrollmentResponseFields(r, vSaaEnrollmentResponse); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vSaaEnrollmentResponse) {
r.SaaEnrollmentResponse = vSaaEnrollmentResponse
}
vComplianceStatus := r.ComplianceStatus
if vComplianceStatus == nil {
// note: explicitly not the empty object.
vComplianceStatus = &WorkloadComplianceStatus{}
}
if err := extractWorkloadComplianceStatusFields(r, vComplianceStatus); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vComplianceStatus) {
r.ComplianceStatus = vComplianceStatus
}
vPartnerPermissions := r.PartnerPermissions
if vPartnerPermissions == nil {
// note: explicitly not the empty object.
vPartnerPermissions = &WorkloadPartnerPermissions{}
}
if err := extractWorkloadPartnerPermissionsFields(r, vPartnerPermissions); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vPartnerPermissions) {
r.PartnerPermissions = vPartnerPermissions
}
vWorkloadOptions := r.WorkloadOptions
if vWorkloadOptions == nil {
// note: explicitly not the empty object.
vWorkloadOptions = &WorkloadWorkloadOptions{}
}
if err := extractWorkloadWorkloadOptionsFields(r, vWorkloadOptions); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vWorkloadOptions) {
r.WorkloadOptions = vWorkloadOptions
}
vEkmProvisioningResponse := r.EkmProvisioningResponse
if vEkmProvisioningResponse == nil {
// note: explicitly not the empty object.
vEkmProvisioningResponse = &WorkloadEkmProvisioningResponse{}
}
if err := extractWorkloadEkmProvisioningResponseFields(r, vEkmProvisioningResponse); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vEkmProvisioningResponse) {
r.EkmProvisioningResponse = vEkmProvisioningResponse
}
return nil
}
func extractWorkloadResourcesFields(r *Workload, o *WorkloadResources) error {
return nil
}
func extractWorkloadKmsSettingsFields(r *Workload, o *WorkloadKmsSettings) error {
return nil
}
func extractWorkloadResourceSettingsFields(r *Workload, o *WorkloadResourceSettings) error {
return nil
}
func extractWorkloadSaaEnrollmentResponseFields(r *Workload, o *WorkloadSaaEnrollmentResponse) error {
return nil
}
func extractWorkloadComplianceStatusFields(r *Workload, o *WorkloadComplianceStatus) error {
return nil
}
func extractWorkloadPartnerPermissionsFields(r *Workload, o *WorkloadPartnerPermissions) error {
return nil
}
func extractWorkloadWorkloadOptionsFields(r *Workload, o *WorkloadWorkloadOptions) error {
return nil
}
func extractWorkloadEkmProvisioningResponseFields(r *Workload, o *WorkloadEkmProvisioningResponse) error {
return nil
}
func postReadExtractWorkloadFields(r *Workload) error {
vKmsSettings := r.KmsSettings
if vKmsSettings == nil {
// note: explicitly not the empty object.
vKmsSettings = &WorkloadKmsSettings{}
}
if err := postReadExtractWorkloadKmsSettingsFields(r, vKmsSettings); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vKmsSettings) {
r.KmsSettings = vKmsSettings
}
vSaaEnrollmentResponse := r.SaaEnrollmentResponse
if vSaaEnrollmentResponse == nil {
// note: explicitly not the empty object.
vSaaEnrollmentResponse = &WorkloadSaaEnrollmentResponse{}
}
if err := postReadExtractWorkloadSaaEnrollmentResponseFields(r, vSaaEnrollmentResponse); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vSaaEnrollmentResponse) {
r.SaaEnrollmentResponse = vSaaEnrollmentResponse
}
vComplianceStatus := r.ComplianceStatus
if vComplianceStatus == nil {
// note: explicitly not the empty object.
vComplianceStatus = &WorkloadComplianceStatus{}
}
if err := postReadExtractWorkloadComplianceStatusFields(r, vComplianceStatus); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vComplianceStatus) {
r.ComplianceStatus = vComplianceStatus
}
vPartnerPermissions := r.PartnerPermissions
if vPartnerPermissions == nil {
// note: explicitly not the empty object.
vPartnerPermissions = &WorkloadPartnerPermissions{}
}
if err := postReadExtractWorkloadPartnerPermissionsFields(r, vPartnerPermissions); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vPartnerPermissions) {
r.PartnerPermissions = vPartnerPermissions
}
vWorkloadOptions := r.WorkloadOptions
if vWorkloadOptions == nil {
// note: explicitly not the empty object.
vWorkloadOptions = &WorkloadWorkloadOptions{}
}
if err := postReadExtractWorkloadWorkloadOptionsFields(r, vWorkloadOptions); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vWorkloadOptions) {
r.WorkloadOptions = vWorkloadOptions
}
vEkmProvisioningResponse := r.EkmProvisioningResponse
if vEkmProvisioningResponse == nil {
// note: explicitly not the empty object.
vEkmProvisioningResponse = &WorkloadEkmProvisioningResponse{}
}
if err := postReadExtractWorkloadEkmProvisioningResponseFields(r, vEkmProvisioningResponse); err != nil {
return err
}
if !dcl.IsEmptyValueIndirect(vEkmProvisioningResponse) {
r.EkmProvisioningResponse = vEkmProvisioningResponse
}
return nil
}
func postReadExtractWorkloadResourcesFields(r *Workload, o *WorkloadResources) error {
return nil
}
func postReadExtractWorkloadKmsSettingsFields(r *Workload, o *WorkloadKmsSettings) error {
return nil
}
func postReadExtractWorkloadResourceSettingsFields(r *Workload, o *WorkloadResourceSettings) error {
return nil
}
func postReadExtractWorkloadSaaEnrollmentResponseFields(r *Workload, o *WorkloadSaaEnrollmentResponse) error {
return nil
}
func postReadExtractWorkloadComplianceStatusFields(r *Workload, o *WorkloadComplianceStatus) error {
return nil
}
func postReadExtractWorkloadPartnerPermissionsFields(r *Workload, o *WorkloadPartnerPermissions) error {
return nil
}
func postReadExtractWorkloadWorkloadOptionsFields(r *Workload, o *WorkloadWorkloadOptions) error {
return nil
}
func postReadExtractWorkloadEkmProvisioningResponseFields(r *Workload, o *WorkloadEkmProvisioningResponse) error {
return nil
}