services/google/run/alpha/job_internal.go (6,584 lines of code) (raw):

// Copyright 2023 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 alpha 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 *Job) validate() error { if err := dcl.Required(r, "name"); err != nil { return err } if err := dcl.Required(r, "template"); err != nil { return err } if err := dcl.RequiredParameter(r.Project, "Project"); err != nil { return err } if err := dcl.RequiredParameter(r.Location, "Location"); err != nil { return err } if !dcl.IsEmptyValueIndirect(r.BinaryAuthorization) { if err := r.BinaryAuthorization.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.Template) { if err := r.Template.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.TerminalCondition) { if err := r.TerminalCondition.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.LatestSucceededExecution) { if err := r.LatestSucceededExecution.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.LatestCreatedExecution) { if err := r.LatestCreatedExecution.validate(); err != nil { return err } } return nil } func (r *JobBinaryAuthorization) validate() error { return nil } func (r *JobTemplate) validate() error { if err := dcl.Required(r, "template"); err != nil { return err } if !dcl.IsEmptyValueIndirect(r.Template) { if err := r.Template.validate(); err != nil { return err } } return nil } func (r *JobTemplateTemplate) validate() error { if !dcl.IsEmptyValueIndirect(r.VPCAccess) { if err := r.VPCAccess.validate(); err != nil { return err } } return nil } func (r *JobTemplateTemplateContainers) validate() error { if err := dcl.Required(r, "image"); err != nil { return err } if !dcl.IsEmptyValueIndirect(r.Resources) { if err := r.Resources.validate(); err != nil { return err } } return nil } func (r *JobTemplateTemplateContainersEnv) validate() error { if err := dcl.Required(r, "name"); err != nil { return err } if err := dcl.ValidateAtMostOneOfFieldsSet([]string{"Value", "ValueSource"}, r.Value, r.ValueSource); err != nil { return err } if !dcl.IsEmptyValueIndirect(r.ValueSource) { if err := r.ValueSource.validate(); err != nil { return err } } return nil } func (r *JobTemplateTemplateContainersEnvValueSource) validate() error { if !dcl.IsEmptyValueIndirect(r.SecretKeyRef) { if err := r.SecretKeyRef.validate(); err != nil { return err } } return nil } func (r *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) validate() error { if err := dcl.Required(r, "secret"); err != nil { return err } return nil } func (r *JobTemplateTemplateContainersResources) validate() error { return nil } func (r *JobTemplateTemplateContainersPorts) validate() error { return nil } func (r *JobTemplateTemplateContainersVolumeMounts) validate() error { if err := dcl.Required(r, "name"); err != nil { return err } if err := dcl.Required(r, "mountPath"); err != nil { return err } return nil } func (r *JobTemplateTemplateVolumes) validate() error { if err := dcl.Required(r, "name"); err != nil { return err } if err := dcl.ValidateAtMostOneOfFieldsSet([]string{"Secret", "CloudSqlInstance"}, r.Secret, r.CloudSqlInstance); err != nil { return err } if !dcl.IsEmptyValueIndirect(r.Secret) { if err := r.Secret.validate(); err != nil { return err } } if !dcl.IsEmptyValueIndirect(r.CloudSqlInstance) { if err := r.CloudSqlInstance.validate(); err != nil { return err } } return nil } func (r *JobTemplateTemplateVolumesSecret) validate() error { if err := dcl.Required(r, "secret"); err != nil { return err } return nil } func (r *JobTemplateTemplateVolumesSecretItems) validate() error { if err := dcl.Required(r, "path"); err != nil { return err } return nil } func (r *JobTemplateTemplateVolumesCloudSqlInstance) validate() error { return nil } func (r *JobTemplateTemplateVPCAccess) validate() error { return nil } func (r *JobTerminalCondition) validate() error { if err := dcl.ValidateAtMostOneOfFieldsSet([]string{"Reason", "InternalReason", "DomainMappingReason", "RevisionReason", "ExecutionReason"}, r.Reason, r.InternalReason, r.DomainMappingReason, r.RevisionReason, r.ExecutionReason); err != nil { return err } return nil } func (r *JobConditions) validate() error { if err := dcl.ValidateAtMostOneOfFieldsSet([]string{"Reason", "RevisionReason", "ExecutionReason"}, r.Reason, r.RevisionReason, r.ExecutionReason); err != nil { return err } return nil } func (r *JobLatestSucceededExecution) validate() error { return nil } func (r *JobLatestCreatedExecution) validate() error { return nil } func (r *Job) basePath() string { params := map[string]interface{}{} return dcl.Nprintf("https://run.googleapis.com/v2/", params) } func (r *Job) getURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/jobs/{{name}}", nr.basePath(), userBasePath, params), nil } func (r *Job) listURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), } return dcl.URL("projects/{{project}}/locations/{{location}}/jobs", nr.basePath(), userBasePath, params), nil } func (r *Job) createURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/jobs?jobId={{name}}", nr.basePath(), userBasePath, params), nil } func (r *Job) deleteURL(userBasePath string) (string, error) { nr := r.urlNormalized() params := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/jobs/{{name}}", nr.basePath(), userBasePath, params), nil } func (r *Job) SetPolicyURL(userBasePath string) string { nr := r.urlNormalized() fields := map[string]interface{}{ "project": *nr.Project, "location": *nr.Location, "name": *nr.Name, } return dcl.URL("projects/{{project}}/locations/{{location}}/jobs/{{name}}", nr.basePath(), userBasePath, fields) } func (r *Job) SetPolicyVerb() string { return "POST" } func (r *Job) getPolicyURL(userBasePath string) string { nr := r.urlNormalized() fields := map[string]interface{}{ "project": *nr.Project, "location": *nr.Location, "name": *nr.Name, } return dcl.URL("projects/{{project}}/locations/{{location}}/jobs/{{name}}", nr.basePath(), userBasePath, fields) } func (r *Job) IAMPolicyVersion() int { return 3 } // jobApiOperation represents a mutable operation in the underlying REST // API such as Create, Update, or Delete. type jobApiOperation interface { do(context.Context, *Job, *Client) error } // newUpdateJobUpdateJobRequest creates a request for an // Job resource's UpdateJob update type by filling in the update // fields based on the intended state of the resource. func newUpdateJobUpdateJobRequest(ctx context.Context, f *Job, c *Client) (map[string]interface{}, error) { req := map[string]interface{}{} res := f _ = res if v, err := dcl.DeriveField("projects/%s/locations/%s/jobs/%s", f.Name, dcl.SelfLinkToName(f.Project), dcl.SelfLinkToName(f.Location), dcl.SelfLinkToName(f.Name)); err != nil { return nil, fmt.Errorf("error expanding Name into name: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { req["name"] = v } if v := f.Annotations; !dcl.IsEmptyValueIndirect(v) { req["annotations"] = v } if v := f.Client; !dcl.IsEmptyValueIndirect(v) { req["client"] = v } if v := f.ClientVersion; !dcl.IsEmptyValueIndirect(v) { req["clientVersion"] = v } if v := f.LaunchStage; !dcl.IsEmptyValueIndirect(v) { req["launchStage"] = v } if v, err := expandJobBinaryAuthorization(c, f.BinaryAuthorization, res); err != nil { return nil, fmt.Errorf("error expanding BinaryAuthorization into binaryAuthorization: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { req["binaryAuthorization"] = v } if v, err := expandJobTemplate(c, f.Template, res); err != nil { return nil, fmt.Errorf("error expanding Template into template: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { req["template"] = v } if v, err := expandJobTerminalCondition(c, f.TerminalCondition, res); err != nil { return nil, fmt.Errorf("error expanding TerminalCondition into terminalCondition: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { req["terminalCondition"] = v } if v, err := expandJobLatestSucceededExecution(c, f.LatestSucceededExecution, res); err != nil { return nil, fmt.Errorf("error expanding LatestSucceededExecution into latestSucceededExecution: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { req["latestSucceededExecution"] = v } if v, err := expandJobLatestCreatedExecution(c, f.LatestCreatedExecution, res); err != nil { return nil, fmt.Errorf("error expanding LatestCreatedExecution into latestCreatedExecution: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { req["latestCreatedExecution"] = v } b, err := c.getJobRaw(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 } // marshalUpdateJobUpdateJobRequest converts the update into // the final JSON request body. func marshalUpdateJobUpdateJobRequest(c *Client, m map[string]interface{}) ([]byte, error) { return json.Marshal(m) } type updateJobUpdateJobOperation 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 *updateJobUpdateJobOperation) do(ctx context.Context, r *Job, c *Client) error { _, err := c.GetJob(ctx, r) if err != nil { return err } u, err := r.updateURL(c.Config.BasePath, "UpdateJob") if err != nil { return err } req, err := newUpdateJobUpdateJobRequest(ctx, r, c) if err != nil { return err } c.Config.Logger.InfoWithContextf(ctx, "Created update: %#v", req) body, err := marshalUpdateJobUpdateJobRequest(c, req) if err != nil { return err } resp, err := dcl.SendRequest(ctx, c.Config, "PATCH", u, bytes.NewBuffer(body), c.Config.RetryProvider) if err != nil { return err } var o operations.StandardGCPOperation if err := dcl.ParseResponse(resp.Response, &o); err != nil { return err } err = o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET") if err != nil { return err } return nil } func (c *Client) listJobRaw(ctx context.Context, r *Job, 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 != JobMaxPage { 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 listJobOperation struct { Jobs []map[string]interface{} `json:"jobs"` Token string `json:"nextPageToken"` } func (c *Client) listJob(ctx context.Context, r *Job, pageToken string, pageSize int32) ([]*Job, string, error) { b, err := c.listJobRaw(ctx, r, pageToken, pageSize) if err != nil { return nil, "", err } var m listJobOperation if err := json.Unmarshal(b, &m); err != nil { return nil, "", err } var l []*Job for _, v := range m.Jobs { res, err := unmarshalMapJob(v, c, r) if err != nil { return nil, m.Token, err } res.Project = r.Project res.Location = r.Location l = append(l, res) } return l, m.Token, nil } func (c *Client) deleteAllJob(ctx context.Context, f func(*Job) bool, resources []*Job) 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.DeleteJob(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 deleteJobOperation struct{} func (op *deleteJobOperation) do(ctx context.Context, r *Job, c *Client) error { r, err := c.GetJob(ctx, r) if err != nil { if dcl.IsNotFound(err) { c.Config.Logger.InfoWithContextf(ctx, "Job not found, returning. Original error: %v", err) return nil } c.Config.Logger.WarningWithContextf(ctx, "GetJob checking for existence. error: %v", err) return err } u, err := r.deleteURL(c.Config.BasePath) if err != nil { return err } u, err = dcl.AddQueryParams(u, map[string]string{"force": "true"}) 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 Job: %w", err) } 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 createJobOperation struct { response map[string]interface{} } func (op *createJobOperation) FirstResponse() (map[string]interface{}, bool) { return op.response, len(op.response) > 0 } func (op *createJobOperation) do(ctx context.Context, r *Job, c *Client) error { c.Config.Logger.InfoWithContextf(ctx, "Attempting to create %v", r) u, err := r.createURL(c.Config.BasePath) if err != nil { return err } req, err := r.marshal(c) if err != nil { return err } resp, err := dcl.SendRequest(ctx, c.Config, "POST", u, bytes.NewBuffer(req), c.Config.RetryProvider) if err != nil { return err } // wait for object to be created. var o operations.StandardGCPOperation if err := dcl.ParseResponse(resp.Response, &o); err != nil { return err } if err := o.Wait(context.WithValue(ctx, dcl.DoNotLogRequestsKey, true), c.Config, r.basePath(), "GET"); err != nil { c.Config.Logger.Warningf("Creation failed after waiting for operation: %v", err) return err } c.Config.Logger.InfoWithContextf(ctx, "Successfully waited for operation") op.response, _ = o.FirstResponse() if _, err := c.GetJob(ctx, r); err != nil { c.Config.Logger.WarningWithContextf(ctx, "get returned error: %v", err) return err } return nil } func (c *Client) getJobRaw(ctx context.Context, r *Job) ([]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) jobDiffsForRawDesired(ctx context.Context, rawDesired *Job, opts ...dcl.ApplyOption) (initial, desired *Job, 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 *Job if sh := dcl.FetchStateHint(opts); sh != nil { if r, ok := sh.(*Job); !ok { c.Config.Logger.WarningWithContextf(ctx, "Initial state hint was of the wrong type; expected Job, got %T", sh) } else { fetchState = r } } if fetchState == nil { fetchState = rawDesired } // 1.2: Retrieval of raw initial state from API rawInitial, err := c.GetJob(ctx, fetchState) if rawInitial == nil { if !dcl.IsNotFound(err) { c.Config.Logger.WarningWithContextf(ctx, "Failed to retrieve whether a Job resource already exists: %s", err) return nil, nil, nil, fmt.Errorf("failed to retrieve Job resource: %v", err) } c.Config.Logger.InfoWithContext(ctx, "Found that Job resource did not exist.") // Perform canonicalization to pick up defaults. desired, err = canonicalizeJobDesiredState(rawDesired, rawInitial) return nil, desired, nil, err } c.Config.Logger.InfoWithContextf(ctx, "Found initial state for Job: %v", rawInitial) c.Config.Logger.InfoWithContextf(ctx, "Initial desired state for Job: %v", rawDesired) // The Get call applies postReadExtract and so the result may contain fields that are not part of API version. if err := extractJobFields(rawInitial); err != nil { return nil, nil, nil, err } // 1.3: Canonicalize raw initial state into initial state. initial, err = canonicalizeJobInitialState(rawInitial, rawDesired) if err != nil { return nil, nil, nil, err } c.Config.Logger.InfoWithContextf(ctx, "Canonicalized initial state for Job: %v", initial) // 1.4: Canonicalize raw desired state into desired state. desired, err = canonicalizeJobDesiredState(rawDesired, rawInitial, opts...) if err != nil { return nil, nil, nil, err } c.Config.Logger.InfoWithContextf(ctx, "Canonicalized desired state for Job: %v", desired) // 2.1: Comparison of initial and desired state. diffs, err = diffJob(c, desired, initial, opts...) return initial, desired, diffs, err } func canonicalizeJobInitialState(rawInitial, rawDesired *Job) (*Job, 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 canonicalizeJobDesiredState(rawDesired, rawInitial *Job, opts ...dcl.ApplyOption) (*Job, 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.BinaryAuthorization = canonicalizeJobBinaryAuthorization(rawDesired.BinaryAuthorization, nil, opts...) rawDesired.Template = canonicalizeJobTemplate(rawDesired.Template, nil, opts...) rawDesired.TerminalCondition = canonicalizeJobTerminalCondition(rawDesired.TerminalCondition, nil, opts...) rawDesired.LatestSucceededExecution = canonicalizeJobLatestSucceededExecution(rawDesired.LatestSucceededExecution, nil, opts...) rawDesired.LatestCreatedExecution = canonicalizeJobLatestCreatedExecution(rawDesired.LatestCreatedExecution, nil, opts...) return rawDesired, nil } canonicalDesired := &Job{} if dcl.PartialSelfLinkToSelfLink(rawDesired.Name, rawInitial.Name) { canonicalDesired.Name = rawInitial.Name } else { canonicalDesired.Name = rawDesired.Name } if dcl.IsZeroValue(rawDesired.Annotations) || (dcl.IsEmptyValueIndirect(rawDesired.Annotations) && dcl.IsEmptyValueIndirect(rawInitial.Annotations)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. canonicalDesired.Annotations = rawInitial.Annotations } else { canonicalDesired.Annotations = rawDesired.Annotations } if dcl.StringCanonicalize(rawDesired.Client, rawInitial.Client) { canonicalDesired.Client = rawInitial.Client } else { canonicalDesired.Client = rawDesired.Client } if dcl.StringCanonicalize(rawDesired.ClientVersion, rawInitial.ClientVersion) { canonicalDesired.ClientVersion = rawInitial.ClientVersion } else { canonicalDesired.ClientVersion = rawDesired.ClientVersion } if dcl.IsZeroValue(rawDesired.LaunchStage) || (dcl.IsEmptyValueIndirect(rawDesired.LaunchStage) && dcl.IsEmptyValueIndirect(rawInitial.LaunchStage)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. canonicalDesired.LaunchStage = rawInitial.LaunchStage } else { canonicalDesired.LaunchStage = rawDesired.LaunchStage } canonicalDesired.BinaryAuthorization = canonicalizeJobBinaryAuthorization(rawDesired.BinaryAuthorization, rawInitial.BinaryAuthorization, opts...) canonicalDesired.Template = canonicalizeJobTemplate(rawDesired.Template, rawInitial.Template, opts...) if dcl.NameToSelfLink(rawDesired.Project, rawInitial.Project) { canonicalDesired.Project = rawInitial.Project } else { canonicalDesired.Project = rawDesired.Project } if dcl.NameToSelfLink(rawDesired.Location, rawInitial.Location) { canonicalDesired.Location = rawInitial.Location } else { canonicalDesired.Location = rawDesired.Location } return canonicalDesired, nil } func canonicalizeJobNewState(c *Client, rawNew, rawDesired *Job) (*Job, error) { if dcl.IsEmptyValueIndirect(rawNew.Name) && dcl.IsEmptyValueIndirect(rawDesired.Name) { rawNew.Name = rawDesired.Name } else { if dcl.PartialSelfLinkToSelfLink(rawDesired.Name, rawNew.Name) { rawNew.Name = rawDesired.Name } } if dcl.IsEmptyValueIndirect(rawNew.Uid) && dcl.IsEmptyValueIndirect(rawDesired.Uid) { rawNew.Uid = rawDesired.Uid } else { if dcl.StringCanonicalize(rawDesired.Uid, rawNew.Uid) { rawNew.Uid = rawDesired.Uid } } if dcl.IsEmptyValueIndirect(rawNew.Generation) && dcl.IsEmptyValueIndirect(rawDesired.Generation) { rawNew.Generation = rawDesired.Generation } else { } if dcl.IsEmptyValueIndirect(rawNew.Labels) && dcl.IsEmptyValueIndirect(rawDesired.Labels) { rawNew.Labels = rawDesired.Labels } else { } if dcl.IsEmptyValueIndirect(rawNew.Annotations) && dcl.IsEmptyValueIndirect(rawDesired.Annotations) { rawNew.Annotations = rawDesired.Annotations } else { } if dcl.IsEmptyValueIndirect(rawNew.CreateTime) && dcl.IsEmptyValueIndirect(rawDesired.CreateTime) { rawNew.CreateTime = rawDesired.CreateTime } else { } if dcl.IsEmptyValueIndirect(rawNew.UpdateTime) && dcl.IsEmptyValueIndirect(rawDesired.UpdateTime) { rawNew.UpdateTime = rawDesired.UpdateTime } else { } if dcl.IsEmptyValueIndirect(rawNew.DeleteTime) && dcl.IsEmptyValueIndirect(rawDesired.DeleteTime) { rawNew.DeleteTime = rawDesired.DeleteTime } else { } if dcl.IsEmptyValueIndirect(rawNew.ExpireTime) && dcl.IsEmptyValueIndirect(rawDesired.ExpireTime) { rawNew.ExpireTime = rawDesired.ExpireTime } else { } if dcl.IsEmptyValueIndirect(rawNew.Creator) && dcl.IsEmptyValueIndirect(rawDesired.Creator) { rawNew.Creator = rawDesired.Creator } else { if dcl.StringCanonicalize(rawDesired.Creator, rawNew.Creator) { rawNew.Creator = rawDesired.Creator } } if dcl.IsEmptyValueIndirect(rawNew.LastModifier) && dcl.IsEmptyValueIndirect(rawDesired.LastModifier) { rawNew.LastModifier = rawDesired.LastModifier } else { if dcl.StringCanonicalize(rawDesired.LastModifier, rawNew.LastModifier) { rawNew.LastModifier = rawDesired.LastModifier } } if dcl.IsEmptyValueIndirect(rawNew.Client) && dcl.IsEmptyValueIndirect(rawDesired.Client) { rawNew.Client = rawDesired.Client } else { if dcl.StringCanonicalize(rawDesired.Client, rawNew.Client) { rawNew.Client = rawDesired.Client } } if dcl.IsEmptyValueIndirect(rawNew.ClientVersion) && dcl.IsEmptyValueIndirect(rawDesired.ClientVersion) { rawNew.ClientVersion = rawDesired.ClientVersion } else { if dcl.StringCanonicalize(rawDesired.ClientVersion, rawNew.ClientVersion) { rawNew.ClientVersion = rawDesired.ClientVersion } } if dcl.IsEmptyValueIndirect(rawNew.LaunchStage) && dcl.IsEmptyValueIndirect(rawDesired.LaunchStage) { rawNew.LaunchStage = rawDesired.LaunchStage } else { } if dcl.IsEmptyValueIndirect(rawNew.BinaryAuthorization) && dcl.IsEmptyValueIndirect(rawDesired.BinaryAuthorization) { rawNew.BinaryAuthorization = rawDesired.BinaryAuthorization } else { rawNew.BinaryAuthorization = canonicalizeNewJobBinaryAuthorization(c, rawDesired.BinaryAuthorization, rawNew.BinaryAuthorization) } if dcl.IsEmptyValueIndirect(rawNew.Template) && dcl.IsEmptyValueIndirect(rawDesired.Template) { rawNew.Template = rawDesired.Template } else { rawNew.Template = canonicalizeNewJobTemplate(c, rawDesired.Template, rawNew.Template) } if dcl.IsEmptyValueIndirect(rawNew.ObservedGeneration) && dcl.IsEmptyValueIndirect(rawDesired.ObservedGeneration) { rawNew.ObservedGeneration = rawDesired.ObservedGeneration } else { } if dcl.IsEmptyValueIndirect(rawNew.TerminalCondition) && dcl.IsEmptyValueIndirect(rawDesired.TerminalCondition) { rawNew.TerminalCondition = rawDesired.TerminalCondition } else { rawNew.TerminalCondition = canonicalizeNewJobTerminalCondition(c, rawDesired.TerminalCondition, rawNew.TerminalCondition) } if dcl.IsEmptyValueIndirect(rawNew.Conditions) && dcl.IsEmptyValueIndirect(rawDesired.Conditions) { rawNew.Conditions = rawDesired.Conditions } else { rawNew.Conditions = canonicalizeNewJobConditionsSlice(c, rawDesired.Conditions, rawNew.Conditions) } if dcl.IsEmptyValueIndirect(rawNew.ExecutionCount) && dcl.IsEmptyValueIndirect(rawDesired.ExecutionCount) { rawNew.ExecutionCount = rawDesired.ExecutionCount } else { } if dcl.IsEmptyValueIndirect(rawNew.LatestSucceededExecution) && dcl.IsEmptyValueIndirect(rawDesired.LatestSucceededExecution) { rawNew.LatestSucceededExecution = rawDesired.LatestSucceededExecution } else { rawNew.LatestSucceededExecution = canonicalizeNewJobLatestSucceededExecution(c, rawDesired.LatestSucceededExecution, rawNew.LatestSucceededExecution) } if dcl.IsEmptyValueIndirect(rawNew.LatestCreatedExecution) && dcl.IsEmptyValueIndirect(rawDesired.LatestCreatedExecution) { rawNew.LatestCreatedExecution = rawDesired.LatestCreatedExecution } else { rawNew.LatestCreatedExecution = canonicalizeNewJobLatestCreatedExecution(c, rawDesired.LatestCreatedExecution, rawNew.LatestCreatedExecution) } if dcl.IsEmptyValueIndirect(rawNew.Reconciling) && dcl.IsEmptyValueIndirect(rawDesired.Reconciling) { rawNew.Reconciling = rawDesired.Reconciling } else { if dcl.BoolCanonicalize(rawDesired.Reconciling, rawNew.Reconciling) { rawNew.Reconciling = rawDesired.Reconciling } } if dcl.IsEmptyValueIndirect(rawNew.Etag) && dcl.IsEmptyValueIndirect(rawDesired.Etag) { rawNew.Etag = rawDesired.Etag } else { if dcl.StringCanonicalize(rawDesired.Etag, rawNew.Etag) { rawNew.Etag = rawDesired.Etag } } rawNew.Project = rawDesired.Project rawNew.Location = rawDesired.Location return rawNew, nil } func canonicalizeJobBinaryAuthorization(des, initial *JobBinaryAuthorization, opts ...dcl.ApplyOption) *JobBinaryAuthorization { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobBinaryAuthorization{} if dcl.BoolCanonicalize(des.UseDefault, initial.UseDefault) || dcl.IsZeroValue(des.UseDefault) { cDes.UseDefault = initial.UseDefault } else { cDes.UseDefault = des.UseDefault } if dcl.StringCanonicalize(des.BreakglassJustification, initial.BreakglassJustification) || dcl.IsZeroValue(des.BreakglassJustification) { cDes.BreakglassJustification = initial.BreakglassJustification } else { cDes.BreakglassJustification = des.BreakglassJustification } return cDes } func canonicalizeJobBinaryAuthorizationSlice(des, initial []JobBinaryAuthorization, opts ...dcl.ApplyOption) []JobBinaryAuthorization { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobBinaryAuthorization, 0, len(des)) for _, d := range des { cd := canonicalizeJobBinaryAuthorization(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobBinaryAuthorization, 0, len(des)) for i, d := range des { cd := canonicalizeJobBinaryAuthorization(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobBinaryAuthorization(c *Client, des, nw *JobBinaryAuthorization) *JobBinaryAuthorization { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobBinaryAuthorization while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.BoolCanonicalize(des.UseDefault, nw.UseDefault) { nw.UseDefault = des.UseDefault } if dcl.StringCanonicalize(des.BreakglassJustification, nw.BreakglassJustification) { nw.BreakglassJustification = des.BreakglassJustification } return nw } func canonicalizeNewJobBinaryAuthorizationSet(c *Client, des, nw []JobBinaryAuthorization) []JobBinaryAuthorization { 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 []JobBinaryAuthorization for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobBinaryAuthorizationNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobBinaryAuthorization(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 canonicalizeNewJobBinaryAuthorizationSlice(c *Client, des, nw []JobBinaryAuthorization) []JobBinaryAuthorization { 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 []JobBinaryAuthorization for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobBinaryAuthorization(c, &d, &n)) } return items } func canonicalizeJobTemplate(des, initial *JobTemplate, opts ...dcl.ApplyOption) *JobTemplate { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplate{} if dcl.IsZeroValue(des.Labels) || (dcl.IsEmptyValueIndirect(des.Labels) && dcl.IsEmptyValueIndirect(initial.Labels)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Labels = initial.Labels } else { cDes.Labels = des.Labels } if dcl.IsZeroValue(des.Annotations) || (dcl.IsEmptyValueIndirect(des.Annotations) && dcl.IsEmptyValueIndirect(initial.Annotations)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Annotations = initial.Annotations } else { cDes.Annotations = des.Annotations } if dcl.IsZeroValue(des.Parallelism) || (dcl.IsEmptyValueIndirect(des.Parallelism) && dcl.IsEmptyValueIndirect(initial.Parallelism)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Parallelism = initial.Parallelism } else { cDes.Parallelism = des.Parallelism } if dcl.IsZeroValue(des.TaskCount) || (dcl.IsEmptyValueIndirect(des.TaskCount) && dcl.IsEmptyValueIndirect(initial.TaskCount)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.TaskCount = initial.TaskCount } else { cDes.TaskCount = des.TaskCount } cDes.Template = canonicalizeJobTemplateTemplate(des.Template, initial.Template, opts...) return cDes } func canonicalizeJobTemplateSlice(des, initial []JobTemplate, opts ...dcl.ApplyOption) []JobTemplate { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplate, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplate(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplate, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplate(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplate(c *Client, des, nw *JobTemplate) *JobTemplate { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplate while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } nw.Template = canonicalizeNewJobTemplateTemplate(c, des.Template, nw.Template) return nw } func canonicalizeNewJobTemplateSet(c *Client, des, nw []JobTemplate) []JobTemplate { 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 []JobTemplate for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplate(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 canonicalizeNewJobTemplateSlice(c *Client, des, nw []JobTemplate) []JobTemplate { 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 []JobTemplate for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplate(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplate(des, initial *JobTemplateTemplate, opts ...dcl.ApplyOption) *JobTemplateTemplate { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplate{} cDes.Containers = canonicalizeJobTemplateTemplateContainersSlice(des.Containers, initial.Containers, opts...) cDes.Volumes = canonicalizeJobTemplateTemplateVolumesSlice(des.Volumes, initial.Volumes, opts...) if dcl.IsZeroValue(des.MaxRetries) || (dcl.IsEmptyValueIndirect(des.MaxRetries) && dcl.IsEmptyValueIndirect(initial.MaxRetries)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.MaxRetries = initial.MaxRetries } else { cDes.MaxRetries = des.MaxRetries } if dcl.StringCanonicalize(des.Timeout, initial.Timeout) || dcl.IsZeroValue(des.Timeout) { cDes.Timeout = initial.Timeout } else { cDes.Timeout = des.Timeout } if dcl.StringCanonicalize(des.ServiceAccount, initial.ServiceAccount) || dcl.IsZeroValue(des.ServiceAccount) { cDes.ServiceAccount = initial.ServiceAccount } else { cDes.ServiceAccount = des.ServiceAccount } if dcl.IsZeroValue(des.ExecutionEnvironment) || (dcl.IsEmptyValueIndirect(des.ExecutionEnvironment) && dcl.IsEmptyValueIndirect(initial.ExecutionEnvironment)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.ExecutionEnvironment = initial.ExecutionEnvironment } else { cDes.ExecutionEnvironment = des.ExecutionEnvironment } if dcl.IsZeroValue(des.EncryptionKey) || (dcl.IsEmptyValueIndirect(des.EncryptionKey) && dcl.IsEmptyValueIndirect(initial.EncryptionKey)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.EncryptionKey = initial.EncryptionKey } else { cDes.EncryptionKey = des.EncryptionKey } cDes.VPCAccess = canonicalizeJobTemplateTemplateVPCAccess(des.VPCAccess, initial.VPCAccess, opts...) return cDes } func canonicalizeJobTemplateTemplateSlice(des, initial []JobTemplateTemplate, opts ...dcl.ApplyOption) []JobTemplateTemplate { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplate, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplate(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplate, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplate(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplate(c *Client, des, nw *JobTemplateTemplate) *JobTemplateTemplate { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplate while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } nw.Containers = canonicalizeNewJobTemplateTemplateContainersSlice(c, des.Containers, nw.Containers) nw.Volumes = canonicalizeNewJobTemplateTemplateVolumesSlice(c, des.Volumes, nw.Volumes) if dcl.StringCanonicalize(des.Timeout, nw.Timeout) { nw.Timeout = des.Timeout } if dcl.StringCanonicalize(des.ServiceAccount, nw.ServiceAccount) { nw.ServiceAccount = des.ServiceAccount } nw.VPCAccess = canonicalizeNewJobTemplateTemplateVPCAccess(c, des.VPCAccess, nw.VPCAccess) return nw } func canonicalizeNewJobTemplateTemplateSet(c *Client, des, nw []JobTemplateTemplate) []JobTemplateTemplate { 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 []JobTemplateTemplate for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplate(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 canonicalizeNewJobTemplateTemplateSlice(c *Client, des, nw []JobTemplateTemplate) []JobTemplateTemplate { 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 []JobTemplateTemplate for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplate(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateContainers(des, initial *JobTemplateTemplateContainers, opts ...dcl.ApplyOption) *JobTemplateTemplateContainers { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateContainers{} if dcl.StringCanonicalize(des.Name, initial.Name) || dcl.IsZeroValue(des.Name) { cDes.Name = initial.Name } else { cDes.Name = des.Name } if dcl.StringCanonicalize(des.Image, initial.Image) || dcl.IsZeroValue(des.Image) { cDes.Image = initial.Image } else { cDes.Image = des.Image } if dcl.StringArrayCanonicalize(des.Command, initial.Command) { cDes.Command = initial.Command } else { cDes.Command = des.Command } if dcl.StringArrayCanonicalize(des.Args, initial.Args) { cDes.Args = initial.Args } else { cDes.Args = des.Args } cDes.Env = canonicalizeJobTemplateTemplateContainersEnvSlice(des.Env, initial.Env, opts...) cDes.Resources = canonicalizeJobTemplateTemplateContainersResources(des.Resources, initial.Resources, opts...) cDes.Ports = canonicalizeJobTemplateTemplateContainersPortsSlice(des.Ports, initial.Ports, opts...) cDes.VolumeMounts = canonicalizeJobTemplateTemplateContainersVolumeMountsSlice(des.VolumeMounts, initial.VolumeMounts, opts...) return cDes } func canonicalizeJobTemplateTemplateContainersSlice(des, initial []JobTemplateTemplateContainers, opts ...dcl.ApplyOption) []JobTemplateTemplateContainers { if des == nil { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateContainers, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateContainers(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateContainers, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateContainers(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateContainers(c *Client, des, nw *JobTemplateTemplateContainers) *JobTemplateTemplateContainers { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateContainers while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Name, nw.Name) { nw.Name = des.Name } if dcl.StringCanonicalize(des.Image, nw.Image) { nw.Image = des.Image } if dcl.StringArrayCanonicalize(des.Command, nw.Command) { nw.Command = des.Command } if dcl.StringArrayCanonicalize(des.Args, nw.Args) { nw.Args = des.Args } nw.Env = canonicalizeNewJobTemplateTemplateContainersEnvSlice(c, des.Env, nw.Env) nw.Resources = canonicalizeNewJobTemplateTemplateContainersResources(c, des.Resources, nw.Resources) nw.Ports = canonicalizeNewJobTemplateTemplateContainersPortsSlice(c, des.Ports, nw.Ports) nw.VolumeMounts = canonicalizeNewJobTemplateTemplateContainersVolumeMountsSlice(c, des.VolumeMounts, nw.VolumeMounts) return nw } func canonicalizeNewJobTemplateTemplateContainersSet(c *Client, des, nw []JobTemplateTemplateContainers) []JobTemplateTemplateContainers { 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 []JobTemplateTemplateContainers for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateContainersNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateContainers(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 canonicalizeNewJobTemplateTemplateContainersSlice(c *Client, des, nw []JobTemplateTemplateContainers) []JobTemplateTemplateContainers { 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 []JobTemplateTemplateContainers for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateContainers(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateContainersEnv(des, initial *JobTemplateTemplateContainersEnv, opts ...dcl.ApplyOption) *JobTemplateTemplateContainersEnv { if des == nil { return initial } if des.empty { return des } if des.Value != nil || (initial != nil && initial.Value != nil) { // Check if anything else is set. if dcl.AnySet(des.ValueSource) { des.Value = nil if initial != nil { initial.Value = nil } } } if des.ValueSource != nil || (initial != nil && initial.ValueSource != nil) { // Check if anything else is set. if dcl.AnySet(des.Value) { des.ValueSource = nil if initial != nil { initial.ValueSource = nil } } } if initial == nil { return des } cDes := &JobTemplateTemplateContainersEnv{} if dcl.StringCanonicalize(des.Name, initial.Name) || dcl.IsZeroValue(des.Name) { cDes.Name = initial.Name } else { cDes.Name = des.Name } if dcl.StringCanonicalize(des.Value, initial.Value) || dcl.IsZeroValue(des.Value) { cDes.Value = initial.Value } else { cDes.Value = des.Value } cDes.ValueSource = canonicalizeJobTemplateTemplateContainersEnvValueSource(des.ValueSource, initial.ValueSource, opts...) return cDes } func canonicalizeJobTemplateTemplateContainersEnvSlice(des, initial []JobTemplateTemplateContainersEnv, opts ...dcl.ApplyOption) []JobTemplateTemplateContainersEnv { if des == nil { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateContainersEnv, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateContainersEnv(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateContainersEnv, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateContainersEnv(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateContainersEnv(c *Client, des, nw *JobTemplateTemplateContainersEnv) *JobTemplateTemplateContainersEnv { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateContainersEnv while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Name, nw.Name) { nw.Name = des.Name } if dcl.StringCanonicalize(des.Value, nw.Value) { nw.Value = des.Value } nw.ValueSource = canonicalizeNewJobTemplateTemplateContainersEnvValueSource(c, des.ValueSource, nw.ValueSource) return nw } func canonicalizeNewJobTemplateTemplateContainersEnvSet(c *Client, des, nw []JobTemplateTemplateContainersEnv) []JobTemplateTemplateContainersEnv { 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 []JobTemplateTemplateContainersEnv for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateContainersEnvNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateContainersEnv(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 canonicalizeNewJobTemplateTemplateContainersEnvSlice(c *Client, des, nw []JobTemplateTemplateContainersEnv) []JobTemplateTemplateContainersEnv { 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 []JobTemplateTemplateContainersEnv for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateContainersEnv(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateContainersEnvValueSource(des, initial *JobTemplateTemplateContainersEnvValueSource, opts ...dcl.ApplyOption) *JobTemplateTemplateContainersEnvValueSource { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateContainersEnvValueSource{} cDes.SecretKeyRef = canonicalizeJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(des.SecretKeyRef, initial.SecretKeyRef, opts...) return cDes } func canonicalizeJobTemplateTemplateContainersEnvValueSourceSlice(des, initial []JobTemplateTemplateContainersEnvValueSource, opts ...dcl.ApplyOption) []JobTemplateTemplateContainersEnvValueSource { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateContainersEnvValueSource, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateContainersEnvValueSource(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateContainersEnvValueSource, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateContainersEnvValueSource(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateContainersEnvValueSource(c *Client, des, nw *JobTemplateTemplateContainersEnvValueSource) *JobTemplateTemplateContainersEnvValueSource { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateContainersEnvValueSource while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } nw.SecretKeyRef = canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, des.SecretKeyRef, nw.SecretKeyRef) return nw } func canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSet(c *Client, des, nw []JobTemplateTemplateContainersEnvValueSource) []JobTemplateTemplateContainersEnvValueSource { 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 []JobTemplateTemplateContainersEnvValueSource for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateContainersEnvValueSourceNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateContainersEnvValueSource(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 canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSlice(c *Client, des, nw []JobTemplateTemplateContainersEnvValueSource) []JobTemplateTemplateContainersEnvValueSource { 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 []JobTemplateTemplateContainersEnvValueSource for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateContainersEnvValueSource(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(des, initial *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, opts ...dcl.ApplyOption) *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} if dcl.IsZeroValue(des.Secret) || (dcl.IsEmptyValueIndirect(des.Secret) && dcl.IsEmptyValueIndirect(initial.Secret)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Secret = initial.Secret } else { cDes.Secret = des.Secret } if dcl.IsZeroValue(des.Version) || (dcl.IsEmptyValueIndirect(des.Version) && dcl.IsEmptyValueIndirect(initial.Version)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Version = initial.Version } else { cDes.Version = des.Version } return cDes } func canonicalizeJobTemplateTemplateContainersEnvValueSourceSecretKeyRefSlice(des, initial []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, opts ...dcl.ApplyOption) []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c *Client, des, nw *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateContainersEnvValueSourceSecretKeyRef while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSecretKeyRefSet(c *Client, des, nw []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { 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 []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateContainersEnvValueSourceSecretKeyRefNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(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 canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSecretKeyRefSlice(c *Client, des, nw []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { 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 []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateContainersResources(des, initial *JobTemplateTemplateContainersResources, opts ...dcl.ApplyOption) *JobTemplateTemplateContainersResources { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateContainersResources{} if dcl.IsZeroValue(des.Limits) || (dcl.IsEmptyValueIndirect(des.Limits) && dcl.IsEmptyValueIndirect(initial.Limits)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Limits = initial.Limits } else { cDes.Limits = des.Limits } if dcl.BoolCanonicalize(des.CpuIdle, initial.CpuIdle) || dcl.IsZeroValue(des.CpuIdle) { cDes.CpuIdle = initial.CpuIdle } else { cDes.CpuIdle = des.CpuIdle } return cDes } func canonicalizeJobTemplateTemplateContainersResourcesSlice(des, initial []JobTemplateTemplateContainersResources, opts ...dcl.ApplyOption) []JobTemplateTemplateContainersResources { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateContainersResources, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateContainersResources(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateContainersResources, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateContainersResources(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateContainersResources(c *Client, des, nw *JobTemplateTemplateContainersResources) *JobTemplateTemplateContainersResources { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateContainersResources while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.BoolCanonicalize(des.CpuIdle, nw.CpuIdle) { nw.CpuIdle = des.CpuIdle } return nw } func canonicalizeNewJobTemplateTemplateContainersResourcesSet(c *Client, des, nw []JobTemplateTemplateContainersResources) []JobTemplateTemplateContainersResources { 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 []JobTemplateTemplateContainersResources for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateContainersResourcesNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateContainersResources(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 canonicalizeNewJobTemplateTemplateContainersResourcesSlice(c *Client, des, nw []JobTemplateTemplateContainersResources) []JobTemplateTemplateContainersResources { 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 []JobTemplateTemplateContainersResources for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateContainersResources(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateContainersPorts(des, initial *JobTemplateTemplateContainersPorts, opts ...dcl.ApplyOption) *JobTemplateTemplateContainersPorts { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateContainersPorts{} if dcl.StringCanonicalize(des.Name, initial.Name) || dcl.IsZeroValue(des.Name) { cDes.Name = initial.Name } else { cDes.Name = des.Name } if dcl.IsZeroValue(des.ContainerPort) || (dcl.IsEmptyValueIndirect(des.ContainerPort) && dcl.IsEmptyValueIndirect(initial.ContainerPort)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.ContainerPort = initial.ContainerPort } else { cDes.ContainerPort = des.ContainerPort } return cDes } func canonicalizeJobTemplateTemplateContainersPortsSlice(des, initial []JobTemplateTemplateContainersPorts, opts ...dcl.ApplyOption) []JobTemplateTemplateContainersPorts { if des == nil { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateContainersPorts, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateContainersPorts(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateContainersPorts, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateContainersPorts(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateContainersPorts(c *Client, des, nw *JobTemplateTemplateContainersPorts) *JobTemplateTemplateContainersPorts { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateContainersPorts while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Name, nw.Name) { nw.Name = des.Name } return nw } func canonicalizeNewJobTemplateTemplateContainersPortsSet(c *Client, des, nw []JobTemplateTemplateContainersPorts) []JobTemplateTemplateContainersPorts { 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 []JobTemplateTemplateContainersPorts for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateContainersPortsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateContainersPorts(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 canonicalizeNewJobTemplateTemplateContainersPortsSlice(c *Client, des, nw []JobTemplateTemplateContainersPorts) []JobTemplateTemplateContainersPorts { 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 []JobTemplateTemplateContainersPorts for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateContainersPorts(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateContainersVolumeMounts(des, initial *JobTemplateTemplateContainersVolumeMounts, opts ...dcl.ApplyOption) *JobTemplateTemplateContainersVolumeMounts { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateContainersVolumeMounts{} if dcl.StringCanonicalize(des.Name, initial.Name) || dcl.IsZeroValue(des.Name) { cDes.Name = initial.Name } else { cDes.Name = des.Name } if dcl.StringCanonicalize(des.MountPath, initial.MountPath) || dcl.IsZeroValue(des.MountPath) { cDes.MountPath = initial.MountPath } else { cDes.MountPath = des.MountPath } return cDes } func canonicalizeJobTemplateTemplateContainersVolumeMountsSlice(des, initial []JobTemplateTemplateContainersVolumeMounts, opts ...dcl.ApplyOption) []JobTemplateTemplateContainersVolumeMounts { if des == nil { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateContainersVolumeMounts, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateContainersVolumeMounts(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateContainersVolumeMounts, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateContainersVolumeMounts(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateContainersVolumeMounts(c *Client, des, nw *JobTemplateTemplateContainersVolumeMounts) *JobTemplateTemplateContainersVolumeMounts { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateContainersVolumeMounts while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Name, nw.Name) { nw.Name = des.Name } if dcl.StringCanonicalize(des.MountPath, nw.MountPath) { nw.MountPath = des.MountPath } return nw } func canonicalizeNewJobTemplateTemplateContainersVolumeMountsSet(c *Client, des, nw []JobTemplateTemplateContainersVolumeMounts) []JobTemplateTemplateContainersVolumeMounts { 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 []JobTemplateTemplateContainersVolumeMounts for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateContainersVolumeMountsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateContainersVolumeMounts(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 canonicalizeNewJobTemplateTemplateContainersVolumeMountsSlice(c *Client, des, nw []JobTemplateTemplateContainersVolumeMounts) []JobTemplateTemplateContainersVolumeMounts { 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 []JobTemplateTemplateContainersVolumeMounts for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateContainersVolumeMounts(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateVolumes(des, initial *JobTemplateTemplateVolumes, opts ...dcl.ApplyOption) *JobTemplateTemplateVolumes { if des == nil { return initial } if des.empty { return des } if des.Secret != nil || (initial != nil && initial.Secret != nil) { // Check if anything else is set. if dcl.AnySet(des.CloudSqlInstance) { des.Secret = nil if initial != nil { initial.Secret = nil } } } if des.CloudSqlInstance != nil || (initial != nil && initial.CloudSqlInstance != nil) { // Check if anything else is set. if dcl.AnySet(des.Secret) { des.CloudSqlInstance = nil if initial != nil { initial.CloudSqlInstance = nil } } } if initial == nil { return des } cDes := &JobTemplateTemplateVolumes{} if dcl.StringCanonicalize(des.Name, initial.Name) || dcl.IsZeroValue(des.Name) { cDes.Name = initial.Name } else { cDes.Name = des.Name } cDes.Secret = canonicalizeJobTemplateTemplateVolumesSecret(des.Secret, initial.Secret, opts...) cDes.CloudSqlInstance = canonicalizeJobTemplateTemplateVolumesCloudSqlInstance(des.CloudSqlInstance, initial.CloudSqlInstance, opts...) return cDes } func canonicalizeJobTemplateTemplateVolumesSlice(des, initial []JobTemplateTemplateVolumes, opts ...dcl.ApplyOption) []JobTemplateTemplateVolumes { if des == nil { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateVolumes, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateVolumes(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateVolumes, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateVolumes(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateVolumes(c *Client, des, nw *JobTemplateTemplateVolumes) *JobTemplateTemplateVolumes { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateVolumes while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Name, nw.Name) { nw.Name = des.Name } nw.Secret = canonicalizeNewJobTemplateTemplateVolumesSecret(c, des.Secret, nw.Secret) nw.CloudSqlInstance = canonicalizeNewJobTemplateTemplateVolumesCloudSqlInstance(c, des.CloudSqlInstance, nw.CloudSqlInstance) return nw } func canonicalizeNewJobTemplateTemplateVolumesSet(c *Client, des, nw []JobTemplateTemplateVolumes) []JobTemplateTemplateVolumes { 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 []JobTemplateTemplateVolumes for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateVolumesNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateVolumes(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 canonicalizeNewJobTemplateTemplateVolumesSlice(c *Client, des, nw []JobTemplateTemplateVolumes) []JobTemplateTemplateVolumes { 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 []JobTemplateTemplateVolumes for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateVolumes(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateVolumesSecret(des, initial *JobTemplateTemplateVolumesSecret, opts ...dcl.ApplyOption) *JobTemplateTemplateVolumesSecret { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateVolumesSecret{} if dcl.StringCanonicalize(des.Secret, initial.Secret) || dcl.IsZeroValue(des.Secret) { cDes.Secret = initial.Secret } else { cDes.Secret = des.Secret } cDes.Items = canonicalizeJobTemplateTemplateVolumesSecretItemsSlice(des.Items, initial.Items, opts...) if dcl.IsZeroValue(des.DefaultMode) || (dcl.IsEmptyValueIndirect(des.DefaultMode) && dcl.IsEmptyValueIndirect(initial.DefaultMode)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.DefaultMode = initial.DefaultMode } else { cDes.DefaultMode = des.DefaultMode } return cDes } func canonicalizeJobTemplateTemplateVolumesSecretSlice(des, initial []JobTemplateTemplateVolumesSecret, opts ...dcl.ApplyOption) []JobTemplateTemplateVolumesSecret { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateVolumesSecret, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateVolumesSecret(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateVolumesSecret, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateVolumesSecret(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateVolumesSecret(c *Client, des, nw *JobTemplateTemplateVolumesSecret) *JobTemplateTemplateVolumesSecret { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateVolumesSecret while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Secret, nw.Secret) { nw.Secret = des.Secret } nw.Items = canonicalizeNewJobTemplateTemplateVolumesSecretItemsSlice(c, des.Items, nw.Items) return nw } func canonicalizeNewJobTemplateTemplateVolumesSecretSet(c *Client, des, nw []JobTemplateTemplateVolumesSecret) []JobTemplateTemplateVolumesSecret { 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 []JobTemplateTemplateVolumesSecret for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateVolumesSecretNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateVolumesSecret(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 canonicalizeNewJobTemplateTemplateVolumesSecretSlice(c *Client, des, nw []JobTemplateTemplateVolumesSecret) []JobTemplateTemplateVolumesSecret { 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 []JobTemplateTemplateVolumesSecret for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateVolumesSecret(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateVolumesSecretItems(des, initial *JobTemplateTemplateVolumesSecretItems, opts ...dcl.ApplyOption) *JobTemplateTemplateVolumesSecretItems { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateVolumesSecretItems{} if dcl.StringCanonicalize(des.Path, initial.Path) || dcl.IsZeroValue(des.Path) { cDes.Path = initial.Path } else { cDes.Path = des.Path } if dcl.StringCanonicalize(des.Version, initial.Version) || dcl.IsZeroValue(des.Version) { cDes.Version = initial.Version } else { cDes.Version = des.Version } if dcl.IsZeroValue(des.Mode) || (dcl.IsEmptyValueIndirect(des.Mode) && dcl.IsEmptyValueIndirect(initial.Mode)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Mode = initial.Mode } else { cDes.Mode = des.Mode } return cDes } func canonicalizeJobTemplateTemplateVolumesSecretItemsSlice(des, initial []JobTemplateTemplateVolumesSecretItems, opts ...dcl.ApplyOption) []JobTemplateTemplateVolumesSecretItems { if des == nil { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateVolumesSecretItems, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateVolumesSecretItems(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateVolumesSecretItems, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateVolumesSecretItems(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateVolumesSecretItems(c *Client, des, nw *JobTemplateTemplateVolumesSecretItems) *JobTemplateTemplateVolumesSecretItems { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateVolumesSecretItems while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Path, nw.Path) { nw.Path = des.Path } if dcl.StringCanonicalize(des.Version, nw.Version) { nw.Version = des.Version } return nw } func canonicalizeNewJobTemplateTemplateVolumesSecretItemsSet(c *Client, des, nw []JobTemplateTemplateVolumesSecretItems) []JobTemplateTemplateVolumesSecretItems { 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 []JobTemplateTemplateVolumesSecretItems for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateVolumesSecretItemsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateVolumesSecretItems(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 canonicalizeNewJobTemplateTemplateVolumesSecretItemsSlice(c *Client, des, nw []JobTemplateTemplateVolumesSecretItems) []JobTemplateTemplateVolumesSecretItems { 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 []JobTemplateTemplateVolumesSecretItems for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateVolumesSecretItems(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateVolumesCloudSqlInstance(des, initial *JobTemplateTemplateVolumesCloudSqlInstance, opts ...dcl.ApplyOption) *JobTemplateTemplateVolumesCloudSqlInstance { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateVolumesCloudSqlInstance{} if dcl.StringArrayCanonicalize(des.Instances, initial.Instances) { cDes.Instances = initial.Instances } else { cDes.Instances = des.Instances } return cDes } func canonicalizeJobTemplateTemplateVolumesCloudSqlInstanceSlice(des, initial []JobTemplateTemplateVolumesCloudSqlInstance, opts ...dcl.ApplyOption) []JobTemplateTemplateVolumesCloudSqlInstance { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateVolumesCloudSqlInstance, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateVolumesCloudSqlInstance(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateVolumesCloudSqlInstance, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateVolumesCloudSqlInstance(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateVolumesCloudSqlInstance(c *Client, des, nw *JobTemplateTemplateVolumesCloudSqlInstance) *JobTemplateTemplateVolumesCloudSqlInstance { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateVolumesCloudSqlInstance while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringArrayCanonicalize(des.Instances, nw.Instances) { nw.Instances = des.Instances } return nw } func canonicalizeNewJobTemplateTemplateVolumesCloudSqlInstanceSet(c *Client, des, nw []JobTemplateTemplateVolumesCloudSqlInstance) []JobTemplateTemplateVolumesCloudSqlInstance { 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 []JobTemplateTemplateVolumesCloudSqlInstance for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateVolumesCloudSqlInstanceNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateVolumesCloudSqlInstance(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 canonicalizeNewJobTemplateTemplateVolumesCloudSqlInstanceSlice(c *Client, des, nw []JobTemplateTemplateVolumesCloudSqlInstance) []JobTemplateTemplateVolumesCloudSqlInstance { 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 []JobTemplateTemplateVolumesCloudSqlInstance for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateVolumesCloudSqlInstance(c, &d, &n)) } return items } func canonicalizeJobTemplateTemplateVPCAccess(des, initial *JobTemplateTemplateVPCAccess, opts ...dcl.ApplyOption) *JobTemplateTemplateVPCAccess { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobTemplateTemplateVPCAccess{} if dcl.IsZeroValue(des.Connector) || (dcl.IsEmptyValueIndirect(des.Connector) && dcl.IsEmptyValueIndirect(initial.Connector)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Connector = initial.Connector } else { cDes.Connector = des.Connector } if dcl.IsZeroValue(des.Egress) || (dcl.IsEmptyValueIndirect(des.Egress) && dcl.IsEmptyValueIndirect(initial.Egress)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Egress = initial.Egress } else { cDes.Egress = des.Egress } return cDes } func canonicalizeJobTemplateTemplateVPCAccessSlice(des, initial []JobTemplateTemplateVPCAccess, opts ...dcl.ApplyOption) []JobTemplateTemplateVPCAccess { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTemplateTemplateVPCAccess, 0, len(des)) for _, d := range des { cd := canonicalizeJobTemplateTemplateVPCAccess(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTemplateTemplateVPCAccess, 0, len(des)) for i, d := range des { cd := canonicalizeJobTemplateTemplateVPCAccess(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTemplateTemplateVPCAccess(c *Client, des, nw *JobTemplateTemplateVPCAccess) *JobTemplateTemplateVPCAccess { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTemplateTemplateVPCAccess while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewJobTemplateTemplateVPCAccessSet(c *Client, des, nw []JobTemplateTemplateVPCAccess) []JobTemplateTemplateVPCAccess { 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 []JobTemplateTemplateVPCAccess for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTemplateTemplateVPCAccessNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTemplateTemplateVPCAccess(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 canonicalizeNewJobTemplateTemplateVPCAccessSlice(c *Client, des, nw []JobTemplateTemplateVPCAccess) []JobTemplateTemplateVPCAccess { 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 []JobTemplateTemplateVPCAccess for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTemplateTemplateVPCAccess(c, &d, &n)) } return items } func canonicalizeJobTerminalCondition(des, initial *JobTerminalCondition, opts ...dcl.ApplyOption) *JobTerminalCondition { if des == nil { return initial } if des.empty { return des } if des.Reason != nil || (initial != nil && initial.Reason != nil) { // Check if anything else is set. if dcl.AnySet(des.InternalReason, des.DomainMappingReason, des.RevisionReason, des.ExecutionReason) { des.Reason = nil if initial != nil { initial.Reason = nil } } } if des.InternalReason != nil || (initial != nil && initial.InternalReason != nil) { // Check if anything else is set. if dcl.AnySet(des.Reason, des.DomainMappingReason, des.RevisionReason, des.ExecutionReason) { des.InternalReason = nil if initial != nil { initial.InternalReason = nil } } } if des.DomainMappingReason != nil || (initial != nil && initial.DomainMappingReason != nil) { // Check if anything else is set. if dcl.AnySet(des.Reason, des.InternalReason, des.RevisionReason, des.ExecutionReason) { des.DomainMappingReason = nil if initial != nil { initial.DomainMappingReason = nil } } } if des.RevisionReason != nil || (initial != nil && initial.RevisionReason != nil) { // Check if anything else is set. if dcl.AnySet(des.Reason, des.InternalReason, des.DomainMappingReason, des.ExecutionReason) { des.RevisionReason = nil if initial != nil { initial.RevisionReason = nil } } } if des.ExecutionReason != nil || (initial != nil && initial.ExecutionReason != nil) { // Check if anything else is set. if dcl.AnySet(des.Reason, des.InternalReason, des.DomainMappingReason, des.RevisionReason) { des.ExecutionReason = nil if initial != nil { initial.ExecutionReason = nil } } } if initial == nil { return des } cDes := &JobTerminalCondition{} if dcl.StringCanonicalize(des.Type, initial.Type) || dcl.IsZeroValue(des.Type) { cDes.Type = initial.Type } else { cDes.Type = des.Type } if dcl.IsZeroValue(des.State) || (dcl.IsEmptyValueIndirect(des.State) && dcl.IsEmptyValueIndirect(initial.State)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.State = initial.State } else { cDes.State = des.State } if dcl.StringCanonicalize(des.Message, initial.Message) || dcl.IsZeroValue(des.Message) { cDes.Message = initial.Message } else { cDes.Message = des.Message } if dcl.IsZeroValue(des.LastTransitionTime) || (dcl.IsEmptyValueIndirect(des.LastTransitionTime) && dcl.IsEmptyValueIndirect(initial.LastTransitionTime)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.LastTransitionTime = initial.LastTransitionTime } else { cDes.LastTransitionTime = des.LastTransitionTime } if dcl.IsZeroValue(des.Severity) || (dcl.IsEmptyValueIndirect(des.Severity) && dcl.IsEmptyValueIndirect(initial.Severity)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Severity = initial.Severity } else { cDes.Severity = des.Severity } if dcl.IsZeroValue(des.Reason) || (dcl.IsEmptyValueIndirect(des.Reason) && dcl.IsEmptyValueIndirect(initial.Reason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Reason = initial.Reason } else { cDes.Reason = des.Reason } if dcl.IsZeroValue(des.InternalReason) || (dcl.IsEmptyValueIndirect(des.InternalReason) && dcl.IsEmptyValueIndirect(initial.InternalReason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.InternalReason = initial.InternalReason } else { cDes.InternalReason = des.InternalReason } if dcl.IsZeroValue(des.DomainMappingReason) || (dcl.IsEmptyValueIndirect(des.DomainMappingReason) && dcl.IsEmptyValueIndirect(initial.DomainMappingReason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.DomainMappingReason = initial.DomainMappingReason } else { cDes.DomainMappingReason = des.DomainMappingReason } if dcl.IsZeroValue(des.RevisionReason) || (dcl.IsEmptyValueIndirect(des.RevisionReason) && dcl.IsEmptyValueIndirect(initial.RevisionReason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.RevisionReason = initial.RevisionReason } else { cDes.RevisionReason = des.RevisionReason } if dcl.IsZeroValue(des.ExecutionReason) || (dcl.IsEmptyValueIndirect(des.ExecutionReason) && dcl.IsEmptyValueIndirect(initial.ExecutionReason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.ExecutionReason = initial.ExecutionReason } else { cDes.ExecutionReason = des.ExecutionReason } return cDes } func canonicalizeJobTerminalConditionSlice(des, initial []JobTerminalCondition, opts ...dcl.ApplyOption) []JobTerminalCondition { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobTerminalCondition, 0, len(des)) for _, d := range des { cd := canonicalizeJobTerminalCondition(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobTerminalCondition, 0, len(des)) for i, d := range des { cd := canonicalizeJobTerminalCondition(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobTerminalCondition(c *Client, des, nw *JobTerminalCondition) *JobTerminalCondition { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobTerminalCondition while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Type, nw.Type) { nw.Type = des.Type } if dcl.StringCanonicalize(des.Message, nw.Message) { nw.Message = des.Message } return nw } func canonicalizeNewJobTerminalConditionSet(c *Client, des, nw []JobTerminalCondition) []JobTerminalCondition { 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 []JobTerminalCondition for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobTerminalConditionNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobTerminalCondition(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 canonicalizeNewJobTerminalConditionSlice(c *Client, des, nw []JobTerminalCondition) []JobTerminalCondition { 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 []JobTerminalCondition for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobTerminalCondition(c, &d, &n)) } return items } func canonicalizeJobConditions(des, initial *JobConditions, opts ...dcl.ApplyOption) *JobConditions { if des == nil { return initial } if des.empty { return des } if des.Reason != nil || (initial != nil && initial.Reason != nil) { // Check if anything else is set. if dcl.AnySet(des.RevisionReason, des.ExecutionReason) { des.Reason = nil if initial != nil { initial.Reason = nil } } } if des.RevisionReason != nil || (initial != nil && initial.RevisionReason != nil) { // Check if anything else is set. if dcl.AnySet(des.Reason, des.ExecutionReason) { des.RevisionReason = nil if initial != nil { initial.RevisionReason = nil } } } if des.ExecutionReason != nil || (initial != nil && initial.ExecutionReason != nil) { // Check if anything else is set. if dcl.AnySet(des.Reason, des.RevisionReason) { des.ExecutionReason = nil if initial != nil { initial.ExecutionReason = nil } } } if initial == nil { return des } cDes := &JobConditions{} if dcl.StringCanonicalize(des.Type, initial.Type) || dcl.IsZeroValue(des.Type) { cDes.Type = initial.Type } else { cDes.Type = des.Type } if dcl.IsZeroValue(des.State) || (dcl.IsEmptyValueIndirect(des.State) && dcl.IsEmptyValueIndirect(initial.State)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.State = initial.State } else { cDes.State = des.State } if dcl.StringCanonicalize(des.Message, initial.Message) || dcl.IsZeroValue(des.Message) { cDes.Message = initial.Message } else { cDes.Message = des.Message } if dcl.IsZeroValue(des.LastTransitionTime) || (dcl.IsEmptyValueIndirect(des.LastTransitionTime) && dcl.IsEmptyValueIndirect(initial.LastTransitionTime)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.LastTransitionTime = initial.LastTransitionTime } else { cDes.LastTransitionTime = des.LastTransitionTime } if dcl.IsZeroValue(des.Severity) || (dcl.IsEmptyValueIndirect(des.Severity) && dcl.IsEmptyValueIndirect(initial.Severity)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Severity = initial.Severity } else { cDes.Severity = des.Severity } if dcl.IsZeroValue(des.Reason) || (dcl.IsEmptyValueIndirect(des.Reason) && dcl.IsEmptyValueIndirect(initial.Reason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Reason = initial.Reason } else { cDes.Reason = des.Reason } if dcl.IsZeroValue(des.RevisionReason) || (dcl.IsEmptyValueIndirect(des.RevisionReason) && dcl.IsEmptyValueIndirect(initial.RevisionReason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.RevisionReason = initial.RevisionReason } else { cDes.RevisionReason = des.RevisionReason } if dcl.IsZeroValue(des.ExecutionReason) || (dcl.IsEmptyValueIndirect(des.ExecutionReason) && dcl.IsEmptyValueIndirect(initial.ExecutionReason)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.ExecutionReason = initial.ExecutionReason } else { cDes.ExecutionReason = des.ExecutionReason } return cDes } func canonicalizeJobConditionsSlice(des, initial []JobConditions, opts ...dcl.ApplyOption) []JobConditions { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobConditions, 0, len(des)) for _, d := range des { cd := canonicalizeJobConditions(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobConditions, 0, len(des)) for i, d := range des { cd := canonicalizeJobConditions(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobConditions(c *Client, des, nw *JobConditions) *JobConditions { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobConditions while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } if dcl.StringCanonicalize(des.Type, nw.Type) { nw.Type = des.Type } if dcl.StringCanonicalize(des.Message, nw.Message) { nw.Message = des.Message } return nw } func canonicalizeNewJobConditionsSet(c *Client, des, nw []JobConditions) []JobConditions { 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 []JobConditions for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobConditionsNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobConditions(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 canonicalizeNewJobConditionsSlice(c *Client, des, nw []JobConditions) []JobConditions { 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 []JobConditions for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobConditions(c, &d, &n)) } return items } func canonicalizeJobLatestSucceededExecution(des, initial *JobLatestSucceededExecution, opts ...dcl.ApplyOption) *JobLatestSucceededExecution { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobLatestSucceededExecution{} if dcl.IsZeroValue(des.Name) || (dcl.IsEmptyValueIndirect(des.Name) && dcl.IsEmptyValueIndirect(initial.Name)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Name = initial.Name } else { cDes.Name = des.Name } if dcl.IsZeroValue(des.CreateTime) || (dcl.IsEmptyValueIndirect(des.CreateTime) && dcl.IsEmptyValueIndirect(initial.CreateTime)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.CreateTime = initial.CreateTime } else { cDes.CreateTime = des.CreateTime } return cDes } func canonicalizeJobLatestSucceededExecutionSlice(des, initial []JobLatestSucceededExecution, opts ...dcl.ApplyOption) []JobLatestSucceededExecution { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobLatestSucceededExecution, 0, len(des)) for _, d := range des { cd := canonicalizeJobLatestSucceededExecution(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobLatestSucceededExecution, 0, len(des)) for i, d := range des { cd := canonicalizeJobLatestSucceededExecution(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobLatestSucceededExecution(c *Client, des, nw *JobLatestSucceededExecution) *JobLatestSucceededExecution { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobLatestSucceededExecution while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewJobLatestSucceededExecutionSet(c *Client, des, nw []JobLatestSucceededExecution) []JobLatestSucceededExecution { 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 []JobLatestSucceededExecution for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobLatestSucceededExecutionNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobLatestSucceededExecution(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 canonicalizeNewJobLatestSucceededExecutionSlice(c *Client, des, nw []JobLatestSucceededExecution) []JobLatestSucceededExecution { 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 []JobLatestSucceededExecution for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobLatestSucceededExecution(c, &d, &n)) } return items } func canonicalizeJobLatestCreatedExecution(des, initial *JobLatestCreatedExecution, opts ...dcl.ApplyOption) *JobLatestCreatedExecution { if des == nil { return initial } if des.empty { return des } if initial == nil { return des } cDes := &JobLatestCreatedExecution{} if dcl.IsZeroValue(des.Name) || (dcl.IsEmptyValueIndirect(des.Name) && dcl.IsEmptyValueIndirect(initial.Name)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.Name = initial.Name } else { cDes.Name = des.Name } if dcl.IsZeroValue(des.CreateTime) || (dcl.IsEmptyValueIndirect(des.CreateTime) && dcl.IsEmptyValueIndirect(initial.CreateTime)) { // Desired and initial values are equivalent, so set canonical desired value to initial value. cDes.CreateTime = initial.CreateTime } else { cDes.CreateTime = des.CreateTime } return cDes } func canonicalizeJobLatestCreatedExecutionSlice(des, initial []JobLatestCreatedExecution, opts ...dcl.ApplyOption) []JobLatestCreatedExecution { if dcl.IsEmptyValueIndirect(des) { return initial } if len(des) != len(initial) { items := make([]JobLatestCreatedExecution, 0, len(des)) for _, d := range des { cd := canonicalizeJobLatestCreatedExecution(&d, nil, opts...) if cd != nil { items = append(items, *cd) } } return items } items := make([]JobLatestCreatedExecution, 0, len(des)) for i, d := range des { cd := canonicalizeJobLatestCreatedExecution(&d, &initial[i], opts...) if cd != nil { items = append(items, *cd) } } return items } func canonicalizeNewJobLatestCreatedExecution(c *Client, des, nw *JobLatestCreatedExecution) *JobLatestCreatedExecution { if des == nil { return nw } if nw == nil { if dcl.IsEmptyValueIndirect(des) { c.Config.Logger.Info("Found explicitly empty value for JobLatestCreatedExecution while comparing non-nil desired to nil actual. Returning desired object.") return des } return nil } return nw } func canonicalizeNewJobLatestCreatedExecutionSet(c *Client, des, nw []JobLatestCreatedExecution) []JobLatestCreatedExecution { 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 []JobLatestCreatedExecution for _, d := range des { matchedIndex := -1 for i, n := range nw { if diffs, _ := compareJobLatestCreatedExecutionNewStyle(&d, &n, dcl.FieldName{}); len(diffs) == 0 { matchedIndex = i break } } if matchedIndex != -1 { items = append(items, *canonicalizeNewJobLatestCreatedExecution(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 canonicalizeNewJobLatestCreatedExecutionSlice(c *Client, des, nw []JobLatestCreatedExecution) []JobLatestCreatedExecution { 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 []JobLatestCreatedExecution for i, d := range des { n := nw[i] items = append(items, *canonicalizeNewJobLatestCreatedExecution(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 diffJob(c *Client, desired, actual *Job, 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{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Uid, actual.Uid, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Uid")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Generation, actual.Generation, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Generation")); 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{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Labels")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Annotations, actual.Annotations, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Annotations")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.CreateTime, actual.CreateTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("CreateTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.UpdateTime, actual.UpdateTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("UpdateTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.DeleteTime, actual.DeleteTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("DeleteTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.ExpireTime, actual.ExpireTime, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ExpireTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Creator, actual.Creator, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Creator")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.LastModifier, actual.LastModifier, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("LastModifier")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Client, actual.Client, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Client")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.ClientVersion, actual.ClientVersion, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("ClientVersion")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.LaunchStage, actual.LaunchStage, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("LaunchStage")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.BinaryAuthorization, actual.BinaryAuthorization, dcl.DiffInfo{ObjectFunction: compareJobBinaryAuthorizationNewStyle, EmptyObject: EmptyJobBinaryAuthorization, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("BinaryAuthorization")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Template, actual.Template, dcl.DiffInfo{ObjectFunction: compareJobTemplateNewStyle, EmptyObject: EmptyJobTemplate, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Template")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.ObservedGeneration, actual.ObservedGeneration, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ObservedGeneration")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.TerminalCondition, actual.TerminalCondition, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareJobTerminalConditionNewStyle, EmptyObject: EmptyJobTerminalCondition, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("TerminalCondition")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Conditions, actual.Conditions, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareJobConditionsNewStyle, EmptyObject: EmptyJobConditions, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Conditions")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.ExecutionCount, actual.ExecutionCount, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("ExecutionCount")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.LatestSucceededExecution, actual.LatestSucceededExecution, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareJobLatestSucceededExecutionNewStyle, EmptyObject: EmptyJobLatestSucceededExecution, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("LatestSucceededExecution")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.LatestCreatedExecution, actual.LatestCreatedExecution, dcl.DiffInfo{OutputOnly: true, ObjectFunction: compareJobLatestCreatedExecutionNewStyle, EmptyObject: EmptyJobLatestCreatedExecution, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("LatestCreatedExecution")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Reconciling, actual.Reconciling, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Reconciling")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Etag, actual.Etag, dcl.DiffInfo{OutputOnly: true, OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Etag")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Project, actual.Project, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Project")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if ds, err := dcl.Diff(desired.Location, actual.Location, dcl.DiffInfo{OperationSelector: dcl.RequiresRecreate()}, fn.AddNest("Location")); len(ds) != 0 || err != nil { if err != nil { return nil, err } newDiffs = append(newDiffs, ds...) } if len(newDiffs) > 0 { c.Config.Logger.Infof("Diff function found diffs: %v", newDiffs) } return newDiffs, nil } func compareJobBinaryAuthorizationNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobBinaryAuthorization) if !ok { desiredNotPointer, ok := d.(JobBinaryAuthorization) if !ok { return nil, fmt.Errorf("obj %v is not a JobBinaryAuthorization or *JobBinaryAuthorization", d) } desired = &desiredNotPointer } actual, ok := a.(*JobBinaryAuthorization) if !ok { actualNotPointer, ok := a.(JobBinaryAuthorization) if !ok { return nil, fmt.Errorf("obj %v is not a JobBinaryAuthorization", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.UseDefault, actual.UseDefault, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("UseDefault")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.BreakglassJustification, actual.BreakglassJustification, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("BreakglassJustification")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplate) if !ok { desiredNotPointer, ok := d.(JobTemplate) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplate or *JobTemplate", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplate) if !ok { actualNotPointer, ok := a.(JobTemplate) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplate", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Labels, actual.Labels, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Labels")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Annotations, actual.Annotations, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Annotations")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Parallelism, actual.Parallelism, dcl.DiffInfo{ServerDefault: true, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Parallelism")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.TaskCount, actual.TaskCount, dcl.DiffInfo{ServerDefault: true, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("TaskCount")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Template, actual.Template, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateNewStyle, EmptyObject: EmptyJobTemplateTemplate, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Template")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplate) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplate) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplate or *JobTemplateTemplate", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplate) if !ok { actualNotPointer, ok := a.(JobTemplateTemplate) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplate", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Containers, actual.Containers, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateContainersNewStyle, EmptyObject: EmptyJobTemplateTemplateContainers, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Containers")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Volumes, actual.Volumes, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateVolumesNewStyle, EmptyObject: EmptyJobTemplateTemplateVolumes, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Volumes")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.MaxRetries, actual.MaxRetries, dcl.DiffInfo{ServerDefault: true, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("MaxRetries")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Timeout, actual.Timeout, dcl.DiffInfo{ServerDefault: true, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Timeout")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ServiceAccount, actual.ServiceAccount, dcl.DiffInfo{ServerDefault: true, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("ServiceAccount")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ExecutionEnvironment, actual.ExecutionEnvironment, dcl.DiffInfo{ServerDefault: true, Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("ExecutionEnvironment")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.EncryptionKey, actual.EncryptionKey, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("EncryptionKey")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.VPCAccess, actual.VPCAccess, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateVPCAccessNewStyle, EmptyObject: EmptyJobTemplateTemplateVPCAccess, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("VpcAccess")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateContainersNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateContainers) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateContainers) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainers or *JobTemplateTemplateContainers", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateContainers) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateContainers) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainers", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Image, actual.Image, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Image")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Command, actual.Command, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Command")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Args, actual.Args, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Args")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Env, actual.Env, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateContainersEnvNewStyle, EmptyObject: EmptyJobTemplateTemplateContainersEnv, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Env")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Resources, actual.Resources, dcl.DiffInfo{ServerDefault: true, ObjectFunction: compareJobTemplateTemplateContainersResourcesNewStyle, EmptyObject: EmptyJobTemplateTemplateContainersResources, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Resources")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Ports, actual.Ports, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateContainersPortsNewStyle, EmptyObject: EmptyJobTemplateTemplateContainersPorts, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Ports")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.VolumeMounts, actual.VolumeMounts, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateContainersVolumeMountsNewStyle, EmptyObject: EmptyJobTemplateTemplateContainersVolumeMounts, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("VolumeMounts")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateContainersEnvNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateContainersEnv) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateContainersEnv) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersEnv or *JobTemplateTemplateContainersEnv", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateContainersEnv) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateContainersEnv) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersEnv", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Value, actual.Value, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Value")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ValueSource, actual.ValueSource, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateContainersEnvValueSourceNewStyle, EmptyObject: EmptyJobTemplateTemplateContainersEnvValueSource, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("ValueSource")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateContainersEnvValueSourceNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateContainersEnvValueSource) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateContainersEnvValueSource) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersEnvValueSource or *JobTemplateTemplateContainersEnvValueSource", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateContainersEnvValueSource) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateContainersEnvValueSource) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersEnvValueSource", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.SecretKeyRef, actual.SecretKeyRef, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateContainersEnvValueSourceSecretKeyRefNewStyle, EmptyObject: EmptyJobTemplateTemplateContainersEnvValueSourceSecretKeyRef, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("SecretKeyRef")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateContainersEnvValueSourceSecretKeyRefNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersEnvValueSourceSecretKeyRef or *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersEnvValueSourceSecretKeyRef", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Secret, actual.Secret, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Secret")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Version, actual.Version, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Version")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateContainersResourcesNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateContainersResources) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateContainersResources) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersResources or *JobTemplateTemplateContainersResources", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateContainersResources) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateContainersResources) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersResources", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Limits, actual.Limits, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Limits")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.CpuIdle, actual.CpuIdle, dcl.DiffInfo{ServerDefault: true, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("CpuIdle")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateContainersPortsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateContainersPorts) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateContainersPorts) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersPorts or *JobTemplateTemplateContainersPorts", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateContainersPorts) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateContainersPorts) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersPorts", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ContainerPort, actual.ContainerPort, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("ContainerPort")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateContainersVolumeMountsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateContainersVolumeMounts) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateContainersVolumeMounts) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersVolumeMounts or *JobTemplateTemplateContainersVolumeMounts", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateContainersVolumeMounts) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateContainersVolumeMounts) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateContainersVolumeMounts", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.MountPath, actual.MountPath, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("MountPath")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateVolumesNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateVolumes) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateVolumes) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumes or *JobTemplateTemplateVolumes", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateVolumes) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateVolumes) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumes", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Secret, actual.Secret, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateVolumesSecretNewStyle, EmptyObject: EmptyJobTemplateTemplateVolumesSecret, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Secret")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.CloudSqlInstance, actual.CloudSqlInstance, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateVolumesCloudSqlInstanceNewStyle, EmptyObject: EmptyJobTemplateTemplateVolumesCloudSqlInstance, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("CloudSqlInstance")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateVolumesSecretNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateVolumesSecret) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateVolumesSecret) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumesSecret or *JobTemplateTemplateVolumesSecret", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateVolumesSecret) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateVolumesSecret) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumesSecret", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Secret, actual.Secret, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Secret")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Items, actual.Items, dcl.DiffInfo{ObjectFunction: compareJobTemplateTemplateVolumesSecretItemsNewStyle, EmptyObject: EmptyJobTemplateTemplateVolumesSecretItems, OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Items")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.DefaultMode, actual.DefaultMode, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("DefaultMode")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateVolumesSecretItemsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateVolumesSecretItems) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateVolumesSecretItems) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumesSecretItems or *JobTemplateTemplateVolumesSecretItems", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateVolumesSecretItems) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateVolumesSecretItems) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumesSecretItems", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Path, actual.Path, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Path")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Version, actual.Version, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Version")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Mode, actual.Mode, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Mode")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateVolumesCloudSqlInstanceNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateVolumesCloudSqlInstance) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateVolumesCloudSqlInstance) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumesCloudSqlInstance or *JobTemplateTemplateVolumesCloudSqlInstance", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateVolumesCloudSqlInstance) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateVolumesCloudSqlInstance) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVolumesCloudSqlInstance", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Instances, actual.Instances, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Instances")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTemplateTemplateVPCAccessNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTemplateTemplateVPCAccess) if !ok { desiredNotPointer, ok := d.(JobTemplateTemplateVPCAccess) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVPCAccess or *JobTemplateTemplateVPCAccess", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTemplateTemplateVPCAccess) if !ok { actualNotPointer, ok := a.(JobTemplateTemplateVPCAccess) if !ok { return nil, fmt.Errorf("obj %v is not a JobTemplateTemplateVPCAccess", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Connector, actual.Connector, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Connector")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Egress, actual.Egress, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Egress")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobTerminalConditionNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobTerminalCondition) if !ok { desiredNotPointer, ok := d.(JobTerminalCondition) if !ok { return nil, fmt.Errorf("obj %v is not a JobTerminalCondition or *JobTerminalCondition", d) } desired = &desiredNotPointer } actual, ok := a.(*JobTerminalCondition) if !ok { actualNotPointer, ok := a.(JobTerminalCondition) if !ok { return nil, fmt.Errorf("obj %v is not a JobTerminalCondition", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Type, actual.Type, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Type")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.State, actual.State, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("State")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Message, actual.Message, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Message")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.LastTransitionTime, actual.LastTransitionTime, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("LastTransitionTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Severity, actual.Severity, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Severity")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Reason, actual.Reason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Reason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.InternalReason, actual.InternalReason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("InternalReason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.DomainMappingReason, actual.DomainMappingReason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("DomainMappingReason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RevisionReason, actual.RevisionReason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("RevisionReason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ExecutionReason, actual.ExecutionReason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("ExecutionReason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobConditionsNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobConditions) if !ok { desiredNotPointer, ok := d.(JobConditions) if !ok { return nil, fmt.Errorf("obj %v is not a JobConditions or *JobConditions", d) } desired = &desiredNotPointer } actual, ok := a.(*JobConditions) if !ok { actualNotPointer, ok := a.(JobConditions) if !ok { return nil, fmt.Errorf("obj %v is not a JobConditions", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Type, actual.Type, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Type")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.State, actual.State, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("State")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Message, actual.Message, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Message")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.LastTransitionTime, actual.LastTransitionTime, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("LastTransitionTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Severity, actual.Severity, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Severity")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.Reason, actual.Reason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Reason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.RevisionReason, actual.RevisionReason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("RevisionReason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.ExecutionReason, actual.ExecutionReason, dcl.DiffInfo{Type: "EnumType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("ExecutionReason")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobLatestSucceededExecutionNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobLatestSucceededExecution) if !ok { desiredNotPointer, ok := d.(JobLatestSucceededExecution) if !ok { return nil, fmt.Errorf("obj %v is not a JobLatestSucceededExecution or *JobLatestSucceededExecution", d) } desired = &desiredNotPointer } actual, ok := a.(*JobLatestSucceededExecution) if !ok { actualNotPointer, ok := a.(JobLatestSucceededExecution) if !ok { return nil, fmt.Errorf("obj %v is not a JobLatestSucceededExecution", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.CreateTime, actual.CreateTime, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("CreateTime")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } return diffs, nil } func compareJobLatestCreatedExecutionNewStyle(d, a interface{}, fn dcl.FieldName) ([]*dcl.FieldDiff, error) { var diffs []*dcl.FieldDiff desired, ok := d.(*JobLatestCreatedExecution) if !ok { desiredNotPointer, ok := d.(JobLatestCreatedExecution) if !ok { return nil, fmt.Errorf("obj %v is not a JobLatestCreatedExecution or *JobLatestCreatedExecution", d) } desired = &desiredNotPointer } actual, ok := a.(*JobLatestCreatedExecution) if !ok { actualNotPointer, ok := a.(JobLatestCreatedExecution) if !ok { return nil, fmt.Errorf("obj %v is not a JobLatestCreatedExecution", a) } actual = &actualNotPointer } if ds, err := dcl.Diff(desired.Name, actual.Name, dcl.DiffInfo{Type: "ReferenceType", OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("Name")); len(ds) != 0 || err != nil { if err != nil { return nil, err } diffs = append(diffs, ds...) } if ds, err := dcl.Diff(desired.CreateTime, actual.CreateTime, dcl.DiffInfo{OperationSelector: dcl.TriggersOperation("updateJobUpdateJobOperation")}, fn.AddNest("CreateTime")); 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 *Job) urlNormalized() *Job { normalized := dcl.Copy(*r).(Job) normalized.Name = dcl.SelfLinkToName(r.Name) normalized.Uid = dcl.SelfLinkToName(r.Uid) normalized.Creator = dcl.SelfLinkToName(r.Creator) normalized.LastModifier = dcl.SelfLinkToName(r.LastModifier) normalized.Client = dcl.SelfLinkToName(r.Client) normalized.ClientVersion = dcl.SelfLinkToName(r.ClientVersion) normalized.Etag = dcl.SelfLinkToName(r.Etag) normalized.Project = dcl.SelfLinkToName(r.Project) normalized.Location = dcl.SelfLinkToName(r.Location) return &normalized } func (r *Job) updateURL(userBasePath, updateName string) (string, error) { nr := r.urlNormalized() if updateName == "UpdateJob" { fields := map[string]interface{}{ "project": dcl.ValueOrEmptyString(nr.Project), "location": dcl.ValueOrEmptyString(nr.Location), "name": dcl.ValueOrEmptyString(nr.Name), } return dcl.URL("projects/{{project}}/locations/{{location}}/jobs/{{name}}", nr.basePath(), userBasePath, fields), nil } return "", fmt.Errorf("unknown update name: %s", updateName) } // marshal encodes the Job resource into JSON for a Create request, and // performs transformations from the resource schema to the API schema if // necessary. func (r *Job) marshal(c *Client) ([]byte, error) { m, err := expandJob(c, r) if err != nil { return nil, fmt.Errorf("error marshalling Job: %w", err) } return json.Marshal(m) } // unmarshalJob decodes JSON responses into the Job resource schema. func unmarshalJob(b []byte, c *Client, res *Job) (*Job, error) { var m map[string]interface{} if err := json.Unmarshal(b, &m); err != nil { return nil, err } return unmarshalMapJob(m, c, res) } func unmarshalMapJob(m map[string]interface{}, c *Client, res *Job) (*Job, error) { flattened := flattenJob(c, m, res) if flattened == nil { return nil, fmt.Errorf("attempted to flatten empty json object") } return flattened, nil } // expandJob expands Job into a JSON request object. func expandJob(c *Client, f *Job) (map[string]interface{}, error) { m := make(map[string]interface{}) res := f _ = res if v, err := dcl.DeriveField("projects/%s/locations/%s/jobs/%s", f.Name, dcl.SelfLinkToName(f.Project), dcl.SelfLinkToName(f.Location), dcl.SelfLinkToName(f.Name)); err != nil { return nil, fmt.Errorf("error expanding Name into name: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.Annotations; dcl.ValueShouldBeSent(v) { m["annotations"] = v } if v := f.Client; dcl.ValueShouldBeSent(v) { m["client"] = v } if v := f.ClientVersion; dcl.ValueShouldBeSent(v) { m["clientVersion"] = v } if v := f.LaunchStage; dcl.ValueShouldBeSent(v) { m["launchStage"] = v } if v, err := expandJobBinaryAuthorization(c, f.BinaryAuthorization, res); err != nil { return nil, fmt.Errorf("error expanding BinaryAuthorization into binaryAuthorization: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["binaryAuthorization"] = v } if v, err := expandJobTemplate(c, f.Template, res); err != nil { return nil, fmt.Errorf("error expanding Template into template: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["template"] = v } if v, err := dcl.EmptyValue(); err != nil { return nil, fmt.Errorf("error expanding Project into project: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["project"] = v } if v, err := dcl.EmptyValue(); err != nil { return nil, fmt.Errorf("error expanding Location into location: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["location"] = v } return m, nil } // flattenJob flattens Job from a JSON request object into the // Job type. func flattenJob(c *Client, i interface{}, res *Job) *Job { m, ok := i.(map[string]interface{}) if !ok { return nil } if len(m) == 0 { return nil } resultRes := &Job{} resultRes.Name = dcl.FlattenString(m["name"]) resultRes.Uid = dcl.FlattenString(m["uid"]) resultRes.Generation = dcl.FlattenInteger(m["generation"]) resultRes.Labels = dcl.FlattenKeyValuePairs(m["labels"]) resultRes.Annotations = dcl.FlattenKeyValuePairs(m["annotations"]) resultRes.CreateTime = dcl.FlattenString(m["createTime"]) resultRes.UpdateTime = dcl.FlattenString(m["updateTime"]) resultRes.DeleteTime = dcl.FlattenString(m["deleteTime"]) resultRes.ExpireTime = dcl.FlattenString(m["expireTime"]) resultRes.Creator = dcl.FlattenString(m["creator"]) resultRes.LastModifier = dcl.FlattenString(m["lastModifier"]) resultRes.Client = dcl.FlattenString(m["client"]) resultRes.ClientVersion = dcl.FlattenString(m["clientVersion"]) resultRes.LaunchStage = flattenJobLaunchStageEnum(m["launchStage"]) resultRes.BinaryAuthorization = flattenJobBinaryAuthorization(c, m["binaryAuthorization"], res) resultRes.Template = flattenJobTemplate(c, m["template"], res) resultRes.ObservedGeneration = dcl.FlattenInteger(m["observedGeneration"]) resultRes.TerminalCondition = flattenJobTerminalCondition(c, m["terminalCondition"], res) resultRes.Conditions = flattenJobConditionsSlice(c, m["conditions"], res) resultRes.ExecutionCount = dcl.FlattenInteger(m["executionCount"]) resultRes.LatestSucceededExecution = flattenJobLatestSucceededExecution(c, m["latestSucceededExecution"], res) resultRes.LatestCreatedExecution = flattenJobLatestCreatedExecution(c, m["latestCreatedExecution"], res) resultRes.Reconciling = dcl.FlattenBool(m["reconciling"]) resultRes.Etag = dcl.FlattenString(m["etag"]) resultRes.Project = dcl.FlattenString(m["project"]) resultRes.Location = dcl.FlattenString(m["location"]) return resultRes } // expandJobBinaryAuthorizationMap expands the contents of JobBinaryAuthorization into a JSON // request object. func expandJobBinaryAuthorizationMap(c *Client, f map[string]JobBinaryAuthorization, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobBinaryAuthorization(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobBinaryAuthorizationSlice expands the contents of JobBinaryAuthorization into a JSON // request object. func expandJobBinaryAuthorizationSlice(c *Client, f []JobBinaryAuthorization, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobBinaryAuthorization(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobBinaryAuthorizationMap flattens the contents of JobBinaryAuthorization from a JSON // response object. func flattenJobBinaryAuthorizationMap(c *Client, i interface{}, res *Job) map[string]JobBinaryAuthorization { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobBinaryAuthorization{} } if len(a) == 0 { return map[string]JobBinaryAuthorization{} } items := make(map[string]JobBinaryAuthorization) for k, item := range a { items[k] = *flattenJobBinaryAuthorization(c, item.(map[string]interface{}), res) } return items } // flattenJobBinaryAuthorizationSlice flattens the contents of JobBinaryAuthorization from a JSON // response object. func flattenJobBinaryAuthorizationSlice(c *Client, i interface{}, res *Job) []JobBinaryAuthorization { a, ok := i.([]interface{}) if !ok { return []JobBinaryAuthorization{} } if len(a) == 0 { return []JobBinaryAuthorization{} } items := make([]JobBinaryAuthorization, 0, len(a)) for _, item := range a { items = append(items, *flattenJobBinaryAuthorization(c, item.(map[string]interface{}), res)) } return items } // expandJobBinaryAuthorization expands an instance of JobBinaryAuthorization into a JSON // request object. func expandJobBinaryAuthorization(c *Client, f *JobBinaryAuthorization, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.UseDefault; !dcl.IsEmptyValueIndirect(v) { m["useDefault"] = v } if v := f.BreakglassJustification; !dcl.IsEmptyValueIndirect(v) { m["breakglassJustification"] = v } return m, nil } // flattenJobBinaryAuthorization flattens an instance of JobBinaryAuthorization from a JSON // response object. func flattenJobBinaryAuthorization(c *Client, i interface{}, res *Job) *JobBinaryAuthorization { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobBinaryAuthorization{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobBinaryAuthorization } r.UseDefault = dcl.FlattenBool(m["useDefault"]) r.BreakglassJustification = dcl.FlattenString(m["breakglassJustification"]) return r } // expandJobTemplateMap expands the contents of JobTemplate into a JSON // request object. func expandJobTemplateMap(c *Client, f map[string]JobTemplate, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplate(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateSlice expands the contents of JobTemplate into a JSON // request object. func expandJobTemplateSlice(c *Client, f []JobTemplate, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplate(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateMap flattens the contents of JobTemplate from a JSON // response object. func flattenJobTemplateMap(c *Client, i interface{}, res *Job) map[string]JobTemplate { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplate{} } if len(a) == 0 { return map[string]JobTemplate{} } items := make(map[string]JobTemplate) for k, item := range a { items[k] = *flattenJobTemplate(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateSlice flattens the contents of JobTemplate from a JSON // response object. func flattenJobTemplateSlice(c *Client, i interface{}, res *Job) []JobTemplate { a, ok := i.([]interface{}) if !ok { return []JobTemplate{} } if len(a) == 0 { return []JobTemplate{} } items := make([]JobTemplate, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplate(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplate expands an instance of JobTemplate into a JSON // request object. func expandJobTemplate(c *Client, f *JobTemplate, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Labels; !dcl.IsEmptyValueIndirect(v) { m["labels"] = v } if v := f.Annotations; !dcl.IsEmptyValueIndirect(v) { m["annotations"] = v } if v := f.Parallelism; !dcl.IsEmptyValueIndirect(v) { m["parallelism"] = v } if v := f.TaskCount; !dcl.IsEmptyValueIndirect(v) { m["taskCount"] = v } if v, err := expandJobTemplateTemplate(c, f.Template, res); err != nil { return nil, fmt.Errorf("error expanding Template into template: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["template"] = v } return m, nil } // flattenJobTemplate flattens an instance of JobTemplate from a JSON // response object. func flattenJobTemplate(c *Client, i interface{}, res *Job) *JobTemplate { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplate{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplate } r.Labels = dcl.FlattenKeyValuePairs(m["labels"]) r.Annotations = dcl.FlattenKeyValuePairs(m["annotations"]) r.Parallelism = dcl.FlattenInteger(m["parallelism"]) r.TaskCount = dcl.FlattenInteger(m["taskCount"]) r.Template = flattenJobTemplateTemplate(c, m["template"], res) return r } // expandJobTemplateTemplateMap expands the contents of JobTemplateTemplate into a JSON // request object. func expandJobTemplateTemplateMap(c *Client, f map[string]JobTemplateTemplate, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplate(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateSlice expands the contents of JobTemplateTemplate into a JSON // request object. func expandJobTemplateTemplateSlice(c *Client, f []JobTemplateTemplate, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplate(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateMap flattens the contents of JobTemplateTemplate from a JSON // response object. func flattenJobTemplateTemplateMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplate { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplate{} } if len(a) == 0 { return map[string]JobTemplateTemplate{} } items := make(map[string]JobTemplateTemplate) for k, item := range a { items[k] = *flattenJobTemplateTemplate(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateSlice flattens the contents of JobTemplateTemplate from a JSON // response object. func flattenJobTemplateTemplateSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplate { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplate{} } if len(a) == 0 { return []JobTemplateTemplate{} } items := make([]JobTemplateTemplate, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplate(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplate expands an instance of JobTemplateTemplate into a JSON // request object. func expandJobTemplateTemplate(c *Client, f *JobTemplateTemplate, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v, err := expandJobTemplateTemplateContainersSlice(c, f.Containers, res); err != nil { return nil, fmt.Errorf("error expanding Containers into containers: %w", err) } else if v != nil { m["containers"] = v } if v, err := expandJobTemplateTemplateVolumesSlice(c, f.Volumes, res); err != nil { return nil, fmt.Errorf("error expanding Volumes into volumes: %w", err) } else if v != nil { m["volumes"] = v } if v := f.MaxRetries; !dcl.IsEmptyValueIndirect(v) { m["maxRetries"] = v } if v := f.Timeout; !dcl.IsEmptyValueIndirect(v) { m["timeout"] = v } if v := f.ServiceAccount; !dcl.IsEmptyValueIndirect(v) { m["serviceAccount"] = v } if v := f.ExecutionEnvironment; !dcl.IsEmptyValueIndirect(v) { m["executionEnvironment"] = v } if v := f.EncryptionKey; !dcl.IsEmptyValueIndirect(v) { m["encryptionKey"] = v } if v, err := expandJobTemplateTemplateVPCAccess(c, f.VPCAccess, res); err != nil { return nil, fmt.Errorf("error expanding VPCAccess into vpcAccess: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["vpcAccess"] = v } return m, nil } // flattenJobTemplateTemplate flattens an instance of JobTemplateTemplate from a JSON // response object. func flattenJobTemplateTemplate(c *Client, i interface{}, res *Job) *JobTemplateTemplate { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplate{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplate } r.Containers = flattenJobTemplateTemplateContainersSlice(c, m["containers"], res) r.Volumes = flattenJobTemplateTemplateVolumesSlice(c, m["volumes"], res) r.MaxRetries = dcl.FlattenInteger(m["maxRetries"]) r.Timeout = dcl.FlattenString(m["timeout"]) r.ServiceAccount = dcl.FlattenString(m["serviceAccount"]) r.ExecutionEnvironment = flattenJobTemplateTemplateExecutionEnvironmentEnum(m["executionEnvironment"]) r.EncryptionKey = dcl.FlattenString(m["encryptionKey"]) r.VPCAccess = flattenJobTemplateTemplateVPCAccess(c, m["vpcAccess"], res) return r } // expandJobTemplateTemplateContainersMap expands the contents of JobTemplateTemplateContainers into a JSON // request object. func expandJobTemplateTemplateContainersMap(c *Client, f map[string]JobTemplateTemplateContainers, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateContainers(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateContainersSlice expands the contents of JobTemplateTemplateContainers into a JSON // request object. func expandJobTemplateTemplateContainersSlice(c *Client, f []JobTemplateTemplateContainers, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateContainers(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateContainersMap flattens the contents of JobTemplateTemplateContainers from a JSON // response object. func flattenJobTemplateTemplateContainersMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateContainers { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateContainers{} } if len(a) == 0 { return map[string]JobTemplateTemplateContainers{} } items := make(map[string]JobTemplateTemplateContainers) for k, item := range a { items[k] = *flattenJobTemplateTemplateContainers(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateContainersSlice flattens the contents of JobTemplateTemplateContainers from a JSON // response object. func flattenJobTemplateTemplateContainersSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateContainers { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateContainers{} } if len(a) == 0 { return []JobTemplateTemplateContainers{} } items := make([]JobTemplateTemplateContainers, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateContainers(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateContainers expands an instance of JobTemplateTemplateContainers into a JSON // request object. func expandJobTemplateTemplateContainers(c *Client, f *JobTemplateTemplateContainers, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Name; !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.Image; !dcl.IsEmptyValueIndirect(v) { m["image"] = v } if v := f.Command; v != nil { m["command"] = v } if v := f.Args; v != nil { m["args"] = v } if v, err := expandJobTemplateTemplateContainersEnvSlice(c, f.Env, res); err != nil { return nil, fmt.Errorf("error expanding Env into env: %w", err) } else if v != nil { m["env"] = v } if v, err := expandJobTemplateTemplateContainersResources(c, f.Resources, res); err != nil { return nil, fmt.Errorf("error expanding Resources into resources: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["resources"] = v } if v, err := expandJobTemplateTemplateContainersPortsSlice(c, f.Ports, res); err != nil { return nil, fmt.Errorf("error expanding Ports into ports: %w", err) } else if v != nil { m["ports"] = v } if v, err := expandJobTemplateTemplateContainersVolumeMountsSlice(c, f.VolumeMounts, res); err != nil { return nil, fmt.Errorf("error expanding VolumeMounts into volumeMounts: %w", err) } else if v != nil { m["volumeMounts"] = v } return m, nil } // flattenJobTemplateTemplateContainers flattens an instance of JobTemplateTemplateContainers from a JSON // response object. func flattenJobTemplateTemplateContainers(c *Client, i interface{}, res *Job) *JobTemplateTemplateContainers { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateContainers{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateContainers } r.Name = dcl.FlattenString(m["name"]) r.Image = dcl.FlattenString(m["image"]) r.Command = dcl.FlattenStringSlice(m["command"]) r.Args = dcl.FlattenStringSlice(m["args"]) r.Env = flattenJobTemplateTemplateContainersEnvSlice(c, m["env"], res) r.Resources = flattenJobTemplateTemplateContainersResources(c, m["resources"], res) r.Ports = flattenJobTemplateTemplateContainersPortsSlice(c, m["ports"], res) r.VolumeMounts = flattenJobTemplateTemplateContainersVolumeMountsSlice(c, m["volumeMounts"], res) return r } // expandJobTemplateTemplateContainersEnvMap expands the contents of JobTemplateTemplateContainersEnv into a JSON // request object. func expandJobTemplateTemplateContainersEnvMap(c *Client, f map[string]JobTemplateTemplateContainersEnv, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateContainersEnv(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateContainersEnvSlice expands the contents of JobTemplateTemplateContainersEnv into a JSON // request object. func expandJobTemplateTemplateContainersEnvSlice(c *Client, f []JobTemplateTemplateContainersEnv, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateContainersEnv(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateContainersEnvMap flattens the contents of JobTemplateTemplateContainersEnv from a JSON // response object. func flattenJobTemplateTemplateContainersEnvMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateContainersEnv { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateContainersEnv{} } if len(a) == 0 { return map[string]JobTemplateTemplateContainersEnv{} } items := make(map[string]JobTemplateTemplateContainersEnv) for k, item := range a { items[k] = *flattenJobTemplateTemplateContainersEnv(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateContainersEnvSlice flattens the contents of JobTemplateTemplateContainersEnv from a JSON // response object. func flattenJobTemplateTemplateContainersEnvSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateContainersEnv { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateContainersEnv{} } if len(a) == 0 { return []JobTemplateTemplateContainersEnv{} } items := make([]JobTemplateTemplateContainersEnv, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateContainersEnv(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateContainersEnv expands an instance of JobTemplateTemplateContainersEnv into a JSON // request object. func expandJobTemplateTemplateContainersEnv(c *Client, f *JobTemplateTemplateContainersEnv, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Name; !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.Value; !dcl.IsEmptyValueIndirect(v) { m["value"] = v } if v, err := expandJobTemplateTemplateContainersEnvValueSource(c, f.ValueSource, res); err != nil { return nil, fmt.Errorf("error expanding ValueSource into valueSource: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["valueSource"] = v } return m, nil } // flattenJobTemplateTemplateContainersEnv flattens an instance of JobTemplateTemplateContainersEnv from a JSON // response object. func flattenJobTemplateTemplateContainersEnv(c *Client, i interface{}, res *Job) *JobTemplateTemplateContainersEnv { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateContainersEnv{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateContainersEnv } r.Name = dcl.FlattenString(m["name"]) r.Value = dcl.FlattenString(m["value"]) r.ValueSource = flattenJobTemplateTemplateContainersEnvValueSource(c, m["valueSource"], res) return r } // expandJobTemplateTemplateContainersEnvValueSourceMap expands the contents of JobTemplateTemplateContainersEnvValueSource into a JSON // request object. func expandJobTemplateTemplateContainersEnvValueSourceMap(c *Client, f map[string]JobTemplateTemplateContainersEnvValueSource, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateContainersEnvValueSource(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateContainersEnvValueSourceSlice expands the contents of JobTemplateTemplateContainersEnvValueSource into a JSON // request object. func expandJobTemplateTemplateContainersEnvValueSourceSlice(c *Client, f []JobTemplateTemplateContainersEnvValueSource, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateContainersEnvValueSource(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateContainersEnvValueSourceMap flattens the contents of JobTemplateTemplateContainersEnvValueSource from a JSON // response object. func flattenJobTemplateTemplateContainersEnvValueSourceMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateContainersEnvValueSource { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateContainersEnvValueSource{} } if len(a) == 0 { return map[string]JobTemplateTemplateContainersEnvValueSource{} } items := make(map[string]JobTemplateTemplateContainersEnvValueSource) for k, item := range a { items[k] = *flattenJobTemplateTemplateContainersEnvValueSource(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateContainersEnvValueSourceSlice flattens the contents of JobTemplateTemplateContainersEnvValueSource from a JSON // response object. func flattenJobTemplateTemplateContainersEnvValueSourceSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateContainersEnvValueSource { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateContainersEnvValueSource{} } if len(a) == 0 { return []JobTemplateTemplateContainersEnvValueSource{} } items := make([]JobTemplateTemplateContainersEnvValueSource, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateContainersEnvValueSource(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateContainersEnvValueSource expands an instance of JobTemplateTemplateContainersEnvValueSource into a JSON // request object. func expandJobTemplateTemplateContainersEnvValueSource(c *Client, f *JobTemplateTemplateContainersEnvValueSource, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v, err := expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, f.SecretKeyRef, res); err != nil { return nil, fmt.Errorf("error expanding SecretKeyRef into secretKeyRef: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["secretKeyRef"] = v } return m, nil } // flattenJobTemplateTemplateContainersEnvValueSource flattens an instance of JobTemplateTemplateContainersEnvValueSource from a JSON // response object. func flattenJobTemplateTemplateContainersEnvValueSource(c *Client, i interface{}, res *Job) *JobTemplateTemplateContainersEnvValueSource { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateContainersEnvValueSource{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateContainersEnvValueSource } r.SecretKeyRef = flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, m["secretKeyRef"], res) return r } // expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRefMap expands the contents of JobTemplateTemplateContainersEnvValueSourceSecretKeyRef into a JSON // request object. func expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRefMap(c *Client, f map[string]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRefSlice expands the contents of JobTemplateTemplateContainersEnvValueSourceSecretKeyRef into a JSON // request object. func expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRefSlice(c *Client, f []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRefMap flattens the contents of JobTemplateTemplateContainersEnvValueSourceSecretKeyRef from a JSON // response object. func flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRefMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} } if len(a) == 0 { return map[string]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} } items := make(map[string]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) for k, item := range a { items[k] = *flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRefSlice flattens the contents of JobTemplateTemplateContainersEnvValueSourceSecretKeyRef from a JSON // response object. func flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRefSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} } if len(a) == 0 { return []JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} } items := make([]JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRef expands an instance of JobTemplateTemplateContainersEnvValueSourceSecretKeyRef into a JSON // request object. func expandJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c *Client, f *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Secret; !dcl.IsEmptyValueIndirect(v) { m["secret"] = v } if v := f.Version; !dcl.IsEmptyValueIndirect(v) { m["version"] = v } return m, nil } // flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRef flattens an instance of JobTemplateTemplateContainersEnvValueSourceSecretKeyRef from a JSON // response object. func flattenJobTemplateTemplateContainersEnvValueSourceSecretKeyRef(c *Client, i interface{}, res *Job) *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateContainersEnvValueSourceSecretKeyRef } r.Secret = dcl.FlattenString(m["secret"]) r.Version = dcl.FlattenString(m["version"]) return r } // expandJobTemplateTemplateContainersResourcesMap expands the contents of JobTemplateTemplateContainersResources into a JSON // request object. func expandJobTemplateTemplateContainersResourcesMap(c *Client, f map[string]JobTemplateTemplateContainersResources, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateContainersResources(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateContainersResourcesSlice expands the contents of JobTemplateTemplateContainersResources into a JSON // request object. func expandJobTemplateTemplateContainersResourcesSlice(c *Client, f []JobTemplateTemplateContainersResources, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateContainersResources(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateContainersResourcesMap flattens the contents of JobTemplateTemplateContainersResources from a JSON // response object. func flattenJobTemplateTemplateContainersResourcesMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateContainersResources { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateContainersResources{} } if len(a) == 0 { return map[string]JobTemplateTemplateContainersResources{} } items := make(map[string]JobTemplateTemplateContainersResources) for k, item := range a { items[k] = *flattenJobTemplateTemplateContainersResources(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateContainersResourcesSlice flattens the contents of JobTemplateTemplateContainersResources from a JSON // response object. func flattenJobTemplateTemplateContainersResourcesSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateContainersResources { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateContainersResources{} } if len(a) == 0 { return []JobTemplateTemplateContainersResources{} } items := make([]JobTemplateTemplateContainersResources, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateContainersResources(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateContainersResources expands an instance of JobTemplateTemplateContainersResources into a JSON // request object. func expandJobTemplateTemplateContainersResources(c *Client, f *JobTemplateTemplateContainersResources, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Limits; !dcl.IsEmptyValueIndirect(v) { m["limits"] = v } if v := f.CpuIdle; !dcl.IsEmptyValueIndirect(v) { m["cpuIdle"] = v } return m, nil } // flattenJobTemplateTemplateContainersResources flattens an instance of JobTemplateTemplateContainersResources from a JSON // response object. func flattenJobTemplateTemplateContainersResources(c *Client, i interface{}, res *Job) *JobTemplateTemplateContainersResources { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateContainersResources{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateContainersResources } r.Limits = dcl.FlattenKeyValuePairs(m["limits"]) r.CpuIdle = dcl.FlattenBool(m["cpuIdle"]) return r } // expandJobTemplateTemplateContainersPortsMap expands the contents of JobTemplateTemplateContainersPorts into a JSON // request object. func expandJobTemplateTemplateContainersPortsMap(c *Client, f map[string]JobTemplateTemplateContainersPorts, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateContainersPorts(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateContainersPortsSlice expands the contents of JobTemplateTemplateContainersPorts into a JSON // request object. func expandJobTemplateTemplateContainersPortsSlice(c *Client, f []JobTemplateTemplateContainersPorts, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateContainersPorts(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateContainersPortsMap flattens the contents of JobTemplateTemplateContainersPorts from a JSON // response object. func flattenJobTemplateTemplateContainersPortsMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateContainersPorts { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateContainersPorts{} } if len(a) == 0 { return map[string]JobTemplateTemplateContainersPorts{} } items := make(map[string]JobTemplateTemplateContainersPorts) for k, item := range a { items[k] = *flattenJobTemplateTemplateContainersPorts(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateContainersPortsSlice flattens the contents of JobTemplateTemplateContainersPorts from a JSON // response object. func flattenJobTemplateTemplateContainersPortsSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateContainersPorts { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateContainersPorts{} } if len(a) == 0 { return []JobTemplateTemplateContainersPorts{} } items := make([]JobTemplateTemplateContainersPorts, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateContainersPorts(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateContainersPorts expands an instance of JobTemplateTemplateContainersPorts into a JSON // request object. func expandJobTemplateTemplateContainersPorts(c *Client, f *JobTemplateTemplateContainersPorts, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Name; !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.ContainerPort; !dcl.IsEmptyValueIndirect(v) { m["containerPort"] = v } return m, nil } // flattenJobTemplateTemplateContainersPorts flattens an instance of JobTemplateTemplateContainersPorts from a JSON // response object. func flattenJobTemplateTemplateContainersPorts(c *Client, i interface{}, res *Job) *JobTemplateTemplateContainersPorts { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateContainersPorts{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateContainersPorts } r.Name = dcl.FlattenString(m["name"]) r.ContainerPort = dcl.FlattenInteger(m["containerPort"]) return r } // expandJobTemplateTemplateContainersVolumeMountsMap expands the contents of JobTemplateTemplateContainersVolumeMounts into a JSON // request object. func expandJobTemplateTemplateContainersVolumeMountsMap(c *Client, f map[string]JobTemplateTemplateContainersVolumeMounts, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateContainersVolumeMounts(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateContainersVolumeMountsSlice expands the contents of JobTemplateTemplateContainersVolumeMounts into a JSON // request object. func expandJobTemplateTemplateContainersVolumeMountsSlice(c *Client, f []JobTemplateTemplateContainersVolumeMounts, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateContainersVolumeMounts(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateContainersVolumeMountsMap flattens the contents of JobTemplateTemplateContainersVolumeMounts from a JSON // response object. func flattenJobTemplateTemplateContainersVolumeMountsMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateContainersVolumeMounts { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateContainersVolumeMounts{} } if len(a) == 0 { return map[string]JobTemplateTemplateContainersVolumeMounts{} } items := make(map[string]JobTemplateTemplateContainersVolumeMounts) for k, item := range a { items[k] = *flattenJobTemplateTemplateContainersVolumeMounts(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateContainersVolumeMountsSlice flattens the contents of JobTemplateTemplateContainersVolumeMounts from a JSON // response object. func flattenJobTemplateTemplateContainersVolumeMountsSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateContainersVolumeMounts { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateContainersVolumeMounts{} } if len(a) == 0 { return []JobTemplateTemplateContainersVolumeMounts{} } items := make([]JobTemplateTemplateContainersVolumeMounts, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateContainersVolumeMounts(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateContainersVolumeMounts expands an instance of JobTemplateTemplateContainersVolumeMounts into a JSON // request object. func expandJobTemplateTemplateContainersVolumeMounts(c *Client, f *JobTemplateTemplateContainersVolumeMounts, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Name; !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.MountPath; !dcl.IsEmptyValueIndirect(v) { m["mountPath"] = v } return m, nil } // flattenJobTemplateTemplateContainersVolumeMounts flattens an instance of JobTemplateTemplateContainersVolumeMounts from a JSON // response object. func flattenJobTemplateTemplateContainersVolumeMounts(c *Client, i interface{}, res *Job) *JobTemplateTemplateContainersVolumeMounts { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateContainersVolumeMounts{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateContainersVolumeMounts } r.Name = dcl.FlattenString(m["name"]) r.MountPath = dcl.FlattenString(m["mountPath"]) return r } // expandJobTemplateTemplateVolumesMap expands the contents of JobTemplateTemplateVolumes into a JSON // request object. func expandJobTemplateTemplateVolumesMap(c *Client, f map[string]JobTemplateTemplateVolumes, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateVolumes(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateVolumesSlice expands the contents of JobTemplateTemplateVolumes into a JSON // request object. func expandJobTemplateTemplateVolumesSlice(c *Client, f []JobTemplateTemplateVolumes, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateVolumes(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateVolumesMap flattens the contents of JobTemplateTemplateVolumes from a JSON // response object. func flattenJobTemplateTemplateVolumesMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateVolumes { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateVolumes{} } if len(a) == 0 { return map[string]JobTemplateTemplateVolumes{} } items := make(map[string]JobTemplateTemplateVolumes) for k, item := range a { items[k] = *flattenJobTemplateTemplateVolumes(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateVolumesSlice flattens the contents of JobTemplateTemplateVolumes from a JSON // response object. func flattenJobTemplateTemplateVolumesSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateVolumes { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateVolumes{} } if len(a) == 0 { return []JobTemplateTemplateVolumes{} } items := make([]JobTemplateTemplateVolumes, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateVolumes(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateVolumes expands an instance of JobTemplateTemplateVolumes into a JSON // request object. func expandJobTemplateTemplateVolumes(c *Client, f *JobTemplateTemplateVolumes, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Name; !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v, err := expandJobTemplateTemplateVolumesSecret(c, f.Secret, res); err != nil { return nil, fmt.Errorf("error expanding Secret into secret: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["secret"] = v } if v, err := expandJobTemplateTemplateVolumesCloudSqlInstance(c, f.CloudSqlInstance, res); err != nil { return nil, fmt.Errorf("error expanding CloudSqlInstance into cloudSqlInstance: %w", err) } else if !dcl.IsEmptyValueIndirect(v) { m["cloudSqlInstance"] = v } return m, nil } // flattenJobTemplateTemplateVolumes flattens an instance of JobTemplateTemplateVolumes from a JSON // response object. func flattenJobTemplateTemplateVolumes(c *Client, i interface{}, res *Job) *JobTemplateTemplateVolumes { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateVolumes{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateVolumes } r.Name = dcl.FlattenString(m["name"]) r.Secret = flattenJobTemplateTemplateVolumesSecret(c, m["secret"], res) r.CloudSqlInstance = flattenJobTemplateTemplateVolumesCloudSqlInstance(c, m["cloudSqlInstance"], res) return r } // expandJobTemplateTemplateVolumesSecretMap expands the contents of JobTemplateTemplateVolumesSecret into a JSON // request object. func expandJobTemplateTemplateVolumesSecretMap(c *Client, f map[string]JobTemplateTemplateVolumesSecret, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateVolumesSecret(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateVolumesSecretSlice expands the contents of JobTemplateTemplateVolumesSecret into a JSON // request object. func expandJobTemplateTemplateVolumesSecretSlice(c *Client, f []JobTemplateTemplateVolumesSecret, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateVolumesSecret(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateVolumesSecretMap flattens the contents of JobTemplateTemplateVolumesSecret from a JSON // response object. func flattenJobTemplateTemplateVolumesSecretMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateVolumesSecret { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateVolumesSecret{} } if len(a) == 0 { return map[string]JobTemplateTemplateVolumesSecret{} } items := make(map[string]JobTemplateTemplateVolumesSecret) for k, item := range a { items[k] = *flattenJobTemplateTemplateVolumesSecret(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateVolumesSecretSlice flattens the contents of JobTemplateTemplateVolumesSecret from a JSON // response object. func flattenJobTemplateTemplateVolumesSecretSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateVolumesSecret { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateVolumesSecret{} } if len(a) == 0 { return []JobTemplateTemplateVolumesSecret{} } items := make([]JobTemplateTemplateVolumesSecret, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateVolumesSecret(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateVolumesSecret expands an instance of JobTemplateTemplateVolumesSecret into a JSON // request object. func expandJobTemplateTemplateVolumesSecret(c *Client, f *JobTemplateTemplateVolumesSecret, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Secret; !dcl.IsEmptyValueIndirect(v) { m["secret"] = v } if v, err := expandJobTemplateTemplateVolumesSecretItemsSlice(c, f.Items, res); err != nil { return nil, fmt.Errorf("error expanding Items into items: %w", err) } else if v != nil { m["items"] = v } if v := f.DefaultMode; !dcl.IsEmptyValueIndirect(v) { m["defaultMode"] = v } return m, nil } // flattenJobTemplateTemplateVolumesSecret flattens an instance of JobTemplateTemplateVolumesSecret from a JSON // response object. func flattenJobTemplateTemplateVolumesSecret(c *Client, i interface{}, res *Job) *JobTemplateTemplateVolumesSecret { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateVolumesSecret{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateVolumesSecret } r.Secret = dcl.FlattenString(m["secret"]) r.Items = flattenJobTemplateTemplateVolumesSecretItemsSlice(c, m["items"], res) r.DefaultMode = dcl.FlattenInteger(m["defaultMode"]) return r } // expandJobTemplateTemplateVolumesSecretItemsMap expands the contents of JobTemplateTemplateVolumesSecretItems into a JSON // request object. func expandJobTemplateTemplateVolumesSecretItemsMap(c *Client, f map[string]JobTemplateTemplateVolumesSecretItems, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateVolumesSecretItems(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateVolumesSecretItemsSlice expands the contents of JobTemplateTemplateVolumesSecretItems into a JSON // request object. func expandJobTemplateTemplateVolumesSecretItemsSlice(c *Client, f []JobTemplateTemplateVolumesSecretItems, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateVolumesSecretItems(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateVolumesSecretItemsMap flattens the contents of JobTemplateTemplateVolumesSecretItems from a JSON // response object. func flattenJobTemplateTemplateVolumesSecretItemsMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateVolumesSecretItems { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateVolumesSecretItems{} } if len(a) == 0 { return map[string]JobTemplateTemplateVolumesSecretItems{} } items := make(map[string]JobTemplateTemplateVolumesSecretItems) for k, item := range a { items[k] = *flattenJobTemplateTemplateVolumesSecretItems(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateVolumesSecretItemsSlice flattens the contents of JobTemplateTemplateVolumesSecretItems from a JSON // response object. func flattenJobTemplateTemplateVolumesSecretItemsSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateVolumesSecretItems { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateVolumesSecretItems{} } if len(a) == 0 { return []JobTemplateTemplateVolumesSecretItems{} } items := make([]JobTemplateTemplateVolumesSecretItems, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateVolumesSecretItems(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateVolumesSecretItems expands an instance of JobTemplateTemplateVolumesSecretItems into a JSON // request object. func expandJobTemplateTemplateVolumesSecretItems(c *Client, f *JobTemplateTemplateVolumesSecretItems, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } m := make(map[string]interface{}) if v := f.Path; !dcl.IsEmptyValueIndirect(v) { m["path"] = v } if v := f.Version; !dcl.IsEmptyValueIndirect(v) { m["version"] = v } if v := f.Mode; !dcl.IsEmptyValueIndirect(v) { m["mode"] = v } return m, nil } // flattenJobTemplateTemplateVolumesSecretItems flattens an instance of JobTemplateTemplateVolumesSecretItems from a JSON // response object. func flattenJobTemplateTemplateVolumesSecretItems(c *Client, i interface{}, res *Job) *JobTemplateTemplateVolumesSecretItems { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateVolumesSecretItems{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateVolumesSecretItems } r.Path = dcl.FlattenString(m["path"]) r.Version = dcl.FlattenString(m["version"]) r.Mode = dcl.FlattenInteger(m["mode"]) return r } // expandJobTemplateTemplateVolumesCloudSqlInstanceMap expands the contents of JobTemplateTemplateVolumesCloudSqlInstance into a JSON // request object. func expandJobTemplateTemplateVolumesCloudSqlInstanceMap(c *Client, f map[string]JobTemplateTemplateVolumesCloudSqlInstance, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateVolumesCloudSqlInstance(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateVolumesCloudSqlInstanceSlice expands the contents of JobTemplateTemplateVolumesCloudSqlInstance into a JSON // request object. func expandJobTemplateTemplateVolumesCloudSqlInstanceSlice(c *Client, f []JobTemplateTemplateVolumesCloudSqlInstance, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateVolumesCloudSqlInstance(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateVolumesCloudSqlInstanceMap flattens the contents of JobTemplateTemplateVolumesCloudSqlInstance from a JSON // response object. func flattenJobTemplateTemplateVolumesCloudSqlInstanceMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateVolumesCloudSqlInstance { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateVolumesCloudSqlInstance{} } if len(a) == 0 { return map[string]JobTemplateTemplateVolumesCloudSqlInstance{} } items := make(map[string]JobTemplateTemplateVolumesCloudSqlInstance) for k, item := range a { items[k] = *flattenJobTemplateTemplateVolumesCloudSqlInstance(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateVolumesCloudSqlInstanceSlice flattens the contents of JobTemplateTemplateVolumesCloudSqlInstance from a JSON // response object. func flattenJobTemplateTemplateVolumesCloudSqlInstanceSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateVolumesCloudSqlInstance { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateVolumesCloudSqlInstance{} } if len(a) == 0 { return []JobTemplateTemplateVolumesCloudSqlInstance{} } items := make([]JobTemplateTemplateVolumesCloudSqlInstance, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateVolumesCloudSqlInstance(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateVolumesCloudSqlInstance expands an instance of JobTemplateTemplateVolumesCloudSqlInstance into a JSON // request object. func expandJobTemplateTemplateVolumesCloudSqlInstance(c *Client, f *JobTemplateTemplateVolumesCloudSqlInstance, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Instances; v != nil { m["instances"] = v } return m, nil } // flattenJobTemplateTemplateVolumesCloudSqlInstance flattens an instance of JobTemplateTemplateVolumesCloudSqlInstance from a JSON // response object. func flattenJobTemplateTemplateVolumesCloudSqlInstance(c *Client, i interface{}, res *Job) *JobTemplateTemplateVolumesCloudSqlInstance { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateVolumesCloudSqlInstance{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateVolumesCloudSqlInstance } r.Instances = dcl.FlattenStringSlice(m["instances"]) return r } // expandJobTemplateTemplateVPCAccessMap expands the contents of JobTemplateTemplateVPCAccess into a JSON // request object. func expandJobTemplateTemplateVPCAccessMap(c *Client, f map[string]JobTemplateTemplateVPCAccess, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTemplateTemplateVPCAccess(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTemplateTemplateVPCAccessSlice expands the contents of JobTemplateTemplateVPCAccess into a JSON // request object. func expandJobTemplateTemplateVPCAccessSlice(c *Client, f []JobTemplateTemplateVPCAccess, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTemplateTemplateVPCAccess(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTemplateTemplateVPCAccessMap flattens the contents of JobTemplateTemplateVPCAccess from a JSON // response object. func flattenJobTemplateTemplateVPCAccessMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateVPCAccess { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateVPCAccess{} } if len(a) == 0 { return map[string]JobTemplateTemplateVPCAccess{} } items := make(map[string]JobTemplateTemplateVPCAccess) for k, item := range a { items[k] = *flattenJobTemplateTemplateVPCAccess(c, item.(map[string]interface{}), res) } return items } // flattenJobTemplateTemplateVPCAccessSlice flattens the contents of JobTemplateTemplateVPCAccess from a JSON // response object. func flattenJobTemplateTemplateVPCAccessSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateVPCAccess { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateVPCAccess{} } if len(a) == 0 { return []JobTemplateTemplateVPCAccess{} } items := make([]JobTemplateTemplateVPCAccess, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateVPCAccess(c, item.(map[string]interface{}), res)) } return items } // expandJobTemplateTemplateVPCAccess expands an instance of JobTemplateTemplateVPCAccess into a JSON // request object. func expandJobTemplateTemplateVPCAccess(c *Client, f *JobTemplateTemplateVPCAccess, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Connector; !dcl.IsEmptyValueIndirect(v) { m["connector"] = v } if v := f.Egress; !dcl.IsEmptyValueIndirect(v) { m["egress"] = v } return m, nil } // flattenJobTemplateTemplateVPCAccess flattens an instance of JobTemplateTemplateVPCAccess from a JSON // response object. func flattenJobTemplateTemplateVPCAccess(c *Client, i interface{}, res *Job) *JobTemplateTemplateVPCAccess { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTemplateTemplateVPCAccess{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTemplateTemplateVPCAccess } r.Connector = dcl.FlattenString(m["connector"]) r.Egress = flattenJobTemplateTemplateVPCAccessEgressEnum(m["egress"]) return r } // expandJobTerminalConditionMap expands the contents of JobTerminalCondition into a JSON // request object. func expandJobTerminalConditionMap(c *Client, f map[string]JobTerminalCondition, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobTerminalCondition(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobTerminalConditionSlice expands the contents of JobTerminalCondition into a JSON // request object. func expandJobTerminalConditionSlice(c *Client, f []JobTerminalCondition, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobTerminalCondition(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobTerminalConditionMap flattens the contents of JobTerminalCondition from a JSON // response object. func flattenJobTerminalConditionMap(c *Client, i interface{}, res *Job) map[string]JobTerminalCondition { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalCondition{} } if len(a) == 0 { return map[string]JobTerminalCondition{} } items := make(map[string]JobTerminalCondition) for k, item := range a { items[k] = *flattenJobTerminalCondition(c, item.(map[string]interface{}), res) } return items } // flattenJobTerminalConditionSlice flattens the contents of JobTerminalCondition from a JSON // response object. func flattenJobTerminalConditionSlice(c *Client, i interface{}, res *Job) []JobTerminalCondition { a, ok := i.([]interface{}) if !ok { return []JobTerminalCondition{} } if len(a) == 0 { return []JobTerminalCondition{} } items := make([]JobTerminalCondition, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalCondition(c, item.(map[string]interface{}), res)) } return items } // expandJobTerminalCondition expands an instance of JobTerminalCondition into a JSON // request object. func expandJobTerminalCondition(c *Client, f *JobTerminalCondition, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Type; !dcl.IsEmptyValueIndirect(v) { m["type"] = v } if v := f.State; !dcl.IsEmptyValueIndirect(v) { m["state"] = v } if v := f.Message; !dcl.IsEmptyValueIndirect(v) { m["message"] = v } if v := f.LastTransitionTime; !dcl.IsEmptyValueIndirect(v) { m["lastTransitionTime"] = v } if v := f.Severity; !dcl.IsEmptyValueIndirect(v) { m["severity"] = v } if v := f.Reason; !dcl.IsEmptyValueIndirect(v) { m["reason"] = v } if v := f.InternalReason; !dcl.IsEmptyValueIndirect(v) { m["internalReason"] = v } if v := f.DomainMappingReason; !dcl.IsEmptyValueIndirect(v) { m["domainMappingReason"] = v } if v := f.RevisionReason; !dcl.IsEmptyValueIndirect(v) { m["revisionReason"] = v } if v := f.ExecutionReason; !dcl.IsEmptyValueIndirect(v) { m["executionReason"] = v } return m, nil } // flattenJobTerminalCondition flattens an instance of JobTerminalCondition from a JSON // response object. func flattenJobTerminalCondition(c *Client, i interface{}, res *Job) *JobTerminalCondition { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobTerminalCondition{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobTerminalCondition } r.Type = dcl.FlattenString(m["type"]) r.State = flattenJobTerminalConditionStateEnum(m["state"]) r.Message = dcl.FlattenString(m["message"]) r.LastTransitionTime = dcl.FlattenString(m["lastTransitionTime"]) r.Severity = flattenJobTerminalConditionSeverityEnum(m["severity"]) r.Reason = flattenJobTerminalConditionReasonEnum(m["reason"]) r.InternalReason = flattenJobTerminalConditionInternalReasonEnum(m["internalReason"]) r.DomainMappingReason = flattenJobTerminalConditionDomainMappingReasonEnum(m["domainMappingReason"]) r.RevisionReason = flattenJobTerminalConditionRevisionReasonEnum(m["revisionReason"]) r.ExecutionReason = flattenJobTerminalConditionExecutionReasonEnum(m["executionReason"]) return r } // expandJobConditionsMap expands the contents of JobConditions into a JSON // request object. func expandJobConditionsMap(c *Client, f map[string]JobConditions, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobConditions(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobConditionsSlice expands the contents of JobConditions into a JSON // request object. func expandJobConditionsSlice(c *Client, f []JobConditions, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobConditions(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobConditionsMap flattens the contents of JobConditions from a JSON // response object. func flattenJobConditionsMap(c *Client, i interface{}, res *Job) map[string]JobConditions { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobConditions{} } if len(a) == 0 { return map[string]JobConditions{} } items := make(map[string]JobConditions) for k, item := range a { items[k] = *flattenJobConditions(c, item.(map[string]interface{}), res) } return items } // flattenJobConditionsSlice flattens the contents of JobConditions from a JSON // response object. func flattenJobConditionsSlice(c *Client, i interface{}, res *Job) []JobConditions { a, ok := i.([]interface{}) if !ok { return []JobConditions{} } if len(a) == 0 { return []JobConditions{} } items := make([]JobConditions, 0, len(a)) for _, item := range a { items = append(items, *flattenJobConditions(c, item.(map[string]interface{}), res)) } return items } // expandJobConditions expands an instance of JobConditions into a JSON // request object. func expandJobConditions(c *Client, f *JobConditions, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Type; !dcl.IsEmptyValueIndirect(v) { m["type"] = v } if v := f.State; !dcl.IsEmptyValueIndirect(v) { m["state"] = v } if v := f.Message; !dcl.IsEmptyValueIndirect(v) { m["message"] = v } if v := f.LastTransitionTime; !dcl.IsEmptyValueIndirect(v) { m["lastTransitionTime"] = v } if v := f.Severity; !dcl.IsEmptyValueIndirect(v) { m["severity"] = v } if v := f.Reason; !dcl.IsEmptyValueIndirect(v) { m["reason"] = v } if v := f.RevisionReason; !dcl.IsEmptyValueIndirect(v) { m["revisionReason"] = v } if v := f.ExecutionReason; !dcl.IsEmptyValueIndirect(v) { m["executionReason"] = v } return m, nil } // flattenJobConditions flattens an instance of JobConditions from a JSON // response object. func flattenJobConditions(c *Client, i interface{}, res *Job) *JobConditions { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobConditions{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobConditions } r.Type = dcl.FlattenString(m["type"]) r.State = flattenJobConditionsStateEnum(m["state"]) r.Message = dcl.FlattenString(m["message"]) r.LastTransitionTime = dcl.FlattenString(m["lastTransitionTime"]) r.Severity = flattenJobConditionsSeverityEnum(m["severity"]) r.Reason = flattenJobConditionsReasonEnum(m["reason"]) r.RevisionReason = flattenJobConditionsRevisionReasonEnum(m["revisionReason"]) r.ExecutionReason = flattenJobConditionsExecutionReasonEnum(m["executionReason"]) return r } // expandJobLatestSucceededExecutionMap expands the contents of JobLatestSucceededExecution into a JSON // request object. func expandJobLatestSucceededExecutionMap(c *Client, f map[string]JobLatestSucceededExecution, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobLatestSucceededExecution(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobLatestSucceededExecutionSlice expands the contents of JobLatestSucceededExecution into a JSON // request object. func expandJobLatestSucceededExecutionSlice(c *Client, f []JobLatestSucceededExecution, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobLatestSucceededExecution(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobLatestSucceededExecutionMap flattens the contents of JobLatestSucceededExecution from a JSON // response object. func flattenJobLatestSucceededExecutionMap(c *Client, i interface{}, res *Job) map[string]JobLatestSucceededExecution { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobLatestSucceededExecution{} } if len(a) == 0 { return map[string]JobLatestSucceededExecution{} } items := make(map[string]JobLatestSucceededExecution) for k, item := range a { items[k] = *flattenJobLatestSucceededExecution(c, item.(map[string]interface{}), res) } return items } // flattenJobLatestSucceededExecutionSlice flattens the contents of JobLatestSucceededExecution from a JSON // response object. func flattenJobLatestSucceededExecutionSlice(c *Client, i interface{}, res *Job) []JobLatestSucceededExecution { a, ok := i.([]interface{}) if !ok { return []JobLatestSucceededExecution{} } if len(a) == 0 { return []JobLatestSucceededExecution{} } items := make([]JobLatestSucceededExecution, 0, len(a)) for _, item := range a { items = append(items, *flattenJobLatestSucceededExecution(c, item.(map[string]interface{}), res)) } return items } // expandJobLatestSucceededExecution expands an instance of JobLatestSucceededExecution into a JSON // request object. func expandJobLatestSucceededExecution(c *Client, f *JobLatestSucceededExecution, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Name; !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.CreateTime; !dcl.IsEmptyValueIndirect(v) { m["createTime"] = v } return m, nil } // flattenJobLatestSucceededExecution flattens an instance of JobLatestSucceededExecution from a JSON // response object. func flattenJobLatestSucceededExecution(c *Client, i interface{}, res *Job) *JobLatestSucceededExecution { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobLatestSucceededExecution{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobLatestSucceededExecution } r.Name = dcl.FlattenString(m["name"]) r.CreateTime = dcl.FlattenString(m["createTime"]) return r } // expandJobLatestCreatedExecutionMap expands the contents of JobLatestCreatedExecution into a JSON // request object. func expandJobLatestCreatedExecutionMap(c *Client, f map[string]JobLatestCreatedExecution, res *Job) (map[string]interface{}, error) { if f == nil { return nil, nil } items := make(map[string]interface{}) for k, item := range f { i, err := expandJobLatestCreatedExecution(c, &item, res) if err != nil { return nil, err } if i != nil { items[k] = i } } return items, nil } // expandJobLatestCreatedExecutionSlice expands the contents of JobLatestCreatedExecution into a JSON // request object. func expandJobLatestCreatedExecutionSlice(c *Client, f []JobLatestCreatedExecution, res *Job) ([]map[string]interface{}, error) { if f == nil { return nil, nil } items := []map[string]interface{}{} for _, item := range f { i, err := expandJobLatestCreatedExecution(c, &item, res) if err != nil { return nil, err } items = append(items, i) } return items, nil } // flattenJobLatestCreatedExecutionMap flattens the contents of JobLatestCreatedExecution from a JSON // response object. func flattenJobLatestCreatedExecutionMap(c *Client, i interface{}, res *Job) map[string]JobLatestCreatedExecution { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobLatestCreatedExecution{} } if len(a) == 0 { return map[string]JobLatestCreatedExecution{} } items := make(map[string]JobLatestCreatedExecution) for k, item := range a { items[k] = *flattenJobLatestCreatedExecution(c, item.(map[string]interface{}), res) } return items } // flattenJobLatestCreatedExecutionSlice flattens the contents of JobLatestCreatedExecution from a JSON // response object. func flattenJobLatestCreatedExecutionSlice(c *Client, i interface{}, res *Job) []JobLatestCreatedExecution { a, ok := i.([]interface{}) if !ok { return []JobLatestCreatedExecution{} } if len(a) == 0 { return []JobLatestCreatedExecution{} } items := make([]JobLatestCreatedExecution, 0, len(a)) for _, item := range a { items = append(items, *flattenJobLatestCreatedExecution(c, item.(map[string]interface{}), res)) } return items } // expandJobLatestCreatedExecution expands an instance of JobLatestCreatedExecution into a JSON // request object. func expandJobLatestCreatedExecution(c *Client, f *JobLatestCreatedExecution, res *Job) (map[string]interface{}, error) { if dcl.IsEmptyValueIndirect(f) { return nil, nil } m := make(map[string]interface{}) if v := f.Name; !dcl.IsEmptyValueIndirect(v) { m["name"] = v } if v := f.CreateTime; !dcl.IsEmptyValueIndirect(v) { m["createTime"] = v } return m, nil } // flattenJobLatestCreatedExecution flattens an instance of JobLatestCreatedExecution from a JSON // response object. func flattenJobLatestCreatedExecution(c *Client, i interface{}, res *Job) *JobLatestCreatedExecution { m, ok := i.(map[string]interface{}) if !ok { return nil } r := &JobLatestCreatedExecution{} if dcl.IsEmptyValueIndirect(i) { return EmptyJobLatestCreatedExecution } r.Name = dcl.FlattenString(m["name"]) r.CreateTime = dcl.FlattenString(m["createTime"]) return r } // flattenJobLaunchStageEnumMap flattens the contents of JobLaunchStageEnum from a JSON // response object. func flattenJobLaunchStageEnumMap(c *Client, i interface{}, res *Job) map[string]JobLaunchStageEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobLaunchStageEnum{} } if len(a) == 0 { return map[string]JobLaunchStageEnum{} } items := make(map[string]JobLaunchStageEnum) for k, item := range a { items[k] = *flattenJobLaunchStageEnum(item.(interface{})) } return items } // flattenJobLaunchStageEnumSlice flattens the contents of JobLaunchStageEnum from a JSON // response object. func flattenJobLaunchStageEnumSlice(c *Client, i interface{}, res *Job) []JobLaunchStageEnum { a, ok := i.([]interface{}) if !ok { return []JobLaunchStageEnum{} } if len(a) == 0 { return []JobLaunchStageEnum{} } items := make([]JobLaunchStageEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobLaunchStageEnum(item.(interface{}))) } return items } // flattenJobLaunchStageEnum asserts that an interface is a string, and returns a // pointer to a *JobLaunchStageEnum with the same value as that string. func flattenJobLaunchStageEnum(i interface{}) *JobLaunchStageEnum { s, ok := i.(string) if !ok { return nil } return JobLaunchStageEnumRef(s) } // flattenJobTemplateTemplateExecutionEnvironmentEnumMap flattens the contents of JobTemplateTemplateExecutionEnvironmentEnum from a JSON // response object. func flattenJobTemplateTemplateExecutionEnvironmentEnumMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateExecutionEnvironmentEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateExecutionEnvironmentEnum{} } if len(a) == 0 { return map[string]JobTemplateTemplateExecutionEnvironmentEnum{} } items := make(map[string]JobTemplateTemplateExecutionEnvironmentEnum) for k, item := range a { items[k] = *flattenJobTemplateTemplateExecutionEnvironmentEnum(item.(interface{})) } return items } // flattenJobTemplateTemplateExecutionEnvironmentEnumSlice flattens the contents of JobTemplateTemplateExecutionEnvironmentEnum from a JSON // response object. func flattenJobTemplateTemplateExecutionEnvironmentEnumSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateExecutionEnvironmentEnum { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateExecutionEnvironmentEnum{} } if len(a) == 0 { return []JobTemplateTemplateExecutionEnvironmentEnum{} } items := make([]JobTemplateTemplateExecutionEnvironmentEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateExecutionEnvironmentEnum(item.(interface{}))) } return items } // flattenJobTemplateTemplateExecutionEnvironmentEnum asserts that an interface is a string, and returns a // pointer to a *JobTemplateTemplateExecutionEnvironmentEnum with the same value as that string. func flattenJobTemplateTemplateExecutionEnvironmentEnum(i interface{}) *JobTemplateTemplateExecutionEnvironmentEnum { s, ok := i.(string) if !ok { return nil } return JobTemplateTemplateExecutionEnvironmentEnumRef(s) } // flattenJobTemplateTemplateVPCAccessEgressEnumMap flattens the contents of JobTemplateTemplateVPCAccessEgressEnum from a JSON // response object. func flattenJobTemplateTemplateVPCAccessEgressEnumMap(c *Client, i interface{}, res *Job) map[string]JobTemplateTemplateVPCAccessEgressEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTemplateTemplateVPCAccessEgressEnum{} } if len(a) == 0 { return map[string]JobTemplateTemplateVPCAccessEgressEnum{} } items := make(map[string]JobTemplateTemplateVPCAccessEgressEnum) for k, item := range a { items[k] = *flattenJobTemplateTemplateVPCAccessEgressEnum(item.(interface{})) } return items } // flattenJobTemplateTemplateVPCAccessEgressEnumSlice flattens the contents of JobTemplateTemplateVPCAccessEgressEnum from a JSON // response object. func flattenJobTemplateTemplateVPCAccessEgressEnumSlice(c *Client, i interface{}, res *Job) []JobTemplateTemplateVPCAccessEgressEnum { a, ok := i.([]interface{}) if !ok { return []JobTemplateTemplateVPCAccessEgressEnum{} } if len(a) == 0 { return []JobTemplateTemplateVPCAccessEgressEnum{} } items := make([]JobTemplateTemplateVPCAccessEgressEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTemplateTemplateVPCAccessEgressEnum(item.(interface{}))) } return items } // flattenJobTemplateTemplateVPCAccessEgressEnum asserts that an interface is a string, and returns a // pointer to a *JobTemplateTemplateVPCAccessEgressEnum with the same value as that string. func flattenJobTemplateTemplateVPCAccessEgressEnum(i interface{}) *JobTemplateTemplateVPCAccessEgressEnum { s, ok := i.(string) if !ok { return nil } return JobTemplateTemplateVPCAccessEgressEnumRef(s) } // flattenJobTerminalConditionStateEnumMap flattens the contents of JobTerminalConditionStateEnum from a JSON // response object. func flattenJobTerminalConditionStateEnumMap(c *Client, i interface{}, res *Job) map[string]JobTerminalConditionStateEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalConditionStateEnum{} } if len(a) == 0 { return map[string]JobTerminalConditionStateEnum{} } items := make(map[string]JobTerminalConditionStateEnum) for k, item := range a { items[k] = *flattenJobTerminalConditionStateEnum(item.(interface{})) } return items } // flattenJobTerminalConditionStateEnumSlice flattens the contents of JobTerminalConditionStateEnum from a JSON // response object. func flattenJobTerminalConditionStateEnumSlice(c *Client, i interface{}, res *Job) []JobTerminalConditionStateEnum { a, ok := i.([]interface{}) if !ok { return []JobTerminalConditionStateEnum{} } if len(a) == 0 { return []JobTerminalConditionStateEnum{} } items := make([]JobTerminalConditionStateEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalConditionStateEnum(item.(interface{}))) } return items } // flattenJobTerminalConditionStateEnum asserts that an interface is a string, and returns a // pointer to a *JobTerminalConditionStateEnum with the same value as that string. func flattenJobTerminalConditionStateEnum(i interface{}) *JobTerminalConditionStateEnum { s, ok := i.(string) if !ok { return nil } return JobTerminalConditionStateEnumRef(s) } // flattenJobTerminalConditionSeverityEnumMap flattens the contents of JobTerminalConditionSeverityEnum from a JSON // response object. func flattenJobTerminalConditionSeverityEnumMap(c *Client, i interface{}, res *Job) map[string]JobTerminalConditionSeverityEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalConditionSeverityEnum{} } if len(a) == 0 { return map[string]JobTerminalConditionSeverityEnum{} } items := make(map[string]JobTerminalConditionSeverityEnum) for k, item := range a { items[k] = *flattenJobTerminalConditionSeverityEnum(item.(interface{})) } return items } // flattenJobTerminalConditionSeverityEnumSlice flattens the contents of JobTerminalConditionSeverityEnum from a JSON // response object. func flattenJobTerminalConditionSeverityEnumSlice(c *Client, i interface{}, res *Job) []JobTerminalConditionSeverityEnum { a, ok := i.([]interface{}) if !ok { return []JobTerminalConditionSeverityEnum{} } if len(a) == 0 { return []JobTerminalConditionSeverityEnum{} } items := make([]JobTerminalConditionSeverityEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalConditionSeverityEnum(item.(interface{}))) } return items } // flattenJobTerminalConditionSeverityEnum asserts that an interface is a string, and returns a // pointer to a *JobTerminalConditionSeverityEnum with the same value as that string. func flattenJobTerminalConditionSeverityEnum(i interface{}) *JobTerminalConditionSeverityEnum { s, ok := i.(string) if !ok { return nil } return JobTerminalConditionSeverityEnumRef(s) } // flattenJobTerminalConditionReasonEnumMap flattens the contents of JobTerminalConditionReasonEnum from a JSON // response object. func flattenJobTerminalConditionReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobTerminalConditionReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalConditionReasonEnum{} } if len(a) == 0 { return map[string]JobTerminalConditionReasonEnum{} } items := make(map[string]JobTerminalConditionReasonEnum) for k, item := range a { items[k] = *flattenJobTerminalConditionReasonEnum(item.(interface{})) } return items } // flattenJobTerminalConditionReasonEnumSlice flattens the contents of JobTerminalConditionReasonEnum from a JSON // response object. func flattenJobTerminalConditionReasonEnumSlice(c *Client, i interface{}, res *Job) []JobTerminalConditionReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobTerminalConditionReasonEnum{} } if len(a) == 0 { return []JobTerminalConditionReasonEnum{} } items := make([]JobTerminalConditionReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalConditionReasonEnum(item.(interface{}))) } return items } // flattenJobTerminalConditionReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobTerminalConditionReasonEnum with the same value as that string. func flattenJobTerminalConditionReasonEnum(i interface{}) *JobTerminalConditionReasonEnum { s, ok := i.(string) if !ok { return nil } return JobTerminalConditionReasonEnumRef(s) } // flattenJobTerminalConditionInternalReasonEnumMap flattens the contents of JobTerminalConditionInternalReasonEnum from a JSON // response object. func flattenJobTerminalConditionInternalReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobTerminalConditionInternalReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalConditionInternalReasonEnum{} } if len(a) == 0 { return map[string]JobTerminalConditionInternalReasonEnum{} } items := make(map[string]JobTerminalConditionInternalReasonEnum) for k, item := range a { items[k] = *flattenJobTerminalConditionInternalReasonEnum(item.(interface{})) } return items } // flattenJobTerminalConditionInternalReasonEnumSlice flattens the contents of JobTerminalConditionInternalReasonEnum from a JSON // response object. func flattenJobTerminalConditionInternalReasonEnumSlice(c *Client, i interface{}, res *Job) []JobTerminalConditionInternalReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobTerminalConditionInternalReasonEnum{} } if len(a) == 0 { return []JobTerminalConditionInternalReasonEnum{} } items := make([]JobTerminalConditionInternalReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalConditionInternalReasonEnum(item.(interface{}))) } return items } // flattenJobTerminalConditionInternalReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobTerminalConditionInternalReasonEnum with the same value as that string. func flattenJobTerminalConditionInternalReasonEnum(i interface{}) *JobTerminalConditionInternalReasonEnum { s, ok := i.(string) if !ok { return nil } return JobTerminalConditionInternalReasonEnumRef(s) } // flattenJobTerminalConditionDomainMappingReasonEnumMap flattens the contents of JobTerminalConditionDomainMappingReasonEnum from a JSON // response object. func flattenJobTerminalConditionDomainMappingReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobTerminalConditionDomainMappingReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalConditionDomainMappingReasonEnum{} } if len(a) == 0 { return map[string]JobTerminalConditionDomainMappingReasonEnum{} } items := make(map[string]JobTerminalConditionDomainMappingReasonEnum) for k, item := range a { items[k] = *flattenJobTerminalConditionDomainMappingReasonEnum(item.(interface{})) } return items } // flattenJobTerminalConditionDomainMappingReasonEnumSlice flattens the contents of JobTerminalConditionDomainMappingReasonEnum from a JSON // response object. func flattenJobTerminalConditionDomainMappingReasonEnumSlice(c *Client, i interface{}, res *Job) []JobTerminalConditionDomainMappingReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobTerminalConditionDomainMappingReasonEnum{} } if len(a) == 0 { return []JobTerminalConditionDomainMappingReasonEnum{} } items := make([]JobTerminalConditionDomainMappingReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalConditionDomainMappingReasonEnum(item.(interface{}))) } return items } // flattenJobTerminalConditionDomainMappingReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobTerminalConditionDomainMappingReasonEnum with the same value as that string. func flattenJobTerminalConditionDomainMappingReasonEnum(i interface{}) *JobTerminalConditionDomainMappingReasonEnum { s, ok := i.(string) if !ok { return nil } return JobTerminalConditionDomainMappingReasonEnumRef(s) } // flattenJobTerminalConditionRevisionReasonEnumMap flattens the contents of JobTerminalConditionRevisionReasonEnum from a JSON // response object. func flattenJobTerminalConditionRevisionReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobTerminalConditionRevisionReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalConditionRevisionReasonEnum{} } if len(a) == 0 { return map[string]JobTerminalConditionRevisionReasonEnum{} } items := make(map[string]JobTerminalConditionRevisionReasonEnum) for k, item := range a { items[k] = *flattenJobTerminalConditionRevisionReasonEnum(item.(interface{})) } return items } // flattenJobTerminalConditionRevisionReasonEnumSlice flattens the contents of JobTerminalConditionRevisionReasonEnum from a JSON // response object. func flattenJobTerminalConditionRevisionReasonEnumSlice(c *Client, i interface{}, res *Job) []JobTerminalConditionRevisionReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobTerminalConditionRevisionReasonEnum{} } if len(a) == 0 { return []JobTerminalConditionRevisionReasonEnum{} } items := make([]JobTerminalConditionRevisionReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalConditionRevisionReasonEnum(item.(interface{}))) } return items } // flattenJobTerminalConditionRevisionReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobTerminalConditionRevisionReasonEnum with the same value as that string. func flattenJobTerminalConditionRevisionReasonEnum(i interface{}) *JobTerminalConditionRevisionReasonEnum { s, ok := i.(string) if !ok { return nil } return JobTerminalConditionRevisionReasonEnumRef(s) } // flattenJobTerminalConditionExecutionReasonEnumMap flattens the contents of JobTerminalConditionExecutionReasonEnum from a JSON // response object. func flattenJobTerminalConditionExecutionReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobTerminalConditionExecutionReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobTerminalConditionExecutionReasonEnum{} } if len(a) == 0 { return map[string]JobTerminalConditionExecutionReasonEnum{} } items := make(map[string]JobTerminalConditionExecutionReasonEnum) for k, item := range a { items[k] = *flattenJobTerminalConditionExecutionReasonEnum(item.(interface{})) } return items } // flattenJobTerminalConditionExecutionReasonEnumSlice flattens the contents of JobTerminalConditionExecutionReasonEnum from a JSON // response object. func flattenJobTerminalConditionExecutionReasonEnumSlice(c *Client, i interface{}, res *Job) []JobTerminalConditionExecutionReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobTerminalConditionExecutionReasonEnum{} } if len(a) == 0 { return []JobTerminalConditionExecutionReasonEnum{} } items := make([]JobTerminalConditionExecutionReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobTerminalConditionExecutionReasonEnum(item.(interface{}))) } return items } // flattenJobTerminalConditionExecutionReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobTerminalConditionExecutionReasonEnum with the same value as that string. func flattenJobTerminalConditionExecutionReasonEnum(i interface{}) *JobTerminalConditionExecutionReasonEnum { s, ok := i.(string) if !ok { return nil } return JobTerminalConditionExecutionReasonEnumRef(s) } // flattenJobConditionsStateEnumMap flattens the contents of JobConditionsStateEnum from a JSON // response object. func flattenJobConditionsStateEnumMap(c *Client, i interface{}, res *Job) map[string]JobConditionsStateEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobConditionsStateEnum{} } if len(a) == 0 { return map[string]JobConditionsStateEnum{} } items := make(map[string]JobConditionsStateEnum) for k, item := range a { items[k] = *flattenJobConditionsStateEnum(item.(interface{})) } return items } // flattenJobConditionsStateEnumSlice flattens the contents of JobConditionsStateEnum from a JSON // response object. func flattenJobConditionsStateEnumSlice(c *Client, i interface{}, res *Job) []JobConditionsStateEnum { a, ok := i.([]interface{}) if !ok { return []JobConditionsStateEnum{} } if len(a) == 0 { return []JobConditionsStateEnum{} } items := make([]JobConditionsStateEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobConditionsStateEnum(item.(interface{}))) } return items } // flattenJobConditionsStateEnum asserts that an interface is a string, and returns a // pointer to a *JobConditionsStateEnum with the same value as that string. func flattenJobConditionsStateEnum(i interface{}) *JobConditionsStateEnum { s, ok := i.(string) if !ok { return nil } return JobConditionsStateEnumRef(s) } // flattenJobConditionsSeverityEnumMap flattens the contents of JobConditionsSeverityEnum from a JSON // response object. func flattenJobConditionsSeverityEnumMap(c *Client, i interface{}, res *Job) map[string]JobConditionsSeverityEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobConditionsSeverityEnum{} } if len(a) == 0 { return map[string]JobConditionsSeverityEnum{} } items := make(map[string]JobConditionsSeverityEnum) for k, item := range a { items[k] = *flattenJobConditionsSeverityEnum(item.(interface{})) } return items } // flattenJobConditionsSeverityEnumSlice flattens the contents of JobConditionsSeverityEnum from a JSON // response object. func flattenJobConditionsSeverityEnumSlice(c *Client, i interface{}, res *Job) []JobConditionsSeverityEnum { a, ok := i.([]interface{}) if !ok { return []JobConditionsSeverityEnum{} } if len(a) == 0 { return []JobConditionsSeverityEnum{} } items := make([]JobConditionsSeverityEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobConditionsSeverityEnum(item.(interface{}))) } return items } // flattenJobConditionsSeverityEnum asserts that an interface is a string, and returns a // pointer to a *JobConditionsSeverityEnum with the same value as that string. func flattenJobConditionsSeverityEnum(i interface{}) *JobConditionsSeverityEnum { s, ok := i.(string) if !ok { return nil } return JobConditionsSeverityEnumRef(s) } // flattenJobConditionsReasonEnumMap flattens the contents of JobConditionsReasonEnum from a JSON // response object. func flattenJobConditionsReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobConditionsReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobConditionsReasonEnum{} } if len(a) == 0 { return map[string]JobConditionsReasonEnum{} } items := make(map[string]JobConditionsReasonEnum) for k, item := range a { items[k] = *flattenJobConditionsReasonEnum(item.(interface{})) } return items } // flattenJobConditionsReasonEnumSlice flattens the contents of JobConditionsReasonEnum from a JSON // response object. func flattenJobConditionsReasonEnumSlice(c *Client, i interface{}, res *Job) []JobConditionsReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobConditionsReasonEnum{} } if len(a) == 0 { return []JobConditionsReasonEnum{} } items := make([]JobConditionsReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobConditionsReasonEnum(item.(interface{}))) } return items } // flattenJobConditionsReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobConditionsReasonEnum with the same value as that string. func flattenJobConditionsReasonEnum(i interface{}) *JobConditionsReasonEnum { s, ok := i.(string) if !ok { return nil } return JobConditionsReasonEnumRef(s) } // flattenJobConditionsRevisionReasonEnumMap flattens the contents of JobConditionsRevisionReasonEnum from a JSON // response object. func flattenJobConditionsRevisionReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobConditionsRevisionReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobConditionsRevisionReasonEnum{} } if len(a) == 0 { return map[string]JobConditionsRevisionReasonEnum{} } items := make(map[string]JobConditionsRevisionReasonEnum) for k, item := range a { items[k] = *flattenJobConditionsRevisionReasonEnum(item.(interface{})) } return items } // flattenJobConditionsRevisionReasonEnumSlice flattens the contents of JobConditionsRevisionReasonEnum from a JSON // response object. func flattenJobConditionsRevisionReasonEnumSlice(c *Client, i interface{}, res *Job) []JobConditionsRevisionReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobConditionsRevisionReasonEnum{} } if len(a) == 0 { return []JobConditionsRevisionReasonEnum{} } items := make([]JobConditionsRevisionReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobConditionsRevisionReasonEnum(item.(interface{}))) } return items } // flattenJobConditionsRevisionReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobConditionsRevisionReasonEnum with the same value as that string. func flattenJobConditionsRevisionReasonEnum(i interface{}) *JobConditionsRevisionReasonEnum { s, ok := i.(string) if !ok { return nil } return JobConditionsRevisionReasonEnumRef(s) } // flattenJobConditionsExecutionReasonEnumMap flattens the contents of JobConditionsExecutionReasonEnum from a JSON // response object. func flattenJobConditionsExecutionReasonEnumMap(c *Client, i interface{}, res *Job) map[string]JobConditionsExecutionReasonEnum { a, ok := i.(map[string]interface{}) if !ok { return map[string]JobConditionsExecutionReasonEnum{} } if len(a) == 0 { return map[string]JobConditionsExecutionReasonEnum{} } items := make(map[string]JobConditionsExecutionReasonEnum) for k, item := range a { items[k] = *flattenJobConditionsExecutionReasonEnum(item.(interface{})) } return items } // flattenJobConditionsExecutionReasonEnumSlice flattens the contents of JobConditionsExecutionReasonEnum from a JSON // response object. func flattenJobConditionsExecutionReasonEnumSlice(c *Client, i interface{}, res *Job) []JobConditionsExecutionReasonEnum { a, ok := i.([]interface{}) if !ok { return []JobConditionsExecutionReasonEnum{} } if len(a) == 0 { return []JobConditionsExecutionReasonEnum{} } items := make([]JobConditionsExecutionReasonEnum, 0, len(a)) for _, item := range a { items = append(items, *flattenJobConditionsExecutionReasonEnum(item.(interface{}))) } return items } // flattenJobConditionsExecutionReasonEnum asserts that an interface is a string, and returns a // pointer to a *JobConditionsExecutionReasonEnum with the same value as that string. func flattenJobConditionsExecutionReasonEnum(i interface{}) *JobConditionsExecutionReasonEnum { s, ok := i.(string) if !ok { return nil } return JobConditionsExecutionReasonEnumRef(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 *Job) matcher(c *Client) func([]byte) bool { return func(b []byte) bool { cr, err := unmarshalJob(b, c, r) if err != nil { c.Config.Logger.Warning("failed to unmarshal provided resource in matcher.") return false } nr := r.urlNormalized() ncr := cr.urlNormalized() c.Config.Logger.Infof("looking for %v\nin %v", nr, ncr) if nr.Project == nil && ncr.Project == nil { c.Config.Logger.Info("Both Project fields null - considering equal.") } else if nr.Project == nil || ncr.Project == nil { c.Config.Logger.Info("Only one Project field is null - considering unequal.") return false } else if *nr.Project != *ncr.Project { return false } if nr.Location == nil && ncr.Location == nil { c.Config.Logger.Info("Both Location fields null - considering equal.") } else if nr.Location == nil || ncr.Location == nil { c.Config.Logger.Info("Only one Location field is null - considering unequal.") return false } else if *nr.Location != *ncr.Location { return false } if nr.Name == nil && ncr.Name == nil { c.Config.Logger.Info("Both Name fields null - considering equal.") } else if nr.Name == nil || ncr.Name == nil { c.Config.Logger.Info("Only one Name field is null - considering unequal.") return false } else if *nr.Name != *ncr.Name { return false } return true } } type jobDiff struct { // The diff should include one or the other of RequiresRecreate or UpdateOp. RequiresRecreate bool UpdateOp jobApiOperation FieldName string // used for error logging } func convertFieldDiffsToJobDiffs(config *dcl.Config, fds []*dcl.FieldDiff, opts []dcl.ApplyOption) ([]jobDiff, 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 []jobDiff // For each operation name, create a jobDiff which contains the operation. for opName, fieldDiffs := range opNamesToFieldDiffs { // Use the first field diff's field name for logging required recreate error. diff := jobDiff{FieldName: fieldDiffs[0].FieldName} if opName == "Recreate" { diff.RequiresRecreate = true } else { apiOp, err := convertOpNameToJobApiOperation(opName, fieldDiffs, opts...) if err != nil { return diffs, err } diff.UpdateOp = apiOp } diffs = append(diffs, diff) } return diffs, nil } func convertOpNameToJobApiOperation(opName string, fieldDiffs []*dcl.FieldDiff, opts ...dcl.ApplyOption) (jobApiOperation, error) { switch opName { case "updateJobUpdateJobOperation": return &updateJobUpdateJobOperation{FieldDiffs: fieldDiffs}, nil default: return nil, fmt.Errorf("no such operation with name: %v", opName) } } func extractJobFields(r *Job) error { vBinaryAuthorization := r.BinaryAuthorization if vBinaryAuthorization == nil { // note: explicitly not the empty object. vBinaryAuthorization = &JobBinaryAuthorization{} } if err := extractJobBinaryAuthorizationFields(r, vBinaryAuthorization); err != nil { return err } if !dcl.IsEmptyValueIndirect(vBinaryAuthorization) { r.BinaryAuthorization = vBinaryAuthorization } vTemplate := r.Template if vTemplate == nil { // note: explicitly not the empty object. vTemplate = &JobTemplate{} } if err := extractJobTemplateFields(r, vTemplate); err != nil { return err } if !dcl.IsEmptyValueIndirect(vTemplate) { r.Template = vTemplate } vTerminalCondition := r.TerminalCondition if vTerminalCondition == nil { // note: explicitly not the empty object. vTerminalCondition = &JobTerminalCondition{} } if err := extractJobTerminalConditionFields(r, vTerminalCondition); err != nil { return err } if !dcl.IsEmptyValueIndirect(vTerminalCondition) { r.TerminalCondition = vTerminalCondition } vLatestSucceededExecution := r.LatestSucceededExecution if vLatestSucceededExecution == nil { // note: explicitly not the empty object. vLatestSucceededExecution = &JobLatestSucceededExecution{} } if err := extractJobLatestSucceededExecutionFields(r, vLatestSucceededExecution); err != nil { return err } if !dcl.IsEmptyValueIndirect(vLatestSucceededExecution) { r.LatestSucceededExecution = vLatestSucceededExecution } vLatestCreatedExecution := r.LatestCreatedExecution if vLatestCreatedExecution == nil { // note: explicitly not the empty object. vLatestCreatedExecution = &JobLatestCreatedExecution{} } if err := extractJobLatestCreatedExecutionFields(r, vLatestCreatedExecution); err != nil { return err } if !dcl.IsEmptyValueIndirect(vLatestCreatedExecution) { r.LatestCreatedExecution = vLatestCreatedExecution } return nil } func extractJobBinaryAuthorizationFields(r *Job, o *JobBinaryAuthorization) error { return nil } func extractJobTemplateFields(r *Job, o *JobTemplate) error { vTemplate := o.Template if vTemplate == nil { // note: explicitly not the empty object. vTemplate = &JobTemplateTemplate{} } if err := extractJobTemplateTemplateFields(r, vTemplate); err != nil { return err } if !dcl.IsEmptyValueIndirect(vTemplate) { o.Template = vTemplate } return nil } func extractJobTemplateTemplateFields(r *Job, o *JobTemplateTemplate) error { vVPCAccess := o.VPCAccess if vVPCAccess == nil { // note: explicitly not the empty object. vVPCAccess = &JobTemplateTemplateVPCAccess{} } if err := extractJobTemplateTemplateVPCAccessFields(r, vVPCAccess); err != nil { return err } if !dcl.IsEmptyValueIndirect(vVPCAccess) { o.VPCAccess = vVPCAccess } return nil } func extractJobTemplateTemplateContainersFields(r *Job, o *JobTemplateTemplateContainers) error { vResources := o.Resources if vResources == nil { // note: explicitly not the empty object. vResources = &JobTemplateTemplateContainersResources{} } if err := extractJobTemplateTemplateContainersResourcesFields(r, vResources); err != nil { return err } if !dcl.IsEmptyValueIndirect(vResources) { o.Resources = vResources } return nil } func extractJobTemplateTemplateContainersEnvFields(r *Job, o *JobTemplateTemplateContainersEnv) error { vValueSource := o.ValueSource if vValueSource == nil { // note: explicitly not the empty object. vValueSource = &JobTemplateTemplateContainersEnvValueSource{} } if err := extractJobTemplateTemplateContainersEnvValueSourceFields(r, vValueSource); err != nil { return err } if !dcl.IsEmptyValueIndirect(vValueSource) { o.ValueSource = vValueSource } return nil } func extractJobTemplateTemplateContainersEnvValueSourceFields(r *Job, o *JobTemplateTemplateContainersEnvValueSource) error { vSecretKeyRef := o.SecretKeyRef if vSecretKeyRef == nil { // note: explicitly not the empty object. vSecretKeyRef = &JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} } if err := extractJobTemplateTemplateContainersEnvValueSourceSecretKeyRefFields(r, vSecretKeyRef); err != nil { return err } if !dcl.IsEmptyValueIndirect(vSecretKeyRef) { o.SecretKeyRef = vSecretKeyRef } return nil } func extractJobTemplateTemplateContainersEnvValueSourceSecretKeyRefFields(r *Job, o *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) error { return nil } func extractJobTemplateTemplateContainersResourcesFields(r *Job, o *JobTemplateTemplateContainersResources) error { return nil } func extractJobTemplateTemplateContainersPortsFields(r *Job, o *JobTemplateTemplateContainersPorts) error { return nil } func extractJobTemplateTemplateContainersVolumeMountsFields(r *Job, o *JobTemplateTemplateContainersVolumeMounts) error { return nil } func extractJobTemplateTemplateVolumesFields(r *Job, o *JobTemplateTemplateVolumes) error { vSecret := o.Secret if vSecret == nil { // note: explicitly not the empty object. vSecret = &JobTemplateTemplateVolumesSecret{} } if err := extractJobTemplateTemplateVolumesSecretFields(r, vSecret); err != nil { return err } if !dcl.IsEmptyValueIndirect(vSecret) { o.Secret = vSecret } vCloudSqlInstance := o.CloudSqlInstance if vCloudSqlInstance == nil { // note: explicitly not the empty object. vCloudSqlInstance = &JobTemplateTemplateVolumesCloudSqlInstance{} } if err := extractJobTemplateTemplateVolumesCloudSqlInstanceFields(r, vCloudSqlInstance); err != nil { return err } if !dcl.IsEmptyValueIndirect(vCloudSqlInstance) { o.CloudSqlInstance = vCloudSqlInstance } return nil } func extractJobTemplateTemplateVolumesSecretFields(r *Job, o *JobTemplateTemplateVolumesSecret) error { return nil } func extractJobTemplateTemplateVolumesSecretItemsFields(r *Job, o *JobTemplateTemplateVolumesSecretItems) error { return nil } func extractJobTemplateTemplateVolumesCloudSqlInstanceFields(r *Job, o *JobTemplateTemplateVolumesCloudSqlInstance) error { return nil } func extractJobTemplateTemplateVPCAccessFields(r *Job, o *JobTemplateTemplateVPCAccess) error { return nil } func extractJobTerminalConditionFields(r *Job, o *JobTerminalCondition) error { return nil } func extractJobConditionsFields(r *Job, o *JobConditions) error { return nil } func extractJobLatestSucceededExecutionFields(r *Job, o *JobLatestSucceededExecution) error { return nil } func extractJobLatestCreatedExecutionFields(r *Job, o *JobLatestCreatedExecution) error { return nil } func postReadExtractJobFields(r *Job) error { vBinaryAuthorization := r.BinaryAuthorization if vBinaryAuthorization == nil { // note: explicitly not the empty object. vBinaryAuthorization = &JobBinaryAuthorization{} } if err := postReadExtractJobBinaryAuthorizationFields(r, vBinaryAuthorization); err != nil { return err } if !dcl.IsEmptyValueIndirect(vBinaryAuthorization) { r.BinaryAuthorization = vBinaryAuthorization } vTemplate := r.Template if vTemplate == nil { // note: explicitly not the empty object. vTemplate = &JobTemplate{} } if err := postReadExtractJobTemplateFields(r, vTemplate); err != nil { return err } if !dcl.IsEmptyValueIndirect(vTemplate) { r.Template = vTemplate } vTerminalCondition := r.TerminalCondition if vTerminalCondition == nil { // note: explicitly not the empty object. vTerminalCondition = &JobTerminalCondition{} } if err := postReadExtractJobTerminalConditionFields(r, vTerminalCondition); err != nil { return err } if !dcl.IsEmptyValueIndirect(vTerminalCondition) { r.TerminalCondition = vTerminalCondition } vLatestSucceededExecution := r.LatestSucceededExecution if vLatestSucceededExecution == nil { // note: explicitly not the empty object. vLatestSucceededExecution = &JobLatestSucceededExecution{} } if err := postReadExtractJobLatestSucceededExecutionFields(r, vLatestSucceededExecution); err != nil { return err } if !dcl.IsEmptyValueIndirect(vLatestSucceededExecution) { r.LatestSucceededExecution = vLatestSucceededExecution } vLatestCreatedExecution := r.LatestCreatedExecution if vLatestCreatedExecution == nil { // note: explicitly not the empty object. vLatestCreatedExecution = &JobLatestCreatedExecution{} } if err := postReadExtractJobLatestCreatedExecutionFields(r, vLatestCreatedExecution); err != nil { return err } if !dcl.IsEmptyValueIndirect(vLatestCreatedExecution) { r.LatestCreatedExecution = vLatestCreatedExecution } return nil } func postReadExtractJobBinaryAuthorizationFields(r *Job, o *JobBinaryAuthorization) error { return nil } func postReadExtractJobTemplateFields(r *Job, o *JobTemplate) error { vTemplate := o.Template if vTemplate == nil { // note: explicitly not the empty object. vTemplate = &JobTemplateTemplate{} } if err := extractJobTemplateTemplateFields(r, vTemplate); err != nil { return err } if !dcl.IsEmptyValueIndirect(vTemplate) { o.Template = vTemplate } return nil } func postReadExtractJobTemplateTemplateFields(r *Job, o *JobTemplateTemplate) error { vVPCAccess := o.VPCAccess if vVPCAccess == nil { // note: explicitly not the empty object. vVPCAccess = &JobTemplateTemplateVPCAccess{} } if err := extractJobTemplateTemplateVPCAccessFields(r, vVPCAccess); err != nil { return err } if !dcl.IsEmptyValueIndirect(vVPCAccess) { o.VPCAccess = vVPCAccess } return nil } func postReadExtractJobTemplateTemplateContainersFields(r *Job, o *JobTemplateTemplateContainers) error { vResources := o.Resources if vResources == nil { // note: explicitly not the empty object. vResources = &JobTemplateTemplateContainersResources{} } if err := extractJobTemplateTemplateContainersResourcesFields(r, vResources); err != nil { return err } if !dcl.IsEmptyValueIndirect(vResources) { o.Resources = vResources } return nil } func postReadExtractJobTemplateTemplateContainersEnvFields(r *Job, o *JobTemplateTemplateContainersEnv) error { vValueSource := o.ValueSource if vValueSource == nil { // note: explicitly not the empty object. vValueSource = &JobTemplateTemplateContainersEnvValueSource{} } if err := extractJobTemplateTemplateContainersEnvValueSourceFields(r, vValueSource); err != nil { return err } if !dcl.IsEmptyValueIndirect(vValueSource) { o.ValueSource = vValueSource } return nil } func postReadExtractJobTemplateTemplateContainersEnvValueSourceFields(r *Job, o *JobTemplateTemplateContainersEnvValueSource) error { vSecretKeyRef := o.SecretKeyRef if vSecretKeyRef == nil { // note: explicitly not the empty object. vSecretKeyRef = &JobTemplateTemplateContainersEnvValueSourceSecretKeyRef{} } if err := extractJobTemplateTemplateContainersEnvValueSourceSecretKeyRefFields(r, vSecretKeyRef); err != nil { return err } if !dcl.IsEmptyValueIndirect(vSecretKeyRef) { o.SecretKeyRef = vSecretKeyRef } return nil } func postReadExtractJobTemplateTemplateContainersEnvValueSourceSecretKeyRefFields(r *Job, o *JobTemplateTemplateContainersEnvValueSourceSecretKeyRef) error { return nil } func postReadExtractJobTemplateTemplateContainersResourcesFields(r *Job, o *JobTemplateTemplateContainersResources) error { return nil } func postReadExtractJobTemplateTemplateContainersPortsFields(r *Job, o *JobTemplateTemplateContainersPorts) error { return nil } func postReadExtractJobTemplateTemplateContainersVolumeMountsFields(r *Job, o *JobTemplateTemplateContainersVolumeMounts) error { return nil } func postReadExtractJobTemplateTemplateVolumesFields(r *Job, o *JobTemplateTemplateVolumes) error { vSecret := o.Secret if vSecret == nil { // note: explicitly not the empty object. vSecret = &JobTemplateTemplateVolumesSecret{} } if err := extractJobTemplateTemplateVolumesSecretFields(r, vSecret); err != nil { return err } if !dcl.IsEmptyValueIndirect(vSecret) { o.Secret = vSecret } vCloudSqlInstance := o.CloudSqlInstance if vCloudSqlInstance == nil { // note: explicitly not the empty object. vCloudSqlInstance = &JobTemplateTemplateVolumesCloudSqlInstance{} } if err := extractJobTemplateTemplateVolumesCloudSqlInstanceFields(r, vCloudSqlInstance); err != nil { return err } if !dcl.IsEmptyValueIndirect(vCloudSqlInstance) { o.CloudSqlInstance = vCloudSqlInstance } return nil } func postReadExtractJobTemplateTemplateVolumesSecretFields(r *Job, o *JobTemplateTemplateVolumesSecret) error { return nil } func postReadExtractJobTemplateTemplateVolumesSecretItemsFields(r *Job, o *JobTemplateTemplateVolumesSecretItems) error { return nil } func postReadExtractJobTemplateTemplateVolumesCloudSqlInstanceFields(r *Job, o *JobTemplateTemplateVolumesCloudSqlInstance) error { return nil } func postReadExtractJobTemplateTemplateVPCAccessFields(r *Job, o *JobTemplateTemplateVPCAccess) error { return nil } func postReadExtractJobTerminalConditionFields(r *Job, o *JobTerminalCondition) error { return nil } func postReadExtractJobConditionsFields(r *Job, o *JobConditions) error { return nil } func postReadExtractJobLatestSucceededExecutionFields(r *Job, o *JobLatestSucceededExecution) error { return nil } func postReadExtractJobLatestCreatedExecutionFields(r *Job, o *JobLatestCreatedExecution) error { return nil }