From c422910bbec8daa5185b03168ecdc68f9b82b790 Mon Sep 17 00:00:00 2001 From: stSolo Date: Fri, 8 Jul 2022 15:08:52 +0300 Subject: [PATCH] Add env flag DECORT_ADMIN_MODE --- Makefile | 2 +- .../{ => cloudapi}/data_sources_map.go | 20 +------ .../provider/{ => cloudapi}/resource_map.go | 17 ++---- .../provider/cloudbroker/data_sources_map.go | 50 +++++++++++++++++ .../provider/cloudbroker/resources_map.go | 39 +++++++++++++ internal/provider/provider.go | 4 +- internal/provider/select_schema.go | 55 +++++++++++++++++++ 7 files changed, 152 insertions(+), 35 deletions(-) rename internal/provider/{ => cloudapi}/data_sources_map.go (74%) rename internal/provider/{ => cloudapi}/resource_map.go (73%) create mode 100644 internal/provider/cloudbroker/data_sources_map.go create mode 100644 internal/provider/cloudbroker/resources_map.go create mode 100644 internal/provider/select_schema.go diff --git a/Makefile b/Makefile index abc8d7e..459f7fc 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ NAME=terraform-provider-decort #BINARY=terraform-provider-${NAME} BINARY=${NAME}.exe MAINPATH = ./cmd/decort/ -VERSION=0.2 +VERSION=1.1 #OS_ARCH=darwin_amd64 OS_ARCH=windows_amd64 diff --git a/internal/provider/data_sources_map.go b/internal/provider/cloudapi/data_sources_map.go similarity index 74% rename from internal/provider/data_sources_map.go rename to internal/provider/cloudapi/data_sources_map.go index 5897525..cd9217b 100644 --- a/internal/provider/data_sources_map.go +++ b/internal/provider/cloudapi/data_sources_map.go @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package provider +package cloudapi import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -31,10 +31,6 @@ import ( "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/snapshot" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/vgpu" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/vins" - "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/grid" - "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/image" - "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/pcidevice" - "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/sep" ) func NewDataSourcesMap() map[string]*schema.Resource { @@ -42,23 +38,9 @@ func NewDataSourcesMap() map[string]*schema.Resource { "decort_account": account.DataSourceAccount(), "decort_resgroup": rg.DataSourceResgroup(), "decort_kvmvm": kvmvm.DataSourceCompute(), - "decort_image": image.DataSourceImage(), - "decort_disk": disks.DataSourceDisk(), "decort_vins": vins.DataSourceVins(), - "decort_grid": grid.DataSourceGrid(), - "decort_grid_list": grid.DataSourceGridList(), - "decort_image_list": image.DataSourceImageList(), - "decort_image_list_stacks": image.DataSourceImageListStacks(), "decort_snapshot_list": snapshot.DataSourceSnapshotList(), "decort_vgpu": vgpu.DataSourceVGPU(), - "decort_pcidevice": pcidevice.DataSourcePcidevice(), - "decort_pcidevice_list": pcidevice.DataSourcePcideviceList(), - "decort_sep_list": sep.DataSourceSepList(), - "decort_sep": sep.DataSourceSep(), - "decort_sep_consumption": sep.DataSourceSepConsumption(), - "decort_sep_disk_list": sep.DataSourceSepDiskList(), - "decort_sep_config": sep.DataSourceSepConfig(), - "decort_sep_pool": sep.DataSourceSepPool(), "decort_disk_list": disks.DataSourceDiskList(), "decort_rg_list": rg.DataSourceRgList(), "decort_account_list": account.DataSourceAccountList(), diff --git a/internal/provider/resource_map.go b/internal/provider/cloudapi/resource_map.go similarity index 73% rename from internal/provider/resource_map.go rename to internal/provider/cloudapi/resource_map.go index 1c03347..fd5c27b 100644 --- a/internal/provider/resource_map.go +++ b/internal/provider/cloudapi/resource_map.go @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package provider +package cloudapi import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -25,32 +25,23 @@ import ( "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/bservice" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/disks" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/k8s" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/kvmvm" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/pfw" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/rg" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/snapshot" "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/vins" - "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/image" - "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/pcidevice" - "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/sep" ) func NewRersourcesMap() map[string]*schema.Resource { return map[string]*schema.Resource{ - "decort_resgroup": rg.ResourceResgroup(), - // "decort_kvmvm": resourceCompute(), + "decort_resgroup": rg.ResourceResgroup(), + "decort_kvmvm": kvmvm.ResourceCompute(), "decort_disk": disks.ResourceDisk(), "decort_vins": vins.ResourceVins(), "decort_pfw": pfw.ResourcePfw(), "decort_k8s": k8s.ResourceK8s(), "decort_k8s_wg": k8s.ResourceK8sWg(), - "decort_image": image.ResourceImage(), - "decort_virtual_image": image.ResourceVirtualImage(), - "decort_cdrom_image": image.ResourceCDROMImage(), - "decort_delete_images": image.ResourceDeleteImages(), "decort_snapshot": snapshot.ResourceSnapshot(), - "decort_pcidevice": pcidevice.ResourcePcidevice(), - "decort_sep": sep.ResourceSep(), - "decort_sep_config": sep.ResourceSepConfig(), "decort_account": account.ResourceAccount(), "decort_bservice": bservice.ResourceBasicService(), "decort_bservice_group": bservice.ResourceBasicServiceGroup(), diff --git a/internal/provider/cloudbroker/data_sources_map.go b/internal/provider/cloudbroker/data_sources_map.go new file mode 100644 index 0000000..fb633f8 --- /dev/null +++ b/internal/provider/cloudbroker/data_sources_map.go @@ -0,0 +1,50 @@ +/* +Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. +Authors: +Petr Krutov, +Stanislav Solovev, + +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. +*/ + +package cloudbroker + +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudapi/disks" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/grid" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/image" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/pcidevice" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/sep" +) + +func NewDataSourcesMap() map[string]*schema.Resource { + return map[string]*schema.Resource{ + "decort_image": image.DataSourceImage(), + "decort_disk": disks.DataSourceDisk(), + "decort_grid": grid.DataSourceGrid(), + "decort_grid_list": grid.DataSourceGridList(), + "decort_image_list": image.DataSourceImageList(), + "decort_image_list_stacks": image.DataSourceImageListStacks(), + "decort_pcidevice": pcidevice.DataSourcePcidevice(), + "decort_pcidevice_list": pcidevice.DataSourcePcideviceList(), + "decort_sep_list": sep.DataSourceSepList(), + "decort_sep": sep.DataSourceSep(), + "decort_sep_consumption": sep.DataSourceSepConsumption(), + "decort_sep_disk_list": sep.DataSourceSepDiskList(), + "decort_sep_config": sep.DataSourceSepConfig(), + "decort_sep_pool": sep.DataSourceSepPool(), + // "decort_pfw": dataSourcePfw(), + } + +} diff --git a/internal/provider/cloudbroker/resources_map.go b/internal/provider/cloudbroker/resources_map.go new file mode 100644 index 0000000..49ead88 --- /dev/null +++ b/internal/provider/cloudbroker/resources_map.go @@ -0,0 +1,39 @@ +/* +Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. +Authors: +Petr Krutov, +Stanislav Solovev, + +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. +*/ + +package cloudbroker + +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/image" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/pcidevice" + "github.com/rudecs/terraform-provider-decort/internal/service/cloudbroker/sep" +) + +func NewRersourcesMap() map[string]*schema.Resource { + return map[string]*schema.Resource{ + "decort_image": image.ResourceImage(), + "decort_virtual_image": image.ResourceVirtualImage(), + "decort_cdrom_image": image.ResourceCDROMImage(), + "decort_delete_images": image.ResourceDeleteImages(), + "decort_pcidevice": pcidevice.ResourcePcidevice(), + "decort_sep": sep.ResourceSep(), + "decort_sep_config": sep.ResourceSepConfig(), + } +} diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 39fe2c3..f004704 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -101,9 +101,9 @@ func Provider() *schema.Provider { }, }, - ResourcesMap: NewRersourcesMap(), + ResourcesMap: selectSchema(false), - DataSourcesMap: NewDataSourcesMap(), + DataSourcesMap: selectSchema(true), ConfigureFunc: providerConfigure, } diff --git a/internal/provider/select_schema.go b/internal/provider/select_schema.go new file mode 100644 index 0000000..ce70df9 --- /dev/null +++ b/internal/provider/select_schema.go @@ -0,0 +1,55 @@ +/* +Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. +Authors: +Petr Krutov, +Stanislav Solovev, + +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. +*/ + +package provider + +import ( + "os" + "strconv" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + ca "github.com/rudecs/terraform-provider-decort/internal/provider/cloudapi" + cb "github.com/rudecs/terraform-provider-decort/internal/provider/cloudbroker" +) + +func selectSchema(isDatasource bool) map[string]*schema.Resource { + adminMode, err := strconv.ParseBool(os.Getenv("DECORT_ADMIN_MODE")) + if err != nil { + adminMode = false + } + if isDatasource { + return selectDataSourceSchema(adminMode) + } + return selectResourceSchema(adminMode) + +} + +func selectDataSourceSchema(adminMode bool) map[string]*schema.Resource { + if adminMode { + return cb.NewDataSourcesMap() + } + return ca.NewDataSourcesMap() +} + +func selectResourceSchema(adminMode bool) map[string]*schema.Resource { + if adminMode { + return cb.NewRersourcesMap() + } + return ca.NewRersourcesMap() +}