From feb280ffa38be4bc9c7ab7785b5d3a63b9d4f5d2 Mon Sep 17 00:00:00 2001 From: adeatcu-ionos Date: Mon, 20 Jan 2025 19:18:07 +0200 Subject: [PATCH] feat: Add ipv4CIDRBlock attribute for LAN resource & data source --- CHANGELOG.md | 2 + docs/data-sources/lan.md | 2 + docs/resources/lan.md | 1 + go.mod | 2 +- go.sum | 8 +- ionoscloud/data_source_lan.go | 5 + ionoscloud/resource_lan.go | 20 +- ionoscloud/resource_lan_test.go | 47 ++- ionoscloud/test_constants.go | 7 + utils/constant/constants.go | 10 +- .../ionos-cloud/sdk-go/v6/client.go | 2 +- .../ionos-cloud/sdk-go/v6/configuration.go | 2 +- .../sdk-go/v6/model_group_properties.go | 396 ++++++++++++++++++ .../sdk-go/v6/model_lan_properties.go | 52 +++ vendor/modules.txt | 2 +- 15 files changed, 530 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50d674854..24eb52803 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## 6.7.0 -- upcoming release ### Fixes - Fix [#735](https://github.com/ionos-cloud/terraform-provider-ionoscloud/issues/735) by reading all values for `api_subnet_allow_list`, not only non-nill values. +### Features +- Add new read-only attribute: `ipv4_cidr_block` to `ionoscloud_lan` resource and data source. ## 6.6.9 ### Features diff --git a/docs/data-sources/lan.md b/docs/data-sources/lan.md index 48df8a5df..25ad75521 100644 --- a/docs/data-sources/lan.md +++ b/docs/data-sources/lan.md @@ -51,3 +51,5 @@ The following attributes are returned by the datasource: * `ip` * `pcc` - The unique id of a `ionoscloud_private_crossconnect` resource, in order. * `public` - Indicates if the LAN faces the public Internet (true) or not (false). +* `ipv4_cidr_block` - For public LANs this property is null, for private LANs it contains the private IPv4 CIDR range. +* `ipv6_cidr_block` - Contains the LAN's /64 IPv6 CIDR block if this LAN is IPv6 enabled. diff --git a/docs/resources/lan.md b/docs/resources/lan.md index 3e2ed40a9..64b029f09 100644 --- a/docs/resources/lan.md +++ b/docs/resources/lan.md @@ -58,6 +58,7 @@ resource "ionoscloud_lan" "example" { * `name` - (Optional)[string] The name of the LAN. * `public` - (Optional)[Boolean] Indicates if the LAN faces the public Internet (true) or not (false). * `pcc` - (Optional)[String] The unique id of a `ionoscloud_private_crossconnect` resource, in order. It needs to be ensured that IP addresses of the NICs of all LANs connected to a given Cross Connect is not duplicated and belongs to the same subnet range +* `ipv4_cidr_block` - (Computed)[String] For public LANs this property is null, for private LANs it contains the private IPv4 CIDR range. This property is a read only property. * `ipv6_cidr_block` - (Computed, Optional) Contains the LAN's /64 IPv6 CIDR block if this LAN is IPv6 enabled. 'AUTO' will result in enabling this LAN for IPv6 and automatically assign a /64 IPv6 CIDR block to this LAN. If you specify your own IPv6 CIDR block then you must provide a unique /64 block, which is inside the IPv6 CIDR block of the virtual datacenter and unique inside all LANs from this virtual datacenter. * `ip_failover` - (Computed) IP failover configurations for lan * `ip` diff --git a/go.mod b/go.mod index 4f7bedbe8..7174c436a 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/ionos-cloud/sdk-go-object-storage v1.1.0 github.com/ionos-cloud/sdk-go-object-storage-management v1.0.0 github.com/ionos-cloud/sdk-go-vm-autoscaling v1.0.1 - github.com/ionos-cloud/sdk-go/v6 v6.3.0 + github.com/ionos-cloud/sdk-go/v6 v6.3.2 github.com/mitchellh/go-homedir v1.1.0 golang.org/x/crypto v0.26.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 553883e5d..8407973ef 100644 --- a/go.sum +++ b/go.sum @@ -142,8 +142,6 @@ github.com/ionos-cloud/sdk-go-dns v1.2.1 h1:Sy7Jg5trzObad9VPvEh7BgeJrIhaxdGlBEvG github.com/ionos-cloud/sdk-go-dns v1.2.1/go.mod h1:l9gYdwtUshlBOiIi4nHn3RCX81XlV3VoNvLJrO2VfHg= github.com/ionos-cloud/sdk-go-kafka v1.0.0 h1:S0Tfy/KlYW7UJW6DoU43fF0/iNPc1YKC+AC56G9wfA4= github.com/ionos-cloud/sdk-go-kafka v1.0.0/go.mod h1:yIq1FjRtdcbwmybb42puagpLjmD2wbWAew8UMHO5wqU= -github.com/ionos-cloud/sdk-go-nfs v1.0.0 h1:CyiemTDPg2jAjtTT4JHzvOpjq6lqe7YbXx2iq2gx98s= -github.com/ionos-cloud/sdk-go-nfs v1.0.0/go.mod h1:ffyMIPVknZ7dpi/+RomWXNNYV7ZjtK8KYSsGjVlbqgA= github.com/ionos-cloud/sdk-go-nfs v1.1.1 h1:tMMUPGKRQm2z5FTIMFoE/DJ8Xw3522T0jVutCGmsyMw= github.com/ionos-cloud/sdk-go-nfs v1.1.1/go.mod h1:jgNAKLmjzBP6RzPnjydleZzVlAL8KnYKPcBjWgLVxJk= github.com/ionos-cloud/sdk-go-object-storage v1.1.0 h1:4JTsxrbzFltF9liAHZ2I9f53rpkrXm8642UwQoQ+pMc= @@ -152,8 +150,8 @@ github.com/ionos-cloud/sdk-go-object-storage-management v1.0.0 h1:pHRKSNT+cCcr5g github.com/ionos-cloud/sdk-go-object-storage-management v1.0.0/go.mod h1:BnEapZcQp6FEirEin6pY9NICXD1mCrI4sJ+wOSKpyCY= github.com/ionos-cloud/sdk-go-vm-autoscaling v1.0.1 h1:KABL25MC7DrIHn9lQzKSPkwXhqvRkPYtFd+1HEogmAE= github.com/ionos-cloud/sdk-go-vm-autoscaling v1.0.1/go.mod h1:Q5d1R6silarsX5jWLPBHd/1PSC5zZNf2ONvXB+fygC0= -github.com/ionos-cloud/sdk-go/v6 v6.3.0 h1:/lTieTH9Mo/CWm3cTlFLnK10jgxjUGkAqRffGqvPteY= -github.com/ionos-cloud/sdk-go/v6 v6.3.0/go.mod h1:SXrO9OGyWjd2rZhAhEpdYN6VUAODzzqRdqA9BCviQtI= +github.com/ionos-cloud/sdk-go/v6 v6.3.2 h1:2mUmrZZz6cPyT9IRX0T8fBLc/7XU/eTxP2Y5tS7/09k= +github.com/ionos-cloud/sdk-go/v6 v6.3.2/go.mod h1:SXrO9OGyWjd2rZhAhEpdYN6VUAODzzqRdqA9BCviQtI= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= @@ -237,8 +235,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= -golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= -golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/ionoscloud/data_source_lan.go b/ionoscloud/data_source_lan.go index dffd0c157..285f897fd 100644 --- a/ionoscloud/data_source_lan.go +++ b/ionoscloud/data_source_lan.go @@ -56,6 +56,11 @@ func dataSourceLan() *schema.Resource { Type: schema.TypeBool, Computed: true, }, + "ipv4_cidr_block": { + Type: schema.TypeString, + Computed: true, + Description: "For public LANs this property is null, for private LANs it contains the private IPv4 CIDR range.", + }, "ipv6_cidr_block": { Type: schema.TypeString, Computed: true, diff --git a/ionoscloud/resource_lan.go b/ionoscloud/resource_lan.go index 0e2ee1980..2819f700a 100644 --- a/ionoscloud/resource_lan.go +++ b/ionoscloud/resource_lan.go @@ -29,7 +29,6 @@ func resourceLan() *schema.Resource { StateContext: resourceLanImport, }, Schema: map[string]*schema.Schema{ - "public": { Type: schema.TypeBool, Optional: true, @@ -65,6 +64,11 @@ func resourceLan() *schema.Resource { }, }, }, + "ipv4_cidr_block": { + Type: schema.TypeString, + Computed: true, + Description: "For public LANs this property is null, for private LANs it contains the private IPv4 CIDR range. This property is a read only property.", + }, "ipv6_cidr_block": { Type: schema.TypeString, Optional: true, @@ -92,9 +96,8 @@ func resourceLanCreate(ctx context.Context, d *schema.ResourceData, meta interfa }, } - name := d.Get("name").(string) - log.Printf("[DEBUG] NAME %s", d.Get("name")) if d.Get("name") != nil { + name := d.Get("name").(string) request.Properties.Name = &name } @@ -138,14 +141,14 @@ func resourceLanCreate(ctx context.Context, d *schema.ResourceData, meta interfa for { log.Printf("[INFO] Waiting for LAN %s to be available...", *rsp.Id) - clusterReady, rsErr := lanAvailable(ctx, client, d) + lanReady, rsErr := lanAvailable(ctx, client, d) if rsErr != nil { diags := diag.FromErr(fmt.Errorf("error while checking readiness status of LAN %s: %w", *rsp.Id, rsErr)) return diags } - if clusterReady { + if lanReady { log.Printf("[INFO] LAN ready: %s", d.Id()) break } @@ -326,6 +329,13 @@ func setLanData(d *schema.ResourceData, lan *ionoscloud.Lan) error { return err } } + + if lan.Properties.Ipv4CidrBlock != nil { + if err := d.Set("ipv4_cidr_block", *lan.Properties.Ipv4CidrBlock); err != nil { + return utils.GenerateSetError("lan", "ipv4_cidr_block", err) + } + } + if lan.Properties.Ipv6CidrBlock != nil { if err := d.Set("ipv6_cidr_block", *lan.Properties.Ipv6CidrBlock); err != nil { return utils.GenerateSetError("lan", "ipv6_cidr_block", err) diff --git a/ionoscloud/resource_lan_test.go b/ionoscloud/resource_lan_test.go index 5c77d2944..975bc8124 100644 --- a/ionoscloud/resource_lan_test.go +++ b/ionoscloud/resource_lan_test.go @@ -18,6 +18,7 @@ import ( func TestAccLanBasic(t *testing.T) { var lan ionoscloud.Lan + var privateLAN ionoscloud.Lan resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -37,12 +38,12 @@ func TestAccLanBasic(t *testing.T) { { Config: testAccDataSourceLanMatchId, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceById, "name", constant.LanResource+"."+constant.LanTestResource, "name"), - resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceById, "ip_failover.nic_uuid", constant.LanResource+"."+constant.LanTestResource, "ip_failover.nic_uuid"), - resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceById, "ip_failover.ip", constant.LanResource+"."+constant.LanTestResource, "ip_failover.ip"), - resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceById, "pcc", constant.LanResource+"."+constant.LanTestResource, "pcc"), - resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceById, "public", constant.LanResource+"."+constant.LanTestResource, "public"), - resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceById, "ipv6_cidr_block", constant.LanResource+"."+constant.LanTestResource, "ipv6_cidr_block"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceByID, "name", constant.LanResource+"."+constant.LanTestResource, "name"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceByID, "ip_failover.nic_uuid", constant.LanResource+"."+constant.LanTestResource, "ip_failover.nic_uuid"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceByID, "ip_failover.ip", constant.LanResource+"."+constant.LanTestResource, "ip_failover.ip"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceByID, "pcc", constant.LanResource+"."+constant.LanTestResource, "pcc"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceByID, "public", constant.LanResource+"."+constant.LanTestResource, "public"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceByID, "ipv6_cidr_block", constant.LanResource+"."+constant.LanTestResource, "ipv6_cidr_block"), ), }, { @@ -70,7 +71,28 @@ func TestAccLanBasic(t *testing.T) { resource.TestCheckResourceAttr(constant.LanResource+"."+constant.LanTestResource, "name", constant.UpdatedResources), resource.TestCheckResourceAttr(constant.LanResource+"."+constant.LanTestResource, "public", "false"), resource.TestCheckResourceAttrPair(constant.LanResource+"."+constant.LanTestResource, "pcc", constant.PCCResource+"."+constant.PCCTestResource, "id"), - resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceById, "ipv6_cidr_block", constant.LanResource+"."+constant.LanTestResource, "ipv6_cidr_block"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.LanDataSourceByID, "ipv6_cidr_block", constant.LanResource+"."+constant.LanTestResource, "ipv6_cidr_block"), + ), + }, + { + Config: privateLANConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckLanExists(constant.LanResource+"."+constant.PrivateLANTestResource, &privateLAN), + resource.TestCheckResourceAttr(constant.LanResource+"."+constant.PrivateLANTestResource, "name", constant.PrivateLANTestResource), + resource.TestCheckResourceAttr(constant.LanResource+"."+constant.PrivateLANTestResource, "public", "false"), + resource.TestCheckResourceAttrSet(constant.LanResource+"."+constant.PrivateLANTestResource, "ipv4_cidr_block"), + ), + }, + { + Config: dataSourcePrivateLANMatchName, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.PrivateLANDataSourceByName, "name", constant.LanResource+"."+constant.PrivateLANTestResource, "name"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.PrivateLANDataSourceByName, "ip_failover.nic_uuid", constant.LanResource+"."+constant.PrivateLANTestResource, "ip_failover.nic_uuid"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.PrivateLANDataSourceByName, "ip_failover.ip", constant.LanResource+"."+constant.PrivateLANTestResource, "ip_failover.ip"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.PrivateLANDataSourceByName, "pcc", constant.LanResource+"."+constant.PrivateLANTestResource, "pcc"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.PrivateLANDataSourceByName, "public", constant.LanResource+"."+constant.PrivateLANTestResource, "public"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.PrivateLANDataSourceByName, "ipv4_cidr_block", constant.LanResource+"."+constant.PrivateLANTestResource, "ipv4_cidr_block"), + resource.TestCheckResourceAttrPair(constant.DataSource+"."+constant.LanResource+"."+constant.PrivateLANDataSourceByName, "ipv6_cidr_block", constant.LanResource+"."+constant.PrivateLANTestResource, "ipv6_cidr_block"), ), }, }, @@ -148,14 +170,14 @@ resource ` + constant.LanResource + ` ` + constant.LanTestResource + ` { pcc = ` + constant.PCCResource + `.` + constant.PCCTestResource + `.id ipv6_cidr_block = cidrsubnet(` + constant.DatacenterResource + `.` + constant.DatacenterTestResource + `.ipv6_cidr_block` + `,8,2) } -data ` + constant.LanResource + ` ` + constant.LanDataSourceById + ` { +data ` + constant.LanResource + ` ` + constant.LanDataSourceByID + ` { datacenter_id = ` + constant.DatacenterResource + `.` + constant.DatacenterTestResource + `.id id = ` + constant.LanResource + `.` + constant.LanTestResource + `.id } ` const testAccDataSourceLanMatchId = testAccCheckLanConfigBasic + ` -data ` + constant.LanResource + ` ` + constant.LanDataSourceById + ` { +data ` + constant.LanResource + ` ` + constant.LanDataSourceByID + ` { datacenter_id = ` + constant.DatacenterResource + `.` + constant.DatacenterTestResource + `.id id = ` + constant.LanResource + `.` + constant.LanTestResource + `.id } @@ -168,6 +190,13 @@ data ` + constant.LanResource + ` ` + constant.LanDataSourceByName + ` { } ` +const dataSourcePrivateLANMatchName = privateLANConfig + ` +data ` + constant.LanResource + ` ` + constant.PrivateLANDataSourceByName + ` { + datacenter_id = ` + constant.DatacenterResource + `.` + constant.DatacenterTestResource + `.id + name = "` + constant.PrivateLANTestResource + `" +} +` + const testAccDataSourceLanMultipleResultsError = testAccCheckLanConfigBasic + ` resource ` + constant.LanResource + ` ` + constant.LanTestResource + `_multiple_results { datacenter_id = ` + constant.DatacenterResource + `.` + constant.DatacenterTestResource + `.id diff --git a/ionoscloud/test_constants.go b/ionoscloud/test_constants.go index d9925a1c3..764bcf994 100644 --- a/ionoscloud/test_constants.go +++ b/ionoscloud/test_constants.go @@ -39,6 +39,13 @@ resource ` + constant.LanResource + ` ` + constant.LanTestResource + ` { public = true name = "` + constant.LanTestResource + `" }` + + privateLANConfig = testAccCheckDatacenterConfigBasic + ` +resource ` + constant.LanResource + ` ` + constant.PrivateLANTestResource + ` { + datacenter_id = ` + constant.DatacenterResource + `.` + constant.DatacenterTestResource + `.id + public = false + name = "` + constant.PrivateLANTestResource + `" +}` ) // Private Crossconnect Constants diff --git a/utils/constant/constants.go b/utils/constant/constants.go index 6f8f45208..720089f88 100644 --- a/utils/constant/constants.go +++ b/utils/constant/constants.go @@ -113,10 +113,12 @@ const ( // Lan Constants const ( - LanResource = "ionoscloud_lan" - LanTestResource = "test_lan" - LanDataSourceById = "test_lan_id" - LanDataSourceByName = "test_lan_name" + LanResource = "ionoscloud_lan" + LanTestResource = "test_lan" + PrivateLANTestResource = "private_lan" + LanDataSourceByID = "test_lan_id" + LanDataSourceByName = "test_lan_name" + PrivateLANDataSourceByName = "private_lan_name" ) // Group Constants diff --git a/vendor/github.com/ionos-cloud/sdk-go/v6/client.go b/vendor/github.com/ionos-cloud/sdk-go/v6/client.go index 3a987de79..c65903412 100644 --- a/vendor/github.com/ionos-cloud/sdk-go/v6/client.go +++ b/vendor/github.com/ionos-cloud/sdk-go/v6/client.go @@ -52,7 +52,7 @@ const ( RequestStatusFailed = "FAILED" RequestStatusDone = "DONE" - Version = "6.3.0" + Version = "6.3.2" ) // Constants for APIs diff --git a/vendor/github.com/ionos-cloud/sdk-go/v6/configuration.go b/vendor/github.com/ionos-cloud/sdk-go/v6/configuration.go index 130ef833b..469e42079 100644 --- a/vendor/github.com/ionos-cloud/sdk-go/v6/configuration.go +++ b/vendor/github.com/ionos-cloud/sdk-go/v6/configuration.go @@ -131,7 +131,7 @@ func NewConfiguration(username, password, token, hostUrl string) *Configuration cfg := &Configuration{ DefaultHeader: make(map[string]string), DefaultQueryParams: url.Values{}, - UserAgent: "ionos-cloud-sdk-go/v6.3.0", + UserAgent: "ionos-cloud-sdk-go/v6.3.2", Debug: false, Username: username, Password: password, diff --git a/vendor/github.com/ionos-cloud/sdk-go/v6/model_group_properties.go b/vendor/github.com/ionos-cloud/sdk-go/v6/model_group_properties.go index f61b6c919..830070bf3 100644 --- a/vendor/github.com/ionos-cloud/sdk-go/v6/model_group_properties.go +++ b/vendor/github.com/ionos-cloud/sdk-go/v6/model_group_properties.go @@ -50,6 +50,24 @@ type GroupProperties struct { ManageRegistry *bool `json:"manageRegistry,omitempty"` // Privilege for a group to access and manage the Data Platform. ManageDataplatform *bool `json:"manageDataplatform,omitempty"` + // Privilege for a group to access and manage Logs. + AccessAndManageLogging *bool `json:"accessAndManageLogging,omitempty"` + // Privilege for a group to access and manage CDN. + AccessAndManageCdn *bool `json:"accessAndManageCdn,omitempty"` + // Privilege for a group to access and manage VPN. + AccessAndManageVpn *bool `json:"accessAndManageVpn,omitempty"` + // Privilege for a group to access and manage API Gateway. + AccessAndManageApiGateway *bool `json:"accessAndManageApiGateway,omitempty"` + // Privilege for a group to access and manage KaaS. + AccessAndManageKaas *bool `json:"accessAndManageKaas,omitempty"` + // Privilege for a group to access and manage Network File Storage. + AccessAndManageNetworkFileStorage *bool `json:"accessAndManageNetworkFileStorage,omitempty"` + // Privilege for a group to access and manage AI Model Hub. + AccessAndManageAiModelHub *bool `json:"accessAndManageAiModelHub,omitempty"` + // Privilege for a group to access and manage Password Policies. + AccessAndManageIamResources *bool `json:"accessAndManageIamResources,omitempty"` + // Privilege for a group to access and manage Network Security Groups. + CreateNetworkSecurityGroups *bool `json:"createNetworkSecurityGroups,omitempty"` } // NewGroupProperties instantiates a new GroupProperties object @@ -716,6 +734,348 @@ func (o *GroupProperties) HasManageDataplatform() bool { return false } +// GetAccessAndManageLogging returns the AccessAndManageLogging field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageLogging() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageLogging + +} + +// GetAccessAndManageLoggingOk returns a tuple with the AccessAndManageLogging field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageLoggingOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageLogging, true +} + +// SetAccessAndManageLogging sets field value +func (o *GroupProperties) SetAccessAndManageLogging(v bool) { + + o.AccessAndManageLogging = &v + +} + +// HasAccessAndManageLogging returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageLogging() bool { + if o != nil && o.AccessAndManageLogging != nil { + return true + } + + return false +} + +// GetAccessAndManageCdn returns the AccessAndManageCdn field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageCdn() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageCdn + +} + +// GetAccessAndManageCdnOk returns a tuple with the AccessAndManageCdn field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageCdnOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageCdn, true +} + +// SetAccessAndManageCdn sets field value +func (o *GroupProperties) SetAccessAndManageCdn(v bool) { + + o.AccessAndManageCdn = &v + +} + +// HasAccessAndManageCdn returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageCdn() bool { + if o != nil && o.AccessAndManageCdn != nil { + return true + } + + return false +} + +// GetAccessAndManageVpn returns the AccessAndManageVpn field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageVpn() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageVpn + +} + +// GetAccessAndManageVpnOk returns a tuple with the AccessAndManageVpn field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageVpnOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageVpn, true +} + +// SetAccessAndManageVpn sets field value +func (o *GroupProperties) SetAccessAndManageVpn(v bool) { + + o.AccessAndManageVpn = &v + +} + +// HasAccessAndManageVpn returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageVpn() bool { + if o != nil && o.AccessAndManageVpn != nil { + return true + } + + return false +} + +// GetAccessAndManageApiGateway returns the AccessAndManageApiGateway field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageApiGateway() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageApiGateway + +} + +// GetAccessAndManageApiGatewayOk returns a tuple with the AccessAndManageApiGateway field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageApiGatewayOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageApiGateway, true +} + +// SetAccessAndManageApiGateway sets field value +func (o *GroupProperties) SetAccessAndManageApiGateway(v bool) { + + o.AccessAndManageApiGateway = &v + +} + +// HasAccessAndManageApiGateway returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageApiGateway() bool { + if o != nil && o.AccessAndManageApiGateway != nil { + return true + } + + return false +} + +// GetAccessAndManageKaas returns the AccessAndManageKaas field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageKaas() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageKaas + +} + +// GetAccessAndManageKaasOk returns a tuple with the AccessAndManageKaas field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageKaasOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageKaas, true +} + +// SetAccessAndManageKaas sets field value +func (o *GroupProperties) SetAccessAndManageKaas(v bool) { + + o.AccessAndManageKaas = &v + +} + +// HasAccessAndManageKaas returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageKaas() bool { + if o != nil && o.AccessAndManageKaas != nil { + return true + } + + return false +} + +// GetAccessAndManageNetworkFileStorage returns the AccessAndManageNetworkFileStorage field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageNetworkFileStorage() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageNetworkFileStorage + +} + +// GetAccessAndManageNetworkFileStorageOk returns a tuple with the AccessAndManageNetworkFileStorage field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageNetworkFileStorageOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageNetworkFileStorage, true +} + +// SetAccessAndManageNetworkFileStorage sets field value +func (o *GroupProperties) SetAccessAndManageNetworkFileStorage(v bool) { + + o.AccessAndManageNetworkFileStorage = &v + +} + +// HasAccessAndManageNetworkFileStorage returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageNetworkFileStorage() bool { + if o != nil && o.AccessAndManageNetworkFileStorage != nil { + return true + } + + return false +} + +// GetAccessAndManageAiModelHub returns the AccessAndManageAiModelHub field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageAiModelHub() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageAiModelHub + +} + +// GetAccessAndManageAiModelHubOk returns a tuple with the AccessAndManageAiModelHub field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageAiModelHubOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageAiModelHub, true +} + +// SetAccessAndManageAiModelHub sets field value +func (o *GroupProperties) SetAccessAndManageAiModelHub(v bool) { + + o.AccessAndManageAiModelHub = &v + +} + +// HasAccessAndManageAiModelHub returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageAiModelHub() bool { + if o != nil && o.AccessAndManageAiModelHub != nil { + return true + } + + return false +} + +// GetAccessAndManageIamResources returns the AccessAndManageIamResources field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetAccessAndManageIamResources() *bool { + if o == nil { + return nil + } + + return o.AccessAndManageIamResources + +} + +// GetAccessAndManageIamResourcesOk returns a tuple with the AccessAndManageIamResources field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetAccessAndManageIamResourcesOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.AccessAndManageIamResources, true +} + +// SetAccessAndManageIamResources sets field value +func (o *GroupProperties) SetAccessAndManageIamResources(v bool) { + + o.AccessAndManageIamResources = &v + +} + +// HasAccessAndManageIamResources returns a boolean if a field has been set. +func (o *GroupProperties) HasAccessAndManageIamResources() bool { + if o != nil && o.AccessAndManageIamResources != nil { + return true + } + + return false +} + +// GetCreateNetworkSecurityGroups returns the CreateNetworkSecurityGroups field value +// If the value is explicit nil, nil is returned +func (o *GroupProperties) GetCreateNetworkSecurityGroups() *bool { + if o == nil { + return nil + } + + return o.CreateNetworkSecurityGroups + +} + +// GetCreateNetworkSecurityGroupsOk returns a tuple with the CreateNetworkSecurityGroups field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *GroupProperties) GetCreateNetworkSecurityGroupsOk() (*bool, bool) { + if o == nil { + return nil, false + } + + return o.CreateNetworkSecurityGroups, true +} + +// SetCreateNetworkSecurityGroups sets field value +func (o *GroupProperties) SetCreateNetworkSecurityGroups(v bool) { + + o.CreateNetworkSecurityGroups = &v + +} + +// HasCreateNetworkSecurityGroups returns a boolean if a field has been set. +func (o *GroupProperties) HasCreateNetworkSecurityGroups() bool { + if o != nil && o.CreateNetworkSecurityGroups != nil { + return true + } + + return false +} + func (o GroupProperties) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Name != nil { @@ -786,6 +1146,42 @@ func (o GroupProperties) MarshalJSON() ([]byte, error) { toSerialize["manageDataplatform"] = o.ManageDataplatform } + if o.AccessAndManageLogging != nil { + toSerialize["accessAndManageLogging"] = o.AccessAndManageLogging + } + + if o.AccessAndManageCdn != nil { + toSerialize["accessAndManageCdn"] = o.AccessAndManageCdn + } + + if o.AccessAndManageVpn != nil { + toSerialize["accessAndManageVpn"] = o.AccessAndManageVpn + } + + if o.AccessAndManageApiGateway != nil { + toSerialize["accessAndManageApiGateway"] = o.AccessAndManageApiGateway + } + + if o.AccessAndManageKaas != nil { + toSerialize["accessAndManageKaas"] = o.AccessAndManageKaas + } + + if o.AccessAndManageNetworkFileStorage != nil { + toSerialize["accessAndManageNetworkFileStorage"] = o.AccessAndManageNetworkFileStorage + } + + if o.AccessAndManageAiModelHub != nil { + toSerialize["accessAndManageAiModelHub"] = o.AccessAndManageAiModelHub + } + + if o.AccessAndManageIamResources != nil { + toSerialize["accessAndManageIamResources"] = o.AccessAndManageIamResources + } + + if o.CreateNetworkSecurityGroups != nil { + toSerialize["createNetworkSecurityGroups"] = o.CreateNetworkSecurityGroups + } + return json.Marshal(toSerialize) } diff --git a/vendor/github.com/ionos-cloud/sdk-go/v6/model_lan_properties.go b/vendor/github.com/ionos-cloud/sdk-go/v6/model_lan_properties.go index e685c79fe..909c1badd 100644 --- a/vendor/github.com/ionos-cloud/sdk-go/v6/model_lan_properties.go +++ b/vendor/github.com/ionos-cloud/sdk-go/v6/model_lan_properties.go @@ -20,6 +20,9 @@ type LanProperties struct { Name *string `json:"name,omitempty"` // IP failover configurations for lan IpFailover *[]IPFailover `json:"ipFailover,omitempty"` + // For public LANs this property is null, for private LANs it contains the private IPv4 CIDR range. This property is a read only property. + // to set this field to `nil` in order to be marshalled, the explicit nil address `Nilstring` can be used, or the setter `SetIpv4CidrBlockNil` + Ipv4CidrBlock *string `json:"ipv4CidrBlock,omitempty"` // For a GET request, this value is either 'null' or contains the LAN's /64 IPv6 CIDR block if this LAN is IPv6 enabled. For POST/PUT/PATCH requests, 'AUTO' will result in enabling this LAN for IPv6 and automatically assign a /64 IPv6 CIDR block to this LAN and /80 IPv6 CIDR blocks to the NICs and one /128 IPv6 address to each connected NIC. If you choose the IPv6 CIDR block for the LAN on your own, then you must provide a /64 block, which is inside the IPv6 CIDR block of the virtual datacenter and unique inside all LANs from this virtual datacenter. If you enable IPv6 on a LAN with NICs, those NICs will get a /80 IPv6 CIDR block and one IPv6 address assigned to each automatically, unless you specify them explicitly on the LAN and on the NICs. A virtual data center is limited to a maximum of 256 IPv6-enabled LANs. // to set this field to `nil` in order to be marshalled, the explicit nil address `Nilstring` can be used, or the setter `SetIpv6CidrBlockNil` Ipv6CidrBlock *string `json:"ipv6CidrBlock,omitempty"` @@ -123,6 +126,49 @@ func (o *LanProperties) HasIpFailover() bool { return false } +// GetIpv4CidrBlock returns the Ipv4CidrBlock field value +// If the value is explicit nil, nil is returned +func (o *LanProperties) GetIpv4CidrBlock() *string { + if o == nil { + return nil + } + + return o.Ipv4CidrBlock + +} + +// GetIpv4CidrBlockOk returns a tuple with the Ipv4CidrBlock field value +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *LanProperties) GetIpv4CidrBlockOk() (*string, bool) { + if o == nil { + return nil, false + } + + return o.Ipv4CidrBlock, true +} + +// SetIpv4CidrBlock sets field value +func (o *LanProperties) SetIpv4CidrBlock(v string) { + + o.Ipv4CidrBlock = &v + +} + +// sets Ipv4CidrBlock to the explicit address that will be encoded as nil when marshaled +func (o *LanProperties) SetIpv4CidrBlockNil() { + o.Ipv4CidrBlock = &Nilstring +} + +// HasIpv4CidrBlock returns a boolean if a field has been set. +func (o *LanProperties) HasIpv4CidrBlock() bool { + if o != nil && o.Ipv4CidrBlock != nil { + return true + } + + return false +} + // GetIpv6CidrBlock returns the Ipv6CidrBlock field value // If the value is explicit nil, nil is returned func (o *LanProperties) GetIpv6CidrBlock() *string { @@ -252,6 +298,12 @@ func (o LanProperties) MarshalJSON() ([]byte, error) { toSerialize["ipFailover"] = o.IpFailover } + if o.Ipv4CidrBlock == &Nilstring { + toSerialize["ipv4CidrBlock"] = nil + } else if o.Ipv4CidrBlock != nil { + toSerialize["ipv4CidrBlock"] = o.Ipv4CidrBlock + } + if o.Ipv6CidrBlock == &Nilstring { toSerialize["ipv6CidrBlock"] = nil } else if o.Ipv6CidrBlock != nil { diff --git a/vendor/modules.txt b/vendor/modules.txt index 8ed3b0588..2a1e603f4 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -368,7 +368,7 @@ github.com/ionos-cloud/sdk-go-object-storage-management # github.com/ionos-cloud/sdk-go-vm-autoscaling v1.0.1 ## explicit; go 1.18 github.com/ionos-cloud/sdk-go-vm-autoscaling -# github.com/ionos-cloud/sdk-go/v6 v6.3.0 +# github.com/ionos-cloud/sdk-go/v6 v6.3.2 ## explicit; go 1.21 github.com/ionos-cloud/sdk-go/v6 # github.com/jmespath/go-jmespath v0.4.0