This commit is contained in:
asteam
2025-01-21 12:16:49 +03:00
parent 76ea459b3d
commit 60e23338ad
751 changed files with 17877 additions and 1908 deletions

View File

@@ -7,7 +7,6 @@ import (
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/flattens"
@@ -26,7 +25,7 @@ func NewDataSourceExtNet() datasource.DataSource {
// dataSourceExtNet is the data source implementation.
type dataSourceExtNet struct {
client *decort.DecortClient
client *client.Client
}
func (d *dataSourceExtNet) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {

View File

@@ -7,7 +7,6 @@ import (
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/flattens"
@@ -26,7 +25,7 @@ func NewDataSourceExtNetComputesList() datasource.DataSource {
// dataSourceExtNetComputesList is the data source implementation.
type dataSourceExtNetComputesList struct {
client *decort.DecortClient
client *client.Client
}
func (d *dataSourceExtNetComputesList) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {

View File

@@ -7,7 +7,6 @@ import (
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/flattens"
@@ -26,7 +25,7 @@ func NewDataSourceExtNetDefault() datasource.DataSource {
// dataSourceExtNetDefault is the data source implementation.
type dataSourceExtNetDefault struct {
client *decort.DecortClient
client *client.Client
}
func (d *dataSourceExtNetDefault) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {

View File

@@ -7,7 +7,6 @@ import (
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/flattens"
@@ -26,7 +25,7 @@ func NewDataSourceExtNetList() datasource.DataSource {
// dataSourceExtNet is the data source implementation.
type dataSourceExtNetList struct {
client *decort.DecortClient
client *client.Client
}
func (d *dataSourceExtNetList) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {

View File

@@ -0,0 +1,87 @@
package extnet
import (
"context"
"github.com/hashicorp/terraform-plugin-framework-timeouts/datasource/timeouts"
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-log/tflog"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/flattens"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/schemas"
)
// Ensure the implementation satisfies the expected interfaces.
var (
_ datasource.DataSource = &dataSourceExtNetReservedIP{}
)
func NewDataSourceExtNetReservedIP() datasource.DataSource {
return &dataSourceExtNetReservedIP{}
}
// dataSourceExtNet is the data source implementation.
type dataSourceExtNetReservedIP struct {
client *client.Client
}
func (d *dataSourceExtNetReservedIP) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
// Read Terraform configuration data into the model
var state models.DataSourceExtNetReservedIPModel
resp.Diagnostics.Append(req.Config.Get(ctx, &state)...)
if resp.Diagnostics.HasError() {
tflog.Error(ctx, "Read dataSourceExtNetReservedIP: Error get state")
return
}
tflog.Info(ctx, "Read dataSourceExtNetReservedIP: got state successfully")
// Set timeouts
readTimeout, diags := state.Timeouts.Read(ctx, constants.Timeout30s)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
tflog.Error(ctx, "Read dataSourceExtNetReservedIP: Error set timeout")
return
}
tflog.Info(ctx, "Read dataSourceExtNetReservedIP: set timeouts successfully", map[string]any{"readTimeout": readTimeout})
ctx, cancel := context.WithTimeout(ctx, readTimeout)
defer cancel()
// Map response body to schema
resp.Diagnostics.Append(flattens.ExtNetReservedIPDataSource(ctx, &state, d.client)...)
if resp.Diagnostics.HasError() {
tflog.Error(ctx, "Read dataSourceExtNetReservedIP: Error flatten data source extnet_reserved_ip")
return
}
// Set refreshed state
resp.Diagnostics.Append(resp.State.Set(ctx, &state)...)
if resp.Diagnostics.HasError() {
tflog.Error(ctx, "Read dataSourceExtNetReservedIP: Error set state")
return
}
tflog.Info(ctx, "End read dataSourceExtNetReservedIP")
}
func (d *dataSourceExtNetReservedIP) Schema(ctx context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
resp.Schema = schema.Schema{
Attributes: schemas.MakeSchemaDataSourceExtNetReservedIP(),
Blocks: map[string]schema.Block{
"timeouts": timeouts.Block(ctx),
},
}
}
func (d *dataSourceExtNetReservedIP) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
resp.TypeName = req.ProviderTypeName + "_extnet_reserved_ip_list"
}
// Configure adds the provider configured client to the data source.
func (d *dataSourceExtNetReservedIP) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
tflog.Info(ctx, "Get Configure dataSourceExtNetReservedIP")
d.client = client.DataSource(ctx, &req, resp)
tflog.Info(ctx, "Getting Configure dataSourceExtNetReservedIP successfully")
}

View File

@@ -8,7 +8,7 @@ import (
"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/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/flattens"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/utilities"
@@ -17,7 +17,7 @@ import (
// ExtNetDataSource flattens data source for extnet.
// Return error in case data source is not found on the platform.
// Flatten errors are added to tflog.
func ExtNetDataSource(ctx context.Context, state *models.DataSourceExtNetModel, c *decort.DecortClient) diag.Diagnostics {
func ExtNetDataSource(ctx context.Context, state *models.DataSourceExtNetModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.ExtNetDataSource")
diags := diag.Diagnostics{}
@@ -71,6 +71,7 @@ func ExtNetDataSource(ctx context.Context, state *models.DataSourceExtNetModel,
reservations := make([]models.ItemReservationModel, 0, len(recordExtNet.Reservations))
for _, item := range recordExtNet.Reservations {
r := models.ItemReservationModel{
AccountID: types.Int64Value(int64(item.AccountID)),
ClientType: types.StringValue(item.ClientType),
Description: types.StringValue(item.Description),
DomainName: types.StringValue(item.DomainName),

View File

@@ -7,7 +7,7 @@ import (
"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/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/utilities"
)
@@ -15,7 +15,7 @@ import (
// ExtNetComputesListDataSource flattens data source for extnet computes list.
// Return error in case data source is not found on the platform.
// Flatten errors are added to tflog.
func ExtNetComputesListDataSource(ctx context.Context, state *models.DataSourceExtNetComputesListModel, c *decort.DecortClient) diag.Diagnostics {
func ExtNetComputesListDataSource(ctx context.Context, state *models.DataSourceExtNetComputesListModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.ExtNetComputesListDataSource")
diags := diag.Diagnostics{}

View File

@@ -7,7 +7,7 @@ import (
"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/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/utilities"
)
@@ -15,7 +15,7 @@ import (
// ExtNetDefaultDataSource flattens data source for extnet default.
// Return error in case data source is not found on the platform.
// Flatten errors are added to tflog.
func ExtNetDefaultDataSource(ctx context.Context, state *models.DataSourceExtNetDefaultModel, c *decort.DecortClient) diag.Diagnostics {
func ExtNetDefaultDataSource(ctx context.Context, state *models.DataSourceExtNetDefaultModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.ExtNetDefaultDataSource")
diags := diag.Diagnostics{}

View File

@@ -7,7 +7,7 @@ import (
"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/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/utilities"
)
@@ -15,7 +15,7 @@ import (
// ExtNetListDataSource flattens data source for extnet list.
// Return error in case data source is not found on the platform.
// Flatten errors are added to tflog.
func ExtNetListDataSource(ctx context.Context, state *models.DataSourceExtNetListModel, c *decort.DecortClient) diag.Diagnostics {
func ExtNetListDataSource(ctx context.Context, state *models.DataSourceExtNetListModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.ExtNetListDataSource")
diags := diag.Diagnostics{}

View File

@@ -0,0 +1,74 @@
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"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/utilities"
)
// ExtNetReservedIPDataSource flattens data source for extnet reserved ip.
// Return error in case data source is not found on the platform.
// Flatten errors are added to tflog.
func ExtNetReservedIPDataSource(ctx context.Context, state *models.DataSourceExtNetReservedIPModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start flattens.ExtNetReservedIPDataSource")
diags := diag.Diagnostics{}
extNetReservationIP, err := utilities.ExtNetReservedIPCheckPresence(ctx, state, c)
if err != nil {
diags.AddError("Cannot get info about extnet reserved ip list", err.Error())
return diags
}
tflog.Info(ctx, "flattens.ExtNetReservedIPDataSource: before flatten")
id := uuid.New()
*state = models.DataSourceExtNetReservedIPModel{
AccountID: state.AccountID,
ExtNetID: state.ExtNetID,
Timeouts: state.Timeouts,
Id: types.StringValue(id.String()),
}
items := make([]models.ItemReservedIPModel, 0, len(extNetReservationIP))
for _, item := range extNetReservationIP {
i := models.ItemReservedIPModel{
ExtNetID: types.Int64Value(int64(item.ExtnetID)),
Reservations: flattenReservations(ctx, item.Reservations),
}
items = append(items, i)
}
state.Items = items
tflog.Info(ctx, "End flattens.ExtNetReservedIPDataSource")
return nil
}
func flattenReservations(ctx context.Context, reservations []extnet.Reservations) []models.ItemReservationsModel {
tflog.Info(ctx, "Start flattenReservations")
tempSlice := make([]models.ItemReservationsModel, 0, len(reservations))
for _, item := range reservations {
res := models.ItemReservationsModel{
AccountID: types.Int64Value(int64(item.AccountID)),
ClientType: types.StringValue(item.ClientType),
DomainName: types.StringValue(item.DomainName),
HostName: types.StringValue(item.Hostname),
IP: types.StringValue(item.IP),
MAC: types.StringValue(item.Mac),
Type: types.StringValue(item.Type),
VMID: types.Int64Value(int64(item.VMID)),
}
tempSlice = append(tempSlice, res)
}
tflog.Info(ctx, "End flattenReservations")
return tempSlice
}

View File

@@ -63,6 +63,7 @@ type QOSModel struct {
}
type ItemReservationModel struct {
AccountID types.Int64 `tfsdk:"account_id"`
ClientType types.String `tfsdk:"client_type"`
Description types.String `tfsdk:"desc"`
DomainName types.String `tfsdk:"domainname"`

View File

@@ -0,0 +1,35 @@
package models
import (
"github.com/hashicorp/terraform-plugin-framework-timeouts/datasource/timeouts"
"github.com/hashicorp/terraform-plugin-framework/types"
)
type DataSourceExtNetReservedIPModel struct {
// required fields
AccountID types.Int64 `tfsdk:"account_id"`
// optional fields
ExtNetID types.Int64 `tfsdk:"extnet_id"`
Timeouts timeouts.Value `tfsdk:"timeouts"`
// response fields
Id types.String `tfsdk:"id"`
Items []ItemReservedIPModel `tfsdk:"items"`
}
type ItemReservedIPModel struct {
ExtNetID types.Int64 `tfsdk:"extnet_id"`
Reservations []ItemReservationsModel `tfsdk:"reservations"`
}
type ItemReservationsModel struct {
AccountID types.Int64 `tfsdk:"account_id"`
ClientType types.String `tfsdk:"client_type"`
DomainName types.String `tfsdk:"domain_name"`
HostName types.String `tfsdk:"hostname"`
IP types.String `tfsdk:"ip"`
MAC types.String `tfsdk:"mac"`
Type types.String `tfsdk:"type"`
VMID types.Int64 `tfsdk:"vm_id"`
}

View File

@@ -120,6 +120,9 @@ func MakeSchemaDataSourceExtNet() map[string]schema.Attribute {
Computed: true,
NestedObject: schema.NestedAttributeObject{
Attributes: map[string]schema.Attribute{
"account_id": schema.Int64Attribute{
Computed: true,
},
"client_type": schema.StringAttribute{
Computed: true,
},

View File

@@ -0,0 +1,67 @@
package schemas
import (
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
)
func MakeSchemaDataSourceExtNetReservedIP() map[string]schema.Attribute {
return map[string]schema.Attribute{
// required attributes
"account_id": schema.Int64Attribute{
Required: true,
Description: "find by account id",
},
// optional attributes
"extnet_id": schema.Int64Attribute{
Optional: true,
Description: "find by account id",
},
// computed attributes
"id": schema.StringAttribute{
Computed: true,
},
"items": schema.ListNestedAttribute{
Computed: true,
NestedObject: schema.NestedAttributeObject{
Attributes: map[string]schema.Attribute{
"extnet_id": schema.Int64Attribute{
Computed: true,
},
"reservations": schema.ListNestedAttribute{
Computed: true,
NestedObject: schema.NestedAttributeObject{
Attributes: map[string]schema.Attribute{
"account_id": schema.Int64Attribute{
Computed: true,
},
"client_type": schema.StringAttribute{
Computed: true,
},
"domain_name": schema.StringAttribute{
Computed: true,
},
"hostname": schema.StringAttribute{
Computed: true,
},
"ip": schema.StringAttribute{
Computed: true,
},
"mac": schema.StringAttribute{
Computed: true,
},
"type": schema.StringAttribute{
Computed: true,
},
"vm_id": schema.Int64Attribute{
Computed: true,
},
},
},
},
},
},
},
}
}

View File

@@ -5,11 +5,11 @@ import (
"fmt"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func ExtNetCheckPresence(ctx context.Context, netId uint64, c *decort.DecortClient) (*extnet.RecordExtNet, error) {
func ExtNetCheckPresence(ctx context.Context, netId uint64, c *client.Client) (*extnet.RecordExtNet, error) {
tflog.Info(ctx, fmt.Sprintf("Get info about extnet with ID - %v", netId))
recordExtNet, err := c.CloudAPI().ExtNet().Get(ctx, extnet.GetRequest{NetID: netId})

View File

@@ -4,14 +4,14 @@ import (
"context"
"fmt"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
)
func ExtNetComputesListCheckPresence(ctx context.Context, plan *models.DataSourceExtNetComputesListModel, c *decort.DecortClient) (*extnet.ListExtNetComputes, error) {
func ExtNetComputesListCheckPresence(ctx context.Context, plan *models.DataSourceExtNetComputesListModel, c *client.Client) (*extnet.ListExtNetComputes, error) {
tflog.Info(ctx, "ExtNetComputesListCheckPresence: Get info about extnet list")
listCompReq := extnet.ListComputesRequest{

View File

@@ -5,10 +5,10 @@ import (
"fmt"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func ExtNetDefaultCheckPresence(ctx context.Context, c *decort.DecortClient) (uint64, error) {
func ExtNetDefaultCheckPresence(ctx context.Context, c *client.Client) (uint64, error) {
tflog.Info(ctx, "ExtNetDefaultCheckPresence: Get info about default extnet with ID - %v")
netId, err := c.CloudAPI().ExtNet().GetDefault(ctx)

View File

@@ -4,14 +4,14 @@ import (
"context"
"fmt"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
)
func ExtNetListCheckPresence(ctx context.Context, plan *models.DataSourceExtNetListModel, c *decort.DecortClient) (*extnet.ListExtNets, error) {
func ExtNetListCheckPresence(ctx context.Context, plan *models.DataSourceExtNetListModel, c *client.Client) (*extnet.ListExtNets, error) {
tflog.Info(ctx, "ExtNetListCheckPresence: Get info about extnet list")
extnetListReq := extnet.ListRequest{}

View File

@@ -0,0 +1,34 @@
package utilities
import (
"context"
"fmt"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/extnet/models"
"github.com/hashicorp/terraform-plugin-log/tflog"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
)
func ExtNetReservedIPCheckPresence(ctx context.Context, plan *models.DataSourceExtNetReservedIPModel, c *client.Client) ([]extnet.RecordReservedIP, error) {
tflog.Info(ctx, "ExtNetReservedIPCheckPresence: Get info about extnet reserved ip")
extnetReservedIPReq := extnet.GetReservedIP{
AccountID: uint64(plan.AccountID.ValueInt64()),
}
if !plan.ExtNetID.IsNull() {
extnetReservedIPReq.ExtNetID = uint64(plan.ExtNetID.ValueInt64())
}
tflog.Info(ctx, "ExtNetReservedIPCheckPresence: before call CloudAPI().ExtNet().GetReservedIP", map[string]any{"req": extnetReservedIPReq})
extNetReservedIP, err := c.CloudAPI().ExtNet().GetReservedIP(ctx, extnetReservedIPReq)
if err != nil {
return nil, fmt.Errorf("cannot get info about extnet with error: %w", err)
}
tflog.Info(ctx, "ExtNetReservedIPCheckPresence: response from CloudAPI().ExtNet().GetReservedIP", map[string]any{"response": extnetReservedIPReq})
return extNetReservedIP, err
}