func()

in ec/ecresource/snapshotrepositoryresource/create.go [30:98]


func (r *Resource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) {
	if !resourceReady(r, &response.Diagnostics) {
		return
	}

	var newState modelV0

	diags := request.Plan.Get(ctx, &newState)
	response.Diagnostics.Append(diags...)
	if response.Diagnostics.HasError() {
		return
	}

	var repositoryType string
	var repositoryConfig util.Validator
	if newState.S3 != nil {
		repositoryType = "s3"
		repositoryConfig = snaprepoapi.S3Config{
			Region:               newState.S3.Region.ValueString(),
			Bucket:               newState.S3.Bucket.ValueString(),
			AccessKey:            newState.S3.AccessKey.ValueString(),
			SecretKey:            newState.S3.SecretKey.ValueString(),
			ServerSideEncryption: newState.S3.ServerSideEncryption.ValueBool(),
			Endpoint:             newState.S3.Endpoint.ValueString(),
			PathStyleAccess:      newState.S3.PathStyleAccess.ValueBool(),
		}
	} else {
		var err error
		repositoryType = newState.Generic.Type.ValueString()
		repositoryConfig, err = snaprepoapi.ParseGenericConfig(strings.NewReader(newState.Generic.Settings.ValueString()))
		if err != nil {
			response.Diagnostics.AddError(err.Error(), err.Error())
			return
		}
	}

	err := snaprepoapi.Set(
		snaprepoapi.SetParams{
			API:    r.client,
			Region: "ece-region", // This resource is only usable for ECE installations. Thus, we can default to ece-region.
			Name:   newState.Name.ValueString(),
			Type:   repositoryType,
			Config: repositoryConfig,
		},
	)
	if err != nil {
		response.Diagnostics.AddError(err.Error(), err.Error())
		return
	}

	newState.ID = newState.Name

	found, diags := r.read(newState.ID.ValueString(), &newState)
	response.Diagnostics.Append(diags...)
	if response.Diagnostics.HasError() {
		return
	}
	if !found {
		response.Diagnostics.AddError(
			"Failed to read snapshot repository after create.",
			"Failed to read snapshot repository after create.",
		)
		response.State.RemoveResource(ctx)
		return
	}

	// Finally, set the state
	response.Diagnostics.Append(response.State.Set(ctx, newState)...)
}