4.0.0
This commit is contained in:
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||
Authors:
|
||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||
|
||||
Licensed 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||
Orchestration Technology) with Terraform by Hashicorp.
|
||||
|
||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||
|
||||
Please see README.md to learn where to place source code so that it
|
||||
builds seamlessly.
|
||||
|
||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||
*/
|
||||
|
||||
package rg
|
||||
|
||||
const (
|
||||
ResgroupCreateAPI = "/restmachine/cloudapi/rg/create"
|
||||
ResgroupUpdateAPI = "/restmachine/cloudapi/rg/update"
|
||||
ResgroupListAPI = "/restmachine/cloudapi/rg/list"
|
||||
ResgroupListDeletedAPI = "/restmachine/cloudapi/rg/listDeleted"
|
||||
ResgroupListPfwAPI = "/restmachine/cloudapi/rg/listPFW"
|
||||
ResgroupGetAPI = "/restmachine/cloudapi/rg/get"
|
||||
ResgroupListVinsAPI = "/restmachine/cloudapi/rg/listVins"
|
||||
ResgroupListLbAPI = "/restmachine/cloudapi/rg/listLb"
|
||||
ResgroupDeleteAPI = "/restmachine/cloudapi/rg/delete"
|
||||
RgListComputesAPI = "/restmachine/cloudapi/rg/listComputes"
|
||||
RgAffinityGroupComputesAPI = "/restmachine/cloudapi/rg/affinityGroupComputes"
|
||||
RgAffinityGroupsGetAPI = "/restmachine/cloudapi/rg/affinityGroupsGet"
|
||||
RgAffinityGroupsListAPI = "/restmachine/cloudapi/rg/affinityGroupsList"
|
||||
RgAuditsAPI = "/restmachine/cloudapi/rg/audits"
|
||||
RgEnableAPI = "/restmachine/cloudapi/rg/enable"
|
||||
RgDisableAPI = "/restmachine/cloudapi/rg/disable"
|
||||
ResgroupUsageAPI = "/restmachine/cloudapi/rg/usage"
|
||||
RgAccessGrantAPI = "/restmachine/cloudapi/rg/accessGrant"
|
||||
RgAccessRevokeAPI = "/restmachine/cloudapi/rg/accessRevoke"
|
||||
RgSetDefNetAPI = "/restmachine/cloudapi/rg/setDefNet"
|
||||
RgRestoreAPI = "/restmachine/cloudapi/rg/restore"
|
||||
)
|
||||
@@ -384,6 +384,14 @@ func dataSourceRgSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeString,
|
||||
},
|
||||
},
|
||||
"cpu_allocation_parameter": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"cpu_allocation_ratio": {
|
||||
Type: schema.TypeFloat,
|
||||
Computed: true,
|
||||
},
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
@@ -204,6 +204,14 @@ func dataSourceRgListSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeString,
|
||||
},
|
||||
},
|
||||
"cpu_allocation_parameter": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"cpu_allocation_ratio": {
|
||||
Type: schema.TypeFloat,
|
||||
Computed: true,
|
||||
},
|
||||
"uniq_pools": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
|
||||
@@ -34,10 +34,10 @@ package rg
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
)
|
||||
|
||||
func flattenAccountSeps(seps map[string]map[string]DiskUsage) []map[string]interface{} {
|
||||
@@ -83,22 +83,10 @@ func flattenRgResources(r Resources) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenResgroup(d *schema.ResourceData, details RecordResourceGroup) error {
|
||||
// NOTE: this function modifies ResourceData argument - as such it should never be called
|
||||
// from resourceRsgroupExists(...) method
|
||||
// log.Debugf("%s", rg_facts)
|
||||
//log.Debugf("flattenResgroup: ready to decode response body from API")
|
||||
//details := ResgroupGetResp{}
|
||||
//err := json.Unmarshal([]byte(rg_facts), &details)
|
||||
//if err != nil {
|
||||
//return err
|
||||
//}
|
||||
|
||||
func flattenResgroup(d *schema.ResourceData, details rg.RecordResourceGroup) error {
|
||||
log.Debugf("flattenResgroup: decoded RG name %q / ID %d, account ID %d",
|
||||
details.Name, details.ID, details.AccountID)
|
||||
|
||||
d.SetId(fmt.Sprintf("%d", details.ID))
|
||||
|
||||
d.Set("account_id", details.AccountID)
|
||||
d.Set("gid", details.GID)
|
||||
d.Set("def_net_type", details.DefNetType)
|
||||
@@ -127,11 +115,13 @@ func flattenResgroup(d *schema.ResourceData, details RecordResourceGroup) error
|
||||
d.Set("updated_time", details.UpdatedTime)
|
||||
d.Set("uniq_pools", details.UniqPools)
|
||||
d.Set("vins", details.VINS)
|
||||
d.Set("cpu_allocation_parameter", details.CPUAllocationParameter)
|
||||
d.Set("cpu_allocation_ratio", details.CPUAllocationRatio)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func flattenRgSeps(seps map[string]map[string]DiskUsage) []map[string]interface{} {
|
||||
func flattenRgSeps(seps map[string]map[string]rg.DiskUsage) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for sepKey, sepVal := range seps {
|
||||
SepMap := map[string]interface{}{}
|
||||
@@ -148,7 +138,7 @@ func flattenRgSeps(seps map[string]map[string]DiskUsage) []map[string]interface{
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenResource(resource Resource) []map[string]interface{} {
|
||||
func flattenResource(resource rg.Resource) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
|
||||
temp := map[string]interface{}{
|
||||
@@ -167,7 +157,7 @@ func flattenResource(resource Resource) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgResource(itemResource Resources) []map[string]interface{} {
|
||||
func flattenRgResource(itemResource rg.Resources) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
temp := map[string]interface{}{
|
||||
"current": flattenResource(itemResource.Current),
|
||||
@@ -178,7 +168,7 @@ func flattenRgResource(itemResource Resources) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRg(d *schema.ResourceData, itemRg RecordResourceGroup) {
|
||||
func flattenRg(d *schema.ResourceData, itemRg rg.RecordResourceGroup) {
|
||||
d.Set("resources", flattenRgResource(itemRg.Resources))
|
||||
d.Set("account_id", itemRg.AccountID)
|
||||
d.Set("account_name", itemRg.AccountName)
|
||||
@@ -207,9 +197,11 @@ func flattenRg(d *schema.ResourceData, itemRg RecordResourceGroup) {
|
||||
d.Set("updated_time", itemRg.UpdatedTime)
|
||||
d.Set("uniq_pools", itemRg.UniqPools)
|
||||
d.Set("vins", itemRg.VINS)
|
||||
d.Set("cpu_allocation_parameter", itemRg.CPUAllocationParameter)
|
||||
d.Set("cpu_allocation_ratio", itemRg.CPUAllocationRatio)
|
||||
}
|
||||
|
||||
func flattenRgAudits(rgAudits ListAudits) []map[string]interface{} {
|
||||
func flattenRgAudits(rgAudits rg.ListAudits) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, rgAudit := range rgAudits {
|
||||
temp := map[string]interface{}{
|
||||
@@ -226,38 +218,40 @@ func flattenRgAudits(rgAudits ListAudits) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgList(rgl ListResourceGroups) []map[string]interface{} {
|
||||
func flattenRgList(rgl rg.ListResourceGroups) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, rg := range rgl {
|
||||
temp := map[string]interface{}{
|
||||
"account_acl": flattenRgAcl(rg.ACL),
|
||||
"account_id": rg.AccountID,
|
||||
"account_name": rg.AccountName,
|
||||
"acl": flattenRgAcl(rg.ACL),
|
||||
"created_by": rg.CreatedBy,
|
||||
"created_time": rg.CreatedTime,
|
||||
"def_net_id": rg.DefNetID,
|
||||
"def_net_type": rg.DefNetType,
|
||||
"deleted_by": rg.DeletedBy,
|
||||
"deleted_time": rg.DeletedTime,
|
||||
"desc": rg.Description,
|
||||
"dirty": rg.Dirty,
|
||||
"gid": rg.GID,
|
||||
"guid": rg.GUID,
|
||||
"rg_id": rg.ID,
|
||||
"lock_status": rg.LockStatus,
|
||||
"milestones": rg.Milestones,
|
||||
"name": rg.Name,
|
||||
"register_computes": rg.RegisterComputes,
|
||||
"resource_limits": flattenRgResourceLimits(rg.ResourceLimits),
|
||||
"secret": rg.Secret,
|
||||
"status": rg.Status,
|
||||
"updated_by": rg.UpdatedBy,
|
||||
"updated_time": rg.UpdatedTime,
|
||||
"vins": rg.VINS,
|
||||
"vms": rg.Computes,
|
||||
"resource_types": rg.ResTypes,
|
||||
"uniq_pools": rg.UniqPools,
|
||||
"account_acl": flattenRgAcl(rg.ACL),
|
||||
"account_id": rg.AccountID,
|
||||
"account_name": rg.AccountName,
|
||||
"acl": flattenRgAcl(rg.ACL),
|
||||
"created_by": rg.CreatedBy,
|
||||
"created_time": rg.CreatedTime,
|
||||
"def_net_id": rg.DefNetID,
|
||||
"def_net_type": rg.DefNetType,
|
||||
"deleted_by": rg.DeletedBy,
|
||||
"deleted_time": rg.DeletedTime,
|
||||
"desc": rg.Description,
|
||||
"dirty": rg.Dirty,
|
||||
"gid": rg.GID,
|
||||
"guid": rg.GUID,
|
||||
"rg_id": rg.ID,
|
||||
"lock_status": rg.LockStatus,
|
||||
"milestones": rg.Milestones,
|
||||
"name": rg.Name,
|
||||
"register_computes": rg.RegisterComputes,
|
||||
"resource_limits": flattenRgResourceLimits(rg.ResourceLimits),
|
||||
"secret": rg.Secret,
|
||||
"status": rg.Status,
|
||||
"updated_by": rg.UpdatedBy,
|
||||
"updated_time": rg.UpdatedTime,
|
||||
"vins": rg.VINS,
|
||||
"vms": rg.Computes,
|
||||
"resource_types": rg.ResTypes,
|
||||
"uniq_pools": rg.UniqPools,
|
||||
"cpu_allocation_parameter": rg.CPUAllocationParameter,
|
||||
"cpu_allocation_ratio": rg.CPUAllocationRatio,
|
||||
}
|
||||
res = append(res, temp)
|
||||
}
|
||||
@@ -265,7 +259,7 @@ func flattenRgList(rgl ListResourceGroups) []map[string]interface{} {
|
||||
|
||||
}
|
||||
|
||||
func flattenRgAcl(rgAcls ListACL) []map[string]interface{} {
|
||||
func flattenRgAcl(rgAcls rg.ListACL) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, rgAcl := range rgAcls {
|
||||
temp := map[string]interface{}{
|
||||
@@ -281,7 +275,7 @@ func flattenRgAcl(rgAcls ListACL) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgResourceLimits(rl ResourceLimits) []map[string]interface{} {
|
||||
func flattenRgResourceLimits(rl rg.ResourceLimits) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
temp := map[string]interface{}{
|
||||
"cu_c": rl.CUC,
|
||||
@@ -289,7 +283,7 @@ func flattenRgResourceLimits(rl ResourceLimits) []map[string]interface{} {
|
||||
"cu_i": rl.CUI,
|
||||
"cu_m": rl.CUM,
|
||||
"cu_np": rl.CUNP,
|
||||
"gpu_units": rl.GpuUnits,
|
||||
"gpu_units": rl.GPUUnits,
|
||||
}
|
||||
res = append(res, temp)
|
||||
|
||||
@@ -297,7 +291,7 @@ func flattenRgResourceLimits(rl ResourceLimits) []map[string]interface{} {
|
||||
|
||||
}
|
||||
|
||||
func flattenRules(list ListRules) []map[string]interface{} {
|
||||
func flattenRules(list rg.ListRules) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, rule := range list {
|
||||
temp := map[string]interface{}{
|
||||
@@ -315,7 +309,7 @@ func flattenRules(list ListRules) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgListComputes(lc ListComputes) []map[string]interface{} {
|
||||
func flattenRgListComputes(lc rg.ListComputes) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, compute := range lc {
|
||||
temp := map[string]interface{}{
|
||||
@@ -350,7 +344,7 @@ func flattenRgListComputes(lc ListComputes) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenServerSettings(settings ServerSettings) []map[string]interface{} {
|
||||
func flattenServerSettings(settings rg.RecordServerSettings) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
temp := map[string]interface{}{
|
||||
"inter": settings.Inter,
|
||||
@@ -367,7 +361,7 @@ func flattenServerSettings(settings ServerSettings) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenListServers(list ListServers) []map[string]interface{} {
|
||||
func flattenListServers(list rg.ListServers) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, serv := range list {
|
||||
temp := map[string]interface{}{
|
||||
@@ -384,7 +378,7 @@ func flattenListServers(list ListServers) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenBackends(b ListBackends) []map[string]interface{} {
|
||||
func flattenBackends(b rg.ListBackends) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, item := range b {
|
||||
temp := map[string]interface{}{
|
||||
@@ -399,7 +393,7 @@ func flattenBackends(b ListBackends) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenBindings(list ListBindings) []map[string]interface{} {
|
||||
func flattenBindings(list rg.ListBindings) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, bind := range list {
|
||||
temp := map[string]interface{}{
|
||||
@@ -414,7 +408,7 @@ func flattenBindings(list ListBindings) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenFrontends(list ListFrontends) []map[string]interface{} {
|
||||
func flattenFrontends(list rg.ListFrontends) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, front := range list {
|
||||
temp := map[string]interface{}{
|
||||
@@ -429,7 +423,7 @@ func flattenFrontends(list ListFrontends) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenNode(node RecordNode) []map[string]interface{} {
|
||||
func flattenNode(node rg.RecordNode) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
temp := map[string]interface{}{
|
||||
"backend_ip": node.BackendIP,
|
||||
@@ -443,7 +437,7 @@ func flattenNode(node RecordNode) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgListLb(listLb ListLB) []map[string]interface{} {
|
||||
func flattenRgListLb(listLb rg.ListLB) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, lb := range listLb {
|
||||
temp := map[string]interface{}{
|
||||
@@ -478,7 +472,7 @@ func flattenRgListLb(listLb ListLB) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgListPfw(listPfw ListPFW) []map[string]interface{} {
|
||||
func flattenRgListPfw(listPfw rg.ListPortForwards) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, pfw := range listPfw {
|
||||
temp := map[string]interface{}{
|
||||
@@ -497,7 +491,7 @@ func flattenRgListPfw(listPfw ListPFW) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgListVins(lv ListVINS) []map[string]interface{} {
|
||||
func flattenRgListVins(lv rg.ListVINS) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
for _, vins := range lv {
|
||||
temp := map[string]interface{}{
|
||||
@@ -525,7 +519,7 @@ func flattenRgListVins(lv ListVINS) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgAffinityGroupComputes(list ListAffinityGroupCompute) []map[string]interface{} {
|
||||
func flattenRgAffinityGroupComputes(list rg.ListAffinityGroups) []map[string]interface{} {
|
||||
res := make([]map[string]interface{}, 0)
|
||||
|
||||
for _, item := range list {
|
||||
@@ -567,12 +561,12 @@ func flattenRgListGroups(list map[string][]uint64) []map[string]interface{} {
|
||||
return res
|
||||
}
|
||||
|
||||
func flattenRgUsageResource(d *schema.ResourceData, usage Resource) {
|
||||
func flattenRgUsageResource(d *schema.ResourceData, usage rg.RecordResourceUsage) {
|
||||
d.Set("cpu", usage.CPU)
|
||||
d.Set("disk_size", usage.DiskSize)
|
||||
d.Set("disk_size_max", usage.DiskSizeMax)
|
||||
d.Set("extips", usage.ExtIPs)
|
||||
d.Set("exttraffic", usage.ExtTraffic)
|
||||
d.Set("exttraffic", usage.ExtraTraffic)
|
||||
d.Set("gpu", usage.GPU)
|
||||
d.Set("ram", usage.RAM)
|
||||
d.Set("seps", flattenRgSeps(usage.SEPs))
|
||||
|
||||
@@ -42,12 +42,12 @@ type ResourceLimits struct {
|
||||
}
|
||||
|
||||
type QuotaRecord struct { // this is how quota is reported by /api/.../rg/get
|
||||
Cpu int `json:"CU_C"` // CPU count in pcs
|
||||
Cpu int `json:"CU_C"` // CPU count in pcs
|
||||
Ram float64 `json:"CU_M"` // RAM volume in MB, it is STILL reported as FLOAT
|
||||
Disk int `json:"CU_D"` // Disk capacity in GB
|
||||
ExtIPs int `json:"CU_I"` // Ext IPs count
|
||||
ExtTraffic int `json:"CU_NP"` // Ext network traffic
|
||||
GpuUnits int `json:"gpu_units"` // GPU count
|
||||
Disk int `json:"CU_D"` // Disk capacity in GB
|
||||
ExtIPs int `json:"CU_I"` // Ext IPs count
|
||||
ExtTraffic int `json:"CU_NP"` // Ext network traffic
|
||||
GpuUnits int `json:"gpu_units"` // GPU count
|
||||
}
|
||||
|
||||
// Main information about audit
|
||||
|
||||
@@ -39,7 +39,7 @@ import (
|
||||
func makeQuotaRecord(arg_list []interface{}) QuotaRecord {
|
||||
quota := QuotaRecord{
|
||||
Cpu: -1,
|
||||
Ram: -1., // this is float64, but may change in the future
|
||||
Ram: -1,
|
||||
Disk: -1,
|
||||
ExtTraffic: -1,
|
||||
ExtIPs: -1,
|
||||
|
||||
@@ -34,111 +34,54 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/locations"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func existAccountID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
accountId := uint64(d.Get("account_id").(int))
|
||||
|
||||
urlValues := &url.Values{}
|
||||
req := account.ListRequest{}
|
||||
|
||||
accountList := []struct {
|
||||
ID int `json:"id"`
|
||||
}{}
|
||||
|
||||
accountListAPI := "/restmachine/cloudapi/account/list"
|
||||
|
||||
accountListRaw, err := c.DecortAPICall(ctx, "POST", accountListAPI, urlValues)
|
||||
accountList, err := c.CloudAPI().Account().List(ctx, req)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(accountListRaw), &accountList)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
haveAccount := false
|
||||
|
||||
myAccount := d.Get("account_id").(int)
|
||||
for _, account := range accountList {
|
||||
if account.ID == myAccount {
|
||||
haveAccount = true
|
||||
break
|
||||
}
|
||||
}
|
||||
return haveAccount, nil
|
||||
return len(accountList.FilterByID(accountId)) != 0, nil
|
||||
}
|
||||
|
||||
func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
gid := uint64(d.Get("gid").(int))
|
||||
|
||||
urlValues := &url.Values{}
|
||||
req := locations.ListRequest{}
|
||||
|
||||
locationList := []struct {
|
||||
GID int `json:"gid"`
|
||||
}{}
|
||||
|
||||
locationsListAPI := "/restmachine/cloudapi/locations/list"
|
||||
|
||||
locationListRaw, err := c.DecortAPICall(ctx, "POST", locationsListAPI, urlValues)
|
||||
locationList, err := c.CloudAPI().Locations().List(ctx, req)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(locationListRaw), &locationList)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
haveGID := false
|
||||
|
||||
myGID := d.Get("gid").(int)
|
||||
for _, location := range locationList {
|
||||
if location.GID == myGID {
|
||||
haveGID = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return haveGID, nil
|
||||
return len(locationList.FilterByGID(gid)) != 0, nil
|
||||
}
|
||||
|
||||
func existExtNetID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
extNetId := uint64(d.Get("ext_net_id").(int))
|
||||
|
||||
urlValues := &url.Values{}
|
||||
urlValues.Add("accountId", strconv.Itoa(d.Get("account_id").(int)))
|
||||
req := extnet.ListRequest{
|
||||
AccountID: uint64(d.Get("account_id").(int)),
|
||||
}
|
||||
|
||||
listExtNet := []struct {
|
||||
ID int `json:"id"`
|
||||
}{}
|
||||
|
||||
extNetListAPI := "/restmachine/cloudapi/extnet/list"
|
||||
|
||||
listExtNetRaw, err := c.DecortAPICall(ctx, "POST", extNetListAPI, urlValues)
|
||||
listExtNet, err := c.CloudAPI().ExtNet().List(ctx, req)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(listExtNetRaw), &listExtNet)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
haveExtNet := false
|
||||
|
||||
myExtNetID := d.Get("ext_net_id").(int)
|
||||
for _, extNet := range listExtNet {
|
||||
if extNet.ID == myExtNetID {
|
||||
haveExtNet = true
|
||||
break
|
||||
}
|
||||
}
|
||||
return haveExtNet, nil
|
||||
return len(listExtNet.FilterByID(extNetId)) != 0, nil
|
||||
}
|
||||
|
||||
@@ -35,10 +35,10 @@ package rg
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
|
||||
@@ -57,20 +57,6 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
return diag.FromErr(fmt.Errorf("Cannot create new RG: missing name."))
|
||||
}
|
||||
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
|
||||
/* Current version of provider works with default grid id (same is true for disk resources)
|
||||
grid_id, arg_set := d.GetOk("grid_id")
|
||||
if !arg_set {
|
||||
return fmt.Errorf("Cannot create new RG %q in account ID %d: missing Grid ID.",
|
||||
rg_name.(string), validated_account_id)
|
||||
}
|
||||
if grid_id.(int) < 1 {
|
||||
grid_id = DefaultGridID
|
||||
}
|
||||
*/
|
||||
|
||||
log.Debugf("resourceResgroupCreate: called for RG name %s, account ID %d",
|
||||
rgName.(string), d.Get("account_id").(int))
|
||||
|
||||
@@ -99,6 +85,8 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
return diag.Errorf("resourceResgroupCreate: can't create RG because ExtNetID %d is not allowed or does not exist", d.Get("ext_net_id").(int))
|
||||
}
|
||||
}
|
||||
c := m.(*controller.ControllerCfg)
|
||||
req := rg.CreateRequest{}
|
||||
|
||||
setQuota := false
|
||||
var quotaRecord QuotaRecord
|
||||
@@ -113,67 +101,65 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
c.GetDecortUsername(),
|
||||
rgName.(string), d.Get("account_id").(int))
|
||||
|
||||
urlValues = &url.Values{}
|
||||
urlValues.Add("accountId", strconv.Itoa(d.Get("account_id").(int)))
|
||||
urlValues.Add("name", rgName.(string))
|
||||
urlValues.Add("gid", strconv.Itoa(location.DefaultGridID))
|
||||
urlValues.Add("owner", c.GetDecortUsername())
|
||||
req.AccountID = uint64(d.Get("account_id").(int))
|
||||
req.Name = rgName.(string)
|
||||
req.GID = uint64(location.DefaultGridID)
|
||||
req.Owner = c.GetDecortUsername()
|
||||
|
||||
if setQuota {
|
||||
urlValues.Add("maxCPUCapacity", strconv.Itoa(quotaRecord.Cpu))
|
||||
urlValues.Add("maxVDiskCapacity", strconv.Itoa(quotaRecord.Disk))
|
||||
urlValues.Add("maxMemoryCapacity", fmt.Sprintf("%f", quotaRecord.Ram))
|
||||
urlValues.Add("maxNetworkPeerTransfer", strconv.Itoa(quotaRecord.ExtTraffic))
|
||||
urlValues.Add("maxNumPublicIP", strconv.Itoa(quotaRecord.ExtIPs))
|
||||
req.MaxCPUCapacity = int64(quotaRecord.Cpu)
|
||||
req.MaxVDiskCapacity = int64(quotaRecord.Disk)
|
||||
req.MaxMemoryCapacity = int64(quotaRecord.Ram)
|
||||
req.MaxNetworkPeerTransfer = int64(quotaRecord.ExtTraffic)
|
||||
req.MaxNumPublicIP = int64(quotaRecord.ExtIPs)
|
||||
}
|
||||
|
||||
defNetType, ok := d.GetOk("def_net_type")
|
||||
if ok {
|
||||
urlValues.Add("def_net", defNetType.(string)) // NOTE: in API default network type is set by "def_net" parameter
|
||||
req.DefNet = defNetType.(string) // NOTE: in API default network type is set by "def_net" parameter
|
||||
} else {
|
||||
d.Set("def_net_type", "PRIVATE")
|
||||
}
|
||||
|
||||
ipcidr, ok := d.GetOk("ipcidr")
|
||||
if ok {
|
||||
urlValues.Add("ipcidr", ipcidr.(string))
|
||||
req.IPCIDR = ipcidr.(string)
|
||||
}
|
||||
|
||||
description, ok := d.GetOk("description")
|
||||
if ok {
|
||||
urlValues.Add("desc", description.(string))
|
||||
req.Description = description.(string)
|
||||
}
|
||||
|
||||
reason, ok := d.GetOk("reason")
|
||||
if ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
extNetId, ok := d.GetOk("ext_net_id")
|
||||
if ok {
|
||||
urlValues.Add("extNetId", strconv.Itoa(extNetId.(int)))
|
||||
req.ExtNetID = uint64(extNetId.(int))
|
||||
}
|
||||
|
||||
extIp, ok := d.GetOk("ext_ip")
|
||||
if ok {
|
||||
urlValues.Add("extIp", extIp.(string))
|
||||
req.ExtIP = extIp.(string)
|
||||
}
|
||||
|
||||
regComputes, ok := d.GetOk("register_computes")
|
||||
if ok {
|
||||
urlValues.Add("registerComputes", strconv.FormatBool(regComputes.(bool)))
|
||||
req.RegisterComputes = regComputes.(bool)
|
||||
}
|
||||
|
||||
apiResp, err := c.DecortAPICall(ctx, "POST", ResgroupCreateAPI, urlValues)
|
||||
apiResp, err := c.CloudAPI().RG().Create(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
d.SetId(apiResp)
|
||||
d.SetId(strconv.FormatUint(apiResp, 10))
|
||||
|
||||
w := dc.Warnings{}
|
||||
if access, ok := d.GetOk("access"); ok {
|
||||
urlValues = &url.Values{}
|
||||
var user, right string
|
||||
|
||||
if access.(*schema.Set).Len() > 0 {
|
||||
@@ -183,14 +169,17 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
user = access["user"].(string)
|
||||
right = access["right"].(string)
|
||||
|
||||
urlValues.Add("rgId", d.Id())
|
||||
urlValues.Add("user", user)
|
||||
urlValues.Add("right", right)
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req := rg.AccessGrantRequest{
|
||||
RGID: apiResp,
|
||||
User: user,
|
||||
Right: right,
|
||||
}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgAccessGrantAPI, urlValues)
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.CloudAPI().RG().AccessGrant(ctx, req)
|
||||
if err != nil {
|
||||
w.Add(err)
|
||||
}
|
||||
@@ -200,50 +189,62 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
}
|
||||
|
||||
if defNet, ok := d.GetOk("def_net"); ok {
|
||||
urlValues := &url.Values{}
|
||||
|
||||
if defNet.(*schema.Set).Len() > 0 {
|
||||
defNetList := defNet.(*schema.Set).List()
|
||||
defNetItem := defNetList[0].(map[string]interface{})
|
||||
|
||||
netType := defNetItem["net_type"].(string)
|
||||
|
||||
urlValues.Add("rgId", d.Id())
|
||||
urlValues.Add("netType", netType)
|
||||
req := rg.SetDefNetRequest{
|
||||
RGID: apiResp,
|
||||
NetType: netType,
|
||||
}
|
||||
|
||||
if netID, ok := defNetItem["net_id"]; ok {
|
||||
urlValues.Add("netId", strconv.Itoa(netID.(int)))
|
||||
req.NetID = uint64(netID.(int))
|
||||
}
|
||||
if reason, ok := defNetItem["reason"]; ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgSetDefNetAPI, urlValues)
|
||||
_, err := c.CloudAPI().RG().SetDefNet(ctx, req)
|
||||
if err != nil {
|
||||
w.Add(err)
|
||||
}
|
||||
|
||||
d.Set("def_net_type", netType)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if enable, ok := d.GetOk("enable"); ok {
|
||||
urlValues = &url.Values{}
|
||||
|
||||
api := RgDisableAPI
|
||||
enable := enable.(bool)
|
||||
if enable {
|
||||
api = RgEnableAPI
|
||||
}
|
||||
urlValues.Add("rgId", d.Id())
|
||||
req := rg.EnableRequest{
|
||||
RGID: apiResp,
|
||||
}
|
||||
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
}
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", api, urlValues)
|
||||
if err != nil {
|
||||
w.Add(err)
|
||||
_, err := c.CloudAPI().RG().Enable(ctx, req)
|
||||
if err != nil {
|
||||
w.Add(err)
|
||||
}
|
||||
} else {
|
||||
req := rg.DisableRequest{
|
||||
RGID: apiResp,
|
||||
}
|
||||
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.CloudAPI().RG().Disable(ctx, req)
|
||||
if err != nil {
|
||||
w.Add(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,7 +258,7 @@ func resourceResgroupRead(ctx context.Context, d *schema.ResourceData, m interfa
|
||||
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
rg, err := utilityResgroupCheckPresence(ctx, d, m)
|
||||
rgData, err := utilityResgroupCheckPresence(ctx, d, m)
|
||||
if err != nil {
|
||||
d.SetId("")
|
||||
return diag.FromErr(err)
|
||||
@@ -265,26 +266,26 @@ func resourceResgroupRead(ctx context.Context, d *schema.ResourceData, m interfa
|
||||
|
||||
hasChanged := false
|
||||
|
||||
switch rg.Status {
|
||||
switch rgData.Status {
|
||||
case status.Modeled:
|
||||
return diag.Errorf("The resource group is in status: %s, please, contact support for more information", rg.Status)
|
||||
return diag.Errorf("The resource group is in status: %s, please, contact support for more information", rgData.Status)
|
||||
case status.Created:
|
||||
case status.Enabled:
|
||||
case status.Deleted:
|
||||
urlValues := &url.Values{}
|
||||
urlValues.Add("rgId", d.Id())
|
||||
restoreReq := rg.RestoreRequest{RGID: rgData.ID}
|
||||
enableReq := rg.EnableRequest{RGID: rgData.ID}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgRestoreAPI, urlValues)
|
||||
_, err := c.CloudAPI().RG().Restore(ctx, restoreReq)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
_, err = c.DecortAPICall(ctx, "POST", RgEnableAPI, urlValues)
|
||||
|
||||
_, err = c.CloudAPI().RG().Enable(ctx, enableReq)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
hasChanged = true
|
||||
|
||||
case status.Deleting:
|
||||
case status.Destroyed:
|
||||
d.SetId("")
|
||||
@@ -297,13 +298,13 @@ func resourceResgroupRead(ctx context.Context, d *schema.ResourceData, m interfa
|
||||
}
|
||||
|
||||
if hasChanged {
|
||||
rg, err = utilityResgroupCheckPresence(ctx, d, m)
|
||||
rgData, err = utilityResgroupCheckPresence(ctx, d, m)
|
||||
if err != nil {
|
||||
d.SetId("")
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
}
|
||||
return diag.FromErr(flattenResgroup(d, *rg))
|
||||
return diag.FromErr(flattenResgroup(d, *rgData))
|
||||
}
|
||||
|
||||
func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||
@@ -311,7 +312,6 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
d.Get("name").(string), d.Get("account_id").(int))
|
||||
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
|
||||
haveAccount, err := existAccountID(ctx, d, m)
|
||||
if err != nil {
|
||||
@@ -326,7 +326,7 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
if !haveGID {
|
||||
return diag.Errorf("resourceResgroupUpdate: can't create RG bacause GID %d not allowed or does not exist", d.Get("gid").(int))
|
||||
return diag.Errorf("resourceResgroupUpdate: can't create RG because GID %d not allowed or does not exist", d.Get("gid").(int))
|
||||
}
|
||||
|
||||
if _, ok := d.GetOk("ext_net_id"); ok {
|
||||
@@ -339,7 +339,7 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
}
|
||||
}
|
||||
|
||||
rgFacts, err := utilityResgroupCheckPresence(ctx, d, m)
|
||||
rgData, err := utilityResgroupCheckPresence(ctx, d, m)
|
||||
if err != nil {
|
||||
d.SetId("")
|
||||
return diag.FromErr(err)
|
||||
@@ -347,18 +347,20 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
|
||||
hasChanged := false
|
||||
|
||||
switch rgFacts.Status {
|
||||
switch rgData.Status {
|
||||
case status.Modeled:
|
||||
case status.Created:
|
||||
case status.Enabled:
|
||||
case status.Deleted:
|
||||
urlValues := &url.Values{}
|
||||
urlValues.Add("rgId", d.Id())
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgRestoreAPI, urlValues)
|
||||
restoreReq := rg.RestoreRequest{RGID: rgData.ID}
|
||||
enableReq := rg.EnableRequest{RGID: rgData.ID}
|
||||
|
||||
_, err := c.CloudAPI().RG().Restore(ctx, restoreReq)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
_, err = c.DecortAPICall(ctx, "POST", RgEnableAPI, urlValues)
|
||||
|
||||
_, err = c.CloudAPI().RG().Enable(ctx, enableReq)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
@@ -376,7 +378,7 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
}
|
||||
|
||||
if hasChanged {
|
||||
rgFacts, err = utilityDataResgroupCheckPresence(ctx, d, m)
|
||||
rgData, err = utilityDataResgroupCheckPresence(ctx, d, m)
|
||||
if err != nil {
|
||||
d.SetId("")
|
||||
return diag.FromErr(err)
|
||||
@@ -411,16 +413,18 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
|
||||
doGeneralUpdate := false
|
||||
|
||||
urlValues = &url.Values{}
|
||||
urlValues.Add("rgId", d.Id())
|
||||
req := rg.UpdateRequest{
|
||||
RGID: rgData.ID,
|
||||
}
|
||||
|
||||
nameNew, nameSet := d.GetOk("name")
|
||||
if nameSet {
|
||||
log.Debugf("resourceResgroupUpdate: name specified - looking for deltas from the old settings.")
|
||||
nameOld, _ := d.GetChange("name")
|
||||
if nameOld.(string) != nameNew.(string) {
|
||||
req.Name = nameNew.(string)
|
||||
|
||||
doGeneralUpdate = true
|
||||
urlValues.Add("name", nameNew.(string))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -435,39 +439,39 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
if quotarecordNew.Cpu != quotarecordOld.Cpu {
|
||||
doGeneralUpdate = true
|
||||
log.Debugf("resourceResgroupUpdate: Cpu diff %d <- %d", quotarecordNew.Cpu, quotarecordOld.Cpu)
|
||||
urlValues.Add("maxCPUCapacity", strconv.Itoa(quotarecordNew.Cpu))
|
||||
req.MaxCPUCapacity = int64(quotarecordNew.Cpu)
|
||||
}
|
||||
|
||||
if quotarecordNew.Disk != quotarecordOld.Disk {
|
||||
doGeneralUpdate = true
|
||||
log.Debugf("resourceResgroupUpdate: Disk diff %d <- %d", quotarecordNew.Disk, quotarecordOld.Disk)
|
||||
urlValues.Add("maxVDiskCapacity", strconv.Itoa(quotarecordNew.Disk))
|
||||
req.MaxVDiskCapacity = int64(quotarecordNew.Disk)
|
||||
}
|
||||
|
||||
if quotarecordNew.Ram != quotarecordOld.Ram {
|
||||
doGeneralUpdate = true
|
||||
log.Debugf("resourceResgroupUpdate: Ram diff %f <- %f", quotarecordNew.Ram, quotarecordOld.Ram)
|
||||
urlValues.Add("maxMemoryCapacity", fmt.Sprintf("%f", quotarecordNew.Ram))
|
||||
req.MaxMemoryCapacity = int64(quotarecordNew.Ram)
|
||||
}
|
||||
|
||||
if quotarecordNew.ExtTraffic != quotarecordOld.ExtTraffic {
|
||||
doGeneralUpdate = true
|
||||
log.Debugf("resourceResgroupUpdate: ExtTraffic diff %d <- %d", quotarecordNew.ExtTraffic, quotarecordOld.ExtTraffic)
|
||||
urlValues.Add("maxNetworkPeerTransfer", strconv.Itoa(quotarecordNew.ExtTraffic))
|
||||
req.MaxNetworkPeerTransfer = int64(quotarecordNew.ExtTraffic)
|
||||
}
|
||||
|
||||
if quotarecordNew.ExtIPs != quotarecordOld.ExtIPs {
|
||||
doGeneralUpdate = true
|
||||
log.Debugf("resourceResgroupUpdate: ExtIPs diff %d <- %d", quotarecordNew.ExtIPs, quotarecordOld.ExtIPs)
|
||||
urlValues.Add("maxNumPublicIP", strconv.Itoa(quotarecordNew.ExtIPs))
|
||||
req.MaxNumPublicIP = int64(quotarecordNew.ExtIPs)
|
||||
}
|
||||
} else {
|
||||
doGeneralUpdate = true
|
||||
urlValues.Add("maxCPUCapacity", "-1")
|
||||
urlValues.Add("maxVDiskCapacity", "-1")
|
||||
urlValues.Add("maxMemoryCapacity", "-1")
|
||||
urlValues.Add("maxNetworkPeerTransfer", "-1")
|
||||
urlValues.Add("maxNumPublicIP", "-1")
|
||||
req.MaxCPUCapacity = -1
|
||||
req.MaxVDiskCapacity = -1
|
||||
req.MaxMemoryCapacity = -1
|
||||
req.MaxNetworkPeerTransfer = -1
|
||||
req.MaxNumPublicIP = -1
|
||||
}
|
||||
|
||||
descNew, descSet := d.GetOk("description")
|
||||
@@ -476,13 +480,13 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
descOld, _ := d.GetChange("description")
|
||||
if descOld.(string) != descNew.(string) {
|
||||
doGeneralUpdate = true
|
||||
urlValues.Add("desc", descNew.(string))
|
||||
req.Description = descNew.(string)
|
||||
}
|
||||
}
|
||||
|
||||
if doGeneralUpdate {
|
||||
log.Debugf("resourceResgroupUpdate: detected delta between new and old RG specs - updating the RG")
|
||||
_, err := c.DecortAPICall(ctx, "POST", ResgroupUpdateAPI, urlValues)
|
||||
_, err := c.CloudAPI().RG().Update(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
@@ -490,64 +494,63 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
log.Debugf("resourceResgroupUpdate: no difference between old and new state - no update on the RG will be done")
|
||||
}
|
||||
|
||||
urlValues = &url.Values{}
|
||||
enableOld, enableNew := d.GetChange("enable")
|
||||
if enableOld.(bool) && !enableNew.(bool) {
|
||||
urlValues.Add("rgId", d.Id())
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgDisableAPI, urlValues)
|
||||
req := rg.DisableRequest{RGID: rgData.ID}
|
||||
|
||||
_, err := c.CloudAPI().RG().Disable(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
} else if !enableOld.(bool) && enableNew.(bool) {
|
||||
urlValues.Add("rgId", d.Id())
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgEnableAPI, urlValues)
|
||||
req := rg.EnableRequest{RGID: rgData.ID}
|
||||
|
||||
_, err := c.CloudAPI().RG().Enable(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
}
|
||||
|
||||
urlValues = &url.Values{}
|
||||
|
||||
oldSet, newSet := d.GetChange("access")
|
||||
|
||||
deletedAccess := (oldSet.(*schema.Set).Difference(newSet.(*schema.Set))).List()
|
||||
for _, deletedInterface := range deletedAccess {
|
||||
deletedItem := deletedInterface.(map[string]interface{})
|
||||
|
||||
user := deletedItem["user"].(string)
|
||||
|
||||
urlValues.Add("rgId", d.Id())
|
||||
urlValues.Add("user", user)
|
||||
req := rg.AccessRevokeRequest{
|
||||
RGID: rgData.ID,
|
||||
User: user,
|
||||
}
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgAccessRevokeAPI, urlValues)
|
||||
_, err := c.CloudAPI().RG().AccessRevoke(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
urlValues = &url.Values{}
|
||||
}
|
||||
|
||||
addedAccess := (newSet.(*schema.Set).Difference(oldSet.(*schema.Set))).List()
|
||||
for _, addedInterface := range addedAccess {
|
||||
addedItem := addedInterface.(map[string]interface{})
|
||||
|
||||
user := addedItem["user"].(string)
|
||||
right := addedItem["right"].(string)
|
||||
|
||||
urlValues.Add("rgId", d.Id())
|
||||
urlValues.Add("user", user)
|
||||
urlValues.Add("right", right)
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req := rg.AccessGrantRequest{
|
||||
RGID: rgData.ID,
|
||||
User: user,
|
||||
Right: right,
|
||||
}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgAccessGrantAPI, urlValues)
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.CloudAPI().RG().AccessGrant(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
urlValues = &url.Values{}
|
||||
}
|
||||
|
||||
if ok := d.HasChange("def_net"); ok {
|
||||
@@ -555,22 +558,22 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
if newDefNet.(*schema.Set).Len() > 0 {
|
||||
changedDefNet := (newDefNet.(*schema.Set).Difference(oldDefNet.(*schema.Set))).List()
|
||||
for _, changedDefNetInterface := range changedDefNet {
|
||||
|
||||
defNetItem := changedDefNetInterface.(map[string]interface{})
|
||||
|
||||
netType := defNetItem["net_type"].(string)
|
||||
|
||||
urlValues.Add("rgId", d.Id())
|
||||
urlValues.Add("netType", netType)
|
||||
req := rg.SetDefNetRequest{
|
||||
RGID: rgData.ID,
|
||||
NetType: netType,
|
||||
}
|
||||
|
||||
if netID, ok := defNetItem["net_id"]; ok {
|
||||
urlValues.Add("netId", strconv.Itoa(netID.(int)))
|
||||
req.NetID = uint64(netID.(int))
|
||||
}
|
||||
if reason, ok := defNetItem["reason"]; ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", RgSetDefNetAPI, urlValues)
|
||||
_, err := c.CloudAPI().RG().SetDefNet(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
@@ -582,30 +585,32 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
|
||||
}
|
||||
|
||||
func resourceResgroupDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||
// NOTE: this method forcibly destroys target resource group with flag "permanently", so there is no way to
|
||||
// restore the destroyed resource group as well all Computes & VINSes that existed in it
|
||||
log.Debugf("resourceResgroupDelete: called for RG name %s, account ID %d",
|
||||
d.Get("name").(string), d.Get("account_id").(int))
|
||||
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
rgId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||
req := rg.DeleteRequest{
|
||||
RGID: rgId,
|
||||
}
|
||||
|
||||
urlValues.Add("rgId", d.Id())
|
||||
if force, ok := d.GetOk("force"); ok {
|
||||
urlValues.Add("force", strconv.FormatBool(force.(bool)))
|
||||
req.Force = force.(bool)
|
||||
}
|
||||
if permanently, ok := d.GetOk("permanently"); ok {
|
||||
urlValues.Add("permanently", strconv.FormatBool(permanently.(bool)))
|
||||
req.Permanently = permanently.(bool)
|
||||
}
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
_, err := c.DecortAPICall(ctx, "POST", ResgroupDeleteAPI, urlValues)
|
||||
_, err := c.CloudAPI().RG().Delete(ctx, req)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
d.SetId("")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -806,6 +811,10 @@ func ResourceRgSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeInt,
|
||||
Computed: true,
|
||||
},
|
||||
"rg_id": {
|
||||
Type: schema.TypeInt,
|
||||
Computed: true,
|
||||
},
|
||||
"lock_status": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
@@ -863,6 +872,14 @@ func ResourceRgSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeString,
|
||||
},
|
||||
},
|
||||
"cpu_allocation_parameter": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"cpu_allocation_ratio": {
|
||||
Type: schema.TypeFloat,
|
||||
Computed: true,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -882,7 +899,7 @@ func ResourceResgroup() *schema.Resource {
|
||||
Timeouts: &schema.ResourceTimeout{
|
||||
Create: &constants.Timeout600s,
|
||||
Read: &constants.Timeout300s,
|
||||
Update: &constants.Timeout300s,
|
||||
Update: &constants.Timeout600s,
|
||||
Delete: &constants.Timeout300s,
|
||||
Default: &constants.Timeout300s,
|
||||
},
|
||||
|
||||
@@ -34,79 +34,50 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
)
|
||||
|
||||
// On success this function returns a string, as returned by API rg/get, which could be unmarshalled
|
||||
// into ResgroupGetResp structure
|
||||
func utilityResgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*RecordResourceGroup, error) {
|
||||
// This function tries to locate resource group by one of the following algorithms depending
|
||||
// on the parameters passed:
|
||||
// - if resource group ID is specified -> by RG ID
|
||||
// - if resource group name is specifeid -> by RG name and either account ID or account name
|
||||
//
|
||||
// If succeeded, it returns non empty string that contains JSON formatted facts about the
|
||||
// resource group as returned by rg/get API call.
|
||||
// Otherwise it returns empty string and a meaningful error.
|
||||
//
|
||||
// NOTE: As our provider always deletes RGs permanently, there is no "restore" method and
|
||||
// consequently we are not interested in matching RGs in DELETED state. Hence, we call
|
||||
// .../rg/list API with includedeleted=false
|
||||
//
|
||||
// This function does not modify its ResourceData argument, so it is safe to use it as core
|
||||
// method for the Terraform resource Exists method.
|
||||
//
|
||||
|
||||
func utilityResgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*rg.RecordResourceGroup, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
req := rg.GetRequest{}
|
||||
|
||||
if d.Id() != "" {
|
||||
urlValues.Add("rgId", d.Id())
|
||||
rgId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||
req.RGID = rgId
|
||||
} else {
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
req.RGID = uint64(d.Get("rg_id").(int))
|
||||
}
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
rgData := &RecordResourceGroup{}
|
||||
rgRaw, err := c.DecortAPICall(ctx, "POST", ResgroupGetAPI, urlValues)
|
||||
rgData, err := c.CloudAPI().RG().Get(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(rgRaw), rgData)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return rgData, nil
|
||||
}
|
||||
|
||||
func utilityDataResgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*RecordResourceGroup, error) {
|
||||
func utilityDataResgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*rg.RecordResourceGroup, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
rgData := &RecordResourceGroup{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
req := rg.GetRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
rgRaw, err := c.DecortAPICall(ctx, "POST", ResgroupGetAPI, urlValues)
|
||||
rgData, err := c.CloudAPI().RG().Get(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(rgRaw), rgData)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return rgData, nil
|
||||
}
|
||||
|
||||
@@ -34,28 +34,20 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgAffinityGroupComputesCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListAffinityGroupCompute, error) {
|
||||
func utilityRgAffinityGroupComputesCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListAffinityGroups, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
urlValues := &url.Values{}
|
||||
listGroupComputes := ListAffinityGroupCompute{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
urlValues.Add("affinityGroup", d.Get("affinity_group").(string))
|
||||
|
||||
listGroupComputesRaw, err := c.DecortAPICall(ctx, "POST", RgAffinityGroupComputesAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
req := rg.AffinityGroupComputesRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
AffinityGroup: d.Get("affinity_group").(string),
|
||||
}
|
||||
err = json.Unmarshal([]byte(listGroupComputesRaw), &listGroupComputes)
|
||||
|
||||
listGroupComputes, err := c.CloudAPI().RG().AffinityGroupComputes(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,29 +34,20 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgAffinityGroupsGetCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) ([]uint64, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
urlValues := &url.Values{}
|
||||
computes := make([]uint64, 0)
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
urlValues.Add("affinityGroup", d.Get("affinity_group").(string))
|
||||
|
||||
computesRaw, err := c.DecortAPICall(ctx, "POST", RgAffinityGroupsGetAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
req := rg.AffinityGroupsGetRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
AffinityGroup: d.Get("affinity_group").(string),
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(computesRaw), &computes)
|
||||
computes, err := c.CloudAPI().RG().AffinityGroupsGet(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,28 +34,19 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgAffinityGroupsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (map[string][]uint64, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
urlValues := &url.Values{}
|
||||
groups := make(map[string][]uint64, 0)
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
|
||||
groupsRaw, err := c.DecortAPICall(ctx, "POST", RgAffinityGroupsListAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
req := rg.AffinityGroupsListRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(groupsRaw), &groups)
|
||||
groups, err := c.CloudAPI().RG().AffinityGroupsList(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,26 +34,19 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgAuditsCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListAudits, error) {
|
||||
func utilityRgAuditsCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListAudits, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
urlValues := &url.Values{}
|
||||
rgAudits := ListAudits{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
rgAuditsRow, err := c.DecortAPICall(ctx, "POST", RgAuditsAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
req := rg.AuditsRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
err = json.Unmarshal([]byte(rgAuditsRow), &rgAudits)
|
||||
|
||||
rgAudits, err := c.CloudAPI().RG().Audits(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,39 +34,30 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
)
|
||||
|
||||
func utilityRgListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListResourceGroups, error) {
|
||||
func utilityRgListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListResourceGroups, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
|
||||
rgList := ListResourceGroups{}
|
||||
req := rg.ListRequest{}
|
||||
|
||||
if size, ok := d.GetOk("size"); ok {
|
||||
urlValues.Add("size", strconv.Itoa(size.(int)))
|
||||
req.Size = uint64(size.(int))
|
||||
}
|
||||
if page, ok := d.GetOk("page"); ok {
|
||||
urlValues.Add("page", strconv.Itoa(page.(int)))
|
||||
req.Page = uint64(page.(int))
|
||||
}
|
||||
if includedeleted, ok := d.GetOk("includedeleted"); ok {
|
||||
urlValues.Add("includedeleted", strconv.FormatBool(includedeleted.(bool)))
|
||||
req.IncludeDeleted = includedeleted.(bool)
|
||||
}
|
||||
|
||||
log.Debugf("utilityRgListCheckPresence: load rg list")
|
||||
rgListRaw, err := c.DecortAPICall(ctx, "POST", ResgroupListAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(rgListRaw), &rgList)
|
||||
rgList, err := c.CloudAPI().RG().List(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,31 +34,23 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgListComputesCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListComputes, error) {
|
||||
func utilityRgListComputesCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListComputes, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
req := rg.ListComputesRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
|
||||
listComputes := ListComputes{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
listComputesRaw, err := c.DecortAPICall(ctx, "POST", RgListComputesAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(listComputesRaw), &listComputes)
|
||||
listComputes, err := c.CloudAPI().RG().ListComputes(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,33 +34,24 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgListDeletedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListResourceGroups, error) {
|
||||
func utilityRgListDeletedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListResourceGroups, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
|
||||
rgList := ListResourceGroups{}
|
||||
req := rg.ListDeletedRequest{}
|
||||
|
||||
if size, ok := d.GetOk("size"); ok {
|
||||
urlValues.Add("size", strconv.Itoa(size.(int)))
|
||||
req.Size = uint64(size.(int))
|
||||
}
|
||||
if page, ok := d.GetOk("page"); ok {
|
||||
urlValues.Add("page", strconv.Itoa(page.(int)))
|
||||
req.Page = uint64(page.(int))
|
||||
}
|
||||
|
||||
rgListRaw, err := c.DecortAPICall(ctx, "POST", ResgroupListDeletedAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(rgListRaw), &rgList)
|
||||
rgList, err := c.CloudAPI().RG().ListDeleted(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,28 +34,19 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgListLbCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListLB, error) {
|
||||
func utilityRgListLbCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListLB, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
|
||||
listLb := ListLB{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
|
||||
listLbRaw, err := c.DecortAPICall(ctx, "POST", ResgroupListLbAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
req := rg.ListLBRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(listLbRaw), &listLb)
|
||||
listLb, err := c.CloudAPI().RG().ListLB(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,28 +34,19 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgListPfwCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListPFW, error) {
|
||||
func utilityRgListPfwCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListPortForwards, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
|
||||
listPfw := ListPFW{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
|
||||
listPfwRaw, err := c.DecortAPICall(ctx, "POST", ResgroupListPfwAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
req := rg.ListPFWRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(listPfwRaw), &listPfw)
|
||||
listPfw, err := c.CloudAPI().RG().ListPFW(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,32 +34,23 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityRgListVinsCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListVINS, error) {
|
||||
func utilityRgListVinsCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (rg.ListVINS, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := &url.Values{}
|
||||
|
||||
listVins := ListVINS{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
req := rg.ListVINSRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
|
||||
if val, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", val.(string))
|
||||
req.Reason = val.(string)
|
||||
}
|
||||
|
||||
listVinsRaw, err := c.DecortAPICall(ctx, "POST", ResgroupListVinsAPI, urlValues)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(listVinsRaw), &listVins)
|
||||
listVins, err := c.CloudAPI().RG().ListVINS(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,34 +34,26 @@ package rg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||
)
|
||||
|
||||
func utilityDataRgUsageCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*Resource, error) {
|
||||
func utilityDataRgUsageCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*rg.RecordResourceUsage, error) {
|
||||
c := m.(*controller.ControllerCfg)
|
||||
urlValues := url.Values{}
|
||||
usage := Resource{}
|
||||
|
||||
urlValues.Add("rgId", strconv.Itoa(d.Get("rg_id").(int)))
|
||||
req := rg.UsageRequest{
|
||||
RGID: uint64(d.Get("rg_id").(int)),
|
||||
}
|
||||
|
||||
if reason, ok := d.GetOk("reason"); ok {
|
||||
urlValues.Add("reason", reason.(string))
|
||||
req.Reason = reason.(string)
|
||||
}
|
||||
|
||||
usageRaw, err := c.DecortAPICall(ctx, "POST", ResgroupUsageAPI, &urlValues)
|
||||
usage, err := c.CloudAPI().RG().Usage(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(usageRaw), &usage)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &usage, nil
|
||||
return usage, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user