1.0.1
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
package flattens
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
|
||||
"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/cloudbroker/node"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/flattens"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudbroker/node/models"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudbroker/node/utilities"
|
||||
)
|
||||
|
||||
func NodeDataSource(ctx context.Context, state *models.DataSourceNode, c *decort.DecortClient) diag.Diagnostics {
|
||||
tflog.Info(ctx, "Start flattens.NodeDataSource")
|
||||
|
||||
diags := diag.Diagnostics{}
|
||||
|
||||
nodeID := uint64(state.NodeID.ValueInt64())
|
||||
|
||||
recordNode, diags := utilities.NodeDataSourceCheckPresence(ctx, nodeID, c)
|
||||
if diags.HasError() {
|
||||
return diags
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "flattens.NodeDataSource: before flatten", map[string]any{"node_id": nodeID})
|
||||
|
||||
*state = models.DataSourceNode{
|
||||
NodeID: state.NodeID,
|
||||
Timeouts: state.Timeouts,
|
||||
|
||||
Consumption: flattenConsumpion(ctx, &recordNode.Consumption),
|
||||
CpuInfo: flattenCpuInfo(ctx, &recordNode.CpuInfo),
|
||||
CPUAllocationRatio: types.Int64Value(int64(recordNode.CPUAllocationRatio)),
|
||||
GID: types.Int64Value(int64(recordNode.GID)),
|
||||
ID: types.StringValue(strconv.Itoa(int(recordNode.ID))),
|
||||
IPAddr: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &recordNode.IPAddr),
|
||||
IsolatedCPUs: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &recordNode.IsolatedCpus),
|
||||
Name: types.StringValue(recordNode.Name),
|
||||
NeedReboot: types.BoolValue(recordNode.NeedReboot),
|
||||
NicInfo: flattenNicInfo(ctx, recordNode.NicInfo),
|
||||
NumaTopology: flattenNumaTopology(ctx, &recordNode.NumaTopology),
|
||||
ReservedCPUs: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &recordNode.ReservedCPUs),
|
||||
Roles: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &recordNode.Roles),
|
||||
SriovEnabled: types.BoolValue(recordNode.SriovEnabled),
|
||||
StackId: types.Int64Value(int64(recordNode.StackID)),
|
||||
Status: types.StringValue(recordNode.Status),
|
||||
Version: types.StringValue(recordNode.Version),
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattens.NodeDataSource", map[string]any{"Node_id": state.NodeID.ValueInt64()})
|
||||
return nil
|
||||
}
|
||||
|
||||
func flattenConsumpion(ctx context.Context, consumpion *node.ConsumptionInfo) *models.ConsumptionModel {
|
||||
tflog.Info(ctx, "Start flattenConsumpion")
|
||||
|
||||
res := models.ConsumptionModel{
|
||||
Consumed: &models.ConsumedModel{
|
||||
RAM: types.Int64Value(int64(consumpion.Consumed.RAM)),
|
||||
Computes: types.Int64Value(int64(consumpion.Consumed.Computes)),
|
||||
Routers: types.Int64Value(int64(consumpion.Consumed.Routers)),
|
||||
VCPU: types.Int64Value(int64(consumpion.Consumed.VCPU)),
|
||||
},
|
||||
Free: &models.ResourcesInfo{
|
||||
RAM: types.Int64Value(int64(consumpion.Free.RAM)),
|
||||
},
|
||||
Reserved: &models.ResourcesInfo{
|
||||
RAM: types.Int64Value(int64(consumpion.Reserved.RAM)),
|
||||
},
|
||||
Total: &models.ResourcesInfo{
|
||||
RAM: types.Int64Value(int64(consumpion.Total.RAM)),
|
||||
},
|
||||
Hostname: types.StringValue(consumpion.Hostname),
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenConsumpion")
|
||||
return &res
|
||||
}
|
||||
|
||||
func flattenCpuInfo(ctx context.Context, cpuInfo *node.CpuInfo) *models.CpuInfoModel {
|
||||
tflog.Info(ctx, "Start flattenCpuInfo")
|
||||
|
||||
res := models.CpuInfoModel{
|
||||
ClockSpeed: types.Int64Value(int64(cpuInfo.ClockSpeed)),
|
||||
CoreCount: types.Int64Value(int64(cpuInfo.CoreCount)),
|
||||
PhysCount: types.Int64Value(int64(cpuInfo.PhysCount)),
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenCpuInfo")
|
||||
return &res
|
||||
}
|
||||
|
||||
func flattenNicInfo(ctx context.Context, nicInfo []node.ItemNicInfo) []models.NicInfoModel {
|
||||
tflog.Info(ctx, "Start flattenNicInfo")
|
||||
|
||||
res := make([]models.NicInfoModel, 0, len(nicInfo))
|
||||
|
||||
for _, item := range nicInfo {
|
||||
temp := models.NicInfoModel{
|
||||
Driver: types.StringValue(item.Driver),
|
||||
MaxVFS: types.Int64Value(int64(item.MaxVFS)),
|
||||
NumaNode: types.Int64Value(int64(item.NumaNode)),
|
||||
NumVFS: types.Int64Value(int64(item.NumVFS)),
|
||||
OSName: types.StringValue(item.OSName),
|
||||
PCISlot: types.StringValue(item.PCISlot),
|
||||
VFList: flattenVFList(ctx, item.VFList),
|
||||
}
|
||||
|
||||
res = append(res, temp)
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenNicInfo")
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenVFList(ctx context.Context, vfMap []interface{}) []models.VFList {
|
||||
tflog.Info(ctx, "Start flattenVFList")
|
||||
|
||||
vfList := make([]models.VFList, 0, len(vfMap))
|
||||
|
||||
for _, item := range vfMap {
|
||||
itemMap := item.(map[string]interface{})
|
||||
vf := models.VFList{
|
||||
FnID: types.Int64Value(itemMap["fnId"].(int64)),
|
||||
PCISlot: types.StringValue(itemMap["pciSlot"].(string)),
|
||||
}
|
||||
vfList = append(vfList, vf)
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenVFList")
|
||||
return vfList
|
||||
}
|
||||
|
||||
func flattenNumaTopology(ctx context.Context, numaTopolpgy *node.NumaTopologyInfo) *models.NumaTopologyModel {
|
||||
tflog.Info(ctx, "Start flattenNumaTopology")
|
||||
|
||||
res := models.NumaTopologyModel{
|
||||
NodeNum: types.Int64Value(int64(numaTopolpgy.NodeNum)),
|
||||
Nodes: flattenNumaTopologyNodes(ctx, numaTopolpgy.Nodes),
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenNumaTopology")
|
||||
return &res
|
||||
}
|
||||
|
||||
func flattenNumaTopologyNodes(ctx context.Context, nodes map[string]node.NodeInfo) []models.NumaTopologyNodes {
|
||||
tflog.Info(ctx, "Start flattenNumaTopologyNodes")
|
||||
|
||||
res := make([]models.NumaTopologyNodes, 0, len(nodes))
|
||||
|
||||
for _, item := range nodes {
|
||||
temp := models.NumaTopologyNodes{
|
||||
CPUList: flattens.FlattenSimpleTypeToList(ctx, types.Int64Type, &item.CPUList),
|
||||
Memory: &models.NumaTopologyNodesMemory{
|
||||
OneG: types.Int64Value(int64(item.Memory.OneG)),
|
||||
TwoM: types.Int64Value(int64(item.Memory.TwoM)),
|
||||
Total: types.Int64Value(int64(item.Memory.Total)),
|
||||
},
|
||||
}
|
||||
res = append(res, temp)
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenNumaTopologyNodes")
|
||||
return res
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
package flattens
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"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/decort-golang-sdk/pkg/cloudbroker/node"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/flattens"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudbroker/node/models"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudbroker/node/utilities"
|
||||
)
|
||||
|
||||
func NodeListDataSource(ctx context.Context, state *models.DataSourceNodeList, c *decort.DecortClient) diag.Diagnostics {
|
||||
tflog.Info(ctx, "Start flattens.NodeDataListSource")
|
||||
|
||||
diags := diag.Diagnostics{}
|
||||
|
||||
recordList, diags := utilities.NodeListDataSourceCheckPresence(ctx, state, c)
|
||||
if diags.HasError() {
|
||||
return diags
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "flattens.NodeListDataSource: before flatten")
|
||||
|
||||
id := uuid.New()
|
||||
|
||||
*state = models.DataSourceNodeList{
|
||||
ByID: state.ByID,
|
||||
Name: state.Name,
|
||||
Version: state.Version,
|
||||
Release: state.Release,
|
||||
SepID: state.SepID,
|
||||
Role: state.Role,
|
||||
Status: state.Status,
|
||||
SortBy: state.SortBy,
|
||||
Page: state.Page,
|
||||
Size: state.Size,
|
||||
Timeouts: state.Timeouts,
|
||||
|
||||
Id: types.StringValue(id.String()),
|
||||
Items: flattenItemsList(ctx, recordList),
|
||||
EntryCount: types.Int64Value(int64(recordList.EntryCount)),
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattens.NodeListDataSource")
|
||||
return nil
|
||||
}
|
||||
|
||||
func flattenItemsList(ctx context.Context, recordList *node.ListNodes) []models.ItemNodeModel {
|
||||
tflog.Info(ctx, "Start flattenItemsList")
|
||||
|
||||
res := make([]models.ItemNodeModel, 0, len(recordList.Data))
|
||||
|
||||
for _, item := range recordList.Data {
|
||||
temp := models.ItemNodeModel{
|
||||
AdditionalPkgs: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.AdditionalPkgs),
|
||||
CpuInfo: flattenCpuInfo(ctx, &item.CpuInfo),
|
||||
Description: types.StringValue(item.Description),
|
||||
GID: types.Int64Value(int64(item.GID)),
|
||||
GUID: types.StringValue(item.GUID),
|
||||
HostKey: types.StringValue(item.HostKey),
|
||||
IPAddr: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.IPAddr),
|
||||
IsolatedCPUs: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.IsolatedCpus),
|
||||
LastCheck: types.Int64Value(int64(item.LastCheck)),
|
||||
MachineGUID: types.StringValue(item.MachineGUID),
|
||||
MainboardSN: types.StringValue(item.MainboardSN),
|
||||
Memory: types.Int64Value(int64(item.Memory)),
|
||||
Milestones: types.Int64Value(int64(item.Milestones)),
|
||||
Model: types.StringValue(item.Model),
|
||||
Name: types.StringValue(item.Name),
|
||||
NeedReboot: types.BoolValue(item.NeedReboot),
|
||||
NetAddr: flattenNetAddr(ctx, item.NetAddr),
|
||||
NetworkMode: types.StringValue(item.NetworkMode),
|
||||
NicInfo: flattenNicInfo(ctx, item.NicInfo),
|
||||
NodeUUID: types.StringValue(item.NodeUUID),
|
||||
NodeID: types.Int64Value(int64(item.ID)),
|
||||
NumaTopology: flattenNumaTopology(ctx, &item.NumaTopology),
|
||||
PeerBackup: types.Int64Value(int64(item.PeerBackup)),
|
||||
PeerLog: types.Int64Value(int64(item.PeerLog)),
|
||||
PeerStats: types.Int64Value(int64(item.PeerStats)),
|
||||
Pgpus: flattens.FlattenSimpleTypeToList(ctx, types.Int64Type, &item.Pgpus),
|
||||
PublicKeys: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.PublicKeys),
|
||||
Release: types.StringValue(item.Release),
|
||||
ReservedCPUs: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.ReservedCPUs),
|
||||
Roles: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.Roles),
|
||||
SEPs: flattens.FlattenSimpleTypeToList(ctx, types.Int64Type, &item.Seps),
|
||||
SerialNum: types.StringValue(item.SerialNum),
|
||||
SriovEnabled: types.BoolValue(item.SriovEnabled),
|
||||
StackId: types.Int64Value(int64(item.StackID)),
|
||||
Status: types.StringValue(item.Status),
|
||||
Tags: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.Tags),
|
||||
Type: types.StringValue(item.Type),
|
||||
Version: types.StringValue(item.Version),
|
||||
}
|
||||
res = append(res, temp)
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenItemsList")
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenNetAddr(ctx context.Context, netAddr node.ListNetAddr) []models.NetAddrModel {
|
||||
tflog.Info(ctx, "Start flattenNetAddr")
|
||||
|
||||
res := make([]models.NetAddrModel, 0, len(netAddr))
|
||||
|
||||
for _, item := range netAddr {
|
||||
temp := models.NetAddrModel{
|
||||
CIDR: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.CIDR),
|
||||
Index: types.Int64Value(int64(item.Index)),
|
||||
IP: flattens.FlattenSimpleTypeToList(ctx, types.StringType, &item.IP),
|
||||
MAC: types.StringValue(item.Mac),
|
||||
MTU: types.Int64Value(int64(item.MTU)),
|
||||
Name: types.StringValue(item.Name),
|
||||
}
|
||||
|
||||
res = append(res, temp)
|
||||
}
|
||||
|
||||
tflog.Info(ctx, "End flattenNetAddr")
|
||||
return res
|
||||
}
|
||||
Reference in New Issue
Block a user