ec/ecresource/deploymentresource/private_state.go (99 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package deploymentresource import ( "context" "encoding/json" "github.com/elastic/cloud-sdk-go/pkg/client/deployments" "github.com/elastic/cloud-sdk-go/pkg/models" "github.com/hashicorp/terraform-plugin-framework/diag" ) type PrivateState interface { GetKey(context.Context, string) ([]byte, diag.Diagnostics) SetKey(context.Context, string, []byte) diag.Diagnostics } const trafficFilterStateKey = "traffic_filters" const migrationUpdateRequestKey = "migration_update_request" const instanceConfigurationsKey = "instance_configurations" func readPrivateStateTrafficFilters(ctx context.Context, state PrivateState) ([]string, diag.Diagnostics) { privateFilterBytes, diags := state.GetKey(ctx, trafficFilterStateKey) if privateFilterBytes == nil || diags.HasError() { return []string{}, diags } var privateFilters []string err := json.Unmarshal(privateFilterBytes, &privateFilters) if err != nil { diags.AddError("failed to parse private state", err.Error()) return []string{}, diags } return privateFilters, diags } func updatePrivateStateTrafficFilters(ctx context.Context, state PrivateState, filters []string) diag.Diagnostics { var diags diag.Diagnostics filterBytes, err := json.Marshal(filters) if err != nil { diags.AddError("failed to update private state", err.Error()) return diags } return state.SetKey(ctx, trafficFilterStateKey, filterBytes) } func ReadPrivateStateMigrateTemplateRequest(ctx context.Context, state PrivateState) (*deployments.MigrateDeploymentTemplateOK, diag.Diagnostics) { migrationUpdateRequestBytes, diags := state.GetKey(ctx, migrationUpdateRequestKey) if migrationUpdateRequestBytes == nil || diags.HasError() { return nil, diags } var migrationUpdateRequest models.DeploymentUpdateRequest err := migrationUpdateRequest.UnmarshalBinary(migrationUpdateRequestBytes) if err != nil { diags.AddError("failed to parse private state", err.Error()) return nil, diags } migrateTemplateRequest := deployments.NewMigrateDeploymentTemplateOK() migrateTemplateRequest.Payload = &migrationUpdateRequest return migrateTemplateRequest, diags } func UpdatePrivateStateMigrateTemplateRequest(ctx context.Context, state PrivateState, migrateTemplateRequest *deployments.MigrateDeploymentTemplateOK) diag.Diagnostics { var diags diag.Diagnostics if migrateTemplateRequest == nil { return diags } migrationUpdateRequestBytes, err := migrateTemplateRequest.Payload.MarshalBinary() if err != nil { diags.AddError("failed to update private state", err.Error()) return diags } return state.SetKey(ctx, migrationUpdateRequestKey, migrationUpdateRequestBytes) } func ReadPrivateStateInstanceConfigurations( ctx context.Context, state PrivateState, ) ([]models.InstanceConfigurationInfo, diag.Diagnostics) { data, diags := state.GetKey(ctx, instanceConfigurationsKey) if data == nil || diags.HasError() { return nil, diags } var instanceConfigurations []models.InstanceConfigurationInfo err := json.Unmarshal(data, &instanceConfigurations) if err != nil { diags.AddError("instance-configurations: failed to parse private state", err.Error()) return nil, diags } return instanceConfigurations, diags } func UpdatePrivateStateInstanceConfigurations( ctx context.Context, state PrivateState, instanceConfigurations []*models.InstanceConfigurationInfo, ) diag.Diagnostics { var ics []models.InstanceConfigurationInfo for _, ic := range instanceConfigurations { if ic != nil { ics = append(ics, *ic) } } data, err := json.Marshal(ics) if err != nil { var diags diag.Diagnostics diags.AddError("failed to update private state", err.Error()) return diags } return state.SetKey(ctx, instanceConfigurationsKey, data) }