func()

in ec/ecresource/deploymentresource/deployment/v2/deployment_create_payload.go [63:183]


func (dep DeploymentTF) CreateRequest(ctx context.Context, client *api.API) (*models.DeploymentCreateRequest, diag.Diagnostics) {
	// The alias behaves like this:
	// - Not set in the config (null/unknown) -> Default alias is added
	// - Set to empty string -> No alias is added
	// - Set to non-empty string -> Alias with that value is added
	var alias *string
	if dep.Alias.IsNull() || dep.Alias.IsUnknown() {
		alias = nil
	} else {
		alias = ec.String(dep.Alias.ValueString())
	}

	var result = models.DeploymentCreateRequest{
		Name:      dep.Name.ValueString(),
		Alias:     alias,
		Resources: &models.DeploymentCreateResources{},
		Settings:  &models.DeploymentCreateSettings{},
		Metadata:  &models.DeploymentCreateMetadata{},
	}

	dtID := dep.DeploymentTemplateId.ValueString()
	version := dep.Version.ValueString()

	var diagsnostics diag.Diagnostics

	template, err := deptemplateapi.Get(deptemplateapi.GetParams{
		API:                        client,
		TemplateID:                 dtID,
		Region:                     dep.Region.ValueString(),
		HideInstanceConfigurations: true,
	})
	if err != nil {
		diagsnostics.AddError("Deployment template get error", err.Error())
		return nil, diagsnostics
	}

	baseUpdatePayloads := &models.DeploymentUpdateResources{
		Apm:                template.DeploymentTemplate.Resources.Apm,
		Appsearch:          template.DeploymentTemplate.Resources.Appsearch,
		Elasticsearch:      template.DeploymentTemplate.Resources.Elasticsearch,
		EnterpriseSearch:   template.DeploymentTemplate.Resources.EnterpriseSearch,
		IntegrationsServer: template.DeploymentTemplate.Resources.IntegrationsServer,
		Kibana:             template.DeploymentTemplate.Resources.Kibana,
	}

	useNodeRoles, err := elasticsearchv2.CompatibleWithNodeRoles(version)
	if err != nil {
		diagsnostics.AddError("Deployment parse error", err.Error())
		return nil, diagsnostics
	}

	elasticsearchPayload, diags := elasticsearchv2.ElasticsearchPayload(ctx, dep.Elasticsearch, nil, baseUpdatePayloads, dtID, version, useNodeRoles)

	if diags.HasError() {
		diagsnostics.Append(diags...)
	}

	if elasticsearchPayload != nil {
		result.Resources.Elasticsearch = []*models.ElasticsearchPayload{elasticsearchPayload}
	}

	kibanaPayload, diags := kibanav2.KibanaPayload(ctx, dep.Kibana, baseUpdatePayloads)

	if diags.HasError() {
		diagsnostics.Append(diags...)
	}

	if kibanaPayload != nil {
		result.Resources.Kibana = []*models.KibanaPayload{kibanaPayload}
	}

	apmPayload, diags := apmv2.ApmPayload(ctx, dep.Apm, baseUpdatePayloads)

	if diags.HasError() {
		diagsnostics.Append(diags...)
	}

	if apmPayload != nil {
		result.Resources.Apm = []*models.ApmPayload{apmPayload}
	}

	integrationsServerPayload, diags := integrationsserverv2.IntegrationsServerPayload(ctx, dep.IntegrationsServer, baseUpdatePayloads)

	if diags.HasError() {
		diagsnostics.Append(diags...)
	}

	if integrationsServerPayload != nil {
		result.Resources.IntegrationsServer = []*models.IntegrationsServerPayload{integrationsServerPayload}
	}

	enterpriseSearchPayload, diags := enterprisesearchv2.EnterpriseSearchesPayload(ctx, dep.EnterpriseSearch, baseUpdatePayloads)

	if diags.HasError() {
		diagsnostics.Append(diags...)
	}

	if enterpriseSearchPayload != nil {
		result.Resources.EnterpriseSearch = []*models.EnterpriseSearchPayload{enterpriseSearchPayload}
	}

	if diags := trafficFilterToModel(ctx, dep.TrafficFilter, &result); diags.HasError() {
		diagsnostics.Append(diags...)
	}

	observabilityPayload, diags := observabilityv2.ObservabilityPayload(ctx, dep.Observability, client)

	if diags.HasError() {
		diagsnostics.Append(diags...)
	}

	result.Settings.Observability = observabilityPayload

	result.Metadata.Tags, diags = converters.TypesMapToModelsTags(ctx, dep.Tags)

	if diags.HasError() {
		diagsnostics.Append(diags...)
	}

	return &result, diagsnostics
}