diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index ae84e3a7..1e5d7432 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: b5c8bf75-06e1-47c8-b9ae-ce49ba56069d management: - docChecksum: ee04dfe8327565089f2b52d5ff76d8b4 + docChecksum: ffabb9470482bbb9ea2bde2b2c859bb7 docVersion: "1.0" - speakeasyVersion: 1.440.2 - generationVersion: 2.460.1 - releaseVersion: 0.28.3 - configChecksum: 1bbd4228355ee5dd94f3d6fae12984ae + speakeasyVersion: 1.441.2 + generationVersion: 2.461.4 + releaseVersion: 0.28.4 + configChecksum: 1d111cd78447ba741351b00cb8309198 repoURL: https://github.com/opalsecurity/terraform-provider-opal.git repoSubDirectory: . published: true @@ -23,7 +23,7 @@ features: ignores: 2.81.1 nameOverrides: 2.81.2 nullables: 0.0.0 - retries: 2.81.1 + retries: 2.81.2 serverIDs: 2.81.1 sets: 0.1.2 unions: 2.81.17 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 0a577885..f41922be 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,17 +1,17 @@ -speakeasyVersion: 1.440.2 +speakeasyVersion: 1.441.2 sources: opal-terraform-provider: sourceNamespace: opal-terraform-provider - sourceRevisionDigest: sha256:b473dd95a3f51ce5fe34993d031328715dee175946b2ca43e8a85b20779ab267 - sourceBlobDigest: sha256:aac03371fed2215d46c9ed49b50bc1faf98e30df6c94494aa3473d8d4022e7b5 + sourceRevisionDigest: sha256:775e23af25186f495171d28de24bd67cdff6fa8bd9710928f241c94da74a821c + sourceBlobDigest: sha256:ea3e64becc89807d41bdf309204278923f91882cd77cf7765fe512dde5f12a54 tags: - latest targets: terraform: source: opal-terraform-provider sourceNamespace: opal-terraform-provider - sourceRevisionDigest: sha256:b473dd95a3f51ce5fe34993d031328715dee175946b2ca43e8a85b20779ab267 - sourceBlobDigest: sha256:aac03371fed2215d46c9ed49b50bc1faf98e30df6c94494aa3473d8d4022e7b5 + sourceRevisionDigest: sha256:775e23af25186f495171d28de24bd67cdff6fa8bd9710928f241c94da74a821c + sourceBlobDigest: sha256:ea3e64becc89807d41bdf309204278923f91882cd77cf7765fe512dde5f12a54 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index 2bfd6b69..c9a965bb 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ terraform { required_providers { opal = { source = "opalsecurity/opal" - version = "0.28.3" + version = "0.28.4" } } } diff --git a/docs/index.md b/docs/index.md index 277d8f0f..aa2efa46 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,7 @@ terraform { required_providers { opal = { source = "opalsecurity/opal" - version = "0.28.3" + version = "0.28.4" } } } diff --git a/examples/provider/provider.tf b/examples/provider/provider.tf index 063e8ba2..3361ca8e 100644 --- a/examples/provider/provider.tf +++ b/examples/provider/provider.tf @@ -2,7 +2,7 @@ terraform { required_providers { opal = { source = "opalsecurity/opal" - version = "0.28.3" + version = "0.28.4" } } } diff --git a/gen.yaml b/gen.yaml index 446ce420..2a87a086 100644 --- a/gen.yaml +++ b/gen.yaml @@ -12,7 +12,7 @@ generation: oAuth2PasswordEnabled: false flattenGlobalSecurity: true terraform: - version: 0.28.3 + version: 0.28.4 additionalDataSources: [] additionalDependencies: {} additionalResources: [] diff --git a/go.mod b/go.mod index 28e7273b..987e0dfa 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,14 @@ module github.com/opalsecurity/terraform-provider-opal go 1.22.0 require ( - github.com/cenkalti/backoff/v4 v4.2.0 github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 github.com/hashicorp/go-uuid v1.0.3 github.com/hashicorp/terraform-plugin-docs v0.19.4 github.com/hashicorp/terraform-plugin-framework v1.12.0 github.com/hashicorp/terraform-plugin-framework-validators v0.13.0 - github.com/hashicorp/terraform-plugin-go v0.24.0 + github.com/hashicorp/terraform-plugin-go v0.25.0 github.com/hashicorp/terraform-plugin-log v0.9.0 - github.com/hashicorp/terraform-plugin-testing v1.10.0 + github.com/hashicorp/terraform-plugin-testing v1.11.0 github.com/pkg/errors v0.9.1 ) @@ -39,15 +38,15 @@ require ( github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-plugin v1.6.1 // indirect + github.com/hashicorp/go-plugin v1.6.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-version v1.7.0 // indirect - github.com/hashicorp/hc-install v0.8.0 // indirect - github.com/hashicorp/hcl/v2 v2.21.0 // indirect + github.com/hashicorp/hc-install v0.9.0 // indirect + github.com/hashicorp/hcl/v2 v2.23.0 // indirect github.com/hashicorp/logutils v1.0.0 // indirect github.com/hashicorp/terraform-exec v0.21.0 // indirect - github.com/hashicorp/terraform-json v0.22.1 // indirect - github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 // indirect + github.com/hashicorp/terraform-json v0.23.0 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 // indirect github.com/hashicorp/terraform-registry-address v0.2.3 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect @@ -72,18 +71,18 @@ require ( github.com/yuin/goldmark-meta v1.1.0 // indirect github.com/zclconf/go-cty v1.15.0 // indirect go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect - golang.org/x/crypto v0.26.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect - golang.org/x/mod v0.19.0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.23.0 // indirect - golang.org/x/text v0.17.0 // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/grpc v1.66.2 // indirect - google.golang.org/protobuf v1.34.2 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/yaml.v2 v2.3.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 2dcf5070..1b947055 100644 --- a/go.sum +++ b/go.sum @@ -27,8 +27,6 @@ github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwN github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= -github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= @@ -84,8 +82,8 @@ github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVH github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI= -github.com/hashicorp/go-plugin v1.6.1/go.mod h1:XPHFku2tFo3o3QKFgSYo+cghcUhw1NA1hZyMK0PWAw0= +github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog= +github.com/hashicorp/go-plugin v1.6.2/go.mod h1:CkgLQ5CZqNmdL9U9JzM532t8ZiYQ35+pj3b1FD37R0Q= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -93,30 +91,30 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/hc-install v0.8.0 h1:LdpZeXkZYMQhoKPCecJHlKvUkQFixN/nvyR1CdfOLjI= -github.com/hashicorp/hc-install v0.8.0/go.mod h1:+MwJYjDfCruSD/udvBmRB22Nlkwwkwf5sAB6uTIhSaU= -github.com/hashicorp/hcl/v2 v2.21.0 h1:lve4q/o/2rqwYOgUg3y3V2YPyD1/zkCLGjIV74Jit14= -github.com/hashicorp/hcl/v2 v2.21.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= +github.com/hashicorp/hc-install v0.9.0 h1:2dIk8LcvANwtv3QZLckxcjyF5w8KVtiMxu6G6eLhghE= +github.com/hashicorp/hc-install v0.9.0/go.mod h1:+6vOP+mf3tuGgMApVYtmsnDoKWMDcFXeTxCACYZ8SFg= +github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos= +github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/terraform-exec v0.21.0 h1:uNkLAe95ey5Uux6KJdua6+cv8asgILFVWkd/RG0D2XQ= github.com/hashicorp/terraform-exec v0.21.0/go.mod h1:1PPeMYou+KDUSSeRE9szMZ/oHf4fYUmB923Wzbq1ICg= -github.com/hashicorp/terraform-json v0.22.1 h1:xft84GZR0QzjPVWs4lRUwvTcPnegqlyS7orfb5Ltvec= -github.com/hashicorp/terraform-json v0.22.1/go.mod h1:JbWSQCLFSXFFhg42T7l9iJwdGXBYV8fmmD6o/ML4p3A= +github.com/hashicorp/terraform-json v0.23.0 h1:sniCkExU4iKtTADReHzACkk8fnpQXrdD2xoR+lppBkI= +github.com/hashicorp/terraform-json v0.23.0/go.mod h1:MHdXbBAbSg0GvzuWazEGKAn/cyNfIB7mN6y7KJN6y2c= github.com/hashicorp/terraform-plugin-docs v0.19.4 h1:G3Bgo7J22OMtegIgn8Cd/CaSeyEljqjH3G39w28JK4c= github.com/hashicorp/terraform-plugin-docs v0.19.4/go.mod h1:4pLASsatTmRynVzsjEhbXZ6s7xBlUw/2Kt0zfrq8HxA= github.com/hashicorp/terraform-plugin-framework v1.12.0 h1:7HKaueHPaikX5/7cbC1r9d1m12iYHY+FlNZEGxQ42CQ= github.com/hashicorp/terraform-plugin-framework v1.12.0/go.mod h1:N/IOQ2uYjW60Jp39Cp3mw7I/OpC/GfZ0385R0YibmkE= github.com/hashicorp/terraform-plugin-framework-validators v0.13.0 h1:bxZfGo9DIUoLLtHMElsu+zwqI4IsMZQBRRy4iLzZJ8E= github.com/hashicorp/terraform-plugin-framework-validators v0.13.0/go.mod h1:wGeI02gEhj9nPANU62F2jCaHjXulejm/X+af4PdZaNo= -github.com/hashicorp/terraform-plugin-go v0.24.0 h1:2WpHhginCdVhFIrWHxDEg6RBn3YaWzR2o6qUeIEat2U= -github.com/hashicorp/terraform-plugin-go v0.24.0/go.mod h1:tUQ53lAsOyYSckFGEefGC5C8BAaO0ENqzFd3bQeuYQg= +github.com/hashicorp/terraform-plugin-go v0.25.0 h1:oi13cx7xXA6QciMcpcFi/rwA974rdTxjqEhXJjbAyks= +github.com/hashicorp/terraform-plugin-go v0.25.0/go.mod h1:+SYagMYadJP86Kvn+TGeV+ofr/R3g4/If0O5sO96MVw= github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 h1:kJiWGx2kiQVo97Y5IOGR4EMcZ8DtMswHhUuFibsCQQE= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0/go.mod h1:sl/UoabMc37HA6ICVMmGO+/0wofkVIRxf+BMb/dnoIg= -github.com/hashicorp/terraform-plugin-testing v1.10.0 h1:2+tmRNhvnfE4Bs8rB6v58S/VpqzGC6RCh9Y8ujdn+aw= -github.com/hashicorp/terraform-plugin-testing v1.10.0/go.mod h1:iWRW3+loP33WMch2P/TEyCxxct/ZEcCGMquSLSCVsrc= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 h1:wyKCCtn6pBBL46c1uIIBNUOWlNfYXfXpVo16iDyLp8Y= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0/go.mod h1:B0Al8NyYVr8Mp/KLwssKXG1RqnTk7FySqSn4fRuLNgw= +github.com/hashicorp/terraform-plugin-testing v1.11.0 h1:MeDT5W3YHbONJt2aPQyaBsgQeAIckwPX41EUHXEn29A= +github.com/hashicorp/terraform-plugin-testing v1.11.0/go.mod h1:WNAHQ3DcgV/0J+B15WTE6hDvxcUdkPPpnB1FR3M910U= github.com/hashicorp/terraform-registry-address v0.2.3 h1:2TAiKJ1A3MAkZlH1YI/aTVcLZRu7JseiXNRHbOAyoTI= github.com/hashicorp/terraform-registry-address v0.2.3/go.mod h1:lFHA76T8jfQteVfT7caREqguFrW3c4MFSPhZB7HHgUM= github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= @@ -191,8 +189,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= @@ -216,25 +214,25 @@ go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= -golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= 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.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +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/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -248,21 +246,21 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= -golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -273,14 +271,14 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/provider/group_resource.go b/internal/provider/group_resource.go index 6b945574..d3ca1b27 100644 --- a/internal/provider/group_resource.go +++ b/internal/provider/group_resource.go @@ -724,8 +724,11 @@ func (r *GroupResource) Schema(ctx context.Context, req resource.SchemaRequest, }, }, "risk_sensitivity_override": schema.StringAttribute{ - Computed: true, - Optional: true, + Computed: true, + Optional: true, + PlanModifiers: []planmodifier.String{ + speakeasy_stringplanmodifier.SuppressDiff(speakeasy_stringplanmodifier.ExplicitSuppress), + }, Description: `Indicates the level of potential impact misuse or unauthorized access may incur. must be one of ["UNKNOWN", "CRITICAL", "HIGH", "MEDIUM", "LOW", "NONE"]`, Validators: []validator.String{ stringvalidator.OneOf( diff --git a/internal/provider/resource_resource.go b/internal/provider/resource_resource.go index 1f39b3c7..e668f230 100644 --- a/internal/provider/resource_resource.go +++ b/internal/provider/resource_resource.go @@ -1222,8 +1222,11 @@ func (r *ResourceResource) Schema(ctx context.Context, req resource.SchemaReques }, }, "risk_sensitivity_override": schema.StringAttribute{ - Computed: true, - Optional: true, + Computed: true, + Optional: true, + PlanModifiers: []planmodifier.String{ + speakeasy_stringplanmodifier.SuppressDiff(speakeasy_stringplanmodifier.ExplicitSuppress), + }, Description: `Indicates the level of potential impact misuse or unauthorized access may incur. must be one of ["UNKNOWN", "CRITICAL", "HIGH", "MEDIUM", "LOW", "NONE"]`, Validators: []validator.String{ stringvalidator.OneOf( diff --git a/internal/sdk/apps.go b/internal/sdk/apps.go index 249a5bd8..7c6dbe0f 100644 --- a/internal/sdk/apps.go +++ b/internal/sdk/apps.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -117,7 +116,11 @@ func (s *Apps) Get(ctx context.Context, request operations.GetAppsRequest, opts req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -298,7 +301,11 @@ func (s *Apps) GetID(ctx context.Context, request operations.GetAppIDRequest, op req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/configurationtemplates.go b/internal/sdk/configurationtemplates.go index a7a48067..869352cd 100644 --- a/internal/sdk/configurationtemplates.go +++ b/internal/sdk/configurationtemplates.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *ConfigurationTemplates) Create(ctx context.Context, request shared.Crea req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -299,7 +302,11 @@ func (s *ConfigurationTemplates) Delete(ctx context.Context, request operations. req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -459,7 +466,11 @@ func (s *ConfigurationTemplates) Get(ctx context.Context, opts ...operations.Opt req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -646,7 +657,11 @@ func (s *ConfigurationTemplates) Update(ctx context.Context, request shared.Upda req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/events.go b/internal/sdk/events.go index 4e97272c..7f3efc46 100644 --- a/internal/sdk/events.go +++ b/internal/sdk/events.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -117,7 +116,11 @@ func (s *Events) Get(ctx context.Context, request operations.GetEventsRequest, o req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/groupbindings.go b/internal/sdk/groupbindings.go index 8deabe34..36456045 100644 --- a/internal/sdk/groupbindings.go +++ b/internal/sdk/groupbindings.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -118,7 +117,11 @@ func (s *GroupBindings) CreateGroupBinding(ctx context.Context, request shared.C req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -298,7 +301,11 @@ func (s *GroupBindings) DeleteGroupBinding(ctx context.Context, request operatio req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -458,7 +465,11 @@ func (s *GroupBindings) GetGroupBinding(ctx context.Context, request operations. req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -643,7 +654,11 @@ func (s *GroupBindings) GetGroupBindings(ctx context.Context, request operations req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -830,7 +845,11 @@ func (s *GroupBindings) UpdateGroupBindings(ctx context.Context, request shared. req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/groups.go b/internal/sdk/groups.go index 2a66292b..be8ab768 100644 --- a/internal/sdk/groups.go +++ b/internal/sdk/groups.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *Groups) Create(ctx context.Context, request shared.CreateGroupInfo, opt req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -309,7 +312,11 @@ func (s *Groups) CreateResources(ctx context.Context, request operations.CreateG req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -495,7 +502,11 @@ func (s *Groups) CreateUser(ctx context.Context, request operations.CreateGroupU req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -675,7 +686,11 @@ func (s *Groups) Delete(ctx context.Context, request operations.DeleteGroupReque req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -835,7 +850,11 @@ func (s *Groups) DeleteUser(ctx context.Context, request operations.DeleteGroupU req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -995,7 +1014,11 @@ func (s *Groups) GetGroup(ctx context.Context, request operations.GetGroupReques req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1176,7 +1199,11 @@ func (s *Groups) GetMessageChannels(ctx context.Context, request operations.GetG req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1357,7 +1384,11 @@ func (s *Groups) GetOnCallSchedule(ctx context.Context, request operations.GetGr req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1538,7 +1569,11 @@ func (s *Groups) GetResources(ctx context.Context, request operations.GetGroupRe req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1719,7 +1754,11 @@ func (s *Groups) GetReviewersStages(ctx context.Context, request operations.GetG req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1900,7 +1939,11 @@ func (s *Groups) GetTags(ctx context.Context, request operations.GetGroupTagsReq req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2081,7 +2124,11 @@ func (s *Groups) GetUsers(ctx context.Context, request operations.GetGroupUsersR req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2262,7 +2309,11 @@ func (s *Groups) GetVisibility(ctx context.Context, request operations.GetGroupV req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2447,7 +2498,11 @@ func (s *Groups) List(ctx context.Context, request operations.GetGroupsRequest, req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2634,7 +2689,11 @@ func (s *Groups) Update(ctx context.Context, request shared.UpdateGroupInfoList, req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2820,7 +2879,11 @@ func (s *Groups) UpdateMessageChannels(ctx context.Context, request operations.U req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2986,7 +3049,11 @@ func (s *Groups) UpdateOnCallSchedule(ctx context.Context, request operations.Up req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -3152,7 +3219,11 @@ func (s *Groups) UpdateResources(ctx context.Context, request operations.UpdateG req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -3318,7 +3389,11 @@ func (s *Groups) UpdateReviewersStages(ctx context.Context, request operations.U req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -3504,7 +3579,11 @@ func (s *Groups) UpdateVisibility(ctx context.Context, request operations.Update req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/idpgroupmappings.go b/internal/sdk/idpgroupmappings.go index dcaa5eb1..d96b5343 100644 --- a/internal/sdk/idpgroupmappings.go +++ b/internal/sdk/idpgroupmappings.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -111,7 +110,11 @@ func (s *IdpGroupMappings) DeleteIdpGroupMappingsByAppResourceIDGroupID(ctx cont req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -271,7 +274,11 @@ func (s *IdpGroupMappings) GetIdpGroupMappings(ctx context.Context, request oper req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -457,7 +464,11 @@ func (s *IdpGroupMappings) UpdateIdpGroupMappings(ctx context.Context, request o req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/internal/utils/retries.go b/internal/sdk/internal/utils/retries.go index 21fcceae..86b03e45 100644 --- a/internal/sdk/internal/utils/retries.go +++ b/internal/sdk/internal/utils/retries.go @@ -6,8 +6,9 @@ import ( "context" "errors" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/retry" + "math" + "math/rand" "net/http" "net/url" "strconv" @@ -15,8 +16,6 @@ import ( "time" ) -var errRequestFailed = errors.New("request failed") - // Deprecated: Use retry.BackoffStrategy instead. type BackoffStrategy = retry.BackoffStrategy @@ -28,34 +27,27 @@ type Retries struct { StatusCodes []string } -func Retry(ctx context.Context, r Retries, action func() (*http.Response, error)) (*http.Response, error) { +func Retry(ctx context.Context, r Retries, operation func() (*http.Response, error)) (*http.Response, error) { switch r.Config.Strategy { case "backoff": if r.Config.Backoff == nil { - return action() + return operation() } - config := backoff.NewExponentialBackOff() - config.InitialInterval = time.Duration(r.Config.Backoff.InitialInterval) * time.Millisecond - config.MaxInterval = time.Duration(r.Config.Backoff.MaxInterval) * time.Millisecond - config.Multiplier = r.Config.Backoff.Exponent - config.MaxElapsedTime = time.Duration(r.Config.Backoff.MaxElapsedTime) * time.Millisecond - config.Reset() - var resp *http.Response - err := backoff.Retry(func() error { + err := retryWithBackoff(ctx, r.Config.Backoff, func() error { if resp != nil { resp.Body.Close() } select { case <-ctx.Done(): - return backoff.Permanent(ctx.Err()) + return retry.Permanent(ctx.Err()) default: } - res, err := action() + res, err := operation() if err != nil { urlError := new(url.Error) if errors.As(err, &urlError) { @@ -64,7 +56,7 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error) } } - return backoff.Permanent(err) + return retry.Permanent(err) } resp = res if res == nil { @@ -81,7 +73,7 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error) s := res.StatusCode / 100 if s >= codeRange && s < codeRange+1 { - return errRequestFailed + return retry.TemporaryFromResponse("request failed", res) } } else { parsedCode, err := strconv.Atoi(code) @@ -90,7 +82,7 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error) } if res.StatusCode == parsedCode { - return errRequestFailed + return retry.TemporaryFromResponse("request failed", res) } } } @@ -98,13 +90,131 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error) resp = res return nil - }, config) - if err != nil && !errors.Is(err, errRequestFailed) { + }) + + var tempErr *retry.TemporaryError + if err != nil && !errors.As(err, &tempErr) { return nil, err } return resp, nil default: - return action() + return operation() + } +} + +func retryWithBackoff(ctx context.Context, s *retry.BackoffStrategy, operation func() error) error { + var ( + err error + next time.Duration + attempt int + start = time.Now() + maxElapsedTime = time.Duration(s.MaxElapsedTime) * time.Millisecond + ) + + timer := &defaultTimer{} + defer func() { + timer.Stop() + }() + + for { + err = operation() + if err == nil { + return nil + } + + var permanent *retry.PermanentError + if errors.As(err, &permanent) { + return permanent.Unwrap() + } + + if time.Since(start) >= maxElapsedTime { + return err + } + + var temporary *retry.TemporaryError + if errors.As(err, &temporary) { + next = temporary.RetryAfter() + } + + if next <= 0 { + next = nextInterval(s, attempt) + } + + timer.Start(next) + + select { + case <-ctx.Done(): + return ctx.Err() + case <-timer.C(): + } + + attempt += 1 } } + +type Timer interface { + Start(duration time.Duration) + Stop() + C() <-chan time.Time +} + +// defaultTimer implements Timer interface using time.Timer +type defaultTimer struct { + timer *time.Timer +} + +// C returns the timers channel which receives the current time when the timer fires. +func (t *defaultTimer) C() <-chan time.Time { + return t.timer.C +} + +// Start starts the timer to fire after the given duration +func (t *defaultTimer) Start(duration time.Duration) { + if t.timer == nil { + t.timer = time.NewTimer(duration) + return + } + + if !t.timer.Stop() { + select { + case <-t.timer.C: + default: + } + } + + t.timer.Reset(duration) +} + +// Stop is called when the timer is not used anymore and resources may be freed. +func (t *defaultTimer) Stop() { + if t.timer != nil { + t.timer.Stop() + } +} + +func nextInterval(s *retry.BackoffStrategy, attempt int) time.Duration { + initialInterval := float64(time.Duration(s.InitialInterval) * time.Millisecond) + maxInterval := float64(time.Duration(s.MaxInterval) * time.Millisecond) + exponent := s.Exponent + jitterFactor := float64(0.25) + + interval := initialInterval * math.Pow(float64(attempt+1), exponent) + + jitter := rand.Float64() * jitterFactor * interval + if rand.Float64() < 0.5 { + jitter = -1 * jitter + } + + interval = interval + jitter + + if interval <= 0 { + interval = initialInterval + } + + if interval > maxInterval { + interval = maxInterval + } + + return time.Duration(interval) +} diff --git a/internal/sdk/messagechannels.go b/internal/sdk/messagechannels.go index fbe8df2c..a016c50f 100644 --- a/internal/sdk/messagechannels.go +++ b/internal/sdk/messagechannels.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *MessageChannels) Create(ctx context.Context, request shared.CreateMessa req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -299,7 +302,11 @@ func (s *MessageChannels) Get(ctx context.Context, opts ...operations.Option) (* req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -480,7 +487,11 @@ func (s *MessageChannels) GetID(ctx context.Context, request operations.GetMessa req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/models/shared/creategroupinfo.go b/internal/sdk/models/shared/creategroupinfo.go index e2abc3c8..0460930b 100644 --- a/internal/sdk/models/shared/creategroupinfo.go +++ b/internal/sdk/models/shared/creategroupinfo.go @@ -20,8 +20,7 @@ type CreateGroupInfo struct { // The name of the remote group. Name string `json:"name"` // Information that defines the remote group. This replaces the deprecated remote_id and metadata fields. - RemoteInfo *GroupRemoteInfo `json:"remote_info,omitempty"` - // Indicates the level of potential impact misuse or unauthorized access may incur. + RemoteInfo *GroupRemoteInfo `json:"remote_info,omitempty"` RiskSensitivityOverride *RiskSensitivityEnum `json:"risk_sensitivity_override,omitempty"` } diff --git a/internal/sdk/models/shared/createresourceinfo.go b/internal/sdk/models/shared/createresourceinfo.go index 8ae0cac0..b6f7a2ba 100644 --- a/internal/sdk/models/shared/createresourceinfo.go +++ b/internal/sdk/models/shared/createresourceinfo.go @@ -20,8 +20,7 @@ type CreateResourceInfo struct { // Information that defines the remote resource. This replaces the deprecated remote_id and metadata fields. RemoteInfo *ResourceRemoteInfo `json:"remote_info,omitempty"` // The type of the resource. - ResourceType ResourceTypeEnum `json:"resource_type"` - // Indicates the level of potential impact misuse or unauthorized access may incur. + ResourceType ResourceTypeEnum `json:"resource_type"` RiskSensitivityOverride *RiskSensitivityEnum `json:"risk_sensitivity_override,omitempty"` } diff --git a/internal/sdk/models/shared/group.go b/internal/sdk/models/shared/group.go index 0ad314a3..70c78f1d 100644 --- a/internal/sdk/models/shared/group.go +++ b/internal/sdk/models/shared/group.go @@ -46,6 +46,45 @@ func (e *RiskSensitivity) UnmarshalJSON(data []byte) error { } } +// RiskSensitivityOverride - Indicates the level of potential impact misuse or unauthorized access may incur. +type RiskSensitivityOverride string + +const ( + RiskSensitivityOverrideUnknown RiskSensitivityOverride = "UNKNOWN" + RiskSensitivityOverrideCritical RiskSensitivityOverride = "CRITICAL" + RiskSensitivityOverrideHigh RiskSensitivityOverride = "HIGH" + RiskSensitivityOverrideMedium RiskSensitivityOverride = "MEDIUM" + RiskSensitivityOverrideLow RiskSensitivityOverride = "LOW" + RiskSensitivityOverrideNone RiskSensitivityOverride = "NONE" +) + +func (e RiskSensitivityOverride) ToPointer() *RiskSensitivityOverride { + return &e +} +func (e *RiskSensitivityOverride) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "UNKNOWN": + fallthrough + case "CRITICAL": + fallthrough + case "HIGH": + fallthrough + case "MEDIUM": + fallthrough + case "LOW": + fallthrough + case "NONE": + *e = RiskSensitivityOverride(v) + return nil + default: + return fmt.Errorf("invalid value for RiskSensitivityOverride: %v", v) + } +} + // # Group Object // ### Description // The `Group` object is used to represent a group. @@ -80,9 +119,8 @@ type Group struct { // A bool representing whether or not to require MFA for reviewers to approve requests for this group. RequireMfaToApprove *bool `json:"require_mfa_to_approve,omitempty"` // The risk sensitivity level for the group. When an override is set, this field will match that. - RiskSensitivity *RiskSensitivity `json:"risk_sensitivity,omitempty"` - // Indicates the level of potential impact misuse or unauthorized access may incur. - RiskSensitivityOverride *RiskSensitivityEnum `json:"risk_sensitivity_override,omitempty"` + RiskSensitivity *RiskSensitivity `json:"risk_sensitivity,omitempty"` + RiskSensitivityOverride *RiskSensitivityOverride `json:"risk_sensitivity_override,omitempty"` } func (o *Group) GetAdminOwnerID() *string { @@ -183,7 +221,7 @@ func (o *Group) GetRiskSensitivity() *RiskSensitivity { return o.RiskSensitivity } -func (o *Group) GetRiskSensitivityOverride() *RiskSensitivityEnum { +func (o *Group) GetRiskSensitivityOverride() *RiskSensitivityOverride { if o == nil { return nil } diff --git a/internal/sdk/models/shared/resource.go b/internal/sdk/models/shared/resource.go index 404ce26a..f3f5a52c 100644 --- a/internal/sdk/models/shared/resource.go +++ b/internal/sdk/models/shared/resource.go @@ -46,6 +46,45 @@ func (e *ResourceRiskSensitivity) UnmarshalJSON(data []byte) error { } } +// ResourceRiskSensitivityOverride - Indicates the level of potential impact misuse or unauthorized access may incur. +type ResourceRiskSensitivityOverride string + +const ( + ResourceRiskSensitivityOverrideUnknown ResourceRiskSensitivityOverride = "UNKNOWN" + ResourceRiskSensitivityOverrideCritical ResourceRiskSensitivityOverride = "CRITICAL" + ResourceRiskSensitivityOverrideHigh ResourceRiskSensitivityOverride = "HIGH" + ResourceRiskSensitivityOverrideMedium ResourceRiskSensitivityOverride = "MEDIUM" + ResourceRiskSensitivityOverrideLow ResourceRiskSensitivityOverride = "LOW" + ResourceRiskSensitivityOverrideNone ResourceRiskSensitivityOverride = "NONE" +) + +func (e ResourceRiskSensitivityOverride) ToPointer() *ResourceRiskSensitivityOverride { + return &e +} +func (e *ResourceRiskSensitivityOverride) UnmarshalJSON(data []byte) error { + var v string + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch v { + case "UNKNOWN": + fallthrough + case "CRITICAL": + fallthrough + case "HIGH": + fallthrough + case "MEDIUM": + fallthrough + case "LOW": + fallthrough + case "NONE": + *e = ResourceRiskSensitivityOverride(v) + return nil + default: + return fmt.Errorf("invalid value for ResourceRiskSensitivityOverride: %v", v) + } +} + // # Resource Object // ### Description // The `Resource` object is used to represent a resource. @@ -78,9 +117,8 @@ type Resource struct { // The type of the resource. ResourceType *ResourceTypeEnum `json:"resource_type,omitempty"` // The risk sensitivity level for the resource. When an override is set, this field will match that. - RiskSensitivity *ResourceRiskSensitivity `json:"risk_sensitivity,omitempty"` - // Indicates the level of potential impact misuse or unauthorized access may incur. - RiskSensitivityOverride *RiskSensitivityEnum `json:"risk_sensitivity_override,omitempty"` + RiskSensitivity *ResourceRiskSensitivity `json:"risk_sensitivity,omitempty"` + RiskSensitivityOverride *ResourceRiskSensitivityOverride `json:"risk_sensitivity_override,omitempty"` // Configuration for ticket propagation, when enabled, a ticket will be created for access changes related to the users in this resource. TicketPropagation *TicketPropagationConfiguration `json:"ticket_propagation,omitempty"` } @@ -176,7 +214,7 @@ func (o *Resource) GetRiskSensitivity() *ResourceRiskSensitivity { return o.RiskSensitivity } -func (o *Resource) GetRiskSensitivityOverride() *RiskSensitivityEnum { +func (o *Resource) GetRiskSensitivityOverride() *ResourceRiskSensitivityOverride { if o == nil { return nil } diff --git a/internal/sdk/models/shared/updategroupinfo.go b/internal/sdk/models/shared/updategroupinfo.go index 2d638d19..f5ba859e 100644 --- a/internal/sdk/models/shared/updategroupinfo.go +++ b/internal/sdk/models/shared/updategroupinfo.go @@ -21,8 +21,7 @@ type UpdateGroupInfo struct { // The request configuration list of the configuration template. If not provided, the default request configuration will be used. RequestConfigurations []RequestConfiguration `json:"request_configurations"` // A bool representing whether or not to require MFA for reviewers to approve requests for this group. - RequireMfaToApprove *bool `json:"require_mfa_to_approve,omitempty"` - // Indicates the level of potential impact misuse or unauthorized access may incur. + RequireMfaToApprove *bool `json:"require_mfa_to_approve,omitempty"` RiskSensitivityOverride *RiskSensitivityEnum `json:"risk_sensitivity_override,omitempty"` } diff --git a/internal/sdk/models/shared/updateresourceinfo.go b/internal/sdk/models/shared/updateresourceinfo.go index 2186adea..80ad4355 100644 --- a/internal/sdk/models/shared/updateresourceinfo.go +++ b/internal/sdk/models/shared/updateresourceinfo.go @@ -21,8 +21,7 @@ type UpdateResourceInfo struct { // A bool representing whether or not to require MFA for reviewers to approve requests for this resource. RequireMfaToApprove *bool `json:"require_mfa_to_approve,omitempty"` // A bool representing whether or not to require MFA to connect to this resource. - RequireMfaToConnect *bool `json:"require_mfa_to_connect,omitempty"` - // Indicates the level of potential impact misuse or unauthorized access may incur. + RequireMfaToConnect *bool `json:"require_mfa_to_connect,omitempty"` RiskSensitivityOverride *RiskSensitivityEnum `json:"risk_sensitivity_override,omitempty"` // Configuration for ticket propagation, when enabled, a ticket will be created for access changes related to the users in this resource. TicketPropagation *TicketPropagationConfiguration `json:"ticket_propagation,omitempty"` diff --git a/internal/sdk/nonhumanidentities.go b/internal/sdk/nonhumanidentities.go index 6c22d566..67c37bef 100644 --- a/internal/sdk/nonhumanidentities.go +++ b/internal/sdk/nonhumanidentities.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -116,7 +115,11 @@ func (s *NonHumanIdentities) GetNhis(ctx context.Context, request operations.Get req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/oncallschedules.go b/internal/sdk/oncallschedules.go index 77acbd18..3256fdaa 100644 --- a/internal/sdk/oncallschedules.go +++ b/internal/sdk/oncallschedules.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *OnCallSchedules) Create(ctx context.Context, request shared.CreateOnCal req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -299,7 +302,11 @@ func (s *OnCallSchedules) Get(ctx context.Context, opts ...operations.Option) (* req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -480,7 +487,11 @@ func (s *OnCallSchedules) GetID(ctx context.Context, request operations.GetOnCal req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/opalapi.go b/internal/sdk/opalapi.go index 5b2e49c7..7836c467 100644 --- a/internal/sdk/opalapi.go +++ b/internal/sdk/opalapi.go @@ -186,8 +186,8 @@ func New(opts ...SDKOption) *OpalAPI { Language: "go", OpenAPIDocVersion: "1.0", SDKVersion: "0.0.1", - GenVersion: "2.460.1", - UserAgent: "speakeasy-sdk/go 0.0.1 2.460.1 1.0 github.com/opalsecurity/terraform-provider-opal/internal/sdk", + GenVersion: "2.461.4", + UserAgent: "speakeasy-sdk/go 0.0.1 2.461.4 1.0 github.com/opalsecurity/terraform-provider-opal/internal/sdk", Hooks: hooks.New(), }, } diff --git a/internal/sdk/owners.go b/internal/sdk/owners.go index 7a9b2861..2d854476 100644 --- a/internal/sdk/owners.go +++ b/internal/sdk/owners.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *Owners) Create(ctx context.Context, request shared.CreateOwnerInfo, opt req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -299,7 +302,11 @@ func (s *Owners) Delete(ctx context.Context, request operations.DeleteOwnerReque req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -463,7 +470,11 @@ func (s *Owners) Get(ctx context.Context, request operations.GetOwnersRequest, o req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -644,7 +655,11 @@ func (s *Owners) GetFromName(ctx context.Context, request operations.GetOwnerFro req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -825,7 +840,11 @@ func (s *Owners) GetID(ctx context.Context, request operations.GetOwnerIDRequest req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1012,7 +1031,11 @@ func (s *Owners) Update(ctx context.Context, request shared.UpdateOwnerInfoList, req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1198,7 +1221,11 @@ func (s *Owners) UpdateUsers(ctx context.Context, request operations.UpdateOwner req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/requests.go b/internal/sdk/requests.go index 12f372d9..d4abc6ec 100644 --- a/internal/sdk/requests.go +++ b/internal/sdk/requests.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *Requests) CreateRequest(ctx context.Context, request shared.CreateReque req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -303,7 +306,11 @@ func (s *Requests) Get(ctx context.Context, request operations.GetRequestsReques req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/resources.go b/internal/sdk/resources.go index a1eac500..9ee83c59 100644 --- a/internal/sdk/resources.go +++ b/internal/sdk/resources.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *Resources) AddResourceNhi(ctx context.Context, request operations.AddRe req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -305,7 +308,11 @@ func (s *Resources) Create(ctx context.Context, request shared.CreateResourceInf req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -485,7 +492,11 @@ func (s *Resources) Delete(ctx context.Context, request operations.DeleteResourc req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -649,7 +660,11 @@ func (s *Resources) DeleteResourceNhi(ctx context.Context, request operations.De req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -813,7 +828,11 @@ func (s *Resources) Get(ctx context.Context, request operations.GetResourcesRequ req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -998,7 +1017,11 @@ func (s *Resources) GetAccessStatus(ctx context.Context, request operations.GetR req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1179,7 +1202,11 @@ func (s *Resources) GetID(ctx context.Context, request operations.GetResourceIDR req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1360,7 +1387,11 @@ func (s *Resources) GetMessageChannels(ctx context.Context, request operations.G req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1545,7 +1576,11 @@ func (s *Resources) GetResourceNhis(ctx context.Context, request operations.GetR req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1726,7 +1761,11 @@ func (s *Resources) GetReviewers(ctx context.Context, request operations.GetReso req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1907,7 +1946,11 @@ func (s *Resources) GetTags(ctx context.Context, request operations.GetResourceT req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2092,7 +2135,11 @@ func (s *Resources) GetUsers(ctx context.Context, request operations.GetResource req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2273,7 +2320,11 @@ func (s *Resources) GetVisibility(ctx context.Context, request operations.GetRes req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2460,7 +2511,11 @@ func (s *Resources) Update(ctx context.Context, request shared.UpdateResourceInf req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2646,7 +2701,11 @@ func (s *Resources) UpdateMessageChannels(ctx context.Context, request operation req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -2832,7 +2891,11 @@ func (s *Resources) UpdateReviewers(ctx context.Context, request operations.Upda req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -3018,7 +3081,11 @@ func (s *Resources) UpdateVisibility(ctx context.Context, request operations.Upd req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/retry/config.go b/internal/sdk/retry/config.go index c051b0a4..aa4b334f 100644 --- a/internal/sdk/retry/config.go +++ b/internal/sdk/retry/config.go @@ -2,6 +2,15 @@ package retry +import ( + "errors" + "net/http" + "strconv" + "time" +) + +// BackoffStrategy defines the parameters for exponential backoff. This can be +// used to drive a retry loop for example. type BackoffStrategy struct { InitialInterval int MaxInterval int @@ -9,8 +18,128 @@ type BackoffStrategy struct { MaxElapsedTime int } +// Config configures a retry policy. type Config struct { Strategy string Backoff *BackoffStrategy RetryConnectionErrors bool } + +// PermanentError is an error that signals that some operation has terminally +// failed and should not be retried. +type PermanentError struct { + cause error +} + +// Permanent creates a PermanentError that signals to a retry loop that it +// should stop retrying an operation and return the underlying error. +func Permanent(cause error) error { + if IsPermanentError(cause) { + return cause + } + + return &PermanentError{ + cause: cause, + } +} + +func (e *PermanentError) Error() string { + return e.cause.Error() +} + +func (e *PermanentError) Unwrap() error { + return e.cause +} + +// TemporaryError represents a retryable error and signals to a retry loop that +// an operation may be retried with an optional wait interval. +type TemporaryError struct { + wait time.Duration + message string +} + +// Temporary creates a TemporaryError that signals to a retry loop that an +// operation can be retried. The error may also carry details about how long to +// wait before retrying. This wait interval may be used to override the retry +// policy in use. +func Temporary(message string) error { + return &TemporaryError{ + message: message, + } +} + +// TemporaryFromResponse creates a TemporaryError similar to Temporary but +// additionally parses the Retry-After header from a response to determine the +// wait interval before the next retry attempt. +func TemporaryFromResponse(message string, res *http.Response) error { + return &TemporaryError{ + wait: retryIntervalFromResponse(res), + message: message, + } +} + +func (e *TemporaryError) Error() string { + return e.message +} + +// RetryAfter returns the time to wait before retrying the request. The zero +// value should be interpreted by retry loops to mean they should fallback on +// their default policy whether expenonential, constant backoff or something +// else. It does not mean that an operation should be retried immediately. +func (e *TemporaryError) RetryAfter() time.Duration { + return e.wait +} + +func retryIntervalFromResponse(res *http.Response) time.Duration { + if res == nil { + return 0 + } + + retryVal := res.Header.Get("retry-after") + if retryVal == "" { + return 0 + } + + parsedNumber, err := strconv.ParseInt(retryVal, 10, 64) + if err == nil { + if parsedNumber < 0 { + return 0 + } else { + return time.Duration(parsedNumber) * time.Second + } + } + + parsedDate, err := time.Parse(time.RFC1123, retryVal) + if err == nil { + delta := parsedDate.Sub(time.Now()) + if delta < 0 { + return 0 + } else { + return delta + } + } + + return 0 +} + +// IsPermanentError returns true if an error value is or contains a +// PermanentError in its chain of errors. +func IsPermanentError(err error) bool { + if err == nil { + return false + } + + var pe *PermanentError + return errors.As(err, &pe) +} + +// IsTemporaryError returns true if an error value is or contains a +// TemporaryError in its chain of errors. +func IsTemporaryError(err error) bool { + if err == nil { + return false + } + + var pe *TemporaryError + return errors.As(err, &pe) +} diff --git a/internal/sdk/sessions.go b/internal/sdk/sessions.go index 0ba1efe3..22f9ff57 100644 --- a/internal/sdk/sessions.go +++ b/internal/sdk/sessions.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -117,7 +116,11 @@ func (s *Sessions) Get(ctx context.Context, request operations.GetSessionsReques req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/tags.go b/internal/sdk/tags.go index fb54fa49..c829025b 100644 --- a/internal/sdk/tags.go +++ b/internal/sdk/tags.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *Tags) CreateTag(ctx context.Context, request shared.CreateTagInfo, opts req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -299,7 +302,11 @@ func (s *Tags) CreateGroup(ctx context.Context, request operations.CreateGroupTa req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -459,7 +466,11 @@ func (s *Tags) CreateResource(ctx context.Context, request operations.CreateReso req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -619,7 +630,11 @@ func (s *Tags) CreateUser(ctx context.Context, request operations.CreateUserTagR req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -779,7 +794,11 @@ func (s *Tags) Delete(ctx context.Context, request operations.DeleteUserTagReque req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -939,7 +958,11 @@ func (s *Tags) DeleteGroup(ctx context.Context, request operations.DeleteGroupTa req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1099,7 +1122,11 @@ func (s *Tags) DeleteResource(ctx context.Context, request operations.DeleteReso req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1259,7 +1286,11 @@ func (s *Tags) DeleteTagByID(ctx context.Context, request operations.DeleteTagBy req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1419,7 +1450,11 @@ func (s *Tags) GetTagByID(ctx context.Context, request operations.GetTagByIDRequ req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -1604,7 +1639,11 @@ func (s *Tags) GetTags(ctx context.Context, request operations.GetTagsRequest, o req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/uars.go b/internal/sdk/uars.go index f962c202..89f235f0 100644 --- a/internal/sdk/uars.go +++ b/internal/sdk/uars.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -119,7 +118,11 @@ func (s *Uars) Create(ctx context.Context, request shared.CreateUARInfo, opts .. req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -303,7 +306,11 @@ func (s *Uars) Get(ctx context.Context, request operations.GetUARsRequest, opts req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -484,7 +491,11 @@ func (s *Uars) GetID(ctx context.Context, request operations.GetUARIDRequest, op req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/internal/sdk/users.go b/internal/sdk/users.go index a1aa96f9..1f5ba4b3 100644 --- a/internal/sdk/users.go +++ b/internal/sdk/users.go @@ -6,7 +6,6 @@ import ( "bytes" "context" "fmt" - "github.com/cenkalti/backoff/v4" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/hooks" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/internal/utils" "github.com/opalsecurity/terraform-provider-opal/internal/sdk/models/errors" @@ -117,7 +116,11 @@ func (s *Users) Get(ctx context.Context, request operations.GetUserRequest, opts req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -298,7 +301,11 @@ func (s *Users) GetUserTags(ctx context.Context, request operations.GetUserTagsR req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) @@ -483,7 +490,11 @@ func (s *Users) GetUsers(ctx context.Context, request operations.GetUsersRequest req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req) if err != nil { - return nil, backoff.Permanent(err) + if retry.IsPermanentError(err) || retry.IsTemporaryError(err) { + return nil, err + } + + return nil, retry.Permanent(err) } httpRes, err := s.sdkConfiguration.Client.Do(req) diff --git a/openapi.yaml b/openapi.yaml index 5b48260b..8061b3ec 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -4335,7 +4335,9 @@ components: - $ref: "#/components/schemas/RiskSensitivityEnum" x-speakeasy-param-suppress-computed-diff: true risk_sensitivity_override: - $ref: "#/components/schemas/RiskSensitivityEnum" + allOf: + - $ref: "#/components/schemas/RiskSensitivityEnum" + x-speakeasy-param-suppress-computed-diff: true required: - group_id type: object @@ -4623,7 +4625,8 @@ components: nullable: true example: "Check your email to register your account." risk_sensitivity_override: - $ref: "#/components/schemas/RiskSensitivityEnum" + allOf: + - $ref: "#/components/schemas/RiskSensitivityEnum" required: - group_id - request_configurations @@ -5952,7 +5955,8 @@ components: nullable: true example: "Check your email to register your account." risk_sensitivity_override: - $ref: "#/components/schemas/RiskSensitivityEnum" + allOf: + - $ref: "#/components/schemas/RiskSensitivityEnum" required: - name - resource_type @@ -6105,7 +6109,8 @@ components: example: "Check your email to register your account." x-speakeasy-param-suppress-computed-diff: true risk_sensitivity_override: - $ref: "#/components/schemas/RiskSensitivityEnum" + allOf: + - $ref: "#/components/schemas/RiskSensitivityEnum" required: - name - group_type @@ -6508,7 +6513,9 @@ components: - $ref: "#/components/schemas/RiskSensitivityEnum" x-speakeasy-param-suppress-computed-diff: true risk_sensitivity_override: - $ref: "#/components/schemas/RiskSensitivityEnum" + allOf: + - $ref: "#/components/schemas/RiskSensitivityEnum" + x-speakeasy-param-suppress-computed-diff: true metadata: description: JSON metadata about the remote resource. Only set for items linked to remote systems. See [this guide](https://docs.opal.dev/reference/end-system-objects) for details. deprecated: true @@ -6661,7 +6668,8 @@ components: nullable: true example: "Check your email to register your account." risk_sensitivity_override: - $ref: "#/components/schemas/RiskSensitivityEnum" + allOf: + - $ref: "#/components/schemas/RiskSensitivityEnum" configuration_template_id: description: The ID of the associated configuration template. example: 06851574-e50d-40ca-8c78-f72ae6ab4304 diff --git a/terraform_overlay.yaml b/terraform_overlay.yaml index 06def712..6cc339e4 100644 --- a/terraform_overlay.yaml +++ b/terraform_overlay.yaml @@ -1081,6 +1081,9 @@ actions: - target: $["components"]["schemas"]["Group"]["properties"]["risk_sensitivity"] update: x-speakeasy-param-suppress-computed-diff: true + - target: $["components"]["schemas"]["Group"]["properties"]["risk_sensitivity_override"] + update: + x-speakeasy-param-suppress-computed-diff: true - target: $["components"]["schemas"]["Group"] update: x-speakeasy-entity: Group @@ -1582,6 +1585,9 @@ actions: - target: $["components"]["schemas"]["Resource"]["properties"]["risk_sensitivity"] update: x-speakeasy-param-suppress-computed-diff: true + - target: $["components"]["schemas"]["Resource"]["properties"]["risk_sensitivity_override"] + update: + x-speakeasy-param-suppress-computed-diff: true - target: $["components"]["schemas"]["Resource"]["properties"]["metadata"] update: x-speakeasy-ignore: true