This commit is contained in:
asteam
2024-07-25 14:33:38 +03:00
commit 6f40af6a5f
946 changed files with 98335 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
package flattens
import (
"context"
"encoding/json"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
// LBDataSource flattens data source for lb.
// Return error in case data source is not found on the platform.
// Flatten errors are added to tflog.
func LBDataSource(ctx context.Context, state *models.DataSourceLB, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBDataSource")
diags := diag.Diagnostics{}
lbID := uint64(state.LBID.ValueInt64())
recordLB, diags := utilities.LBDataSourceCheckPresence(ctx, lbID, c)
if diags.HasError() {
return diags
}
tflog.Info(ctx, "flattens.LBDataSource: before flatten", map[string]any{"lb_id": lbID})
acl, _ := json.Marshal(recordLB.ACL)
*state = models.DataSourceLB{
LBID: state.LBID,
Timeouts: state.Timeouts,
HAMode: types.BoolValue(recordLB.HAMode),
ACL: types.StringValue(string(acl)),
BackendHAIP: types.StringValue(recordLB.BackendHAIP),
Backends: flattenBackendsInLB(ctx, recordLB.Backends),
CreatedBy: types.StringValue(recordLB.CreatedBy),
CreatedTime: types.Int64Value(int64(recordLB.CreatedTime)),
DeletedBy: types.StringValue(recordLB.DeletedBy),
DeletedTime: types.Int64Value(int64(recordLB.DeletedTime)),
Description: types.StringValue(recordLB.Description),
DPAPIUser: types.StringValue(recordLB.DPAPIUser),
ExtNetID: types.Int64Value(int64(recordLB.ExtNetID)),
FrontendHAIP: types.StringValue(recordLB.FrontendHAIP),
Frontends: flattenFrontendsInLB(ctx, recordLB.Frontends),
GID: types.Int64Value(int64(recordLB.GID)),
GUID: types.Int64Value(int64(recordLB.GUID)),
ID: types.Int64Value(int64(recordLB.ID)),
ImageID: types.Int64Value(int64(recordLB.ImageID)),
ManagerId: types.Int64Value(int64(recordLB.ManagerId)),
ManagerType: types.StringValue(recordLB.ManagerType),
Milestones: types.Int64Value(int64(recordLB.Milestones)),
Name: types.StringValue(recordLB.Name),
PartK8s: types.BoolValue(recordLB.PartK8s),
PrimaryNode: flattenNodeInLB(ctx, recordLB.PrimaryNode),
RGID: types.Int64Value(int64(recordLB.RGID)),
RGName: types.StringValue(recordLB.RGName),
SecondaryNode: flattenNodeInLB(ctx, recordLB.SecondaryNode),
Status: types.StringValue(recordLB.Status),
TechStatus: types.StringValue(recordLB.TechStatus),
UpdatedBy: types.StringValue(recordLB.UpdatedBy),
UpdatedTime: types.Int64Value(int64(recordLB.UpdatedTime)),
UserManaged: types.BoolValue(recordLB.UserManaged),
VINSID: types.Int64Value(int64(recordLB.VINSID)),
}
tflog.Info(ctx, "End flattens.LBDataSource", map[string]any{"lb_id": state.ID.ValueInt64()})
return nil
}

View File

@@ -0,0 +1,93 @@
package flattens
import (
"context"
"encoding/json"
"github.com/google/uuid"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
func LBListDataSource(ctx context.Context, state *models.DataSourceLBList, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBListDataSource")
diags := diag.Diagnostics{}
lbList, err := utilities.LBListDataSourceCheckPresence(ctx, state, c)
if err != nil {
diags.AddError("Cannot get info about list lb", err.Error())
return diags
}
tflog.Info(ctx, "flattens.LBListDataSource: before flatten")
id := uuid.New()
*state = models.DataSourceLBList{
ByID: state.ByID,
Name: state.Name,
AccountID: state.AccountID,
RgID: state.RgID,
TechStatus: state.TechStatus,
Status: state.Status,
FrontIP: state.FrontIP,
BackIP: state.BackIP,
IncludeDeleted: state.IncludeDeleted,
SortBy: state.SortBy,
Page: state.Page,
Size: state.Size,
Timeouts: state.Timeouts,
Id: types.StringValue(id.String()),
}
items := make([]models.ItemsLBListModel, 0, len(lbList.Data))
for _, lbItem := range lbList.Data {
acl, _ := json.Marshal(lbItem.ACL)
item := models.ItemsLBListModel{
HAMode: types.BoolValue(lbItem.HAMode),
ACL: types.StringValue(string(acl)),
BackendHAIP: types.StringValue(lbItem.BackendHAIP),
Backends: flattenBackendsInLB(ctx, lbItem.Backends),
CreatedBy: types.StringValue(lbItem.CreatedBy),
CreatedTime: types.Int64Value(int64(lbItem.CreatedTime)),
DeletedBy: types.StringValue(lbItem.DeletedBy),
DeletedTime: types.Int64Value(int64(lbItem.DeletedTime)),
Description: types.StringValue(lbItem.Description),
DPAPIUser: types.StringValue(lbItem.DPAPIUser),
ExtNetID: types.Int64Value(int64(lbItem.ExtNetID)),
FrontendHAIP: types.StringValue(lbItem.FrontendHAIP),
Frontends: flattenFrontendsInLB(ctx, lbItem.Frontends),
GID: types.Int64Value(int64(lbItem.GID)),
GUID: types.Int64Value(int64(lbItem.GUID)),
LBID: types.Int64Value(int64(lbItem.ID)),
ImageID: types.Int64Value(int64(lbItem.ImageID)),
Milestones: types.Int64Value(int64(lbItem.Milestones)),
Name: types.StringValue(lbItem.Name),
PrimaryNode: flattenNodeInLB(ctx, lbItem.PrimaryNode),
RGID: types.Int64Value(int64(lbItem.RGID)),
RGName: types.StringValue(lbItem.RGName),
SecondaryNode: flattenNodeInLB(ctx, lbItem.SecondaryNode),
Status: types.StringValue(lbItem.Status),
TechStatus: types.StringValue(lbItem.TechStatus),
UpdatedBy: types.StringValue(lbItem.UpdatedBy),
UpdatedTime: types.Int64Value(int64(lbItem.UpdatedTime)),
VINSID: types.Int64Value(int64(lbItem.VINSID)),
}
items = append(items, item)
}
state.Items = items
state.EntryCount = types.Int64Value(int64(lbList.EntryCount))
tflog.Info(ctx, "flattens.LBListDataSource: after flatten")
tflog.Info(ctx, "End flattens.LBListDataSource")
return nil
}

View File

@@ -0,0 +1,91 @@
package flattens
import (
"context"
"encoding/json"
"github.com/google/uuid"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
func LBListDeletedDataSource(ctx context.Context, state *models.DataSourceLBListDeleted, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBListDeletedDataSource")
diags := diag.Diagnostics{}
lbList, err := utilities.LBListDeletedDataSourceCheckPresence(ctx, state, c)
if err != nil {
diags.AddError("Cannot get info about list deleted", err.Error())
return diags
}
tflog.Info(ctx, "flattens.LBListDeletedDataSource: before flatten")
id := uuid.New()
*state = models.DataSourceLBListDeleted{
ByID: state.ByID,
Name: state.Name,
AccountID: state.AccountID,
RgID: state.RgID,
TechStatus: state.TechStatus,
FrontIP: state.FrontIP,
BackIP: state.BackIP,
SortBy: state.SortBy,
Page: state.Page,
Size: state.Size,
Timeouts: state.Timeouts,
Id: types.StringValue(id.String()),
}
items := make([]models.ItemsLBListDeletedModel, 0, len(lbList.Data))
for _, lbItem := range lbList.Data {
acl, _ := json.Marshal(lbItem.ACL)
item := models.ItemsLBListDeletedModel{
HAMode: types.BoolValue(lbItem.HAMode),
ACL: types.StringValue(string(acl)),
BackendHAIP: types.StringValue(lbItem.BackendHAIP),
Backends: flattenBackendsInLB(ctx, lbItem.Backends),
CreatedBy: types.StringValue(lbItem.CreatedBy),
CreatedTime: types.Int64Value(int64(lbItem.CreatedTime)),
DeletedBy: types.StringValue(lbItem.DeletedBy),
DeletedTime: types.Int64Value(int64(lbItem.DeletedTime)),
Description: types.StringValue(lbItem.Description),
DPAPIUser: types.StringValue(lbItem.DPAPIUser),
ExtNetID: types.Int64Value(int64(lbItem.ExtNetID)),
FrontendHAIP: types.StringValue(lbItem.FrontendHAIP),
Frontends: flattenFrontendsInLB(ctx, lbItem.Frontends),
GID: types.Int64Value(int64(lbItem.GID)),
GUID: types.Int64Value(int64(lbItem.GUID)),
LBID: types.Int64Value(int64(lbItem.ID)),
ImageID: types.Int64Value(int64(lbItem.ImageID)),
Milestones: types.Int64Value(int64(lbItem.Milestones)),
Name: types.StringValue(lbItem.Name),
PrimaryNode: flattenNodeInLB(ctx, lbItem.PrimaryNode),
RGID: types.Int64Value(int64(lbItem.RGID)),
RGName: types.StringValue(lbItem.RGName),
SecondaryNode: flattenNodeInLB(ctx, lbItem.SecondaryNode),
Status: types.StringValue(lbItem.Status),
TechStatus: types.StringValue(lbItem.TechStatus),
UpdatedBy: types.StringValue(lbItem.UpdatedBy),
UpdatedTime: types.Int64Value(int64(lbItem.UpdatedTime)),
VINSID: types.Int64Value(int64(lbItem.VINSID)),
}
items = append(items, item)
}
state.Items = items
state.EntryCount = types.Int64Value(int64(lbList.EntryCount))
tflog.Info(ctx, "flattens.LBListDeletedDataSource: after flatten")
tflog.Info(ctx, "End flattens.LBListDeletedDataSource")
return nil
}

View File

@@ -0,0 +1,148 @@
package flattens
import (
"context"
"encoding/json"
"fmt"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/lb"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
func LBResource(ctx context.Context, plan *models.ResourceLBModel, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBResource")
diags := diag.Diagnostics{}
recordItemLB, diags := utilities.LBResourceCheckPresence(ctx, plan, c)
if diags.HasError() {
return diags
}
acl, _ := json.Marshal(recordItemLB.ACL)
*plan = models.ResourceLBModel{
RGID: plan.RGID,
Name: plan.Name,
ExtNetID: plan.ExtNetID,
VINSID: plan.VINSID,
Start: plan.Start,
ID: plan.ID,
HAMode: types.BoolValue(recordItemLB.HAMode),
Safe: plan.Safe,
Timeouts: plan.Timeouts,
SysctlParams: plan.SysctlParams,
Permanently: plan.Permanently,
Restart: plan.Restart,
Enable: plan.Enable,
ConfigReset: plan.ConfigReset,
ACL: types.StringValue(string(acl)),
BackendHAIP: types.StringValue(recordItemLB.BackendHAIP),
Backends: flattenBackendsInLB(ctx, recordItemLB.Backends),
CreatedBy: types.StringValue(recordItemLB.CreatedBy),
CreatedTime: types.Int64Value(int64(recordItemLB.CreatedTime)),
DeletedBy: types.StringValue(recordItemLB.DeletedBy),
DeletedTime: types.Int64Value(int64(recordItemLB.DeletedTime)),
Description: types.StringValue(recordItemLB.Description),
DPAPIUser: types.StringValue(recordItemLB.DPAPIUser),
FrontendHAIP: types.StringValue(recordItemLB.FrontendHAIP),
Frontends: flattenFrontendsInLB(ctx, recordItemLB.Frontends),
GID: types.Int64Value(int64(recordItemLB.GID)),
GUID: types.Int64Value(int64(recordItemLB.GUID)),
ImageID: types.Int64Value(int64(recordItemLB.ImageID)),
LBID: types.Int64Value(int64(recordItemLB.ID)),
Milestones: types.Int64Value(int64(recordItemLB.Milestones)),
ManagerId: types.Int64Value(int64(recordItemLB.ManagerId)),
ManagerType: types.StringValue(recordItemLB.ManagerType),
PartK8s: types.BoolValue(recordItemLB.PartK8s),
PrimaryNode: flattenNodeInLB(ctx, recordItemLB.PrimaryNode),
RGName: types.StringValue(recordItemLB.RGName),
SecondaryNode: flattenNodeInLB(ctx, recordItemLB.SecondaryNode),
Status: types.StringValue(recordItemLB.Status),
TechStatus: types.StringValue(recordItemLB.TechStatus),
UpdatedBy: types.StringValue(recordItemLB.UpdatedBy),
UpdatedTime: types.Int64Value(int64(recordItemLB.UpdatedTime)),
UserManaged: types.BoolValue(recordItemLB.UserManaged),
}
tflog.Info(ctx, "End flattens.LBResource", map[string]any{"id": plan.ID.ValueString()})
return nil
}
func flattenBackendsInLB(ctx context.Context, backends []lb.ItemBackend) types.List {
tflog.Info(ctx, "Start flattenBackendsInLB")
tempSlice := make([]types.Object, 0, len(backends))
for _, backend := range backends {
b := models.ItemBackendModel{
Algorithm: types.StringValue(backend.Algorithm),
GUID: types.StringValue(backend.GUID),
Name: types.StringValue(backend.Name),
ServerDefaultSettings: flattenServersSettings(ctx, backend.ServerDefaultSettings),
Servers: flattenServersInLB(ctx, backend.Servers),
}
obj, diags := types.ObjectValueFrom(ctx, models.ItemBackend, b)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenBackendsInLB struct to obj", diags))
}
tempSlice = append(tempSlice, obj)
}
res, diags := types.ListValueFrom(ctx, types.ObjectType{AttrTypes: models.ItemBackend}, tempSlice)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenBackendsInLB", diags))
}
tflog.Info(ctx, "End flattenBackendsInLB")
return res
}
func flattenFrontendsInLB(ctx context.Context, frontends []lb.ItemFrontend) types.List {
tflog.Info(ctx, "Start flattenFrontendsInLB")
tempSlice := make([]types.Object, 0, len(frontends))
for _, frontend := range frontends {
b := models.ItemFrontendModel{
Backend: types.StringValue(frontend.Backend),
Bindings: flattenBindingsInLB(ctx, frontend.Bindings),
GUID: types.StringValue(frontend.GUID),
Name: types.StringValue(frontend.Name),
}
obj, diags := types.ObjectValueFrom(ctx, models.ItemFrontend, b)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenFrontendsInLB struct to obj", diags))
}
tempSlice = append(tempSlice, obj)
}
res, diags := types.ListValueFrom(ctx, types.ObjectType{AttrTypes: models.ItemFrontend}, tempSlice)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenFrontendsInLB", diags))
}
tflog.Info(ctx, "End flattenFrontendsInLB")
return res
}
func flattenNodeInLB(ctx context.Context, node lb.RecordNode) types.Object {
tflog.Info(ctx, "Start flattenNodeInLB")
n := models.RecordNodeModel{
BackendIP: types.StringValue(node.BackendIP),
ComputeID: types.Int64Value(int64(node.ComputeID)),
FrontendIP: types.StringValue(node.FrontendIP),
GUID: types.StringValue(node.GUID),
MGMTIP: types.StringValue(node.MGMTIP),
NetworkID: types.Int64Value(int64(node.NetworkID)),
}
obj, diags := types.ObjectValueFrom(ctx, models.ItemNode, n)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenNodeInLB struct to obj", diags))
}
tflog.Info(ctx, "End flattenNodeInLB")
return obj
}

