From d3a961a07aed299fb41cd48b60de40df1fdabf12 Mon Sep 17 00:00:00 2001 From: Alexandr Gorshunov Date: Mon, 29 Jan 2024 08:52:56 +0100 Subject: [PATCH 1/2] GCLOUD2-13091 get gcore_floatingip by fixed_ip_address --- docs/data-sources/floatingip.md | 13 ++++--- .../gcore_floatingip/data-source.tf | 6 ++++ gcore/data_source_gcore_floatingip.go | 35 +++++++++++++++++-- go.sum | 11 ++++++ 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/docs/data-sources/floatingip.md b/docs/data-sources/floatingip.md index 7c652752..0cec056a 100644 --- a/docs/data-sources/floatingip.md +++ b/docs/data-sources/floatingip.md @@ -31,6 +31,12 @@ data "gcore_floatingip" "ip" { project_id = data.gcore_project.pr.id } +data "gcore_floatingip" "ip_by_fixed_ip" { + fixed_ip_address = "192.168.42.12" + region_id = data.gcore_region.rg.id + project_id = data.gcore_project.pr.id +} + output "view" { value = data.gcore_floatingip.ip } @@ -39,12 +45,10 @@ output "view" { ## Schema -### Required - -- `floating_ip_address` (String) - ### Optional +- `fixed_ip_address` (String) +- `floating_ip_address` (String) - `metadata_k` (String) - `metadata_kv` (Map of String) - `port_id` (String) @@ -55,7 +59,6 @@ output "view" { ### Read-Only -- `fixed_ip_address` (String) - `id` (String) The ID of this resource. - `metadata_read_only` (List of Object) (see [below for nested schema](#nestedatt--metadata_read_only)) - `router_id` (String) diff --git a/examples/data-sources/gcore_floatingip/data-source.tf b/examples/data-sources/gcore_floatingip/data-source.tf index f792878d..da0b380f 100644 --- a/examples/data-sources/gcore_floatingip/data-source.tf +++ b/examples/data-sources/gcore_floatingip/data-source.tf @@ -16,6 +16,12 @@ data "gcore_floatingip" "ip" { project_id = data.gcore_project.pr.id } +data "gcore_floatingip" "ip_by_fixed_ip" { + fixed_ip_address = "192.168.42.12" + region_id = data.gcore_region.rg.id + project_id = data.gcore_project.pr.id +} + output "view" { value = data.gcore_floatingip.ip } diff --git a/gcore/data_source_gcore_floatingip.go b/gcore/data_source_gcore_floatingip.go index 67ece38c..aea96a53 100644 --- a/gcore/data_source_gcore_floatingip.go +++ b/gcore/data_source_gcore_floatingip.go @@ -55,7 +55,12 @@ func dataSourceFloatingIP() *schema.Resource { }, "floating_ip_address": &schema.Schema{ Type: schema.TypeString, - Required: true, + Optional: true, + Computed: true, + ExactlyOneOf: []string{ + "fixed_ip_address", + "floating_ip_address", + }, ValidateDiagFunc: func(val interface{}, key cty.Path) diag.Diagnostics { v := val.(string) ip := net.ParseIP(v) @@ -66,11 +71,25 @@ func dataSourceFloatingIP() *schema.Resource { return diag.FromErr(fmt.Errorf("%q must be a valid ip, got: %s", key, v)) }, }, - "status": &schema.Schema{ + "fixed_ip_address": &schema.Schema{ Type: schema.TypeString, + Optional: true, Computed: true, + ExactlyOneOf: []string{ + "fixed_ip_address", + "floating_ip_address", + }, + ValidateDiagFunc: func(val interface{}, key cty.Path) diag.Diagnostics { + v := val.(string) + ip := net.ParseIP(v) + if ip != nil { + return diag.Diagnostics{} + } + + return diag.FromErr(fmt.Errorf("%q must be a valid ip, got: %s", key, v)) + }, }, - "fixed_ip_address": &schema.Schema{ + "status": &schema.Schema{ Type: schema.TypeString, Computed: true, }, @@ -129,6 +148,10 @@ func dataSourceFloatingIPRead(ctx context.Context, d *schema.ResourceData, m int } ipAddr := d.Get("floating_ip_address").(string) + if ipAddr == "" { + ipAddr = d.Get("fixed_ip_address").(string) + } + metaOpts := &floatingips.ListOpts{} if metadataK, ok := d.GetOk("metadata_k"); ok { @@ -156,6 +179,12 @@ func dataSourceFloatingIPRead(ctx context.Context, d *schema.ResourceData, m int found = true break } + + if ip.FixedIPAddress.String() == ipAddr { + floatingIP = ip + found = true + break + } } if !found { diff --git a/go.sum b/go.sum index a2e52c14..f1b1ae18 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,11 @@ github.com/G-Core/gcorelabscdn-go v1.0.3/go.mod h1:iSGXaTvZBzDHQW+rKFS918BgFVpON github.com/G-Core/gcorelabscloud-go v0.6.28 h1:o6rdeRNUr/k8ggJuMU/Fm7ZkO2k01TSdtXsjQtJqJZQ= github.com/G-Core/gcorelabscloud-go v0.6.28/go.mod h1:13Z1USxlxPbDFuYQyWqfNexlk4kUvOYTXbnvV/Z1lZo= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmyxvxX8= +github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec h1:vV3RryLxt42+ZIVOFbYJCH1jsZNTNmj2NYru5zfx+4E= @@ -30,12 +33,14 @@ github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJE github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= @@ -207,6 +212,7 @@ github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv2 github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= +github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -258,6 +264,7 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mitchellh/cli v1.1.5 h1:OxRIeJXpAMztws/XHlN2vu6imG5Dpq+j61AzAX5fLng= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= @@ -289,10 +296,12 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -306,6 +315,7 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -375,6 +385,7 @@ golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= +golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= From 4bd6f5f0024d3242dad81e31852d3bcc3b602e1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20=C5=81api=C5=84ski?= <51078264+lapson97@users.noreply.github.com> Date: Mon, 29 Jan 2024 10:39:48 +0100 Subject: [PATCH 2/2] Replace subnet on CIDR provided (#63) --- gcore/resource_gcore_subnet.go | 1 + 1 file changed, 1 insertion(+) diff --git a/gcore/resource_gcore_subnet.go b/gcore/resource_gcore_subnet.go index 0e3cfd68..cb2db760 100644 --- a/gcore/resource_gcore_subnet.go +++ b/gcore/resource_gcore_subnet.go @@ -91,6 +91,7 @@ func resourceSubnet() *schema.Resource { "cidr": &schema.Schema{ Type: schema.TypeString, Required: true, + ForceNew: true, }, "network_id": &schema.Schema{ Type: schema.TypeString,