func overrideByPayload()

in pkg/api/deploymentapi/override_settings.go [106:249]


func overrideByPayload(apm []*models.ApmPayload, appsearch []*models.AppSearchPayload,
	elasticsearch []*models.ElasticsearchPayload, integrationsServer []*models.IntegrationsServerPayload,
	kibana []*models.KibanaPayload, enterprisesearch []*models.EnterpriseSearchPayload, region, version,
	refID string, plugins []string, overrideRefIDs bool) error {
	for _, resource := range apm {
		if resource.Region == nil && region != "" {
			resource.Region = &region
		}

		if overrideRefIDs {
			resource.RefID = ec.String(defaultApmRefID)
		}

		if refID != "" {
			resource.ElasticsearchClusterRefID = &refID
		}

		if version != "" {
			if resource.Plan != nil && resource.Plan.Apm != nil {
				resource.Plan.Apm.Version = version
			}
		}
	}

	for _, resource := range appsearch {
		if resource.Region == nil && region != "" {
			resource.Region = &region
		}

		if overrideRefIDs {
			resource.RefID = ec.String(defaultAppsearchRefID)
		}

		if refID != "" {
			resource.ElasticsearchClusterRefID = &refID
		}

		if version != "" {
			if resource.Plan != nil && resource.Plan.Appsearch != nil {
				resource.Plan.Appsearch.Version = version
			}
		}
	}

	for _, resource := range elasticsearch {
		if resource.Region == nil && region != "" {
			resource.Region = &region
		}

		if refID != "" {
			resource.RefID = &refID
		}

		// If version is empty, then data tiers are supported by default.
		dataTierCompatible := true
		if version != "" {
			if resource.Plan != nil && resource.Plan.Elasticsearch != nil {
				resource.Plan.Elasticsearch.Version = version
				if len(plugins) > 0 {
					resource.Plan.Elasticsearch.EnabledBuiltInPlugins = append(
						resource.Plan.Elasticsearch.EnabledBuiltInPlugins, plugins...,
					)
				}

				esVersion, err := semver.Parse(version)
				if err != nil {
					return err
				}
				dataTierCompatible = esVersion.GE(dataTiersMinVersion)
			}
		}
		for _, top := range resource.Plan.ClusterTopology {
			if len(top.NodeRoles) > 0 && top.NodeType != nil {
				if dataTierCompatible {
					top.NodeType = nil
					continue
				}
				top.NodeRoles = nil
			}
		}
	}

	for _, resource := range enterprisesearch {
		if resource.Region == nil && region != "" {
			resource.Region = &region
		}

		if overrideRefIDs {
			resource.RefID = ec.String(defaultEnterpriseSearchRefID)
		}

		if refID != "" {
			resource.ElasticsearchClusterRefID = &refID
		}

		if version != "" {
			if resource.Plan != nil && resource.Plan.EnterpriseSearch != nil {
				resource.Plan.EnterpriseSearch.Version = version
			}
		}
	}

	for _, resource := range integrationsServer {
		if resource.Region == nil && region != "" {
			resource.Region = &region
		}

		if overrideRefIDs {
			resource.RefID = ec.String(defaultIntegrationsServerRefID)
		}

		if refID != "" {
			resource.ElasticsearchClusterRefID = &refID
		}

		if version != "" {
			if resource.Plan != nil && resource.Plan.IntegrationsServer != nil {
				resource.Plan.IntegrationsServer.Version = version
			}
		}
	}

	for _, resource := range kibana {
		if resource.Region == nil && region != "" {
			resource.Region = &region
		}

		if overrideRefIDs {
			resource.RefID = ec.String(defaultKibanaRefID)
		}

		if refID != "" {
			resource.ElasticsearchClusterRefID = &refID
		}

		if version != "" {
			if resource.Plan != nil && resource.Plan.Kibana != nil {
				resource.Plan.Kibana.Version = version
			}
		}
	}

	return nil
}