func NewPayload()

in pkg/api/deploymentapi/depresourceapi/new_payload.go [90:214]


func NewPayload(params NewPayloadParams) (*models.DeploymentCreateRequest, error) {
	res, err := deptemplateapi.Get(deptemplateapi.GetParams{
		API:        params.API,
		TemplateID: params.DeploymentTemplateID,
		Region:     params.Region,
	})
	if err != nil {
		return nil, err
	}

	// Version Discovery
	version, err := LatestStackVersion(LatestStackVersionParams{
		Writer:  params.Writer,
		API:     params.API,
		Version: params.Version,
		Region:  params.Region,
	})
	if err != nil {
		return nil, err
	}

	esPayload, err := ParseElasticsearchInput(ParseElasticsearchInputParams{
		NewElasticsearchParams: NewElasticsearchParams{
			RefID:                    params.ElasticsearchInstance.RefID,
			Version:                  version,
			Plugins:                  params.Plugins,
			Region:                   params.Region,
			TemplateID:               params.DeploymentTemplateID,
			DeploymentTemplateInfoV2: res,
		},
		API:              params.API,
		Size:             params.ElasticsearchInstance.Size,
		ZoneCount:        params.ElasticsearchInstance.ZoneCount,
		Writer:           params.Writer,
		TopologyElements: params.TopologyElements,
	})
	if err != nil {
		return nil, err
	}

	kibanaPayload, err := NewKibana(NewStateless{
		ElasticsearchRefID:       params.ElasticsearchInstance.RefID,
		API:                      params.API,
		RefID:                    params.KibanaInstance.RefID,
		Version:                  version,
		Region:                   params.Region,
		TemplateID:               params.DeploymentTemplateID,
		Size:                     params.KibanaInstance.Size,
		ZoneCount:                params.KibanaInstance.ZoneCount,
		DeploymentTemplateInfoV2: res,
	})
	if err != nil {
		return nil, err
	}

	resources := models.DeploymentCreateResources{
		Elasticsearch: []*models.ElasticsearchPayload{esPayload},
		Kibana:        []*models.KibanaPayload{kibanaPayload},
	}

	if params.ApmEnable {
		apmPayload, err := NewApm(NewStateless{
			ElasticsearchRefID:       params.ElasticsearchInstance.RefID,
			API:                      params.API,
			RefID:                    params.ApmInstance.RefID,
			Version:                  version,
			Region:                   params.Region,
			TemplateID:               params.DeploymentTemplateID,
			Size:                     params.ApmInstance.Size,
			ZoneCount:                params.ApmInstance.ZoneCount,
			DeploymentTemplateInfoV2: res,
		})
		if err != nil {
			return nil, err
		}

		resources.Apm = []*models.ApmPayload{apmPayload}
	}

	if params.AppsearchEnable {
		appsearchPayload, err := NewAppSearch(NewStateless{
			ElasticsearchRefID:       params.ElasticsearchInstance.RefID,
			API:                      params.API,
			RefID:                    params.AppsearchInstance.RefID,
			Version:                  version,
			Region:                   params.Region,
			TemplateID:               params.DeploymentTemplateID,
			Size:                     params.AppsearchInstance.Size,
			ZoneCount:                params.AppsearchInstance.ZoneCount,
			DeploymentTemplateInfoV2: res,
		})
		if err != nil {
			return nil, err
		}

		resources.Appsearch = []*models.AppSearchPayload{appsearchPayload}
	}

	if params.EnterpriseSearchEnable {
		enterpriseSearchPayload, err := NewEnterpriseSearch(
			NewStateless{
				ElasticsearchRefID:       params.ElasticsearchInstance.RefID,
				API:                      params.API,
				RefID:                    params.EnterpriseSearchInstance.RefID,
				Version:                  version,
				Region:                   params.Region,
				TemplateID:               params.DeploymentTemplateID,
				Size:                     params.EnterpriseSearchInstance.Size,
				ZoneCount:                params.EnterpriseSearchInstance.ZoneCount,
				DeploymentTemplateInfoV2: res,
			})
		if err != nil {
			return nil, err
		}

		resources.EnterpriseSearch = []*models.EnterpriseSearchPayload{enterpriseSearchPayload}
	}

	payload := models.DeploymentCreateRequest{
		Name:      params.Name,
		Resources: &resources,
	}

	return &payload, nil
}