View File

@@ -0,0 +1,95 @@
package flattens
import (
"context"
"fmt"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/lb"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
func LBBackendResource(ctx context.Context, plan *models.ResourceLBBackendModel, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBBackendResource")
diags := diag.Diagnostics{}
recordItemBackend, diags := utilities.LBBackendResourceCheckPresence(ctx, plan, c)
if diags.HasError() {
return diags
}
*plan = models.ResourceLBBackendModel{
LBID: plan.LBID,
Name: plan.Name,
ID: plan.ID,
Timeouts: plan.Timeouts,
GUID: types.StringValue(recordItemBackend.GUID),
Algorithm: types.StringValue(recordItemBackend.Algorithm),
DownInter: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.DownInter)),
Fall: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.Fall)),
Inter: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.Inter)),
MaxConn: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.MaxConn)),
MaxQueue: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.MaxQueue)),
Rise: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.Rise)),
SlowStart: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.SlowStart)),
Weight: types.Int64Value(int64(recordItemBackend.ServerDefaultSettings.Weight)),
Servers: flattenServersInLB(ctx, recordItemBackend.Servers),
}
tflog.Info(ctx, "End flattens.LBBackendResource", map[string]any{"name": plan.Name.ValueString()})
return nil
}
func flattenServersInLB(ctx context.Context, servers []lb.ItemServer) types.List {
tflog.Info(ctx, "Start flattenServersInLBBackend")
tempSlice := make([]types.Object, 0, len(servers))
for _, server := range servers {
s := models.RecordServerModel{
Address: types.StringValue(server.Address),
Check: types.StringValue(server.Check),
GUID: types.StringValue(server.GUID),
Name: types.StringValue(server.Name),
Port: types.Int64Value(int64(server.Port)),
ServerSettings: flattenServersSettings(ctx, server.ServerSettings),
}
obj, diags := types.ObjectValueFrom(ctx, models.ItemServers, s)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenServersInLBBackend struct to obj", diags))
}
tempSlice = append(tempSlice, obj)
}
res, diags := types.ListValueFrom(ctx, types.ObjectType{AttrTypes: models.ItemServers}, tempSlice)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenServersInLBBackend", diags))
}
tflog.Info(ctx, "End flattenServersInLBBackend")
return res
}
func flattenServersSettings(ctx context.Context, settings lb.RecordServerSettings) types.Object {
tflog.Info(ctx, "Start flattenServersSettings")
s := models.RecordServerSettingsModel{
Inter: types.Int64Value(int64(settings.Inter)),
GUID: types.StringValue(settings.GUID),
DownInter: types.Int64Value(int64(settings.DownInter)),
Rise: types.Int64Value(int64(settings.Rise)),
Fall: types.Int64Value(int64(settings.Fall)),
SlowStart: types.Int64Value(int64(settings.SlowStart)),
MaxConn: types.Int64Value(int64(settings.MaxConn)),
MaxQueue: types.Int64Value(int64(settings.MaxQueue)),
Weight: types.Int64Value(int64(settings.Weight)),
}
obj, diags := types.ObjectValueFrom(ctx, models.ItemServerSettings, s)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenServersSettings struct to obj", diags))
}
tflog.Info(ctx, "End flattenServersSettings")
return obj
}

