func()

in internal/provider/template_resource.go [243:333]


func (r *templateResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
	// Retrieve values from plan
	var plan templateResourceModel
	diags := req.Plan.Get(ctx, &plan)
	resp.Diagnostics.Append(diags...)
	if resp.Diagnostics.HasError() {
		return
	}

	reqSlt := backupdr.SltRest{
		Name: plan.Name.ValueString(),
		// Immutable:   plan.Immutable.ValueBool(),
		Description: plan.Description.ValueString(),
		Sourcename:  plan.Sourcename.ValueString(),
		Override:    plan.Override.ValueString(),
	}

	for _, pol := range plan.Policies {
		reqSlt.Policies = append(reqSlt.Policies, backupdr.PolicyRest{
			Name:          pol.Name.ValueString(),
			Description:   pol.Description.ValueString(),
			Priority:      pol.Priority.ValueString(),
			Exclusiontype: pol.Exclusiontype.ValueString(),
			Iscontinuous:  pol.Iscontinuous.ValueBool(),
			Rpo:           pol.Rpo.ValueString(),
			Rpom:          pol.Rpom.ValueString(),
			Starttime:     pol.Starttime.ValueString(),
			Endtime:       pol.Endtime.ValueString(),
			Scheduletype:  pol.Scheduletype.ValueString(),
			// Scheduling:        pol.Scheduling.ValueString(),
			Targetvault:       int32(pol.Targetvault.ValueInt64()),
			Sourcevault:       int32(pol.Sourcevault.ValueInt64()),
			Selection:         pol.Selection.ValueString(),
			Exclusion:         pol.Exclusion.ValueString(),
			Exclusioninterval: pol.Exclusioninterval.ValueString(),
			Retention:         pol.Retention.ValueString(),
			Retentionm:        pol.Retentionm.ValueString(),
			Remoteretention:   int32(pol.Remoteretention.ValueInt64()),
			PolicyType:        pol.PolicyType.ValueString(),
			Op:                pol.Op.ValueString(),
			Verification:      pol.Verification.ValueBool(),
			Repeatinterval:    pol.Repeatinterval.ValueString(),
			Encrypt:           pol.Encrypt.ValueString(),
			Reptype:           pol.Reptype.ValueString(),
			Verifychoice:      pol.Verifychoice.ValueString(),
		})
	}

	// Generate API request body from plan
	reqBody := backupdr.SLATemplateApiCreateSltOpts{
		Body: optional.NewInterface(reqSlt),
	}

	// Create new entity
	respObject, _, err := r.client.SLATemplateApi.CreateSlt(r.authCtx, &reqBody)
	if err != nil {
		resp.Diagnostics.AddError(
			"Error creating SLT",
			"Could not create SLA Template, unexpected error: "+err.Error(),
		)
		return
	}

	// Map response body to schema and populate Computed attribute values
	plan.ID = types.StringValue(respObject.Id)
	plan.Href = types.StringValue(respObject.Href)
	plan.OptionHref = types.StringValue(respObject.OptionHref)
	plan.PolicyHref = types.StringValue(respObject.PolicyHref)

	// response doesnot show policy details
	sltID, _ := strconv.Atoi(respObject.Id)
	respObjectPolicies, _, err := r.client.SLATemplateApi.ListPolicies(r.authCtx, int64(sltID))
	if err != nil {
		resp.Diagnostics.AddError(
			"Error Reading SLT Policy",
			"Could not read SLT policies ID: "+respObject.Id+": "+err.Error(),
		)
		return
	}
	for i, respPol := range respObjectPolicies.Items {
		plan.Policies[i].ID = types.StringValue(respPol.Id)
		plan.Policies[i].Href = types.StringValue(respPol.Href)
	}

	// Set state to fully populated data
	diags = resp.State.Set(ctx, plan)
	resp.Diagnostics.Append(diags...)
	if resp.Diagnostics.HasError() {
		return
	}
}