Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0602a4b693 |
28
CHANGELOG.md
28
CHANGELOG.md
@@ -1,11 +1,25 @@
|
|||||||
## Version 4.4.0
|
## Version 4.4.1
|
||||||
|
|
||||||
### Bugfix
|
### Bugfix
|
||||||
- Fixed bug with restore and new create resources at plan and refresh
|
- Add in cloudapi in account/data_source_account_templates_list fields for filters - image_id, name, type, page, size.
|
||||||
|
- Add in cloudapi in disks/data_source_disk_list_types_detailed, disks/data_source_disk_list_types fields for filters - page, size.
|
||||||
|
- Add in cloudapi in disks/data_source_disk_list, disks/data_source_disk_list_unattached fields for filters - account_id, type, sep_id, pool_name, page, size.
|
||||||
|
- Add in cloudapi in extnet/data_source_extnet_computes_list fields for filters - rg_id, compute_id, page, size.
|
||||||
|
- Add in cloudapi in k8s/data_source_k8s_list_deleted fields for filters page, size, delete field for filters status. In k8s/data_source_k8s_list add fields for filters page, size, includedeleted.
|
||||||
|
- Add in cloudapi in rg/data_source_rg_affinity_groups_list fields for filters - page, size.
|
||||||
|
- Fixed tag Required in rg/data_source_rg_list_vins fields - vins_id, page, size.
|
||||||
|
- Fixed panic in pfw
|
||||||
|
- Fixed panic in image_virtual
|
||||||
|
- Fixed error reading data_source_vins_static_route
|
||||||
|
- Fixed static_route deletion
|
||||||
|
- Fixed start bservice and bservice_group
|
||||||
|
|
||||||
|
|
||||||
## Feature
|
## Feature
|
||||||
- Add in cloudapi in stack data_source_stack_list and data_source_stack
|
- Add in cloudapi in account "data_source_account_get_resource_consumption" and "data_source_account_resource_consumption_list".
|
||||||
- Add in cloudapi in vins data_source_route, data_source_route_list, resource_static_route
|
- Add in cloudapi in kvmvm "data_source_compute_list_deleted", "data_source_compute_pci_device_list", "data_source_compute_vgpu_list".
|
||||||
- Cloudapi/lb/resource_lb extnet_id and vins_id can be equal to 0, but not together. If the value is 0, the api assigns it itself. Add Highly Available schema for LB deploy (parameter ha_mode). Cloudapi/lb/data_source_lb add parametr backend_haip, frontend_haip, part_k8s, data_source_lb_list, data_source_lb_list_deleted add parametr backend_haip, frontend_haip
|
- Add in cloudapi in rg "data_source_rg_get_resource_consumption", "data_source_rg_resource_consumption_list".
|
||||||
- Cloudapi/bservice/resource_bservice_group added the ability to create a resource with the following sep_id, sep_pool and cloud_init
|
- Add in cloudapi in k8s "decort_k8s_wg_cloud_init".
|
||||||
- Cloudapi/k8s/resource_k8s and resource_k8s_cp added the ability to create a resource with config (parameters cluster_config, kubelet_config, kube_proxy_config, join_config, cloud_init, init_config). Added the ability to create a resource with Highly Available schema for LB deploy (parameter ha_mode). Added the ability to create a resource with additional_sans. Added the ability to create a resource in extnet_only mode
|
- Upgraded image_id existence check
|
||||||
|
- Added sample of image_virtual config
|
||||||
|
- Added cloud_init parameter to decort_k8s_wg resource
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -7,7 +7,7 @@ ZIPDIR = ./zip
|
|||||||
BINARY=${NAME}
|
BINARY=${NAME}
|
||||||
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
|
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
|
||||||
MAINPATH = ./cmd/decort/
|
MAINPATH = ./cmd/decort/
|
||||||
VERSION=4.4.0
|
VERSION=4.4.1
|
||||||
OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
|
OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
|
||||||
|
|
||||||
FILES = ${BINARY}_${VERSION}_darwin_amd64\
|
FILES = ${BINARY}_${VERSION}_darwin_amd64\
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -9,7 +9,7 @@ require (
|
|||||||
github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1
|
github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1
|
||||||
github.com/sirupsen/logrus v1.9.0
|
github.com/sirupsen/logrus v1.9.0
|
||||||
golang.org/x/net v0.15.0
|
golang.org/x/net v0.15.0
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.6.2
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.6.5
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -339,5 +339,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
|
|||||||
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.6.2 h1:wi2iK7fblgejdylNsW/44fTbBaSoVld0PPcgKErSKyQ=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.6.5 h1:37OLNiSgF3SXjj0ZMRikVrBiNlNdS9NY8QxD9YFfHBY=
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.6.2/go.mod h1:szsTGa73O75ckCWVGJPvTtRbhA/ubuYrYhMkPjvHlmE=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.6.5/go.mod h1:szsTGa73O75ckCWVGJPvTtRbhA/ubuYrYhMkPjvHlmE=
|
||||||
|
|||||||
@@ -50,85 +50,93 @@ import (
|
|||||||
|
|
||||||
func newDataSourcesMap() map[string]*schema.Resource {
|
func newDataSourcesMap() map[string]*schema.Resource {
|
||||||
return map[string]*schema.Resource{
|
return map[string]*schema.Resource{
|
||||||
"decort_account": account.DataSourceAccount(),
|
"decort_account": account.DataSourceAccount(),
|
||||||
"decort_resgroup": rg.DataSourceResgroup(),
|
"decort_account_resource_consumption_list": account.DataSourceAccountResourceConsumptionList(),
|
||||||
"decort_kvmvm": kvmvm.DataSourceCompute(),
|
"decort_account_resource_consumption_get": account.DataSourceAccountResourceConsumptionGet(),
|
||||||
"decort_kvmvm_list": kvmvm.DataSourceComputeList(),
|
"decort_resgroup": rg.DataSourceResgroup(),
|
||||||
"decort_kvmvm_audits": kvmvm.DataSourceComputeAudits(),
|
"decort_kvmvm": kvmvm.DataSourceCompute(),
|
||||||
"decort_kvmvm_get_audits": kvmvm.DataSourceComputeGetAudits(),
|
"decort_kvmvm_list": kvmvm.DataSourceComputeList(),
|
||||||
"decort_kvmvm_get_console_url": kvmvm.DataSourceComputeGetConsoleUrl(),
|
"decort_kvmvm_list_deleted": kvmvm.DataSourceComputeListDeleted(),
|
||||||
"decort_kvmvm_get_log": kvmvm.DataSourceComputeGetLog(),
|
"decort_kvmvm_audits": kvmvm.DataSourceComputeAudits(),
|
||||||
"decort_kvmvm_pfw_list": kvmvm.DataSourceComputePfwList(),
|
"decort_kvmvm_get_audits": kvmvm.DataSourceComputeGetAudits(),
|
||||||
"decort_kvmvm_user_list": kvmvm.DataSourceComputeUserList(),
|
"decort_kvmvm_get_console_url": kvmvm.DataSourceComputeGetConsoleUrl(),
|
||||||
"decort_kvmvm_snapshot_usage": kvmvm.DataSourceComputeSnapshotUsage(),
|
"decort_kvmvm_get_log": kvmvm.DataSourceComputeGetLog(),
|
||||||
"decort_k8s": k8s.DataSourceK8s(),
|
"decort_kvmvm_pfw_list": kvmvm.DataSourceComputePfwList(),
|
||||||
"decort_k8s_list": k8s.DataSourceK8sList(),
|
"decort_kvmvm_user_list": kvmvm.DataSourceComputeUserList(),
|
||||||
"decort_k8s_list_deleted": k8s.DataSourceK8sListDeleted(),
|
"decort_kvmvm_snapshot_usage": kvmvm.DataSourceComputeSnapshotUsage(),
|
||||||
"decort_k8s_wg": k8s.DataSourceK8sWg(),
|
"decort_kvmvm_vgpu_list": kvmvm.DataSourceComputeVGPUList(),
|
||||||
"decort_k8s_wg_list": k8s.DataSourceK8sWgList(),
|
"decort_kvmvm_pci_device_list": kvmvm.DataSourceComputePCIDeviceList(),
|
||||||
"decort_k8s_computes": k8s.DataSourceK8sComputes(),
|
"decort_k8s": k8s.DataSourceK8s(),
|
||||||
"decort_k8ci_list": k8s.DataSourceK8CIList(),
|
"decort_k8s_list": k8s.DataSourceK8sList(),
|
||||||
"decort_vins": vins.DataSourceVins(),
|
"decort_k8s_list_deleted": k8s.DataSourceK8sListDeleted(),
|
||||||
"decort_vins_list": vins.DataSourceVinsList(),
|
"decort_k8s_wg": k8s.DataSourceK8sWg(),
|
||||||
"decort_vins_audits": vins.DataSourceVinsAudits(),
|
"decort_k8s_wg_list": k8s.DataSourceK8sWgList(),
|
||||||
"decort_vins_ip_list": vins.DataSourceVinsIpList(),
|
"decort_k8s_computes": k8s.DataSourceK8sComputes(),
|
||||||
"decort_vins_list_deleted": vins.DataSourceVinsListDeleted(),
|
"decort_k8s_wg_cloud_init": k8s.DataSourceK8sWgCloudInit(),
|
||||||
"decort_vins_ext_net_list": vins.DataSourceVinsExtNetList(),
|
"decort_k8ci_list": k8s.DataSourceK8CIList(),
|
||||||
"decort_vins_nat_rule_list": vins.DataSourceVinsNatRuleList(),
|
"decort_vins": vins.DataSourceVins(),
|
||||||
"decort_vins_static_route_list": vins.DataSourceStaticRouteList(),
|
"decort_vins_list": vins.DataSourceVinsList(),
|
||||||
"decort_vins_static_route": vins.DataSourceStaticRoute(),
|
"decort_vins_audits": vins.DataSourceVinsAudits(),
|
||||||
"decort_snapshot_list": snapshot.DataSourceSnapshotList(),
|
"decort_vins_ip_list": vins.DataSourceVinsIpList(),
|
||||||
"decort_disk": disks.DataSourceDisk(),
|
"decort_vins_list_deleted": vins.DataSourceVinsListDeleted(),
|
||||||
"decort_disk_list": disks.DataSourceDiskList(),
|
"decort_vins_ext_net_list": vins.DataSourceVinsExtNetList(),
|
||||||
"decort_rg_list": rg.DataSourceRgList(),
|
"decort_vins_nat_rule_list": vins.DataSourceVinsNatRuleList(),
|
||||||
"decort_rg_affinity_group_computes": rg.DataSourceRgAffinityGroupComputes(),
|
"decort_vins_static_route_list": vins.DataSourceStaticRouteList(),
|
||||||
"decort_rg_affinity_groups_list": rg.DataSourceRgAffinityGroupsList(),
|
"decort_vins_static_route": vins.DataSourceStaticRoute(),
|
||||||
"decort_rg_affinity_groups_get": rg.DataSourceRgAffinityGroupsGet(),
|
"decort_snapshot_list": snapshot.DataSourceSnapshotList(),
|
||||||
"decort_rg_audits": rg.DataSourceRgAudits(),
|
"decort_disk": disks.DataSourceDisk(),
|
||||||
"decort_rg_list_computes": rg.DataSourceRgListComputes(),
|
"decort_disk_list": disks.DataSourceDiskList(),
|
||||||
"decort_rg_list_deleted": rg.DataSourceRgListDeleted(),
|
"decort_rg_list": rg.DataSourceRgList(),
|
||||||
"decort_rg_list_lb": rg.DataSourceRgListLb(),
|
"decort_rg_affinity_group_computes": rg.DataSourceRgAffinityGroupComputes(),
|
||||||
"decort_rg_list_pfw": rg.DataSourceRgListPfw(),
|
"decort_rg_affinity_groups_list": rg.DataSourceRgAffinityGroupsList(),
|
||||||
"decort_rg_list_vins": rg.DataSourceRgListVins(),
|
"decort_rg_affinity_groups_get": rg.DataSourceRgAffinityGroupsGet(),
|
||||||
"decort_rg_usage": rg.DataSourceRgUsage(),
|
"decort_rg_audits": rg.DataSourceRgAudits(),
|
||||||
"decort_disk_list_types_detailed": disks.DataSourceDiskListTypesDetailed(),
|
"decort_rg_list_computes": rg.DataSourceRgListComputes(),
|
||||||
"decort_disk_list_types": disks.DataSourceDiskListTypes(),
|
"decort_rg_list_deleted": rg.DataSourceRgListDeleted(),
|
||||||
"decort_disk_list_deleted": disks.DataSourceDiskListDeleted(),
|
"decort_rg_list_lb": rg.DataSourceRgListLb(),
|
||||||
"decort_disk_list_unattached": disks.DataSourceDiskListUnattached(),
|
"decort_rg_list_pfw": rg.DataSourceRgListPfw(),
|
||||||
"decort_disk_snapshot": disks.DataSourceDiskSnapshot(),
|
"decort_rg_list_vins": rg.DataSourceRgListVins(),
|
||||||
"decort_disk_snapshot_list": disks.DataSourceDiskSnapshotList(),
|
"decort_rg_resource_consumption_list": rg.DataSourceRGResourceConsumptionList(),
|
||||||
"decort_account_list": account.DataSourceAccountList(),
|
"decort_rg_resource_consumption_get": rg.DataSourceRGResourceConsumptionGet(),
|
||||||
"decort_account_computes_list": account.DataSourceAccountComputesList(),
|
"decort_rg_usage": rg.DataSourceRgUsage(),
|
||||||
"decort_account_disks_list": account.DataSourceAccountDisksList(),
|
"decort_disk_list_types_detailed": disks.DataSourceDiskListTypesDetailed(),
|
||||||
"decort_account_vins_list": account.DataSourceAccountVinsList(),
|
"decort_disk_list_types": disks.DataSourceDiskListTypes(),
|
||||||
"decort_account_audits_list": account.DataSourceAccountAuditsList(),
|
"decort_disk_list_deleted": disks.DataSourceDiskListDeleted(),
|
||||||
"decort_account_rg_list": account.DataSourceAccountRGList(),
|
"decort_disk_list_unattached": disks.DataSourceDiskListUnattached(),
|
||||||
"decort_account_consumed_units": account.DataSourceAccountConsumedUnits(),
|
"decort_disk_snapshot": disks.DataSourceDiskSnapshot(),
|
||||||
"decort_account_consumed_units_by_type": account.DataSourceAccountConsumedUnitsByType(),
|
"decort_disk_snapshot_list": disks.DataSourceDiskSnapshotList(),
|
||||||
"decort_account_reserved_units": account.DataSourceAccountReservedUnits(),
|
"decort_account_list": account.DataSourceAccountList(),
|
||||||
"decort_account_templates_list": account.DataSourceAccountTemplatessList(),
|
"decort_account_computes_list": account.DataSourceAccountComputesList(),
|
||||||
"decort_account_deleted_list": account.DataSourceAccountDeletedList(),
|
"decort_account_disks_list": account.DataSourceAccountDisksList(),
|
||||||
"decort_account_flipgroups_list": account.DataSourceAccountFlipGroupsList(),
|
"decort_account_vins_list": account.DataSourceAccountVinsList(),
|
||||||
"decort_bservice_list": bservice.DataSourceBasicServiceList(),
|
"decort_account_audits_list": account.DataSourceAccountAuditsList(),
|
||||||
"decort_bservice": bservice.DataSourceBasicService(),
|
"decort_account_rg_list": account.DataSourceAccountRGList(),
|
||||||
"decort_bservice_snapshot_list": bservice.DataSourceBasicServiceSnapshotList(),
|
"decort_account_consumed_units": account.DataSourceAccountConsumedUnits(),
|
||||||
"decort_bservice_group": bservice.DataSourceBasicServiceGroup(),
|
"decort_account_consumed_units_by_type": account.DataSourceAccountConsumedUnitsByType(),
|
||||||
"decort_bservice_deleted_list": bservice.DataSourceBasicServiceDeletedList(),
|
"decort_account_reserved_units": account.DataSourceAccountReservedUnits(),
|
||||||
"decort_extnet_list": extnet.DataSourceExtnetList(),
|
"decort_account_templates_list": account.DataSourceAccountTemplatessList(),
|
||||||
"decort_extnet_computes_list": extnet.DataSourceExtnetComputesList(),
|
"decort_account_deleted_list": account.DataSourceAccountDeletedList(),
|
||||||
"decort_extnet": extnet.DataSourceExtnet(),
|
"decort_account_flipgroups_list": account.DataSourceAccountFlipGroupsList(),
|
||||||
"decort_extnet_default": extnet.DataSourceExtnetDefault(),
|
"decort_bservice_list": bservice.DataSourceBasicServiceList(),
|
||||||
"decort_locations_list": locations.DataSourceLocationsList(),
|
"decort_bservice": bservice.DataSourceBasicService(),
|
||||||
"decort_location_url": locations.DataSourceLocationUrl(),
|
"decort_bservice_snapshot_list": bservice.DataSourceBasicServiceSnapshotList(),
|
||||||
"decort_image_list": image.DataSourceImageList(),
|
"decort_bservice_group": bservice.DataSourceBasicServiceGroup(),
|
||||||
"decort_image": image.DataSourceImage(),
|
"decort_bservice_deleted_list": bservice.DataSourceBasicServiceDeletedList(),
|
||||||
"decort_lb": lb.DataSourceLB(),
|
"decort_extnet_list": extnet.DataSourceExtnetList(),
|
||||||
"decort_lb_list": lb.DataSourceLBList(),
|
"decort_extnet_computes_list": extnet.DataSourceExtnetComputesList(),
|
||||||
"decort_lb_list_deleted": lb.DataSourceLBListDeleted(),
|
"decort_extnet": extnet.DataSourceExtnet(),
|
||||||
"decort_flipgroup": flipgroup.DataSourceFlipgroup(),
|
"decort_extnet_default": extnet.DataSourceExtnetDefault(),
|
||||||
"decort_flipgroup_list": flipgroup.DataSourceFlipGroupList(),
|
"decort_locations_list": locations.DataSourceLocationsList(),
|
||||||
"decort_stack": stack.DataSourceStack(),
|
"decort_location_url": locations.DataSourceLocationUrl(),
|
||||||
"decort_stack_list": stack.DataSourceStackList(),
|
"decort_image_list": image.DataSourceImageList(),
|
||||||
|
"decort_image": image.DataSourceImage(),
|
||||||
|
"decort_lb": lb.DataSourceLB(),
|
||||||
|
"decort_lb_list": lb.DataSourceLBList(),
|
||||||
|
"decort_lb_list_deleted": lb.DataSourceLBListDeleted(),
|
||||||
|
"decort_flipgroup": flipgroup.DataSourceFlipgroup(),
|
||||||
|
"decort_flipgroup_list": flipgroup.DataSourceFlipGroupList(),
|
||||||
|
"decort_stack": stack.DataSourceStack(),
|
||||||
|
"decort_stack_list": stack.DataSourceStackList(),
|
||||||
|
|
||||||
"decort_cb_account": cb_account.DataSourceAccount(),
|
"decort_cb_account": cb_account.DataSourceAccount(),
|
||||||
"decort_cb_account_list": cb_account.DataSourceAccountList(),
|
"decort_cb_account_list": cb_account.DataSourceAccountList(),
|
||||||
|
|||||||
@@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
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 account
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceAccountResourceConsumptionGetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
accountResourceConsumptionRec, err := utilityAccountResourceConsumptionGetCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
flattenResourceConsumption(d, accountResourceConsumptionRec)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceAccountResourceConsumptionGetSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
"consumed": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceAccResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"reserved": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceAccResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"resource_limits": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceResourceLimitsSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceResourceLimitsSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"cu_c": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_d": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_dm": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_i": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_m": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_np": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gpu_units": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceAccountResourceConsumptionGet() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceAccountResourceConsumptionGetRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceAccountResourceConsumptionGetSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
/*
|
||||||
|
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 account
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceAccountResourceConsumptionListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
accountResourceConsumptionList, err := utilityAccountResourceConsumptionListCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccResourceConsumption(accountResourceConsumptionList))
|
||||||
|
d.Set("entry_count", accountResourceConsumptionList.EntryCount)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceAccountResourceConsumptionListSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"items": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"consumed": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceAccResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"reserved": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceAccResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceSepsSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"sep_id": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"data_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size_max": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceAccResourceSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"cpu": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size_max": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ext_ips": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ext_traffic": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gpu": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ram": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"seps": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceSepsSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceAccountResourceConsumptionList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceAccountResourceConsumptionListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceAccountResourceConsumptionListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -43,7 +43,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountTemplatesList(atl *account.ListTemplates) []map[string]interface{} {
|
func flattenAccountTemplatesList(atl *account.ListTemplates) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(atl.Data))
|
||||||
for _, at := range atl.Data {
|
for _, at := range atl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"unc_path": at.UNCPath,
|
"unc_path": at.UNCPath,
|
||||||
@@ -72,7 +72,7 @@ func dataSourceAccountTemplatesListRead(ctx context.Context, d *schema.ResourceD
|
|||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenAccountTemplatesList(accountTemplatesList))
|
d.Set("items", flattenAccountTemplatesList(accountTemplatesList))
|
||||||
|
d.Set("entry_count", accountTemplatesList.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,6 +87,31 @@ func dataSourceAccountTemplatesListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
},
|
},
|
||||||
|
"image_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by image id",
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by name",
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by type",
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"items": {
|
"items": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -136,6 +161,10 @@ func dataSourceAccountTemplatesListSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ func flattenAccount(d *schema.ResourceData, acc account.RecordAccount) error {
|
|||||||
d.Set("guid", acc.GUID)
|
d.Set("guid", acc.GUID)
|
||||||
d.Set("account_id", acc.ID)
|
d.Set("account_id", acc.ID)
|
||||||
d.Set("account_name", acc.Name)
|
d.Set("account_name", acc.Name)
|
||||||
d.Set("resource_limits", flattenRgResourceLimits(acc.ResourceLimits))
|
d.Set("resource_limits", flattenAccResourceLimits(acc.ResourceLimits))
|
||||||
d.Set("send_access_emails", acc.SendAccessEmails)
|
d.Set("send_access_emails", acc.SendAccessEmails)
|
||||||
d.Set("status", acc.Status)
|
d.Set("status", acc.Status)
|
||||||
d.Set("updated_time", acc.UpdatedTime)
|
d.Set("updated_time", acc.UpdatedTime)
|
||||||
@@ -79,11 +79,19 @@ func flattenAccAcl(acls []account.RecordACL) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgResourceLimits(rl account.ResourceLimits) []map[string]interface{} {
|
func flattenResourceConsumption(d *schema.ResourceData, acc *account.RecordResourceConsumption) {
|
||||||
|
d.Set("account_id", acc.AccountID)
|
||||||
|
d.Set("consumed", flattenAccResource(acc.Consumed))
|
||||||
|
d.Set("reserved", flattenAccResource(acc.Reserved))
|
||||||
|
d.Set("resource_limits", flattenAccResourceLimits(acc.ResourceLimits))
|
||||||
|
}
|
||||||
|
|
||||||
|
func flattenAccResourceLimits(rl account.ResourceLimits) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cu_c": rl.CUC,
|
"cu_c": rl.CUC,
|
||||||
"cu_d": rl.CUD,
|
"cu_d": rl.CUD,
|
||||||
|
"cu_dm": rl.CUDM,
|
||||||
"cu_i": rl.CUI,
|
"cu_i": rl.CUI,
|
||||||
"cu_m": rl.CUM,
|
"cu_m": rl.CUM,
|
||||||
"cu_np": rl.CUNP,
|
"cu_np": rl.CUNP,
|
||||||
@@ -124,14 +132,28 @@ func flattenAccountSeps(seps map[string]map[string]account.DiskUsage) []map[stri
|
|||||||
func flattenAccResource(r account.Resource) []map[string]interface{} {
|
func flattenAccResource(r account.Resource) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cpu": r.CPU,
|
"cpu": r.CPU,
|
||||||
"disksize": r.DiskSize,
|
"disk_size": r.DiskSize,
|
||||||
"extips": r.ExtIPs,
|
"disk_size_max": r.DiskSizeMax,
|
||||||
"exttraffic": r.ExtTraffic,
|
"ext_ips": r.ExtIPs,
|
||||||
"gpu": r.GPU,
|
"ext_traffic": r.ExtTraffic,
|
||||||
"ram": r.RAM,
|
"gpu": r.GPU,
|
||||||
"seps": flattenAccountSeps(r.SEPs),
|
"ram": r.RAM,
|
||||||
|
"seps": flattenAccountSeps(r.SEPs),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func flattenAccResourceConsumption(lrc *account.ListResourceConsumption) []map[string]interface{} {
|
||||||
|
res := make([]map[string]interface{}, 0, len(lrc.Data))
|
||||||
|
for _, rc := range lrc.Data {
|
||||||
|
temp := map[string]interface{}{
|
||||||
|
"consumed": flattenAccResource(rc.Consumed),
|
||||||
|
"reserved": flattenAccResource(rc.Reserved),
|
||||||
|
"account_id": rc.AccountID,
|
||||||
|
}
|
||||||
|
res = append(res, temp)
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
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 account
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
func utilityAccountResourceConsumptionGetCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.RecordResourceConsumption, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
|
id := uint64(d.Get("account_id").(int))
|
||||||
|
|
||||||
|
req:= account.GetResourceConsumptionRequest {
|
||||||
|
AccountID: id,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debugf("utilityAccountResourceConsumptionGetCheckPresence: load")
|
||||||
|
accountResourceConsumptionRec, err := c.CloudAPI().Account().GetResourceConsumption(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return accountResourceConsumptionRec, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
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 account
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
func utilityAccountResourceConsumptionListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListResourceConsumption, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
|
log.Debugf("utilityAccountResourceConsumptionListCheckPresence: load")
|
||||||
|
accountResourceConsumptionList, err := c.CloudAPI().Account().ListResourceConsumption(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return accountResourceConsumptionList, nil
|
||||||
|
}
|
||||||
@@ -44,9 +44,8 @@ import (
|
|||||||
|
|
||||||
func utilityAccountTemplatesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListTemplates, error) {
|
func utilityAccountTemplatesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListTemplates, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
|
||||||
|
|
||||||
id = uint64(d.Get("account_id").(int))
|
id := uint64(d.Get("account_id").(int))
|
||||||
|
|
||||||
req := account.ListTemplatesRequest{
|
req := account.ListTemplatesRequest{
|
||||||
AccountID: id,
|
AccountID: id,
|
||||||
@@ -55,6 +54,21 @@ func utilityAccountTemplatesListCheckPresence(ctx context.Context, d *schema.Res
|
|||||||
if include_deleted, ok := d.GetOk("include_deleted"); ok {
|
if include_deleted, ok := d.GetOk("include_deleted"); ok {
|
||||||
req.IncludeDeleted = include_deleted.(bool)
|
req.IncludeDeleted = include_deleted.(bool)
|
||||||
}
|
}
|
||||||
|
if imageId, ok := d.GetOk("image_id"); ok {
|
||||||
|
req.ImageID = uint64(imageId.(int))
|
||||||
|
}
|
||||||
|
if name, ok := d.GetOk("name"); ok {
|
||||||
|
req.Name = name.(string)
|
||||||
|
}
|
||||||
|
if typeTemplates, ok := d.GetOk("type"); ok {
|
||||||
|
req.Type = typeTemplates.(string)
|
||||||
|
}
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityAccountTemplatesListCheckPresence: load")
|
log.Debugf("utilityAccountTemplatesListCheckPresence: load")
|
||||||
accountTemplatesList, err := c.CloudAPI().Account().ListTemplates(ctx, req)
|
accountTemplatesList, err := c.CloudAPI().Account().ListTemplates(ctx, req)
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ func dataSourceBasicServiceSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"disk_total": {
|
"disk_total": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"gid": {
|
"gid": {
|
||||||
@@ -185,13 +185,13 @@ func dataSourceBasicServiceSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"groups_name": {
|
// "groups_name": {
|
||||||
Type: schema.TypeList,
|
// Type: schema.TypeList,
|
||||||
Computed: true,
|
// Computed: true,
|
||||||
Elem: &schema.Schema{
|
// Elem: &schema.Schema{
|
||||||
Type: schema.TypeString,
|
// Type: schema.TypeString,
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
"guid": {
|
"guid": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -93,6 +93,16 @@ func resourceBasicServiceCreate(ctx context.Context, d *schema.ResourceData, m i
|
|||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if d.Get("start").(bool) && d.Get("enable").(bool) {
|
||||||
|
log.Debugf("trying to start bservice %v", serviceId)
|
||||||
|
_, err := c.CloudAPI().BService().Enable(ctx, bservice.EnableRequest{
|
||||||
|
ServiceID: serviceId,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return resourceBasicServiceRead(ctx, d, m)
|
return resourceBasicServiceRead(ctx, d, m)
|
||||||
}
|
}
|
||||||
@@ -552,7 +562,7 @@ func resourceBasicServiceSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"disk_total": {
|
"disk_total": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"gid": {
|
"gid": {
|
||||||
|
|||||||
@@ -107,6 +107,20 @@ func resourceBasicServiceGroupCreate(ctx context.Context, d *schema.ResourceData
|
|||||||
d.SetId(strconv.FormatUint(compgroupId, 10))
|
d.SetId(strconv.FormatUint(compgroupId, 10))
|
||||||
d.Set("compgroup_id", compgroupId)
|
d.Set("compgroup_id", compgroupId)
|
||||||
|
|
||||||
|
serviceId:= uint64(d.Get("service_id").(int))
|
||||||
|
|
||||||
|
if d.Get("start").(bool) {
|
||||||
|
log.Debugf("trying to start bservice group %v", compgroupId)
|
||||||
|
_, err := c.CloudAPI().BService().GroupStart(ctx, bservice.GroupStartRequest{
|
||||||
|
ServiceID: serviceId,
|
||||||
|
CompGroupID: compgroupId,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return resourceBasicServiceGroupRead(ctx, d, m)
|
return resourceBasicServiceGroupRead(ctx, d, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,6 +97,16 @@ func dataSourceDiskListSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Description: "type of the disks",
|
Description: "type of the disks",
|
||||||
},
|
},
|
||||||
|
"sep_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "find by sep ID",
|
||||||
|
},
|
||||||
|
"pool_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "find by pool name",
|
||||||
|
},
|
||||||
"page": {
|
"page": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
|||||||
@@ -49,12 +49,23 @@ func dataSourceDiskListTypesRead(ctx context.Context, d *schema.ResourceData, m
|
|||||||
|
|
||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("types", listTypes)
|
d.Set("types", listTypes.Data)
|
||||||
|
d.Set("entry_count", listTypes.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceDiskListTypesSchemaMake() map[string]*schema.Schema {
|
func dataSourceDiskListTypesSchemaMake() map[string]*schema.Schema {
|
||||||
res := map[string]*schema.Schema{
|
res := map[string]*schema.Schema{
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"types": {
|
"types": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -63,6 +74,10 @@ func dataSourceDiskListTypesSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
Description: "The types of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
|
Description: "The types of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ func flattenDiskListTypesDetailed(tld *disks.ListTypes) []map[string]interface{}
|
|||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"pools": flattenListTypesDetailedPools(toMap["pools"].([]interface{})),
|
"pools": flattenListTypesDetailedPools(toMap["pools"].([]interface{})),
|
||||||
"sep_id": toMap["sepId"].(float64),
|
"sep_id": toMap["sepId"].(float64),
|
||||||
|
"sep_name": toMap["sepName"].(string),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
@@ -61,6 +62,7 @@ func flattenListTypesDetailedPools(pools []interface{}) []interface{} {
|
|||||||
toMap := pool.(map[string]interface{})
|
toMap := pool.(map[string]interface{})
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"name": toMap["name"].(string),
|
"name": toMap["name"].(string),
|
||||||
|
"system": toMap["system"].(string),
|
||||||
"types": toMap["types"].([]interface{}),
|
"types": toMap["types"].([]interface{}),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
@@ -78,11 +80,22 @@ func dataSourceDiskListTypesDetailedRead(ctx context.Context, d *schema.Resource
|
|||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenDiskListTypesDetailed(listTypesDetailed))
|
d.Set("items", flattenDiskListTypesDetailed(listTypesDetailed))
|
||||||
|
d.Set("entry_count", listTypesDetailed.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
||||||
res := map[string]*schema.Schema{
|
res := map[string]*schema.Schema{
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"items": {
|
"items": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -98,6 +111,10 @@ func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Pool name",
|
Description: "Pool name",
|
||||||
},
|
},
|
||||||
|
"system": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
"types": {
|
"types": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -114,9 +131,17 @@ func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Storage endpoint provider ID to create disk",
|
Description: "Storage endpoint provider ID to create disk",
|
||||||
},
|
},
|
||||||
|
"sep_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,6 +97,16 @@ func dataSourceDiskListUnattachedSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Description: "ID of the account the disks belong to",
|
Description: "ID of the account the disks belong to",
|
||||||
},
|
},
|
||||||
|
"sep_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "find by sep ID",
|
||||||
|
},
|
||||||
|
"pool_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "find by pool name",
|
||||||
|
},
|
||||||
"type": {
|
"type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ func flattenDiskSnapshot(d *schema.ResourceData, snapshot disks.ItemSnapshot) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenDiskListUnattached(ul *disks.ListDisksUnattached) []map[string]interface{} {
|
func flattenDiskListUnattached(ul *disks.ListDisksUnattached) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ul.Data))
|
||||||
for _, unattachedDisk := range ul.Data {
|
for _, unattachedDisk := range ul.Data {
|
||||||
unattachedDiskAcl, _ := json.Marshal(unattachedDisk.ACL)
|
unattachedDiskAcl, _ := json.Marshal(unattachedDisk.ACL)
|
||||||
tmp := map[string]interface{}{
|
tmp := map[string]interface{}{
|
||||||
@@ -120,7 +120,7 @@ func flattenDisk(d *schema.ResourceData, disk *disks.RecordDisk) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenDiskSnapshotList(sl disks.ListSnapshots) []interface{} {
|
func flattenDiskSnapshotList(sl disks.ListSnapshots) []interface{} {
|
||||||
res := make([]interface{}, 0)
|
res := make([]interface{}, 0, len(sl))
|
||||||
for _, snapshot := range sl {
|
for _, snapshot := range sl {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": snapshot.GUID,
|
"guid": snapshot.GUID,
|
||||||
@@ -137,7 +137,7 @@ func flattenDiskSnapshotList(sl disks.ListSnapshots) []interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenDiskList(dl *disks.ListDisks) []map[string]interface{} {
|
func flattenDiskList(dl *disks.ListDisks) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(dl.Data))
|
||||||
for _, disk := range dl.Data {
|
for _, disk := range dl.Data {
|
||||||
diskAcl, _ := json.Marshal(disk.ACL)
|
diskAcl, _ := json.Marshal(disk.ACL)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
|
|||||||
@@ -47,18 +47,6 @@ func utilityDiskListCheckPresence(ctx context.Context, d *schema.ResourceData, m
|
|||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := disks.ListRequest{}
|
req := disks.ListRequest{}
|
||||||
|
|
||||||
if page, ok := d.GetOk("page"); ok {
|
|
||||||
req.Page = uint64(page.(int))
|
|
||||||
}
|
|
||||||
if size, ok := d.GetOk("size"); ok {
|
|
||||||
req.Size = uint64(size.(int))
|
|
||||||
}
|
|
||||||
if diskType, ok := d.GetOk("type"); ok {
|
|
||||||
req.Type = strings.ToUpper(diskType.(string))
|
|
||||||
}
|
|
||||||
if accountId, ok := d.GetOk("accountId"); ok {
|
|
||||||
req.AccountID = uint64(accountId.(int))
|
|
||||||
}
|
|
||||||
if by_id, ok := d.GetOk("by_id"); ok {
|
if by_id, ok := d.GetOk("by_id"); ok {
|
||||||
req.ByID = uint64(by_id.(int))
|
req.ByID = uint64(by_id.(int))
|
||||||
}
|
}
|
||||||
@@ -77,6 +65,24 @@ func utilityDiskListCheckPresence(ctx context.Context, d *schema.ResourceData, m
|
|||||||
if shared, ok := d.GetOk("shared"); ok {
|
if shared, ok := d.GetOk("shared"); ok {
|
||||||
req.Shared = shared.(bool)
|
req.Shared = shared.(bool)
|
||||||
}
|
}
|
||||||
|
if accountId, ok := d.GetOk("account_id"); ok {
|
||||||
|
req.AccountID = uint64(accountId.(int))
|
||||||
|
}
|
||||||
|
if diskType, ok := d.GetOk("type"); ok {
|
||||||
|
req.Type = strings.ToUpper(diskType.(string))
|
||||||
|
}
|
||||||
|
if sepId, ok := d.GetOk("sep_id"); ok {
|
||||||
|
req.AccountID = uint64(sepId.(int))
|
||||||
|
}
|
||||||
|
if pool_name, ok := d.GetOk("pool_name"); ok {
|
||||||
|
req.Pool = pool_name.(string)
|
||||||
|
}
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityDiskListCheckPresence: load disk list")
|
log.Debugf("utilityDiskListCheckPresence: load disk list")
|
||||||
diskList, err := c.CloudAPI().Disks().List(ctx, req)
|
diskList, err := c.CloudAPI().Disks().List(ctx, req)
|
||||||
|
|||||||
@@ -13,15 +13,6 @@ func utilityDiskListUnattachedCheckPresence(ctx context.Context, d *schema.Resou
|
|||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := disks.ListUnattachedRequest{}
|
req := disks.ListUnattachedRequest{}
|
||||||
|
|
||||||
if page, ok := d.GetOk("page"); ok {
|
|
||||||
req.Page = uint64(page.(int))
|
|
||||||
}
|
|
||||||
if size, ok := d.GetOk("size"); ok {
|
|
||||||
req.Size = uint64(size.(int))
|
|
||||||
}
|
|
||||||
if accountId, ok := d.GetOk("accountId"); ok {
|
|
||||||
req.AccountID = uint64(accountId.(int))
|
|
||||||
}
|
|
||||||
if by_id, ok := d.GetOk("by_id"); ok {
|
if by_id, ok := d.GetOk("by_id"); ok {
|
||||||
req.ByID = uint64(by_id.(int))
|
req.ByID = uint64(by_id.(int))
|
||||||
}
|
}
|
||||||
@@ -34,6 +25,24 @@ func utilityDiskListUnattachedCheckPresence(ctx context.Context, d *schema.Resou
|
|||||||
if status, ok := d.GetOk("status"); ok {
|
if status, ok := d.GetOk("status"); ok {
|
||||||
req.Status = status.(string)
|
req.Status = status.(string)
|
||||||
}
|
}
|
||||||
|
if diskType, ok := d.GetOk("type"); ok {
|
||||||
|
req.Type = diskType.(string)
|
||||||
|
}
|
||||||
|
if accountId, ok := d.GetOk("account_id"); ok {
|
||||||
|
req.AccountID = uint64(accountId.(int))
|
||||||
|
}
|
||||||
|
if sepId, ok := d.GetOk("sep_id"); ok {
|
||||||
|
req.AccountID = uint64(sepId.(int))
|
||||||
|
}
|
||||||
|
if pool_name, ok := d.GetOk("pool_name"); ok {
|
||||||
|
req.Pool = pool_name.(string)
|
||||||
|
}
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityDiskListUnattachedCheckPresence: load disk Unattached list")
|
log.Debugf("utilityDiskListUnattachedCheckPresence: load disk Unattached list")
|
||||||
unattachedList, err := c.CloudAPI().Disks().ListUnattached(ctx, req)
|
unattachedList, err := c.CloudAPI().Disks().ListUnattached(ctx, req)
|
||||||
|
|||||||
@@ -46,6 +46,13 @@ func utilityDiskListTypesDetailedCheckPresence(ctx context.Context, d *schema.Re
|
|||||||
req := disks.ListTypesRequest{
|
req := disks.ListTypesRequest{
|
||||||
Detailed: true,
|
Detailed: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityDiskListTypesDetailedCheckPresence: load disk list Types Detailed")
|
log.Debugf("utilityDiskListTypesDetailedCheckPresence: load disk list Types Detailed")
|
||||||
listTypesDetailed, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
listTypesDetailed, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
||||||
|
|||||||
@@ -47,6 +47,13 @@ func utilityDiskListTypesCheckPresence(ctx context.Context, d *schema.ResourceDa
|
|||||||
Detailed: false,
|
Detailed: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityDiskListTypesCheckPresence: load disk list Types Detailed")
|
log.Debugf("utilityDiskListTypesCheckPresence: load disk list Types Detailed")
|
||||||
typesList, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
typesList, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ func dataSourceExtnetComputesListRead(ctx context.Context, d *schema.ResourceDat
|
|||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenExtnetComputesList(extnetComputesList))
|
d.Set("items", flattenExtnetComputesList(extnetComputesList))
|
||||||
|
d.Set("entry_count", extnetComputesList.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,6 +61,26 @@ func dataSourceExtnetComputesListSchemaMake() map[string]*schema.Schema {
|
|||||||
Required: true,
|
Required: true,
|
||||||
Description: "filter by account ID",
|
Description: "filter by account ID",
|
||||||
},
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by RG ID",
|
||||||
|
},
|
||||||
|
"compute_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by compute ID",
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"items": {
|
"items": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -117,6 +137,10 @@ func dataSourceExtnetComputesListSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ func flattenExtnet(d *schema.ResourceData, e *extnet.RecordExtNet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExcluded(ex []extnet.Excluded) []map[string]interface{} {
|
func flattenExcluded(ex []extnet.Excluded) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ex))
|
||||||
for _, item := range ex {
|
for _, item := range ex {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"client_type": item.ClientType,
|
"client_type": item.ClientType,
|
||||||
@@ -51,7 +51,7 @@ func flattenExcluded(ex []extnet.Excluded) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetReservations(ers extnet.ListReservations) []map[string]interface{} {
|
func flattenExtnetReservations(ers extnet.ListReservations) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ers))
|
||||||
for _, er := range ers {
|
for _, er := range ers {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"client_type": er.ClientType,
|
"client_type": er.ClientType,
|
||||||
@@ -92,7 +92,7 @@ func flattenExtnetVNFS(evnfs extnet.VNFs) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetsComputes(ecs extnet.ListExtNetExtends) []map[string]interface{} {
|
func flattenExtnetsComputes(ecs extnet.ListExtNetExtends) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len (ecs))
|
||||||
for _, ec := range ecs {
|
for _, ec := range ecs {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"net_id": ec.ID,
|
"net_id": ec.ID,
|
||||||
@@ -106,7 +106,7 @@ func flattenExtnetsComputes(ecs extnet.ListExtNetExtends) []map[string]interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetComputesList(ecl *extnet.ListExtNetComputes) []map[string]interface{} {
|
func flattenExtnetComputesList(ecl *extnet.ListExtNetComputes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ecl.Data))
|
||||||
for _, ec := range ecl.Data {
|
for _, ec := range ecl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": ec.AccountID,
|
"account_id": ec.AccountID,
|
||||||
@@ -123,7 +123,7 @@ func flattenExtnetComputesList(ecl *extnet.ListExtNetComputes) []map[string]inte
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetList(el *extnet.ListExtNets) []map[string]interface{} {
|
func flattenExtnetList(el *extnet.ListExtNets) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(el.Data))
|
||||||
for _, e := range el.Data {
|
for _, e := range el.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"net_id": e.ID,
|
"net_id": e.ID,
|
||||||
|
|||||||
@@ -48,6 +48,20 @@ func utilityExtnetComputesListCheckPresence(ctx context.Context, d *schema.Resou
|
|||||||
AccountID: uint64(d.Get("account_id").(int)),
|
AccountID: uint64(d.Get("account_id").(int)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if rg_id, ok := d.GetOk("rg_id"); ok {
|
||||||
|
req.RGID = uint64(rg_id.(int))
|
||||||
|
}
|
||||||
|
if compute_id, ok := d.GetOk("compute_id"); ok {
|
||||||
|
req.ComputeID = uint64(compute_id.(int))
|
||||||
|
}
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
log.Debugf("utilityExtnetComputesListCheckPresence")
|
log.Debugf("utilityExtnetComputesListCheckPresence")
|
||||||
extnetComputesList, err := c.CloudAPI().ExtNet().ListComputes(ctx, req)
|
extnetComputesList, err := c.CloudAPI().ExtNet().ListComputes(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ func resourceImageVirtualCreate(ctx context.Context, d *schema.ResourceData, m i
|
|||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := image.CreateVirtualRequest{
|
req := image.CreateVirtualRequest{
|
||||||
Name: d.Get("name").(string),
|
Name: d.Get("name").(string),
|
||||||
TargetID: uint64(d.Get("target_id").(int)),
|
TargetID: uint64(d.Get("link_to").(int)),
|
||||||
}
|
}
|
||||||
|
|
||||||
imageId, err := c.CloudAPI().Image().CreateVirtual(ctx, req)
|
imageId, err := c.CloudAPI().Image().CreateVirtual(ctx, req)
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ func dataSourceK8sListDeletedRead(ctx context.Context, d *schema.ResourceData, m
|
|||||||
func dataSourceK8sListDeletedSchemaMake() map[string]*schema.Schema {
|
func dataSourceK8sListDeletedSchemaMake() map[string]*schema.Schema {
|
||||||
k8sListDeleted := createK8sListSchema()
|
k8sListDeleted := createK8sListSchema()
|
||||||
delete(k8sListDeleted, "includedeleted")
|
delete(k8sListDeleted, "includedeleted")
|
||||||
|
delete(k8sListDeleted, "status")
|
||||||
return k8sListDeleted
|
return k8sListDeleted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 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 k8s
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceK8sWgCloudInitRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
log.Debugf("dataSourceK8sWgCloudInitRead: called with k8s id %d and wg id %d", d.Get("k8s_id").(int), d.Get("wg_id").(int))
|
||||||
|
|
||||||
|
metaData, err := utilityK8sWgCloudInitCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
d.Set("cloud_init", metaData)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceK8sWgCloudInitSchemaMake() map[string]*schema.Schema {
|
||||||
|
return map[string]*schema.Schema{
|
||||||
|
"k8s_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
Description: "Kubernetes cluster ID",
|
||||||
|
},
|
||||||
|
"wg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
Description: "ID of the workers compute group",
|
||||||
|
},
|
||||||
|
"cloud_init": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Worker group Cloud init",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceK8sWgCloudInit() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceK8sWgCloudInitRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceK8sWgCloudInitSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,7 +42,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func flattenK8CIItems(list *k8ci.ListK8CI) []map[string]interface{} {
|
func flattenK8CIItems(list *k8ci.ListK8CI) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(list.Data))
|
||||||
for _, item := range list.Data {
|
for _, item := range list.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"k8ci_id": item.ID,
|
"k8ci_id": item.ID,
|
||||||
@@ -72,7 +72,7 @@ func flattenK8sDataComputes(d *schema.ResourceData, cluster *k8s.RecordK8S) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenMasterComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
func flattenMasterComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(cluster.K8SGroups.Masters.DetailedInfo))
|
||||||
for _, comp := range cluster.K8SGroups.Masters.DetailedInfo {
|
for _, comp := range cluster.K8SGroups.Masters.DetailedInfo {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"id": comp.ID,
|
"id": comp.ID,
|
||||||
@@ -88,7 +88,7 @@ func flattenMasterComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWorkerComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
func flattenWorkerComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(cluster.K8SGroups.Workers))
|
||||||
for _, wg := range cluster.K8SGroups.Workers {
|
for _, wg := range cluster.K8SGroups.Workers {
|
||||||
for _, comp := range wg.DetailedInfo {
|
for _, comp := range wg.DetailedInfo {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
@@ -106,7 +106,7 @@ func flattenWorkerComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenAclList(aclList k8s.ListACL) []map[string]interface{} {
|
func flattenAclList(aclList k8s.ListACL) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len (aclList))
|
||||||
for _, acl := range aclList {
|
for _, acl := range aclList {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"explicit": acl.Explicit,
|
"explicit": acl.Explicit,
|
||||||
@@ -134,7 +134,7 @@ func flattenAcl(acl k8s.RecordACL) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface{} {
|
func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len (interfaces))
|
||||||
for _, interfaceCompute := range interfaces {
|
for _, interfaceCompute := range interfaces {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"def_gw": interfaceCompute.DefGW,
|
"def_gw": interfaceCompute.DefGW,
|
||||||
@@ -147,7 +147,7 @@ func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenDetailedInfo(detailedInfoList k8s.ListDetailedInfo, computes []compute.RecordCompute) []map[string]interface{} {
|
func flattenDetailedInfo(detailedInfoList k8s.ListDetailedInfo, computes []compute.RecordCompute) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len (detailedInfoList))
|
||||||
if computes != nil {
|
if computes != nil {
|
||||||
for i, detailedInfo := range detailedInfoList {
|
for i, detailedInfo := range detailedInfoList {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
@@ -193,7 +193,7 @@ func flattenMasterGroup(mastersGroup k8s.MasterGroup, masters []compute.RecordCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenK8sGroup(k8SGroupList k8s.ListK8SGroups, workers []compute.RecordCompute) []map[string]interface{} {
|
func flattenK8sGroup(k8SGroupList k8s.ListK8SGroups, workers []compute.RecordCompute) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(k8SGroupList))
|
||||||
for _, k8sGroup := range k8SGroupList {
|
for _, k8sGroup := range k8SGroupList {
|
||||||
labels := make([]string, 0)
|
labels := make([]string, 0)
|
||||||
for _, label := range k8sGroup.Labels {
|
for _, label := range k8sGroup.Labels {
|
||||||
@@ -267,7 +267,7 @@ func flattenServiceAccount(serviceAccount k8s.RecordServiceAccount) []map[string
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWorkersGroup(workersGroups k8s.ListK8SGroups) []map[string]interface{} {
|
func flattenWorkersGroup(workersGroups k8s.ListK8SGroups) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len (workersGroups))
|
||||||
for _, worker := range workersGroups {
|
for _, worker := range workersGroups {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"annotations": worker.Annotations,
|
"annotations": worker.Annotations,
|
||||||
@@ -288,7 +288,7 @@ func flattenWorkersGroup(workersGroups k8s.ListK8SGroups) []map[string]interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenK8sItems(k8sItems *k8s.ListK8SClusters) []map[string]interface{} {
|
func flattenK8sItems(k8sItems *k8s.ListK8SClusters) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len (k8sItems.Data))
|
||||||
for _, item := range k8sItems.Data {
|
for _, item := range k8sItems.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": item.AccountID,
|
"account_id": item.AccountID,
|
||||||
@@ -396,7 +396,7 @@ func flattenResourceK8s(d *schema.ResourceData, k8s k8s.RecordK8S, masters []com
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWg(d *schema.ResourceData, wg k8s.ItemK8SGroup, computes []compute.RecordCompute) {
|
func flattenWg(d *schema.ResourceData, wg k8s.ItemK8SGroup, computes []compute.RecordCompute) {
|
||||||
labels := make([]string, 0)
|
labels := make([]string, 0, len(wg.Labels))
|
||||||
for _, label := range wg.Labels {
|
for _, label := range wg.Labels {
|
||||||
if strings.HasPrefix(label, "workersGroupName") {
|
if strings.HasPrefix(label, "workersGroupName") {
|
||||||
continue
|
continue
|
||||||
@@ -418,7 +418,7 @@ func flattenWg(d *schema.ResourceData, wg k8s.ItemK8SGroup, computes []compute.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWgList(wgList k8s.ListK8SGroups, computesMap map[uint64][]compute.RecordCompute) []map[string]interface{} {
|
func flattenWgList(wgList k8s.ListK8SGroups, computesMap map[uint64][]compute.RecordCompute) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(wgList))
|
||||||
for _, wg := range wgList {
|
for _, wg := range wgList {
|
||||||
computes := computesMap[wg.ID]
|
computes := computesMap[wg.ID]
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
|
|||||||
@@ -92,6 +92,10 @@ func resourceK8sWgCreate(ctx context.Context, d *schema.ResourceData, m interfac
|
|||||||
req.WorkerDisk = uint64(d.Get("disk").(int))
|
req.WorkerDisk = uint64(d.Get("disk").(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cloudInit, ok := d.GetOk("cloud_init"); ok {
|
||||||
|
req.UserData = cloudInit.(string)
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := c.CloudAPI().K8S().WorkersGroupAdd(ctx, req)
|
resp, err := c.CloudAPI().K8S().WorkersGroupAdd(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -184,6 +188,19 @@ func resourceK8sWgUpdate(ctx context.Context, d *schema.ResourceData, m interfac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.HasChange("cloud_init") {
|
||||||
|
req := k8s.UpdateWorkerNodesMetaDataRequest{
|
||||||
|
K8SID: uint64(d.Get("k8s_id").(int)),
|
||||||
|
WorkersGroupID: wgId,
|
||||||
|
UserData: d.Get("cloud_init").(string),
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.CloudAPI().K8S().UpdateWorkerNodesMetaData(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,6 +303,11 @@ func resourceK8sWgSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
},
|
},
|
||||||
|
"cloud_init": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
DiffSuppressFunc: cloudInitDiffSupperss,
|
||||||
|
},
|
||||||
"wg_id": {
|
"wg_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -261,6 +261,19 @@ func utilityK8sListCheckPresence(ctx context.Context, d *schema.ResourceData, m
|
|||||||
req.TechStatus = tech_status.(string)
|
req.TechStatus = tech_status.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if includedeleted, ok := d.GetOk("includedeleted"); ok {
|
||||||
|
req.IncludeDeleted = includedeleted.(bool)
|
||||||
|
}
|
||||||
|
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
k8sList, err := c.CloudAPI().K8S().List(ctx, req)
|
k8sList, err := c.CloudAPI().K8S().List(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -297,14 +310,18 @@ func utilityK8sListDeletedCheckPresence(ctx context.Context, d *schema.ResourceD
|
|||||||
req.BasicServiceID = uint64(bservice_id.(int))
|
req.BasicServiceID = uint64(bservice_id.(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
if status, ok := d.GetOk("status"); ok {
|
|
||||||
req.Status = status.(string)
|
|
||||||
}
|
|
||||||
|
|
||||||
if tech_status, ok := d.GetOk("tech_status"); ok {
|
if tech_status, ok := d.GetOk("tech_status"); ok {
|
||||||
req.TechStatus = tech_status.(string)
|
req.TechStatus = tech_status.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
k8sList, err := c.CloudAPI().K8S().ListDeleted(ctx, req)
|
k8sList, err := c.CloudAPI().K8S().ListDeleted(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
@@ -137,3 +138,27 @@ func utilityK8sWgListCheckPresence(ctx context.Context, d *schema.ResourceData,
|
|||||||
|
|
||||||
return cluster.K8SGroups.Workers, nil
|
return cluster.K8SGroups.Workers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func utilityK8sWgCloudInitCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (string, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
req := k8s.GetWorkerNodesMetaDataRequest{
|
||||||
|
K8SID: uint64(d.Get("k8s_id").(int)),
|
||||||
|
WorkersGroupID: uint64(d.Get("wg_id").(int)),
|
||||||
|
}
|
||||||
|
|
||||||
|
cloudInit, err := c.CloudAPI().K8S().GetWorkerNodesMetaData(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return cloudInit, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func cloudInitDiffSupperss(key, oldVal, newVal string, d *schema.ResourceData) bool {
|
||||||
|
if newVal != "" && newVal != oldVal {
|
||||||
|
log.Debugf("networkSubresIPAddreDiffSupperss: key=%s, oldVal=%q, newVal=%q -> suppress=FALSE", key, oldVal, newVal)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
log.Debugf("networkSubresIPAddreDiffSupperss: key=%s, oldVal=%q, newVal=%q -> suppress=TRUE", key, oldVal, newVal)
|
||||||
|
return true // suppress difference
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,153 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 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 kvmvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceComputeListDeletedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
computeList, err := utilityDataComputeListDeletedCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
result := computeList
|
||||||
|
if d.Get("ignore_k8s").(bool) {
|
||||||
|
// matches automatically generated names like "s234-g2134-c1" etc
|
||||||
|
result = matchComputes(computeList)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenComputeList(result))
|
||||||
|
d.Set("entry_count", computeList.EntryCount)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceComputeListDeletedSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"by_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by ID",
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by name",
|
||||||
|
},
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by AccountID",
|
||||||
|
},
|
||||||
|
"rg_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by resgroup name",
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by RGID",
|
||||||
|
},
|
||||||
|
"tech_status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by tech status",
|
||||||
|
},
|
||||||
|
"ip_address": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by IP address",
|
||||||
|
},
|
||||||
|
"extnet_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by Extnet name",
|
||||||
|
},
|
||||||
|
"extnet_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by Extnet ID",
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
},
|
||||||
|
"ignore_k8s": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
Description: "If set to true, ignores any VMs associated with any k8s cluster",
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: itemComputeSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceComputeListDeleted() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceComputeListDeletedRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceComputeListDeletedSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 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 kvmvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceComputePCIDeviceListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
computePCIDeviceList, err := utilityComputePCIDeviceListCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenPCIDevice(computePCIDeviceList.Data))
|
||||||
|
d.Set("entry_count", computePCIDeviceList.EntryCount)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceComputePCIDeviceListSchemaMake() map[string]*schema.Schema {
|
||||||
|
return map[string]*schema.Schema{
|
||||||
|
"compute_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by RG id",
|
||||||
|
},
|
||||||
|
"device_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by device id",
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Find by name",
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Find by status",
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceComputePCIDeviceList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceComputePCIDeviceListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceComputePCIDeviceListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,6 +49,7 @@ func dataSourceComputePfwListRead(ctx context.Context, d *schema.ResourceData, m
|
|||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenPfwList(computePfwList))
|
d.Set("items", flattenPfwList(computePfwList))
|
||||||
|
d.Set("entry_count", computePfwList.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,6 +95,10 @@ func dataSourceComputePfwListSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
120
internal/service/cloudapi/kvmvm/data_source_compute_vgpu_list.go
Normal file
120
internal/service/cloudapi/kvmvm/data_source_compute_vgpu_list.go
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 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 kvmvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceComputeVGPUListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
computeVGPUList, err := utilityComputeVGPUListCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenVGPU(computeVGPUList.Data))
|
||||||
|
d.Set("entry_count", computeVGPUList.EntryCount)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceComputeVGPUListSchemaMake() map[string]*schema.Schema {
|
||||||
|
return map[string]*schema.Schema{
|
||||||
|
"compute_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
"gpu_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find by GPU id",
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Find by type",
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Find by status",
|
||||||
|
},
|
||||||
|
"includedeleted": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Include deleted computes. If using field 'status', then includedeleted will be ignored",
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceComputeVGPUList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceComputeVGPUListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceComputeVGPUListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
@@ -66,7 +66,7 @@ func flattenQOS(qos compute.QOS) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface{} {
|
func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(interfaces))
|
||||||
for _, interfaceItem := range interfaces {
|
for _, interfaceItem := range interfaces {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"conn_id": interfaceItem.ConnID,
|
"conn_id": interfaceItem.ConnID,
|
||||||
@@ -92,7 +92,7 @@ func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
func flattenSnapSets(snapSets compute.ListSnapSets) []map[string]interface{} {
|
func flattenSnapSets(snapSets compute.ListSnapSets) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(snapSets))
|
||||||
for _, snapSet := range snapSets {
|
for _, snapSet := range snapSets {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"disks": snapSet.Disks,
|
"disks": snapSet.Disks,
|
||||||
@@ -105,7 +105,7 @@ func flattenSnapSets(snapSets compute.ListSnapSets) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
func flattenTags(tags map[string]string) []map[string]interface{} {
|
func flattenTags(tags map[string]string) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(tags))
|
||||||
for key, val := range tags {
|
for key, val := range tags {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"key": key,
|
"key": key,
|
||||||
@@ -117,7 +117,7 @@ func flattenTags(tags map[string]string) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenListRules(listRules compute.ListRules) []map[string]interface{} {
|
func flattenListRules(listRules compute.ListRules) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(listRules))
|
||||||
for _, rule := range listRules {
|
for _, rule := range listRules {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": rule.GUID,
|
"guid": rule.GUID,
|
||||||
@@ -132,7 +132,7 @@ func flattenListRules(listRules compute.ListRules) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
func flattenListACL(listAcl compute.ListACL) []map[string]interface{} {
|
func flattenListACL(listAcl compute.ListACL) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(listAcl))
|
||||||
for _, acl := range listAcl {
|
for _, acl := range listAcl {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"explicit": acl.Explicit,
|
"explicit": acl.Explicit,
|
||||||
@@ -148,7 +148,7 @@ func flattenListACL(listAcl compute.ListACL) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenComputeList(computes *compute.ListComputes) []map[string]interface{} {
|
func flattenComputeList(computes *compute.ListComputes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(computes.Data))
|
||||||
for _, compute := range computes.Data {
|
for _, compute := range computes.Data {
|
||||||
customFields, _ := json.Marshal(compute.CustomFields)
|
customFields, _ := json.Marshal(compute.CustomFields)
|
||||||
devices, _ := json.Marshal(compute.Devices)
|
devices, _ := json.Marshal(compute.Devices)
|
||||||
@@ -398,7 +398,7 @@ func flattenACL(acl compute.RecordACL) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenAffinityRules(affinityRules compute.ListRules) []map[string]interface{} {
|
func flattenAffinityRules(affinityRules compute.ListRules) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(affinityRules))
|
||||||
for _, affinityRule := range affinityRules {
|
for _, affinityRule := range affinityRules {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": affinityRule.GUID,
|
"guid": affinityRule.GUID,
|
||||||
@@ -437,7 +437,7 @@ func flattenIotune(iotune compute.IOTune) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenSnapshots(snapshots compute.SnapshotExtendList) []map[string]interface{} {
|
func flattenSnapshots(snapshots compute.SnapshotExtendList) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(snapshots))
|
||||||
for _, snapshot := range snapshots {
|
for _, snapshot := range snapshots {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": snapshot.GUID,
|
"guid": snapshot.GUID,
|
||||||
@@ -455,7 +455,7 @@ func flattenSnapshots(snapshots compute.SnapshotExtendList) []map[string]interfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenListComputeDisks(disks compute.ListComputeDisks) []map[string]interface{} {
|
func flattenListComputeDisks(disks compute.ListComputeDisks) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(disks))
|
||||||
for _, disk := range disks {
|
for _, disk := range disks {
|
||||||
acl, _ := json.Marshal(disk.ACL)
|
acl, _ := json.Marshal(disk.ACL)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
@@ -511,7 +511,7 @@ func flattenCustomFields(customFields map[string]interface{}) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenOsUsers(osUsers compute.ListOSUser) []map[string]interface{} {
|
func flattenOsUsers(osUsers compute.ListOSUser) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(osUsers))
|
||||||
for _, user := range osUsers {
|
for _, user := range osUsers {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": user.GUID,
|
"guid": user.GUID,
|
||||||
@@ -590,7 +590,7 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenComputeAudits(computeAudits compute.ListAudits) []map[string]interface{} {
|
func flattenComputeAudits(computeAudits compute.ListAudits) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(computeAudits))
|
||||||
for _, computeAudit := range computeAudits {
|
for _, computeAudit := range computeAudits {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"call": computeAudit.Call,
|
"call": computeAudit.Call,
|
||||||
@@ -605,7 +605,7 @@ func flattenComputeAudits(computeAudits compute.ListAudits) []map[string]interfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenPfwList(computePfws *compute.ListPFWs) []map[string]interface{} {
|
func flattenPfwList(computePfws *compute.ListPFWs) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(computePfws.Data))
|
||||||
for _, computePfw := range computePfws.Data {
|
for _, computePfw := range computePfws.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"pfw_id": computePfw.ID,
|
"pfw_id": computePfw.ID,
|
||||||
@@ -628,7 +628,7 @@ func flattenUserList(d *schema.ResourceData, userList *compute.ListUsers) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenComputeGetAudits(computeAudits compute.ListShortAudits) []map[string]interface{} {
|
func flattenComputeGetAudits(computeAudits compute.ListShortAudits) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(computeAudits))
|
||||||
for _, computeAudit := range computeAudits {
|
for _, computeAudit := range computeAudits {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"epoch": computeAudit.Epoch,
|
"epoch": computeAudit.Epoch,
|
||||||
@@ -640,7 +640,7 @@ func flattenComputeGetAudits(computeAudits compute.ListShortAudits) []map[string
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenSnapshotUsage(computeSnapshotUsages compute.ListUsageSnapshots) []map[string]interface{} {
|
func flattenSnapshotUsage(computeSnapshotUsages compute.ListUsageSnapshots) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(computeSnapshotUsages))
|
||||||
for _, computeUsage := range computeSnapshotUsages {
|
for _, computeUsage := range computeSnapshotUsages {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"count": computeUsage.Count,
|
"count": computeUsage.Count,
|
||||||
@@ -652,3 +652,55 @@ func flattenSnapshotUsage(computeSnapshotUsages compute.ListUsageSnapshots) []ma
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func flattenSnapshotList(computeSnapshotUsages *compute.ListSnapShots) []map[string]interface{} {
|
||||||
|
res := make([]map[string]interface{}, 0, len(computeSnapshotUsages.Data))
|
||||||
|
for _, computeUsage := range computeSnapshotUsages.Data {
|
||||||
|
temp := map[string]interface{}{
|
||||||
|
"disks": computeUsage.Disks,
|
||||||
|
"guid": computeUsage.GUID,
|
||||||
|
"label": computeUsage.Label,
|
||||||
|
"timestamp": computeUsage.Timestamp,
|
||||||
|
}
|
||||||
|
res = append(res, temp)
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func flattenVGPU(m []interface{}) []string {
|
||||||
|
output := []string{}
|
||||||
|
for _, item := range m {
|
||||||
|
switch d := item.(type) {
|
||||||
|
case string:
|
||||||
|
output = append(output, d)
|
||||||
|
case int:
|
||||||
|
output = append(output, strconv.Itoa(d))
|
||||||
|
case int64:
|
||||||
|
output = append(output, strconv.FormatInt(d, 10))
|
||||||
|
case float64:
|
||||||
|
output = append(output, strconv.FormatInt(int64(d), 10))
|
||||||
|
default:
|
||||||
|
output = append(output, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
|
func flattenPCIDevice(m []interface{}) []string {
|
||||||
|
output := []string{}
|
||||||
|
for _, item := range m {
|
||||||
|
switch d := item.(type) {
|
||||||
|
case string:
|
||||||
|
output = append(output, d)
|
||||||
|
case int:
|
||||||
|
output = append(output, strconv.Itoa(d))
|
||||||
|
case int64:
|
||||||
|
output = append(output, strconv.FormatInt(d, 10))
|
||||||
|
case float64:
|
||||||
|
output = append(output, strconv.FormatInt(int64(d), 10))
|
||||||
|
default:
|
||||||
|
output = append(output, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output
|
||||||
|
}
|
||||||
@@ -63,14 +63,16 @@ func existRgID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool
|
|||||||
func existImageId(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
func existImageId(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
imageId := uint64(d.Get("image_id").(int))
|
imageId := uint64(d.Get("image_id").(int))
|
||||||
req := image.ListRequest{}
|
req := image.ListRequest{
|
||||||
|
ByID: imageId,
|
||||||
|
}
|
||||||
|
|
||||||
imageList, err := c.CloudAPI().Image().List(ctx, req)
|
imageList, err := c.CloudAPI().Image().List(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return len(imageList.FilterByID(imageId).Data) != 0, nil
|
return len(imageList.Data) != 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func existVinsIdInList(vinsId uint64, vinsList *vins.ListVINS) bool {
|
func existVinsIdInList(vinsId uint64, vinsList *vins.ListVINS) bool {
|
||||||
|
|||||||
@@ -129,9 +129,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
createReqX86.IS = IS.(string)
|
createReqX86.IS = IS.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !d.Get("with_default_vins").(bool) {
|
createReqX86.Interfaces = make([]kvmx86.Interface, 0)
|
||||||
createReqX86.Interfaces = make([]kvmx86.Interface, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
if networks, ok := d.GetOk("network"); ok {
|
if networks, ok := d.GetOk("network"); ok {
|
||||||
if networks.(*schema.Set).Len() > 0 {
|
if networks.(*schema.Set).Len() > 0 {
|
||||||
@@ -1748,12 +1746,6 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Default: false,
|
Default: false,
|
||||||
Description: "Compute will be stateless (SVA_KVM_X86) if set to True",
|
Description: "Compute will be stateless (SVA_KVM_X86) if set to True",
|
||||||
},
|
},
|
||||||
"with_default_vins": {
|
|
||||||
Type: schema.TypeBool,
|
|
||||||
Optional: true,
|
|
||||||
Default: true,
|
|
||||||
Description: "Create compute with default resgroup ViNS (true) or without any interfaces (false). This parameter is ignored if network block is specified",
|
|
||||||
},
|
|
||||||
"boot_disk": {
|
"boot_disk": {
|
||||||
Type: schema.TypeSet,
|
Type: schema.TypeSet,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 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 kvmvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
|
)
|
||||||
|
|
||||||
|
func utilityDataComputeListDeletedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*compute.ListComputes, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
req := compute.ListDeletedRequest{}
|
||||||
|
|
||||||
|
if byId, ok := d.GetOk("by_id"); ok {
|
||||||
|
req.ByID = uint64(byId.(int))
|
||||||
|
}
|
||||||
|
if name, ok := d.GetOk("name"); ok {
|
||||||
|
req.Name = name.(string)
|
||||||
|
}
|
||||||
|
if accountId, ok := d.GetOk("account_id"); ok {
|
||||||
|
req.AccountID = uint64(accountId.(int))
|
||||||
|
}
|
||||||
|
if rgName, ok := d.GetOk("rg_name"); ok {
|
||||||
|
req.RGName = rgName.(string)
|
||||||
|
}
|
||||||
|
if rgId, ok := d.GetOk("rg_id"); ok {
|
||||||
|
req.RGID = uint64(rgId.(int))
|
||||||
|
}
|
||||||
|
if techStatus, ok := d.GetOk("tech_status"); ok {
|
||||||
|
req.TechStatus = techStatus.(string)
|
||||||
|
}
|
||||||
|
if ipAddress, ok := d.GetOk("ip_address"); ok {
|
||||||
|
req.IPAddress = ipAddress.(string)
|
||||||
|
}
|
||||||
|
if extNetName, ok := d.GetOk("extnet_name"); ok {
|
||||||
|
req.ExtNetName = extNetName.(string)
|
||||||
|
}
|
||||||
|
if extnetId, ok := d.GetOk("extnet_id"); ok {
|
||||||
|
req.ExtNetID = uint64(extnetId.(int))
|
||||||
|
}
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
listComputes, err := c.CloudAPI().Compute().ListDeleted(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return listComputes, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 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 kvmvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
|
)
|
||||||
|
|
||||||
|
func utilityComputePCIDeviceListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*compute.ListPCIDevices, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
req := compute.ListPCIDeviceRequest{
|
||||||
|
ComputeID: uint64(d.Get("compute_id").(int)),
|
||||||
|
}
|
||||||
|
if rgId, ok := d.GetOk("rg_id"); ok {
|
||||||
|
req.RGID = uint64(rgId.(int))
|
||||||
|
}
|
||||||
|
if devId, ok := d.GetOk("device_id"); ok {
|
||||||
|
req.DevID = uint64(devId.(int))
|
||||||
|
}
|
||||||
|
if name, ok := d.GetOk("name"); ok {
|
||||||
|
req.Name = name.(string)
|
||||||
|
}
|
||||||
|
if status, ok := d.GetOk("status"); ok {
|
||||||
|
req.Status = status.(string)
|
||||||
|
}
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
listPCIDevice, err := c.CloudAPI().Compute().ListPCIDevice(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return listPCIDevice, err
|
||||||
|
|
||||||
|
}
|
||||||
74
internal/service/cloudapi/kvmvm/utility_compute_vgpu_list.go
Normal file
74
internal/service/cloudapi/kvmvm/utility_compute_vgpu_list.go
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 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 kvmvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
|
)
|
||||||
|
|
||||||
|
func utilityComputeVGPUListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*compute.ListVGPUs, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
req := compute.ListVGPURequest{
|
||||||
|
ComputeID: uint64(d.Get("compute_id").(int)),
|
||||||
|
}
|
||||||
|
if GPUID, ok := d.GetOk("gpu_id"); ok {
|
||||||
|
req.GPUID = uint64(GPUID.(int))
|
||||||
|
}
|
||||||
|
if typeVGPU, ok := d.GetOk("type"); ok {
|
||||||
|
req.Type = typeVGPU.(string)
|
||||||
|
}
|
||||||
|
if status, ok := d.GetOk("status"); ok {
|
||||||
|
req.Status = status.(string)
|
||||||
|
}
|
||||||
|
if includeDeleted, ok := d.GetOk("includedeleted"); ok {
|
||||||
|
req.IncludeDeleted = includeDeleted.(bool)
|
||||||
|
}
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
listVGPU, err := c.CloudAPI().Compute().ListVGPU(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return listVGPU, err
|
||||||
|
|
||||||
|
}
|
||||||
@@ -34,6 +34,7 @@ package pfw
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -65,5 +66,5 @@ func utilityPfwCheckPresence(ctx context.Context, d *schema.ResourceData, m inte
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, fmt.Errorf("PFW not found")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ func dataSourceRgAffinityGroupsListRead(ctx context.Context, d *schema.ResourceD
|
|||||||
|
|
||||||
d.SetId(strconv.Itoa(d.Get("rg_id").(int)))
|
d.SetId(strconv.Itoa(d.Get("rg_id").(int)))
|
||||||
d.Set("affinity_groups", flattenRgListGroups(list))
|
d.Set("affinity_groups", flattenRgListGroups(list))
|
||||||
|
d.Set("entry_count", list.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,6 +60,16 @@ func dataSourceRgAffinityGroupsListSchemaMake() map[string]*schema.Schema {
|
|||||||
Required: true,
|
Required: true,
|
||||||
Description: "ID of the RG",
|
Description: "ID of the RG",
|
||||||
},
|
},
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"affinity_groups": {
|
"affinity_groups": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -78,6 +89,10 @@ func dataSourceRgAffinityGroupsListSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
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
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceRGResourceConsumptionGetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
RGResourceConsumptionRec, err := utilityRGResourceConsumptionGetCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
flattenRGResourceConsumption(d, RGResourceConsumptionRec)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceRGResourceConsumptionGetSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
"consumed": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceRGResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"reserved": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceRGResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"resource_limits": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceResourceLimitsSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceRGResourceConsumptionGet() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceRGResourceConsumptionGetRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceRGResourceConsumptionGetSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,17 +78,17 @@ func dataSourceRgListVinsSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
"vins_id": {
|
"vins_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Optional: true,
|
||||||
Description: "Filter by ViNS ID",
|
Description: "Filter by ViNS ID",
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Optional: true,
|
||||||
Description: "Page number",
|
Description: "Page number",
|
||||||
},
|
},
|
||||||
"size": {
|
"size": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Optional: true,
|
||||||
Description: "Page size",
|
Description: "Page size",
|
||||||
},
|
},
|
||||||
"items": {
|
"items": {
|
||||||
|
|||||||
@@ -0,0 +1,211 @@
|
|||||||
|
/*
|
||||||
|
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
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceRGResourceConsumptionListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
rgResourceConsumptionList, err := utilityRGResourceConsumptionListCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenRGResourceConsumptionList(rgResourceConsumptionList))
|
||||||
|
d.Set("entry_count", rgResourceConsumptionList.EntryCount)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceRGResourceConsumptionListSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"items": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"consumed": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceRGResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"reserved": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceRGResourceSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"resource_limits": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceResourceLimitsSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceSepsSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"sep_id": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"data_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size_max": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceRGResourceSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"cpu": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"disk_size_max": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"extips": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"exttraffic": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gpu": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ram": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"seps": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceSepsSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceResourceLimitsSchemaMake() map[string]*schema.Schema {
|
||||||
|
res := map[string]*schema.Schema{
|
||||||
|
"cu_c": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_d": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_dm": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_i": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_m": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"cu_np": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gpu_units": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceRGResourceConsumptionList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceRGResourceConsumptionListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceRGResourceConsumptionListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,7 +40,7 @@ import (
|
|||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountSeps(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)
|
res := make([]map[string]interface{}, 0)
|
||||||
for sepKey, sepVal := range seps {
|
for sepKey, sepVal := range seps {
|
||||||
for dataKey, dataVal := range sepVal {
|
for dataKey, dataVal := range sepVal {
|
||||||
@@ -57,31 +57,31 @@ func flattenAccountSeps(seps map[string]map[string]DiskUsage) []map[string]inter
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenAccResource(r Resource) []map[string]interface{} {
|
// func flattenAccResource(r Resource) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
// res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
// temp := map[string]interface{}{
|
||||||
"cpu": r.CPU,
|
// "cpu": r.CPU,
|
||||||
"disksize": r.DiskSize,
|
// "disksize": r.DiskSize,
|
||||||
"extips": r.ExtIPs,
|
// "extips": r.ExtIPs,
|
||||||
"exttraffic": r.ExtTraffic,
|
// "exttraffic": r.ExtTraffic,
|
||||||
"gpu": r.GPU,
|
// "gpu": r.GPU,
|
||||||
"ram": r.RAM,
|
// "ram": r.RAM,
|
||||||
"seps": flattenAccountSeps(r.SEPs),
|
// "seps": flattenRgSeps(r.SEPs),
|
||||||
}
|
// }
|
||||||
res = append(res, temp)
|
// res = append(res, temp)
|
||||||
|
|
||||||
return res
|
// return res
|
||||||
}
|
// }
|
||||||
|
|
||||||
func flattenRgResources(r Resources) []map[string]interface{} {
|
// func flattenRgResources(r Resources) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
// res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
// temp := map[string]interface{}{
|
||||||
"current": flattenAccResource(r.Current),
|
// "current": flattenAccResource(r.Current),
|
||||||
"reserved": flattenAccResource(r.Reserved),
|
// "reserved": flattenAccResource(r.Reserved),
|
||||||
}
|
// }
|
||||||
res = append(res, temp)
|
// res = append(res, temp)
|
||||||
return res
|
// return res
|
||||||
}
|
// }
|
||||||
|
|
||||||
func flattenResgroup(d *schema.ResourceData, details rg.RecordResourceGroup) error {
|
func flattenResgroup(d *schema.ResourceData, details rg.RecordResourceGroup) error {
|
||||||
log.Debugf("flattenResgroup: decoded RG name %q / ID %d, account ID %d",
|
log.Debugf("flattenResgroup: decoded RG name %q / ID %d, account ID %d",
|
||||||
@@ -122,7 +122,7 @@ func flattenResgroup(d *schema.ResourceData, details rg.RecordResourceGroup) err
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgSeps(seps map[string]map[string]rg.DiskUsage) []map[string]interface{} {
|
func flattenRgSeps(seps map[string]map[string]rg.DiskUsage) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(seps))
|
||||||
for sepKey, sepVal := range seps {
|
for sepKey, sepVal := range seps {
|
||||||
SepMap := map[string]interface{}{}
|
SepMap := map[string]interface{}{}
|
||||||
for dataKey, dataVal := range sepVal {
|
for dataKey, dataVal := range sepVal {
|
||||||
@@ -140,7 +140,6 @@ func flattenRgSeps(seps map[string]map[string]rg.DiskUsage) []map[string]interfa
|
|||||||
|
|
||||||
func flattenResource(resource rg.Resource) []map[string]interface{} {
|
func flattenResource(resource rg.Resource) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
|
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cpu": resource.CPU,
|
"cpu": resource.CPU,
|
||||||
"disk_size": resource.DiskSize,
|
"disk_size": resource.DiskSize,
|
||||||
@@ -149,7 +148,7 @@ func flattenResource(resource rg.Resource) []map[string]interface{} {
|
|||||||
"exttraffic": resource.ExtTraffic,
|
"exttraffic": resource.ExtTraffic,
|
||||||
"gpu": resource.GPU,
|
"gpu": resource.GPU,
|
||||||
"ram": resource.RAM,
|
"ram": resource.RAM,
|
||||||
"seps": flattenRgSeps(resource.SEPs),
|
"seps": flattenRGSeps(resource.SEPs),
|
||||||
}
|
}
|
||||||
|
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
@@ -191,7 +190,7 @@ func flattenRg(d *schema.ResourceData, itemRg rg.RecordResourceGroup) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgAudits(rgAudits rg.ListAudits) []map[string]interface{} {
|
func flattenRgAudits(rgAudits rg.ListAudits) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(rgAudits))
|
||||||
for _, rgAudit := range rgAudits {
|
for _, rgAudit := range rgAudits {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"call": rgAudit.Call,
|
"call": rgAudit.Call,
|
||||||
@@ -208,7 +207,7 @@ func flattenRgAudits(rgAudits rg.ListAudits) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgList(rgl *rg.ListResourceGroups) []map[string]interface{} {
|
func flattenRgList(rgl *rg.ListResourceGroups) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(rgl.Data))
|
||||||
for _, rg := range rgl.Data {
|
for _, rg := range rgl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_acl": flattenRgAcl(rg.ACL),
|
"account_acl": flattenRgAcl(rg.ACL),
|
||||||
@@ -249,7 +248,7 @@ func flattenRgList(rgl *rg.ListResourceGroups) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgAcl(rgAcls rg.ListACL) []map[string]interface{} {
|
func flattenRgAcl(rgAcls rg.ListACL) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(rgAcls))
|
||||||
for _, rgAcl := range rgAcls {
|
for _, rgAcl := range rgAcls {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"explicit": rgAcl.Explicit,
|
"explicit": rgAcl.Explicit,
|
||||||
@@ -281,7 +280,7 @@ func flattenRgResourceLimits(rl rg.ResourceLimits) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRules(list rg.ListRules) []map[string]interface{} {
|
func flattenRules(list rg.ListRules) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(list))
|
||||||
for _, rule := range list {
|
for _, rule := range list {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": rule.GUID,
|
"guid": rule.GUID,
|
||||||
@@ -299,7 +298,7 @@ func flattenRules(list rg.ListRules) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgListComputes(lc *rg.ListComputes) []map[string]interface{} {
|
func flattenRgListComputes(lc *rg.ListComputes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(lc.Data))
|
||||||
for _, compute := range lc.Data {
|
for _, compute := range lc.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": compute.AccountID,
|
"account_id": compute.AccountID,
|
||||||
@@ -351,7 +350,7 @@ func flattenServerSettings(settings rg.RecordServerSettings) []map[string]interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenListServers(list rg.ListServers) []map[string]interface{} {
|
func flattenListServers(list rg.ListServers) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(list))
|
||||||
for _, serv := range list {
|
for _, serv := range list {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"address": serv.Address,
|
"address": serv.Address,
|
||||||
@@ -368,7 +367,7 @@ func flattenListServers(list rg.ListServers) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenBackends(b rg.ListBackends) []map[string]interface{} {
|
func flattenBackends(b rg.ListBackends) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(b))
|
||||||
for _, item := range b {
|
for _, item := range b {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"algorithm": item.Algorithm,
|
"algorithm": item.Algorithm,
|
||||||
@@ -383,7 +382,7 @@ func flattenBackends(b rg.ListBackends) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenBindings(list rg.ListBindings) []map[string]interface{} {
|
func flattenBindings(list rg.ListBindings) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(list))
|
||||||
for _, bind := range list {
|
for _, bind := range list {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"address": bind.Address,
|
"address": bind.Address,
|
||||||
@@ -398,7 +397,7 @@ func flattenBindings(list rg.ListBindings) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenFrontends(list rg.ListFrontends) []map[string]interface{} {
|
func flattenFrontends(list rg.ListFrontends) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(list))
|
||||||
for _, front := range list {
|
for _, front := range list {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"backend": front.Backend,
|
"backend": front.Backend,
|
||||||
@@ -427,7 +426,7 @@ func flattenNode(node rg.RecordNode) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgListLb(listLb *rg.ListLB) []map[string]interface{} {
|
func flattenRgListLb(listLb *rg.ListLB) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(listLb.Data))
|
||||||
for _, lb := range listLb.Data {
|
for _, lb := range listLb.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"ha_mode": lb.HAMode,
|
"ha_mode": lb.HAMode,
|
||||||
@@ -462,7 +461,7 @@ func flattenRgListLb(listLb *rg.ListLB) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgListPfw(listPfw *rg.ListPortForwards) []map[string]interface{} {
|
func flattenRgListPfw(listPfw *rg.ListPortForwards) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len (listPfw.Data))
|
||||||
for _, pfw := range listPfw.Data {
|
for _, pfw := range listPfw.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"public_port_end": pfw.PublicPortEnd,
|
"public_port_end": pfw.PublicPortEnd,
|
||||||
@@ -481,7 +480,7 @@ func flattenRgListPfw(listPfw *rg.ListPortForwards) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgListVins(lv *rg.ListVINS) []map[string]interface{} {
|
func flattenRgListVins(lv *rg.ListVINS) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(lv.Data))
|
||||||
for _, vins := range lv.Data {
|
for _, vins := range lv.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": vins.AccountID,
|
"account_id": vins.AccountID,
|
||||||
@@ -509,7 +508,7 @@ func flattenRgListVins(lv *rg.ListVINS) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgAffinityGroupComputes(list rg.ListAffinityGroupsComputes) []map[string]interface{} {
|
func flattenRgAffinityGroupComputes(list rg.ListAffinityGroupsComputes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(list))
|
||||||
|
|
||||||
for _, item := range list {
|
for _, item := range list {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
@@ -527,18 +526,18 @@ func flattenRgAffinityGroupComputes(list rg.ListAffinityGroupsComputes) []map[st
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgAffinityGroupsGet(list []uint64) []map[string]interface{} {
|
// func flattenRgAffinityGroupsGet(list []uint64) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
// res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
// temp := map[string]interface{}{
|
||||||
"items": list,
|
// "items": list,
|
||||||
}
|
// }
|
||||||
res = append(res, temp)
|
// res = append(res, temp)
|
||||||
|
|
||||||
return res
|
// return res
|
||||||
}
|
// }
|
||||||
|
|
||||||
func flattenRgListGroups(list *rg.ListAffinityGroups) []map[string]interface{} {
|
func flattenRgListGroups(list *rg.ListAffinityGroups) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(list.Data))
|
||||||
for groupKey, groupVal := range list.Data {
|
for groupKey, groupVal := range list.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"label": groupKey,
|
"label": groupKey,
|
||||||
@@ -560,3 +559,24 @@ func flattenRgUsageResource(d *schema.ResourceData, usage rg.RecordResourceUsage
|
|||||||
d.Set("ram", usage.RAM)
|
d.Set("ram", usage.RAM)
|
||||||
d.Set("seps", flattenRgSeps(usage.SEPs))
|
d.Set("seps", flattenRgSeps(usage.SEPs))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func flattenRGResourceConsumptionList(rg *rg.ListResourceConsumption) []map[string]interface{} {
|
||||||
|
res := make([]map[string]interface{}, 0, len(rg.Data))
|
||||||
|
for _, rc := range rg.Data {
|
||||||
|
temp := map[string]interface{}{
|
||||||
|
"consumed": flattenResource(rc.Consumed),
|
||||||
|
"reserved": flattenResource(rc.Reserved),
|
||||||
|
"resource_limits": flattenRgResourceLimits(rc.ResourceLimits),
|
||||||
|
"rg_id": rc.RGID,
|
||||||
|
}
|
||||||
|
res = append(res, temp)
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func flattenRGResourceConsumption(d *schema.ResourceData, rg *rg.ItemResourceConsumption) {
|
||||||
|
d.Set("consumed", flattenResource(rg.Consumed))
|
||||||
|
d.Set("reserved", flattenResource(rg.Reserved))
|
||||||
|
d.Set("resource_limits", flattenRgResourceLimits(rg.ResourceLimits))
|
||||||
|
d.Set("rg_id", rg.RGID)
|
||||||
|
}
|
||||||
|
|||||||
@@ -46,6 +46,14 @@ func utilityRgAffinityGroupsListCheckPresence(ctx context.Context, d *schema.Res
|
|||||||
RGID: uint64(d.Get("rg_id").(int)),
|
RGID: uint64(d.Get("rg_id").(int)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
req.Page = uint64(page.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
if size, ok := d.GetOk("size"); ok {
|
||||||
|
req.Size = uint64(size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
groups, err := c.CloudAPI().RG().AffinityGroupsList(ctx, req)
|
groups, err := c.CloudAPI().RG().AffinityGroupsList(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
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
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
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 utilityRGResourceConsumptionGetCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*rg.ItemResourceConsumption, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
|
id := uint64(d.Get("rg_id").(int))
|
||||||
|
|
||||||
|
req := rg.GetResourceConsumptionRequest{
|
||||||
|
RGID: id,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debugf("utilityRGResourceConsumptionGetCheckPresence: load")
|
||||||
|
accountResourceConsumptionRec, err := c.CloudAPI().RG().GetResourceConsumption(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return accountResourceConsumptionRec, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
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
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
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 utilityRGResourceConsumptionListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*rg.ListResourceConsumption, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
|
log.Debugf("utilityRGResourceConsumptionListCheckPresence: load")
|
||||||
|
rgResourceConsumptionList, err := c.CloudAPI().RG().ListResourceConsumption(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return rgResourceConsumptionList, nil
|
||||||
|
}
|
||||||
@@ -49,7 +49,7 @@ func dataSourceSnapshotListRead(ctx context.Context, d *schema.ResourceData, m i
|
|||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenSnapshotList(snapshotList))
|
d.Set("items", flattenSnapshotList(snapshotList))
|
||||||
|
d.Set("entry_count", snapshotList.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,6 +69,10 @@ func dataSourceSnapshotListSchemaMake() map[string]*schema.Schema {
|
|||||||
Schema: dataSourceSnapshotSchemaMake(),
|
Schema: dataSourceSnapshotSchemaMake(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return rets
|
return rets
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func flattenSnapshotList(gl *compute.ListSnapShots) []map[string]interface{} {
|
func flattenSnapshotList(gl *compute.ListSnapShots) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(gl.Data))
|
||||||
for _, item := range gl.Data {
|
for _, item := range gl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"label": item.Label,
|
"label": item.Label,
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
@@ -184,8 +185,14 @@ func resourceStaticRouteUpdate(ctx context.Context, d *schema.ResourceData, m in
|
|||||||
|
|
||||||
func resourceStaticRouteDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceStaticRouteDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
vinsId := uint64(d.Get("vins_id").(int))
|
arr := strings.Split(d.Id(), "#")
|
||||||
routeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
if len(arr) != 2 {
|
||||||
|
return diag.FromErr(fmt.Errorf("broken state id"))
|
||||||
|
}
|
||||||
|
|
||||||
|
vinsId, _ := strconv.ParseUint(arr[0], 10, 64)
|
||||||
|
routeId, _ := strconv.ParseUint(arr[1], 10, 64)
|
||||||
|
|
||||||
req := vins.StaticRouteDelRequest{
|
req := vins.StaticRouteDelRequest{
|
||||||
VINSID: vinsId,
|
VINSID: vinsId,
|
||||||
RouteId: routeId,
|
RouteId: routeId,
|
||||||
|
|||||||
@@ -32,6 +32,57 @@ data "decort_account_computes_list" "acl" {
|
|||||||
#тип - число
|
#тип - число
|
||||||
account_id = 1111
|
account_id = 1111
|
||||||
|
|
||||||
|
#фильтр по id compute
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#compute_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени compute
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по имени ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#rg_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STARTED"
|
||||||
|
|
||||||
|
#фильтр по ip address
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ip_address = "1.1.1.1.1"
|
||||||
|
|
||||||
|
#фильтр по имени внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#extnet_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#extnet_id = 100
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -38,6 +38,21 @@ data "decort_account_deleted_list" "adl" {
|
|||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
#size = 3
|
#size = 3
|
||||||
|
|
||||||
|
#фильтр по id аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по ACL
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#acl = "test"
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -32,6 +32,36 @@ data "decort_account_disks_list" "adl" {
|
|||||||
#тип - число
|
#тип - число
|
||||||
account_id = 11111
|
account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по id диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#disk_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "data_disk"
|
||||||
|
|
||||||
|
#фильтр по максимальному размеру диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#disk_max_size = 100
|
||||||
|
|
||||||
|
#тип диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#возможные типы: "b" - boot_disk, "d" - data_disk
|
||||||
|
#type = "d"
|
||||||
|
|
||||||
|
#кол-во страниц для вывода
|
||||||
|
#опицональный параметр
|
||||||
|
#тип - число
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опицональный параметр
|
||||||
|
#тип - число
|
||||||
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -31,6 +31,46 @@ data "decort_account_flipgroups_list" "afgl" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
account_id = 1111
|
account_id = 1111
|
||||||
|
|
||||||
|
#фильтр по имени flipgroup
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по id vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#vins_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#vins_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id extnet
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#extnet_id = 100
|
||||||
|
|
||||||
|
#фильтр по IP
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#by_ip = "1.1.1.1.1"
|
||||||
|
|
||||||
|
#фильтр по id flipgroup
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#flipgroup_id = 100
|
||||||
|
|
||||||
|
#кол-во страниц для вывода
|
||||||
|
#опицональный параметр
|
||||||
|
#тип - число
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опицональный параметр
|
||||||
|
#тип - число
|
||||||
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
Получение списка текущего потребления ресурсов аккаунта
|
||||||
|
*/
|
||||||
|
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://alpha.dev.decs.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso-alpha.dev.decs.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_account_resource_consumption_get" "rc_get" {
|
||||||
|
#id аккаунта
|
||||||
|
#обязательный параметр
|
||||||
|
#тип - число
|
||||||
|
account_id = 111
|
||||||
|
}
|
||||||
|
|
||||||
|
output "test" {
|
||||||
|
value = data.decort_account_resource_consumption_get.rc_get
|
||||||
|
}
|
||||||
|
|
||||||
@@ -27,6 +27,26 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_account_list" "al" {
|
data "decort_account_list" "al" {
|
||||||
|
#фильтр по id аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по ACL
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#acl = "test"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
#номер страницы для отображения
|
#номер страницы для отображения
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Получение списка текущего потребления ресурсов
|
||||||
|
*/
|
||||||
|
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://alpha.dev.decs.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso-alpha.dev.decs.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_account_resource_consumption_list" "rc_list" {
|
||||||
|
#Нет входных параметров
|
||||||
|
}
|
||||||
|
|
||||||
|
output "test" {
|
||||||
|
value = data.decort_account_resource_consumption_list.rc_list
|
||||||
|
}
|
||||||
|
|
||||||
@@ -30,6 +30,43 @@ data "decort_account_rg_list" "argl" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
account_id = 66666
|
account_id = 66666
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 2
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 3
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 11111
|
||||||
|
|
||||||
|
#фильтр по имени ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по id vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#vins_id = 100
|
||||||
|
|
||||||
|
#фильтр по id compute
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#vm_id = 100
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "CREATED"
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -31,6 +31,38 @@ data "decort_account_templates_list" "atl" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
account_id = 11111
|
account_id = 11111
|
||||||
|
|
||||||
|
#фильтр "включая удаленные шаблоны"
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булев тип
|
||||||
|
#include_deleted = true
|
||||||
|
|
||||||
|
#фильтр по id образа
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#image_id = 1111
|
||||||
|
|
||||||
|
#фильтр по имени
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по типу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#type = "linux"
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 2
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -32,6 +32,37 @@ data "decort_account_vins_list" "avl" {
|
|||||||
#тип - число
|
#тип - число
|
||||||
account_id = 22222
|
account_id = 22222
|
||||||
|
|
||||||
|
#фильтр по id vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#vins_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 11111
|
||||||
|
|
||||||
|
#фильтр по IP внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ext_ip = "test"
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 2
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -27,17 +27,47 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_bservice_list" "bsl" {
|
data "decort_bservice_list" "bsl" {
|
||||||
|
#фильтр по id базового сервиса
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени базового сервиса
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
#id аккаунта для фильтрации данных
|
#id аккаунта для фильтрации данных
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
#account_id = 11111
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по имени ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#rg_name = "test"
|
||||||
|
|
||||||
#id ресурсной группы, используется для фильтрации
|
#id ресурсной группы, используется для фильтрации
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
#rg_id = 11111
|
#rg_id = 11111
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STARTED"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#account_name = "test"
|
||||||
|
|
||||||
#номер страницы для отображения
|
#номер страницы для отображения
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
@@ -50,7 +80,6 @@ data "decort_bservice_list" "bsl" {
|
|||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
#size = 3
|
#size = 3
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -27,6 +27,36 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_disk_list" "dl" {
|
data "decort_disk_list" "dl" {
|
||||||
|
#фильтр по id диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "data_disk"
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#account_name = "user"
|
||||||
|
|
||||||
|
#фильтр по максимальному размеру диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#disk_max_size = 100
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по доступности иным пользователям
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булев тип
|
||||||
|
#shared = "false"
|
||||||
|
|
||||||
#id аккаунта для получения списка дисков
|
#id аккаунта для получения списка дисков
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
@@ -38,6 +68,16 @@ data "decort_disk_list" "dl" {
|
|||||||
#возможные типы: "b" - boot_disk, "d" - data_disk
|
#возможные типы: "b" - boot_disk, "d" - data_disk
|
||||||
#type = "d"
|
#type = "d"
|
||||||
|
|
||||||
|
#id SEP для получения списка дисков
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#sep_id = 11111
|
||||||
|
|
||||||
|
#фильтр по имени pool
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#pool_name = "test"
|
||||||
|
|
||||||
#кол-во страниц для вывода
|
#кол-во страниц для вывода
|
||||||
#опицональный параметр
|
#опицональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
|
|||||||
@@ -27,6 +27,31 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_disk_list_deleted" "dld" {
|
data "decort_disk_list_deleted" "dld" {
|
||||||
|
#фильтр по id диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "data_disk"
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#account_name = "user"
|
||||||
|
|
||||||
|
#фильтр по максимальному размеру диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#disk_max_size = 100
|
||||||
|
|
||||||
|
#фильтр по доступности иным пользователям
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булев тип
|
||||||
|
#shared = "false"
|
||||||
|
|
||||||
#id аккаунта для получения списка дисков
|
#id аккаунта для получения списка дисков
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
|
|||||||
@@ -32,6 +32,18 @@ data "decort_disk_list_types" "dlt" {
|
|||||||
#Выходной параметр
|
#Выходной параметр
|
||||||
#тип - лист строк
|
#тип - лист строк
|
||||||
#types {}
|
#types {}
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 2
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -45,6 +45,18 @@ data "decort_disk_list_types_detailed" "dltd" {
|
|||||||
#Выходной параметр
|
#Выходной параметр
|
||||||
#Список типов
|
#Список типов
|
||||||
#types
|
#types
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 2
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -28,10 +28,58 @@ provider "decort" {
|
|||||||
|
|
||||||
|
|
||||||
data "decort_disk_list_unattached" "dlu" {
|
data "decort_disk_list_unattached" "dlu" {
|
||||||
#Номер аккаунта
|
#фильтр по id диска
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
account_id = 100
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#account_name = "user"
|
||||||
|
|
||||||
|
#фильтр по максимальному размеру диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#disk_max_size = 100
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по типу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#возможные типы: "b" - boot_disk, "d" - data_disk
|
||||||
|
#type = "d"
|
||||||
|
|
||||||
|
#фильтр по id аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 100
|
||||||
|
|
||||||
|
#фильтр по id sep
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#sep_id = 1
|
||||||
|
|
||||||
|
#фильтр по имени pool
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#pool_name = "test"
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 2
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -30,6 +30,28 @@ data "decort_extnet_computes_list" "ecl" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
account_id = 1111
|
account_id = 1111
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 11111
|
||||||
|
|
||||||
|
#фильтр по id виртуальной машины
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#compute_id = 11111
|
||||||
|
|
||||||
|
#кол-во страниц для вывода
|
||||||
|
#опицональный параметр
|
||||||
|
#тип - число
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опицональный параметр
|
||||||
|
#тип - число
|
||||||
|
#size = 1
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -32,6 +32,36 @@ data "decort_extnet_list" "el" {
|
|||||||
#тип - число
|
#тип - число
|
||||||
#account_id = 1111111
|
#account_id = 1111111
|
||||||
|
|
||||||
|
#фильтр по id внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по IP внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#network = "test"
|
||||||
|
|
||||||
|
#фильтр по id vlan
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#vlan_id = 100
|
||||||
|
|
||||||
|
#фильтр по id vnfDevices
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#vnfdev_id = 100
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
#кол-во страниц для вывода
|
#кол-во страниц для вывода
|
||||||
#опицональный параметр
|
#опицональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
|
|||||||
@@ -21,15 +21,53 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_flipgroup_list" "fg" {
|
data "decort_flipgroup_list" "fg" {
|
||||||
# Номер страницы
|
#фильтр по id flipgroup
|
||||||
# Опциональный параметр
|
#опциональный параметр
|
||||||
# int
|
#тип - число
|
||||||
page = 0
|
#by_id = 100
|
||||||
|
|
||||||
# Размер страницы
|
#фильтр по имени flipgroup
|
||||||
# Опциональный параметр
|
#опциональный параметр
|
||||||
# int
|
#тип - строка
|
||||||
size = 0
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по id vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#vins_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#vins_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id extnet
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#extnet_id = 100
|
||||||
|
|
||||||
|
#фильтр по IP
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#by_ip = "1.1.1.1.1"
|
||||||
|
|
||||||
|
#id ресурсной группы, используется для фильтрации
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#rg_id = 11111
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 2
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
output "fg_out" {
|
output "fg_out" {
|
||||||
|
|||||||
@@ -26,12 +26,65 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_image_list" "il" {
|
data "decort_image_list" "il" {
|
||||||
#id аккаунта для включения образов аккаунтов в результат
|
#фильтр по id sep
|
||||||
#пользователь для осуществления успешного запроса должен иметь права доступа к аккаунту
|
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все общие образа
|
#sep_id = 1
|
||||||
#account_id = 111
|
|
||||||
|
#фильтр по id образа
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени образа
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по архитектуре
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#architecture = "x86_64"
|
||||||
|
|
||||||
|
#фильтр по типу образа
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#type_image = "cdrom"
|
||||||
|
|
||||||
|
#фильтр по размеру образа
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#image_size = 100
|
||||||
|
|
||||||
|
#фильтр по имени SEP
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#sep_name = "test"
|
||||||
|
|
||||||
|
#фильтр по имени Pool
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#pool = "test"
|
||||||
|
|
||||||
|
#фильтр по доступу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булевый тип
|
||||||
|
#public = "true"
|
||||||
|
|
||||||
|
#фильтр по hot_resize
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булевый тип
|
||||||
|
#hot_resize = "true"
|
||||||
|
|
||||||
|
#фильтр по bootable
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булевый тип
|
||||||
|
#bootable = "true"
|
||||||
|
|
||||||
#номер страницы для отображения
|
#номер страницы для отображения
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
@@ -44,7 +97,6 @@ data "decort_image_list" "il" {
|
|||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
#size = 3
|
#size = 3
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -26,23 +26,63 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_k8s_list" "k8s_list" {
|
data "decort_k8s_list" "k8s_list" {
|
||||||
|
#фильтр по id кластера
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени кластера
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по ip
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ip_address = "test"
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по id балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#lb_id = 100
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#bservice_id = 100
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STOPPED"
|
||||||
|
|
||||||
#включение удаленных k8s в результат
|
#включение удаленных k8s в результат
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - будев тип
|
#тип - будев тип
|
||||||
#если не задан - выводятся все неудаленные данные
|
#если не задан - выводятся все неудаленные данные
|
||||||
include_deleted = true
|
# includedeleted = true
|
||||||
|
|
||||||
#номер страницы для отображения
|
#номер страницы для отображения
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
page = 1
|
# page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
size = 1
|
# size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output_k8s_list" {
|
output "output_k8s_list" {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Пример использования
|
Пример использования
|
||||||
Получение списка доступных кластеров включая удаленные
|
Получение списка удаленных кластеров
|
||||||
*/
|
*/
|
||||||
#Расскомментируйте этот код,
|
#Расскомментируйте этот код,
|
||||||
#и внесите необходимые правки в версию и путь,
|
#и внесите необходимые правки в версию и путь,
|
||||||
@@ -26,17 +26,52 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_k8s_list_deleted" "k8s_list_deleted" {
|
data "decort_k8s_list_deleted" "k8s_list_deleted" {
|
||||||
|
#фильтр по id кластера
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени кластера
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по ip
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ip_address = "test"
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по id балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#lb_id = 100
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#bservice_id = 100
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STOPPED"
|
||||||
|
|
||||||
#номер страницы для отображения
|
#номер страницы для отображения
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
page = 1
|
#page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
size = 1
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output_k8s_list_deleted" {
|
output "output_k8s_list_deleted" {
|
||||||
|
|||||||
45
samples/cloudapi/data_k8s_wg_cloud_init/main.tf
Normal file
45
samples/cloudapi/data_k8s_wg_cloud_init/main.tf
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
Пример использования
|
||||||
|
Получение информации о мета данных рабочей группы k8s кластера
|
||||||
|
*/
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://ds1.digitalenergy.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso.digitalenergy.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_k8s_wg_cloud_init" "wg_cloud_init" {
|
||||||
|
#id кластера
|
||||||
|
#обязательный параметр
|
||||||
|
#тип - число
|
||||||
|
k8s_id = 977
|
||||||
|
|
||||||
|
#id группы воркеров
|
||||||
|
#обязательный параметр
|
||||||
|
#тип - число
|
||||||
|
wg_id = 2110
|
||||||
|
}
|
||||||
|
|
||||||
|
output "wg_cloud_init" {
|
||||||
|
value = data.decort_k8s_wg_cloud_init.wg_cloud_init
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -28,10 +28,10 @@ provider "decort" {
|
|||||||
data "decort_kvmvm" "comp" {
|
data "decort_kvmvm" "comp" {
|
||||||
#получение информации по идентификатору машины - compute_id
|
#получение информации по идентификатору машины - compute_id
|
||||||
|
|
||||||
#id виртуальной машины
|
# id виртуальной машины
|
||||||
#обязательный параметр
|
# обязательный параметр
|
||||||
#тип - число
|
# тип - число
|
||||||
#compute_id = 11346
|
compute_id = 11346
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -25,29 +25,79 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_kvmvm_list" "compute_list" {
|
data "decort_kvmvm_list" "compute_list" {
|
||||||
|
#фильтр по id ВМ
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени ВМ
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка ВМ
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по имени ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#rg_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STOPPED"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по ip
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ip_address = "test"
|
||||||
|
|
||||||
|
#фильтр по имени extnet
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#extnet_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id extnet
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#extnet_id = 100
|
||||||
|
|
||||||
#флаг влючения в результат удаленных балансироващиков нагрузки
|
#флаг влючения в результат удаленных балансироващиков нагрузки
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - булев тип
|
#тип - булев тип
|
||||||
#значение по-умолчанию - false
|
#значение по-умолчанию - false
|
||||||
#если не задан - выводятся все доступные неудаленные балансировщики
|
#если не задан - выводятся все доступные неудаленные балансировщики
|
||||||
includedeleted = true
|
#includedeleted = true
|
||||||
|
|
||||||
#номер страницы для отображения
|
#номер страницы для отображения
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
page = 1
|
#page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
size = 1
|
#size = 1
|
||||||
|
|
||||||
# Включить в список вывода ВМ, принадлежащие k8s кластерам (при значении параметра true)
|
#Включить в список вывода ВМ, принадлежащие k8s кластерам (при значении параметра true)
|
||||||
# опциональный параметр
|
#опциональный параметр
|
||||||
# bool (default = false)
|
#bool (default = false)
|
||||||
ignore_k8s = true
|
#ignore_k8s = true
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output" {
|
output "output" {
|
||||||
|
|||||||
88
samples/cloudapi/data_kvmvm_list_deleted/main.tf
Normal file
88
samples/cloudapi/data_kvmvm_list_deleted/main.tf
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
Пример использования
|
||||||
|
Получение данных о списке удаленных compute (виртуальных машин)
|
||||||
|
*/
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://ds1.digitalenergy.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso.digitalenergy.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_kvmvm_list_deleted" "compute_list" {
|
||||||
|
#фильтр по id виртуальной машины
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени виртуальной машины
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по id аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#rg_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "some"
|
||||||
|
|
||||||
|
#фильтр по ip
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ip_address = "test"
|
||||||
|
|
||||||
|
#фильтр по имени extNet
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#extnet_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id extNet
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#extnet_id = 100
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
output "output" {
|
||||||
|
value = data.decort_kvmvm_list_deleted.compute_list
|
||||||
|
}
|
||||||
68
samples/cloudapi/data_kvmvm_pci_device_list/main.tf
Normal file
68
samples/cloudapi/data_kvmvm_pci_device_list/main.tf
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
Пример использования
|
||||||
|
Получение данных о списке подключенных устройств (PCI)
|
||||||
|
*/
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://ds1.digitalenergy.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso.digitalenergy.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_kvmvm_pci_device_list" "pci_device_list" {
|
||||||
|
#id виртуальной машины
|
||||||
|
#обязательный параметр
|
||||||
|
#тип - число
|
||||||
|
compute_id = 100
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по id устройства
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#device_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени устройства
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
output "output" {
|
||||||
|
value = data.decort_kvmvm_pci_device_list.pci_device_list
|
||||||
|
}
|
||||||
68
samples/cloudapi/data_kvmvm_vgpu_list/main.tf
Normal file
68
samples/cloudapi/data_kvmvm_vgpu_list/main.tf
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
Пример использования
|
||||||
|
Получение данных о списке подключенных графических процессоров
|
||||||
|
*/
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://ds1.digitalenergy.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso.digitalenergy.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_kvmvm_vgpu_list" "vgpu_list" {
|
||||||
|
#id виртуальной машины
|
||||||
|
#обязательный параметр
|
||||||
|
#тип - число
|
||||||
|
compute_id = 100
|
||||||
|
|
||||||
|
#фильтр по id графического процессора
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#gpu_id = 100
|
||||||
|
|
||||||
|
#фильтр по типу графического процессора
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#type = "NVIDIA"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр "включая удаленные графические процессоры"
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булев тип
|
||||||
|
#includedeleted = "false"
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
output "output" {
|
||||||
|
value = data.decort_kvmvm_vgpu_list.vgpu_list
|
||||||
|
}
|
||||||
@@ -27,6 +27,46 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_lb_list" "lbl" {
|
data "decort_lb_list" "lbl" {
|
||||||
|
#фильтр по id балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка балансировщиков нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STOPPED"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по IP front
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#front_ip = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по IP back
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#back_ip = "ENABLED"
|
||||||
|
|
||||||
#флаг влючения в результат удаленных балансироващиков нагрузки
|
#флаг влючения в результат удаленных балансироващиков нагрузки
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - булев тип
|
#тип - булев тип
|
||||||
@@ -38,7 +78,7 @@ data "decort_lb_list" "lbl" {
|
|||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
#page = 1
|
#page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
|
|||||||
@@ -27,11 +27,46 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_lb_list_deleted" "lbld" {
|
data "decort_lb_list_deleted" "lbld" {
|
||||||
|
#фильтр по id балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка балансировщиков нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STOPPED"
|
||||||
|
|
||||||
|
#фильтр по IP front
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#front_ip = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по IP back
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#back_ip = "ENABLED"
|
||||||
|
|
||||||
#номер страницы для отображения
|
#номер страницы для отображения
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
#если не задан - выводятся все доступные данные
|
#если не задан - выводятся все доступные данные
|
||||||
#page = 1
|
#page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
|
|||||||
@@ -29,6 +29,26 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_locations_list" "ll" {
|
data "decort_locations_list" "ll" {
|
||||||
|
#фильтр по флагу
|
||||||
|
#опицональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#flag = "some"
|
||||||
|
|
||||||
|
#фильтр по id локации
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени локации
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по коду локации
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#location_code = "europe"
|
||||||
|
|
||||||
#кол-во страниц для вывода
|
#кол-во страниц для вывода
|
||||||
#опицональный параметр
|
#опицональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
|
|||||||
@@ -29,6 +29,18 @@ data "decort_rg_affinity_groups_list" "list_groups" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
rg_id = 123
|
rg_id = 123
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output" {
|
output "output" {
|
||||||
|
|||||||
37
samples/cloudapi/data_rg_get_resource_consumption/main.tf
Normal file
37
samples/cloudapi/data_rg_get_resource_consumption/main.tf
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
Получение списка текущего потребления ресурсов ресурсной группы
|
||||||
|
*/
|
||||||
|
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://alpha.dev.decs.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso-alpha.dev.decs.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_rg_resource_consumption_get" "rc_get" {
|
||||||
|
#id ресурсной группы
|
||||||
|
#обязательный параметр
|
||||||
|
#тип - число
|
||||||
|
rg_id = 111
|
||||||
|
}
|
||||||
|
|
||||||
|
output "test" {
|
||||||
|
value = data.decort_rg_resource_consumption_get.rc_get
|
||||||
|
}
|
||||||
|
|
||||||
@@ -25,20 +25,60 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_rg_list" "rg_list" {
|
data "decort_rg_list" "rg_list" {
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка ресурсных групп
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#account_name = "test"
|
||||||
|
|
||||||
|
#фильтр по времени создания (после указанного времени)
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#created_after = "123"
|
||||||
|
|
||||||
|
#фильтр по времени создания (перед указанным временем)
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#created_before = "123"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по lock status
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#lock_status = "UNLOCKED"
|
||||||
|
|
||||||
#отображать удаленные ресурсные группы или нет
|
#отображать удаленные ресурсные группы или нет
|
||||||
#необязательный параметр
|
#необязательный параметр
|
||||||
#тип - булевый
|
#тип - булевый
|
||||||
includedeleted = false
|
#includedeleted = false
|
||||||
|
|
||||||
#номер страницы
|
#номер страницы
|
||||||
#необязательный параметр
|
#необязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
page = 1
|
#page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#необязательный параметр
|
#необязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
size = 2
|
#size = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output" {
|
output "output" {
|
||||||
|
|||||||
@@ -29,10 +29,58 @@ data "decort_rg_list_computes" "list_computes" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
rg_id = 123
|
rg_id = 123
|
||||||
#причина для действия
|
|
||||||
#необязательный параметр
|
#фильтр по id compute
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#compute_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени compute
|
||||||
|
#опциональный параметр
|
||||||
#тип - строка
|
#тип - строка
|
||||||
reason = "TEST"
|
#name = "test"
|
||||||
|
|
||||||
|
#фильтр по id аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 100
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STARTED"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по ip address
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ip_address = "1.1.1.1.1"
|
||||||
|
|
||||||
|
#фильтр по имени внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#extnet_name = "test"
|
||||||
|
|
||||||
|
#фильтр по id внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#extnet_id = 100
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output" {
|
output "output" {
|
||||||
|
|||||||
@@ -25,15 +25,50 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_rg_list_deleted" "list_deleted" {
|
data "decort_rg_list_deleted" "list_deleted" {
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка ресурсных групп
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по имени аккаунта
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#account_name = "test"
|
||||||
|
|
||||||
|
#фильтр по времени создания (после указанного времени)
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#created_after = "123"
|
||||||
|
|
||||||
|
#фильтр по времени создания (перед указанным временем)
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#created_before = "123"
|
||||||
|
|
||||||
|
#фильтр по lock status
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#lock_status = "UNLOCKED"
|
||||||
|
|
||||||
#номер страницы
|
#номер страницы
|
||||||
#необязательный параметр
|
#необязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
page = 1
|
#page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#необязательный параметр
|
#необязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
size = 2
|
#size = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output" {
|
output "output" {
|
||||||
|
|||||||
@@ -29,6 +29,53 @@ data "decort_rg_list_lb" "list_lb" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
rg_id = 123
|
rg_id = 123
|
||||||
|
|
||||||
|
#фильтр по id балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени балансировщика нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка балансировщиков нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по техническому статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#tech_status = "STOPPED"
|
||||||
|
|
||||||
|
#фильтр по статусу
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#status = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по IP front
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#front_ip = "ENABLED"
|
||||||
|
|
||||||
|
#фильтр по IP back
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#back_ip = "ENABLED"
|
||||||
|
|
||||||
|
#номер страницы для отображения
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#page = 1
|
||||||
|
|
||||||
|
#размер страницы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#если не задан - выводятся все доступные данные
|
||||||
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output" {
|
output "output" {
|
||||||
|
|||||||
@@ -29,10 +29,38 @@ data "decort_rg_list_vins" "list_vins" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
rg_id = 123
|
rg_id = 123
|
||||||
#причина для действия
|
|
||||||
#необязательный параметр
|
# фильтр по id vins
|
||||||
#тип - строка
|
# опциональный параметр
|
||||||
reason = "TEST"
|
# тип - число
|
||||||
|
# vins_id = 100
|
||||||
|
|
||||||
|
# фильтр по имени vins
|
||||||
|
# опциональный параметр
|
||||||
|
# тип - строка
|
||||||
|
# name = "test"
|
||||||
|
|
||||||
|
# id аккаунта для получения списка балансировщиков нагрузки
|
||||||
|
# опциональный параметр
|
||||||
|
# тип - число
|
||||||
|
# account_id = 11111
|
||||||
|
|
||||||
|
# фильтр по IP внешней сети
|
||||||
|
# опциональный параметр
|
||||||
|
# тип - строка
|
||||||
|
# ext_ip = "test"
|
||||||
|
|
||||||
|
# номер страницы для отображения
|
||||||
|
# опциональный параметр
|
||||||
|
# тип - число
|
||||||
|
# если не задан - выводятся все доступные данные
|
||||||
|
# page = 2
|
||||||
|
|
||||||
|
# размер страницы
|
||||||
|
# опциональный параметр
|
||||||
|
# тип - число
|
||||||
|
# если не задан - выводятся все доступные данные
|
||||||
|
# size = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
output "output" {
|
output "output" {
|
||||||
|
|||||||
34
samples/cloudapi/data_rg_resource_consumption_list/main.tf
Normal file
34
samples/cloudapi/data_rg_resource_consumption_list/main.tf
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Получение списка текущего потребления ресурсов
|
||||||
|
*/
|
||||||
|
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://alpha.dev.decs.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso-alpha.dev.decs.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
data "decort_rg_resource_consumption_list" "rc_list" {
|
||||||
|
#Нет входных параметров
|
||||||
|
}
|
||||||
|
|
||||||
|
output "test" {
|
||||||
|
value = data.decort_rg_resource_consumption_list.rc_list
|
||||||
|
}
|
||||||
|
|
||||||
@@ -26,6 +26,31 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_vins_list" "vl" {
|
data "decort_vins_list" "vl" {
|
||||||
|
#фильтр по id vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка балансировщиков нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по IP внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ext_ip = "test"
|
||||||
|
|
||||||
#включение удаленных vins в результат
|
#включение удаленных vins в результат
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - будев тип
|
#тип - будев тип
|
||||||
|
|||||||
@@ -26,15 +26,40 @@ provider "decort" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data "decort_vins_list_deleted" "vins_list_deleted" {
|
data "decort_vins_list_deleted" "vins_list_deleted" {
|
||||||
|
#фильтр по id vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#by_id = 100
|
||||||
|
|
||||||
|
#фильтр по имени vins
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#name = "test"
|
||||||
|
|
||||||
|
#id аккаунта для получения списка балансировщиков нагрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#account_id = 11111
|
||||||
|
|
||||||
|
#фильтр по id ресурсной группы
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - число
|
||||||
|
#rg_id = 100
|
||||||
|
|
||||||
|
#фильтр по IP внешней сети
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - строка
|
||||||
|
#ext_ip = "test"
|
||||||
|
|
||||||
#кол-во страниц для вывода
|
#кол-во страниц для вывода
|
||||||
#опицональный параметр
|
#опицональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
page = 1
|
#page = 1
|
||||||
|
|
||||||
#размер страницы
|
#размер страницы
|
||||||
#опицональный параметр
|
#опицональный параметр
|
||||||
#тип - число
|
#тип - число
|
||||||
size = 1
|
#size = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -46,5 +46,5 @@ data "decort_vins_static_route" "route" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output "route" {
|
output "route" {
|
||||||
value = decort_vins_static_route.route
|
value = data.decort_vins_static_route.route
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,5 +41,5 @@ data "decort_vins_static_route_list" "list" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output "list" {
|
output "list" {
|
||||||
value = decort_vins_static_route_list.list
|
value = data.decort_vins_static_route_list.list
|
||||||
}
|
}
|
||||||
|
|||||||
57
samples/cloudapi/resource_image_virtual/main.tf
Normal file
57
samples/cloudapi/resource_image_virtual/main.tf
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
Пример использования
|
||||||
|
Ресурса vins static routes
|
||||||
|
Ресурс позволяет:
|
||||||
|
1. Создавать static routes
|
||||||
|
2. Удалять static routes
|
||||||
|
3. Получать информацию о всех static routes в данном Vins
|
||||||
|
4. Предоставлять доступ виртуальным машинам к static routes
|
||||||
|
5. Удалять доступ виртуальным машинам к static routes
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#Расскомментируйте этот код,
|
||||||
|
#и внесите необходимые правки в версию и путь,
|
||||||
|
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
||||||
|
/*
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "<VERSION>"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "oauth2"
|
||||||
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
|
controller_url = "https://mr4.digitalenergy.online"
|
||||||
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
oauth2_url = "https://sso.digitalenergy.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "decort_image_virtual" "iv" {
|
||||||
|
#имя виртуального образа
|
||||||
|
#обязательный параметр
|
||||||
|
#при изменении - обновляет имя виртуального образа
|
||||||
|
#тип - строка
|
||||||
|
name = "iv-name"
|
||||||
|
|
||||||
|
#ID реального образа, на который будет ссылаться виртуальный
|
||||||
|
#обязательный параметр
|
||||||
|
#при изменении - ссылается на другой реальный образ
|
||||||
|
#тип - число
|
||||||
|
link_to = 123
|
||||||
|
|
||||||
|
#Флаг для удаления диска
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - bool
|
||||||
|
#permanently = false
|
||||||
|
}
|
||||||
|
|
||||||
|
output "sr" {
|
||||||
|
value = decort_image_virtual.iv
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user