View File

@@ -0,0 +1,45 @@
package flattens
import (
"context"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
func LBBackendServerResource(ctx context.Context, plan *models.ResourceLBBackendServerModel, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBBackendServerResource")
diags := diag.Diagnostics{}
recordItemServer, diags := utilities.LBBackendServerResourceCheckPresence(ctx, plan, c)
if diags.HasError() {
return diags
}
*plan = models.ResourceLBBackendServerModel{
LBID: plan.LBID,
Backend: plan.Backend,
Name: plan.Name,
Address: plan.Address,
Port: plan.Port,
ID: plan.ID,
Timeouts: plan.Timeouts,
Check: types.StringValue(recordItemServer.Check),
Inter: types.Int64Value(int64(recordItemServer.ServerSettings.Inter)),
DownInter: types.Int64Value(int64(recordItemServer.ServerSettings.DownInter)),
Rise: types.Int64Value(int64(recordItemServer.ServerSettings.Rise)),
Fall: types.Int64Value(int64(recordItemServer.ServerSettings.Fall)),
SlowStart: types.Int64Value(int64(recordItemServer.ServerSettings.SlowStart)),
MaxConn: types.Int64Value(int64(recordItemServer.ServerSettings.MaxConn)),
MaxQueue: types.Int64Value(int64(recordItemServer.ServerSettings.MaxQueue)),
Weight: types.Int64Value(int64(recordItemServer.ServerSettings.Weight)),
}
tflog.Info(ctx, "End flattens.LBBackendServerResource", map[string]any{"name": plan.Name.ValueString()})
return nil
}

View File

@@ -0,0 +1,64 @@
package flattens
import (
"context"
"fmt"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/lb"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
func LBFrontendResource(ctx context.Context, plan *models.ResourceLBFrontendModel, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBFrontendResource")
diags := diag.Diagnostics{}
recordItemFrontend, diags := utilities.LBFrontendResourceCheckPresence(ctx, plan, c)
if diags.HasError() {
return diags
}
*plan = models.ResourceLBFrontendModel{
LBID: plan.LBID,
Name: plan.Name,
Backend: plan.Backend,
ID: plan.ID,
Timeouts: plan.Timeouts,
GUID: types.StringValue(recordItemFrontend.GUID),
Bindings: flattenBindingsInLB(ctx, recordItemFrontend.Bindings),
}
tflog.Info(ctx, "End flattens.LBFrontendResource", map[string]any{"name": plan.Name.ValueString()})
return nil
}
func flattenBindingsInLB(ctx context.Context, bindings []lb.ItemBinding) types.List {
tflog.Info(ctx, "Start flattenBindingsInLBFrontend")
tempSlice := make([]types.Object, 0, len(bindings))
for _, binding := range bindings {
s := models.ItemBindingModel{
Address: types.StringValue(binding.Address),
GUID: types.StringValue(binding.GUID),
Name: types.StringValue(binding.Name),
Port: types.Int64Value(int64(binding.Port)),
}
obj, diags := types.ObjectValueFrom(ctx, models.ItemBindings, s)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenBindingsInLBFrontend struct to obj", diags))
}
tempSlice = append(tempSlice, obj)
}
res, diags := types.ListValueFrom(ctx, types.ObjectType{AttrTypes: models.ItemBindings}, tempSlice)
if diags != nil {
tflog.Error(ctx, fmt.Sprint("Error flattenBindingsInLBFrontend", diags))
}
tflog.Info(ctx, "End flattenBindingsInLBFrontend")
return res
}

View File

@@ -0,0 +1,37 @@
package flattens
import (
"context"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/lb/utilities"
)
func LBFrontendBindResource(ctx context.Context, plan *models.ResourceLBFrontendBindModel, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.LBFrontendBindResource")
diags := diag.Diagnostics{}
recordItemFrontendBind, diags := utilities.LBFrontendBindResourceCheckPresence(ctx, plan, c)
if diags.HasError() {
return diags
}
*plan = models.ResourceLBFrontendBindModel{
Address: plan.Address,
Frontend: plan.Frontend,
LBID: plan.LBID,
Name: plan.Name,
ID: plan.ID,
Timeouts: plan.Timeouts,
GUID: types.StringValue(recordItemFrontendBind.GUID),
Port: plan.Port,
}
tflog.Info(ctx, "End flattens.LBFrontendBindResource", map[string]any{"name": plan.Name.ValueString()})
return nil
}