From 9da4f57dcd1e870e273ad3bdb3f1e4766c8c3fe4 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 6 Mar 2024 12:00:06 +0200 Subject: [PATCH 01/37] use main provider not local one in mycelium example --- examples/resources/single_vm_mycelium/main.tf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/resources/single_vm_mycelium/main.tf b/examples/resources/single_vm_mycelium/main.tf index d1432565..839d0987 100644 --- a/examples/resources/single_vm_mycelium/main.tf +++ b/examples/resources/single_vm_mycelium/main.tf @@ -1,8 +1,7 @@ terraform { required_providers { grid = { - source = "threefoldtechdev.com/providers/grid" - version = "0.2" + source = "threefoldtech/grid" } } } From 87978e202c90f732101d2a29cd090e943990b4e5 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Mon, 11 Mar 2024 13:21:05 +0200 Subject: [PATCH 02/37] update pkgs --- go.mod | 46 +++++++++++------------ go.sum | 117 ++++++++++++++++++++++++--------------------------------- 2 files changed, 73 insertions(+), 90 deletions(-) diff --git a/go.mod b/go.mod index e3fb9d9f..37ce053b 100644 --- a/go.mod +++ b/go.mod @@ -8,30 +8,30 @@ require ( github.com/gruntwork-io/terratest v0.46.11 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/terraform-plugin-docs v0.18.0 - github.com/hashicorp/terraform-plugin-sdk/v2 v2.31.0 + github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.9.0 - github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.10 - github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.10 - github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.10 + github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.12 + github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.12 + github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.12 github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3 - golang.org/x/crypto v0.20.0 + golang.org/x/crypto v0.21.0 golang.org/x/sync v0.6.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20210803171230-4253848d036c ) require ( - cloud.google.com/go v0.110.8 // indirect - cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.2 // indirect + cloud.google.com/go/iam v1.1.5 // indirect cloud.google.com/go/storage v1.30.1 // indirect github.com/ChainSafe/go-schnorrkel v1.1.0 // indirect github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/ProtonMail/go-crypto v1.1.0-alpha.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/armon/go-radix v1.0.0 // indirect @@ -56,8 +56,8 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/gomodule/redigo v2.0.0+incompatible // indirect github.com/google/go-cmp v0.6.0 // indirect - github.com/google/s2a-go v0.1.4 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/schema v1.2.1 // indirect github.com/gorilla/websocket v1.5.1 // indirect @@ -74,12 +74,12 @@ require ( github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hc-install v0.6.2 // indirect + github.com/hashicorp/hc-install v0.6.3 // indirect github.com/hashicorp/hcl/v2 v2.19.1 // indirect github.com/hashicorp/logutils v1.0.0 // indirect github.com/hashicorp/terraform-exec v0.20.0 // indirect github.com/hashicorp/terraform-json v0.21.0 // indirect - github.com/hashicorp/terraform-plugin-go v0.20.0 // indirect + github.com/hashicorp/terraform-plugin-go v0.22.0 // indirect github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect github.com/hashicorp/terraform-registry-address v0.2.3 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect @@ -123,22 +123,22 @@ require ( github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/yuin/goldmark v1.6.0 // indirect github.com/yuin/goldmark-meta v1.1.0 // indirect - github.com/zclconf/go-cty v1.14.1 // indirect + github.com/zclconf/go-cty v1.14.2 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/mod v0.14.0 // indirect + golang.org/x/mod v0.15.0 // indirect golang.org/x/net v0.21.0 // indirect - golang.org/x/oauth2 v0.13.0 // indirect - golang.org/x/sys v0.17.0 // indirect + golang.org/x/oauth2 v0.14.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.128.0 // indirect + google.golang.org/api v0.149.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect - google.golang.org/grpc v1.60.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/grpc v1.61.1 // indirect + google.golang.org/protobuf v1.32.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index d4beb45f..60641ee3 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= -cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -68,8 +68,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -109,8 +109,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= -cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -202,8 +202,8 @@ github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBa github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v1.1.0-alpha.0 h1:nHGfwXmFvJrSR9xu8qL7BkO4DqTHXE9N5vPhgY2I+j0= +github.com/ProtonMail/go-crypto v1.1.0-alpha.0/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= @@ -229,7 +229,6 @@ github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pY github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= 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/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= @@ -244,7 +243,6 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -305,8 +303,8 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66D github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git/v5 v5.10.1 h1:tu8/D8i+TWxgKpzQ3Vc43e+kkhXqtsZCKI/egajKnxk= -github.com/go-git/go-git/v5 v5.10.1/go.mod h1:uEuHjxkHap8kAl//V5F/nNWwqIYtP/402ddd05mp0wg= +github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= +github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -405,8 +403,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -415,8 +413,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= -github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -470,8 +468,8 @@ github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mO github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hc-install v0.6.2 h1:V1k+Vraqz4olgZ9UzKiAcbman9i9scg9GgSt/U3mw/M= -github.com/hashicorp/hc-install v0.6.2/go.mod h1:2JBpd+NCFKiHiu/yYCGaPyPHhZLxXTpz8oreHa/a3Ps= +github.com/hashicorp/hc-install v0.6.3 h1:yE/r1yJvWbtrJ0STwScgEnCanb0U9v7zp0Gbkmcoxqs= +github.com/hashicorp/hc-install v0.6.3/go.mod h1:KamGdbodYzlufbWh4r9NRo8y6GLHWZP2GBtdnms1Ln0= github.com/hashicorp/hcl/v2 v2.9.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg= github.com/hashicorp/hcl/v2 v2.19.1 h1://i05Jqznmb2EXqa39Nsvyan2o5XyMowW5fnCKW5RPI= github.com/hashicorp/hcl/v2 v2.19.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= @@ -483,12 +481,12 @@ github.com/hashicorp/terraform-json v0.21.0 h1:9NQxbLNqPbEMze+S6+YluEdXgJmhQykRy github.com/hashicorp/terraform-json v0.21.0/go.mod h1:qdeBs11ovMzo5puhrRibdD6d2Dq6TyE/28JiU4tIQxk= github.com/hashicorp/terraform-plugin-docs v0.18.0 h1:2bINhzXc+yDeAcafurshCrIjtdu1XHn9zZ3ISuEhgpk= github.com/hashicorp/terraform-plugin-docs v0.18.0/go.mod h1:iIUfaJpdUmpi+rI42Kgq+63jAjI8aZVTyxp3Bvk9Hg8= -github.com/hashicorp/terraform-plugin-go v0.20.0 h1:oqvoUlL+2EUbKNsJbIt3zqqZ7wi6lzn4ufkn/UA51xQ= -github.com/hashicorp/terraform-plugin-go v0.20.0/go.mod h1:Rr8LBdMlY53a3Z/HpP+ZU3/xCDqtKNCkeI9qOyT10QE= +github.com/hashicorp/terraform-plugin-go v0.22.0 h1:1OS1Jk5mO0f5hrziWJGXXIxBrMe2j/B8E+DVGw43Xmc= +github.com/hashicorp/terraform-plugin-go v0.22.0/go.mod h1:mPULV91VKss7sik6KFEcEu7HuTogMLLO/EvWCuFkRVE= 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.31.0 h1:Bl3e2ei2j/Z3Hc2HIS15Gal2KMKyLAZ2om1HCEvK6es= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.31.0/go.mod h1:i2C41tszDjiWfziPQDL5R/f3Zp0gahXe5No/MIO9rCE= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0 h1:qHprzXy/As0rxedphECBEQAh3R4yp6pKksKHcqZx5G8= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0/go.mod h1:H+8tjs9TjV2w57QFVSMBQacf8k/E1XwLXGCARgViC6A= 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= @@ -660,12 +658,12 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240227171040-f2a20ee3e965 h1:A4EF0webCGCQPym/uWrhhL6H3j/FKn60G99tR+Zl93o= github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240227171040-f2a20ee3e965/go.mod h1:dtDKAPiUDxAwIkfHV7xcAFZcOm+xwNIuOI1MLFS+MeQ= -github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.10 h1:vd2KDXzCjzPtyH5dpp12HkCPVQP1bHEzxAoF5m1i/TY= -github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.10/go.mod h1:7nZWQe11mQE0kSkP3i/hDq57zrCo9QsY+gwKvfiVg3M= -github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.10 h1:2hhsM+2jL3lDRuUWf0ogde//KPB8BB8oCZp5/v1eNVY= -github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.10/go.mod h1:uyvAL3vYwxXGDJU+8ilQdE1yfa3tbwFG0W9kyAtWEcQ= -github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.10 h1:htf4MKbouGdz5UL7yS5ydDBDJ5upbKl4stvoKYzS9mQ= -github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.10/go.mod h1:7gjqWKmk8j0HtJCqYp6e+SoGqB3NPDwWTi7VOTULxqg= +github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.12 h1:LVD8azh4dCeQJTa187MHT3DUqq4AgD0TjbqMXnAdLtc= +github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.12/go.mod h1:7nZWQe11mQE0kSkP3i/hDq57zrCo9QsY+gwKvfiVg3M= +github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.12 h1:QSG0662o7WfFJGHiuFhXR9HMiWJ2tZMpMB+0cWHi2s4= +github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.12/go.mod h1:uyvAL3vYwxXGDJU+8ilQdE1yfa3tbwFG0W9kyAtWEcQ= +github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.12 h1:pOubbet/8YAhePnFLCgAm7b3kUoL88/2ga7f+WrPjao= +github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.12/go.mod h1:7gjqWKmk8j0HtJCqYp6e+SoGqB3NPDwWTi7VOTULxqg= github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3 h1:XsIUZFrT+pSn9w/HftxhYcE3mTohiejYlooNe8Eg+4U= github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3/go.mod h1:FuTchJUh/PaESARVEYreXGBFaGA6SYDCvj7826xYEoM= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= @@ -704,8 +702,8 @@ github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.8.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.14.1 h1:t9fyA35fwjjUMcmL5hLER+e/rEPqrbCK1/OSE4SI9KA= -github.com/zclconf/go-cty v1.14.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.14.2 h1:kTG7lqmBou0Zkx35r6HJHUQTvaRPr5bIAf3AoHS0izI= +github.com/zclconf/go-cty v1.14.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -727,12 +725,9 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -771,9 +766,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -818,7 +812,6 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210504132125-bbd867fde50d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -832,8 +825,6 @@ golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -861,8 +852,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -877,7 +868,6 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -966,21 +956,17 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -992,8 +978,6 @@ golang.org/x/text v0.3.6/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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1052,7 +1036,6 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1115,8 +1098,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= -google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1227,12 +1210,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0= -google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1268,8 +1251,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k= -google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY= +google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1286,8 +1269,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= From 30482ec7bb484a5f3767b705b04602eccad8edd0 Mon Sep 17 00:00:00 2001 From: AbdelrahmanElawady Date: Thu, 28 Mar 2024 14:05:24 +0200 Subject: [PATCH 03/37] Update solution type to match dashboard by default --- internal/provider/deployment.go | 3 +++ internal/provider/gateway_fqdn.go | 7 ++++++- internal/provider/gateway_name.go | 6 +++++- internal/provider/k8s.go | 9 +++++++-- internal/provider/resource_deployment.go | 2 +- internal/provider/resource_gateway_fqdn.go | 2 +- internal/provider/resource_gateway_name.go | 2 +- 7 files changed, 24 insertions(+), 7 deletions(-) diff --git a/internal/provider/deployment.go b/internal/provider/deployment.go index 513eccdd..2096ecc1 100644 --- a/internal/provider/deployment.go +++ b/internal/provider/deployment.go @@ -17,6 +17,9 @@ func newDeploymentFromSchema(d *schema.ResourceData) (*workloads.Deployment, err nodeID := uint32(d.Get("node").(int)) name := d.Get("name").(string) solutionType := d.Get("solution_type").(string) + if solutionType == "" { + solutionType = fmt.Sprintf("vm/%s", name) + } disks := make([]workloads.Disk, 0) for _, disk := range d.Get("disks").([]interface{}) { diff --git a/internal/provider/gateway_fqdn.go b/internal/provider/gateway_fqdn.go index c313977c..a39cf246 100644 --- a/internal/provider/gateway_fqdn.go +++ b/internal/provider/gateway_fqdn.go @@ -45,6 +45,11 @@ func newFQDNGatewayFromSchema(d *schema.ResourceData) (*workloads.GatewayFQDNPro return nil, err } + solutionType := d.Get("solution_type").(string) + if solutionType == "" { + solutionType = d.Get("name").(string) + } + gw := workloads.GatewayFQDNProxy{ NodeID: uint32(d.Get("node").(int)), Name: d.Get("name").(string), @@ -52,7 +57,7 @@ func newFQDNGatewayFromSchema(d *schema.ResourceData) (*workloads.GatewayFQDNPro FQDN: d.Get("fqdn").(string), TLSPassthrough: tlsPassthrough, Network: d.Get("network").(string), - SolutionType: d.Get("solution_type").(string), + SolutionType: solutionType, Description: d.Get("description").(string), NodeDeploymentID: nodeDeploymentID, ContractID: contractID, diff --git a/internal/provider/gateway_name.go b/internal/provider/gateway_name.go index e9317e1f..ebdf5f67 100644 --- a/internal/provider/gateway_name.go +++ b/internal/provider/gateway_name.go @@ -44,6 +44,10 @@ func newNameGatewayFromSchema(d *schema.ResourceData) (*workloads.GatewayNamePro if err := validateBackends(backends, tlsPassthrough); err != nil { return nil, err } + solutionType := d.Get("solution_type").(string) + if solutionType == "" { + solutionType = d.Get("name").(string) + } gw := workloads.GatewayNameProxy{ NodeID: uint32(d.Get("node").(int)), @@ -51,7 +55,7 @@ func newNameGatewayFromSchema(d *schema.ResourceData) (*workloads.GatewayNamePro Backends: backends, TLSPassthrough: tlsPassthrough, Description: d.Get("description").(string), - SolutionType: d.Get("solution_type").(string), + SolutionType: solutionType, Network: d.Get("network").(string), FQDN: d.Get("fqdn").(string), NodeDeploymentID: nodeDeploymentID, diff --git a/internal/provider/k8s.go b/internal/provider/k8s.go index fa710217..2b4337d3 100644 --- a/internal/provider/k8s.go +++ b/internal/provider/k8s.go @@ -63,14 +63,19 @@ func newK8sFromSchema(d *schema.ResourceData) (*workloads.K8sCluster, error) { deploymentID := uint64(id.(int)) nodeDeploymentID[uint32(nodeInt)] = deploymentID } + master := masterI.(*workloads.K8sNode) + solutionType := d.Get("solution_type").(string) + if solutionType == "" { + solutionType = fmt.Sprintf("kubernetes/%s", master.Name) + } k8s := workloads.K8sCluster{ - Master: masterI.(*workloads.K8sNode), + Master: master, Workers: workers, Token: d.Get("token").(string), SSHKey: d.Get("ssh_key").(string), NetworkName: d.Get("network_name").(string), - SolutionType: d.Get("solution_type").(string), + SolutionType: solutionType, NodeDeploymentID: nodeDeploymentID, NodesIPRange: nodesIPRange, } diff --git a/internal/provider/resource_deployment.go b/internal/provider/resource_deployment.go index 56e0d696..1a100fca 100644 --- a/internal/provider/resource_deployment.go +++ b/internal/provider/resource_deployment.go @@ -43,7 +43,7 @@ func resourceDeployment() *schema.Resource { "solution_type": { Type: schema.TypeString, Optional: true, - Default: "Virtual Machine", + Default: "", Description: "Solution type for created contract to be consistent across threefold tooling.", }, "solution_provider": { diff --git a/internal/provider/resource_gateway_fqdn.go b/internal/provider/resource_gateway_fqdn.go index 3909b786..cc505f80 100644 --- a/internal/provider/resource_gateway_fqdn.go +++ b/internal/provider/resource_gateway_fqdn.go @@ -34,7 +34,7 @@ func resourceGatewayFQDNProxy() *schema.Resource { Type: schema.TypeString, Optional: true, Description: "Solution type for created contract to be consistent across threefold tooling.", - Default: "Gateway", + Default: "", }, "description": { Type: schema.TypeString, diff --git a/internal/provider/resource_gateway_name.go b/internal/provider/resource_gateway_name.go index 47c212c1..60d8ca81 100644 --- a/internal/provider/resource_gateway_name.go +++ b/internal/provider/resource_gateway_name.go @@ -32,7 +32,7 @@ func resourceGatewayNameProxy() *schema.Resource { Type: schema.TypeString, Optional: true, Description: "Solution type for created contract to be consistent across threefold tooling.", - Default: "Gateway", + Default: "", }, "description": { Type: schema.TypeString, From a6514c68ff8afc1eeb08b0819af7834da1712eb9 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Mon, 15 Apr 2024 12:27:32 +0200 Subject: [PATCH 04/37] fix terraform-version arg in action-terraform --- .github/workflows/main_release_test.yml | 2 +- .github/workflows/terratest.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_release_test.yml b/.github/workflows/main_release_test.yml index 9437a095..53269af0 100644 --- a/.github/workflows/main_release_test.yml +++ b/.github/workflows/main_release_test.yml @@ -20,7 +20,7 @@ jobs: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: - terraform_version: 1.0.11 + terraform-version: 1.0.11 - name: install wg and yggdrasil and add peers run: | sudo apt-get update diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 45a3d511..766e39dc 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -25,7 +25,7 @@ jobs: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: - terraform_version: 1.0.11 + terraform-version: 1.0.11 - name: install wg and yggdrasil and add peers run: | sudo apt-get update From ba6e844a452876fdd82e750cc1ad4a189a3085eb Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Mon, 15 Apr 2024 12:29:51 +0200 Subject: [PATCH 05/37] update pkgs --- go.mod | 8 ++++---- go.sum | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 37ce053b..b919f51c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21 require ( github.com/go-redis/redis v6.15.9+incompatible github.com/google/uuid v1.6.0 - github.com/gruntwork-io/terratest v0.46.11 + github.com/gruntwork-io/terratest v0.46.13 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/terraform-plugin-docs v0.18.0 github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0 @@ -15,7 +15,7 @@ require ( github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.12 github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.12 github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3 - golang.org/x/crypto v0.21.0 + golang.org/x/crypto v0.22.0 golang.org/x/sync v0.6.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20210803171230-4253848d036c ) @@ -129,7 +129,7 @@ require ( golang.org/x/mod v0.15.0 // indirect golang.org/x/net v0.21.0 // indirect golang.org/x/oauth2 v0.14.0 // indirect - golang.org/x/sys v0.18.0 // indirect + golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.149.0 // indirect @@ -138,7 +138,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/grpc v1.61.1 // indirect - google.golang.org/protobuf v1.32.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 60641ee3..0d825d49 100644 --- a/go.sum +++ b/go.sum @@ -432,8 +432,8 @@ github.com/gorilla/schema v1.2.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4F github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gruntwork-io/terratest v0.46.11 h1:1Z9G18I2FNuH87Ro0YtjW4NH9ky4GDpfzE7+ivkPeB8= -github.com/gruntwork-io/terratest v0.46.11/go.mod h1:DVZG/s7eP1u3KOQJJfE6n7FDriMWpDvnj85XIlZMEM8= +github.com/gruntwork-io/terratest v0.46.13 h1:FDaEoZ7DtkomV8pcwLdBV/VsytdjnPRqJkIriYEYwjs= +github.com/gruntwork-io/terratest v0.46.13/go.mod h1:8sxu3Qup8TxtbzOHzq0MUrQffJj/G61/OwlsReaCwpo= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= @@ -726,8 +726,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= 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.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -958,15 +958,15 @@ golang.org/x/sys v0.1.0/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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1269,8 +1269,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= From bf111b9794de58b044362f537e60ec103d66d6ec Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 29 May 2024 17:47:09 +0300 Subject: [PATCH 06/37] update pkgs --- .github/workflows/lint.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- go.mod | 33 ++++++++-------- go.sum | 73 ++++++++++++++++++----------------- 5 files changed, 58 insertions(+), 54 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5193ad1d..8a5ef516 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,6 +18,6 @@ jobs: go-version: 1.21 - name: Run golangci-lint - uses: golangci/golangci-lint-action@v4 + uses: golangci/golangci-lint-action@v6 with: args: --config=.golangci.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4f1296b6..f11b209b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.PASSPHRASE }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v5.0.0 + uses: goreleaser/goreleaser-action@v5.1.0 with: version: latest args: release --rm-dist diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3f9e652b..1eb9d3ef 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,7 +35,7 @@ jobs: go mod download - name: Install GoReleaser - uses: goreleaser/goreleaser-action@v5.0.0 + uses: goreleaser/goreleaser-action@v5.1.0 with: install-only: true diff --git a/go.mod b/go.mod index b919f51c..d8e7626e 100644 --- a/go.mod +++ b/go.mod @@ -5,18 +5,18 @@ go 1.21 require ( github.com/go-redis/redis v6.15.9+incompatible github.com/google/uuid v1.6.0 - github.com/gruntwork-io/terratest v0.46.13 + github.com/gruntwork-io/terratest v0.46.15 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/terraform-plugin-docs v0.18.0 github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.9.0 - github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.12 - github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.12 - github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.12 + github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.5 + github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.5 + github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.5 github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3 - golang.org/x/crypto v0.22.0 - golang.org/x/sync v0.6.0 + golang.org/x/crypto v0.23.0 + golang.org/x/sync v0.7.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20210803171230-4253848d036c ) @@ -47,7 +47,7 @@ require ( github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.5 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/ethereum/go-ethereum v1.11.6 // indirect github.com/fatih/color v1.16.0 // indirect github.com/go-stack/stack v1.8.1 // indirect @@ -59,7 +59,7 @@ require ( github.com/google/s2a-go v0.1.7 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/gorilla/schema v1.2.1 // indirect + github.com/gorilla/schema v1.3.0 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect @@ -68,7 +68,7 @@ require ( github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect - github.com/hashicorp/go-getter v1.7.1 // indirect + github.com/hashicorp/go-getter v1.7.4 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-plugin v1.6.0 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect @@ -90,7 +90,7 @@ require ( github.com/jbenet/go-base58 v0.0.0-20150317085156-6237cf65f3a6 // indirect github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/compress v1.17.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect @@ -110,7 +110,7 @@ require ( github.com/posener/complete v1.2.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rs/cors v1.10.1 // indirect - github.com/rs/zerolog v1.32.0 // indirect + github.com/rs/zerolog v1.33.0 // indirect github.com/russross/blackfriday v1.6.0 // indirect github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/cast v1.5.0 // indirect @@ -125,20 +125,21 @@ require ( github.com/yuin/goldmark-meta v1.1.0 // indirect github.com/zclconf/go-cty v1.14.2 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/mod v0.15.0 // indirect - golang.org/x/net v0.21.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.14.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + gonum.org/v1/gonum v0.15.0 // indirect google.golang.org/api v0.149.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/grpc v1.61.1 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/protobuf v1.34.1 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 0d825d49..7f65b780 100644 --- a/go.sum +++ b/go.sum @@ -272,8 +272,8 @@ github.com/decred/base58 v1.0.5 h1:hwcieUM3pfPnE/6p3J100zoRfGkQxBulZHo7GZfOqic= github.com/decred/base58 v1.0.5/go.mod h1:s/8lukEHFA6bUQQb/v3rjUySJ2hu+RioCzLukAVkrfw= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -427,13 +427,13 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/gorilla/schema v1.2.1 h1:tjDxcmdb+siIqkTNoV+qRH2mjYdr2hHe5MKXbp61ziM= -github.com/gorilla/schema v1.2.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= +github.com/gorilla/schema v1.3.0 h1:rbciOzXAx3IB8stEFnfTwO3sYa6EWlQk79XdyustPDA= +github.com/gorilla/schema v1.3.0/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gruntwork-io/terratest v0.46.13 h1:FDaEoZ7DtkomV8pcwLdBV/VsytdjnPRqJkIriYEYwjs= -github.com/gruntwork-io/terratest v0.46.13/go.mod h1:8sxu3Qup8TxtbzOHzq0MUrQffJj/G61/OwlsReaCwpo= +github.com/gruntwork-io/terratest v0.46.15 h1:qfqjTFveymaqe7aAWn3LjlK0SwVGpRfoOut5ggNyfQ8= +github.com/gruntwork-io/terratest v0.46.15/go.mod h1:9bd22zAojjBBiYdsp+AR1iyl2iB6bRUVm2Yf1AFhfrA= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= @@ -450,8 +450,8 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= -github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= -github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0= +github.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= @@ -529,8 +529,8 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4 github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -590,8 +590,9 @@ github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -623,8 +624,8 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99 github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= 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= @@ -658,12 +659,12 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240227171040-f2a20ee3e965 h1:A4EF0webCGCQPym/uWrhhL6H3j/FKn60G99tR+Zl93o= github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240227171040-f2a20ee3e965/go.mod h1:dtDKAPiUDxAwIkfHV7xcAFZcOm+xwNIuOI1MLFS+MeQ= -github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.12 h1:LVD8azh4dCeQJTa187MHT3DUqq4AgD0TjbqMXnAdLtc= -github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.14.12/go.mod h1:7nZWQe11mQE0kSkP3i/hDq57zrCo9QsY+gwKvfiVg3M= -github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.12 h1:QSG0662o7WfFJGHiuFhXR9HMiWJ2tZMpMB+0cWHi2s4= -github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.14.12/go.mod h1:uyvAL3vYwxXGDJU+8ilQdE1yfa3tbwFG0W9kyAtWEcQ= -github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.12 h1:pOubbet/8YAhePnFLCgAm7b3kUoL88/2ga7f+WrPjao= -github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.14.12/go.mod h1:7gjqWKmk8j0HtJCqYp6e+SoGqB3NPDwWTi7VOTULxqg= +github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.5 h1:IGVGNCOd/tUIReRda5kB4T28Y83Gkp47GyBHv5MHqwQ= +github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.5/go.mod h1:wpYbGozgWWPZqolCKe/Doe0h4CCS/SUL/F+3IE/zC/A= +github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.5 h1:JFKqwvB/AYTCBDRsEjrq/bh1z+kUiphk0rkjgFnSeKA= +github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.5/go.mod h1:yg1BDRR/TSr87mkjxEfsKc0VzMTJcbg87WW7C0GUPXQ= +github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.5 h1:hppQB59FSATul3YpBdhvQqJNBVYpfSTni+sguNvmO6U= +github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.5/go.mod h1:NK3GdttfYJ9mNVaECJzStUnXYZ7nxSP0GoPCSzczwmY= github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3 h1:XsIUZFrT+pSn9w/HftxhYcE3mTohiejYlooNe8Eg+4U= github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3/go.mod h1:FuTchJUh/PaESARVEYreXGBFaGA6SYDCvj7826xYEoM= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= @@ -726,8 +727,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= 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.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -738,8 +739,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -825,8 +826,8 @@ golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -868,8 +869,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -958,15 +959,15 @@ golang.org/x/sys v0.1.0/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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -978,8 +979,8 @@ golang.org/x/text v0.3.6/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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1050,6 +1051,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNq golang.zx2c4.com/wireguard v0.0.0-20210427022245-097af6e1351b/go.mod h1:a057zjmoc00UN7gVkaJt2sXVK523kMJcogDTEvPIasg= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20210803171230-4253848d036c h1:ADNrRDI5NR23/TUCnEmlLZLt4u9DnZ2nwRkPrAcFvto= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20210803171230-4253848d036c/go.mod h1:+1XihzyZUBJcSc5WO9SwNA7v26puQwOEDwanaxfNXPQ= +gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ= +gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1269,8 +1272,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= From 5dc5458d2389cc9cd744cd3ee0f740016e3b3cad Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 29 May 2024 17:48:54 +0300 Subject: [PATCH 07/37] fix plugin creation ans status in proxy filter --- integrationtests/k8s_test.go | 67 ++++++++------------- integrationtests/nomad_test.go | 11 +--- integrationtests/remoterun.go | 13 ++++ internal/provider/provider.go | 22 +++++-- internal/provider/scheduler/request.go | 2 +- internal/provider/scheduler/request_test.go | 2 +- 6 files changed, 60 insertions(+), 57 deletions(-) diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index 65a8109d..f9718a20 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -2,33 +2,32 @@ package integrationtests import ( "context" - "os" "strings" "testing" "time" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/threefoldtech/tfgrid-sdk-go/grid-client/deployer" "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" ) -// AssertNodesAreReady runs `kubectl get node` on the master node and asserts that all nodes are ready -func AssertNodesAreReady(t *testing.T, terraformOptions *terraform.Options, privateKey string) { +// requireNodesAreReady runs `kubectl get node` on the master node and requires that all nodes are ready +func requireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, privateKey string) { t.Helper() masterYggIP := terraform.Output(t, terraformOptions, "mr_ygg_ip") - assert.NotEmpty(t, masterYggIP) + require.NotEmpty(t, masterYggIP) time.Sleep(10 * time.Second) output, err := RemoteRun("root", masterYggIP, "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl get node", privateKey) output = strings.TrimSpace(output) - assert.Empty(t, err) + require.Empty(t, err) nodesNumber := 2 numberOfReadyNodes := strings.Count(output, "Ready") - assert.True(t, numberOfReadyNodes == nodesNumber, "number of ready nodes is not equal to number of nodes only %d nodes are ready", numberOfReadyNodes) + require.True(t, numberOfReadyNodes == nodesNumber, "number of ready nodes is not equal to number of nodes only %d nodes are ready", numberOfReadyNodes) } func TestK8s(t *testing.T) { @@ -38,13 +37,13 @@ func TestK8s(t *testing.T) { } t.Run("kubernetes", func(t *testing.T) { - /* Test case for deployeng a k8s. + /* Test case for deploying a k8s. **Test Scenario** - Deploy a k8s cluster. - Check that the outputs not empty. - - Assert that all nodes are ready. + - require that all nodes are ready. - Destroy the deployment */ terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ @@ -56,37 +55,33 @@ func TestK8s(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if !assert.NoError(t, err) { - return - } + require.NoError(t, err) // Check that the outputs not empty masterIP := terraform.Output(t, terraformOptions, "mr_ygg_ip") - if !assert.NotEmpty(t, masterIP) { - return - } + require.NotEmpty(t, masterIP) workerIP := terraform.Output(t, terraformOptions, "worker_ygg_ip") - assert.NotEmpty(t, workerIP) + require.NotEmpty(t, workerIP) // Check wireguard config in output wgConfig := terraform.Output(t, terraformOptions, "wg_config") - assert.NotEmpty(t, wgConfig) + require.NotEmpty(t, wgConfig) // Check that master and workers is reachable // testing connection on port 22, waits at max 3mins until it becomes ready otherwise it fails ok := TestConnection(masterIP, "22") - assert.True(t, ok) + require.True(t, ok) ok = TestConnection(workerIP, "22") - assert.True(t, ok) + require.True(t, ok) // ssh to master node - AssertNodesAreReady(t, terraformOptions, privateKey) + requireNodesAreReady(t, terraformOptions, privateKey) }) t.Run("k8s_invalid_names", func(t *testing.T) { - /* Test case for deployeng a k8s. + /* Test case for deploying a k8s. **Test Scenario** @@ -111,7 +106,7 @@ func TestK8s(t *testing.T) { t.Run("k8s_using_module", func(t *testing.T) { t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") - /* Test case for deployeng a singlenode. + /* Test case for deploying a k8s. **Test Scenario** @@ -122,25 +117,15 @@ func TestK8s(t *testing.T) { */ - mnemonics := os.Getenv("MNEMONICS") - if mnemonics == "" { - t.Fatal("invalid empty mnemonic") - } - - network := os.Getenv("NETWORK") - if network == "" { - network = "dev" - } - - tfPlugin, err := deployer.NewTFPluginClient(mnemonics, "sr25519", network, "", "", "", 0, false) - assert.NoError(t, err) + tfPlugin, err := setup() + require.NoError(t, err) status := "up" freeMRU := uint64(1024) freeSRU := uint64(2 * 1024) freeCRU := uint64(1) f := types.NodeFilter{ - Status: &status, + Status: []string{status}, FreeMRU: &freeMRU, FreeSRU: &freeSRU, TotalCRU: &freeCRU, @@ -148,9 +133,9 @@ func TestK8s(t *testing.T) { nodes, err := deployer.FilterNodes(context.Background(), tfPlugin, f, []uint64{freeSRU}, []uint64{}, []uint64{}, 3) if err != nil || len(nodes) != 3 { - t.Fatal("gridproxy could not find nodes with suitable resources") + t.Fatal("grid proxy could not find nodes with suitable resources") } - assert.NoError(t, err) + require.NoError(t, err) masterNode := nodes[0].NodeID worker0Node := nodes[1].NodeID @@ -201,10 +186,10 @@ func TestK8s(t *testing.T) { }) _, err = terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + require.NoError(t, err) defer terraform.Destroy(t, terraformOptions) - AssertNodesAreReady(t, terraformOptions, privateKey) + requireNodesAreReady(t, terraformOptions, privateKey) terraformOptions.Vars["workers"] = []map[string]interface{}{ { @@ -249,8 +234,8 @@ func TestK8s(t *testing.T) { }, } _, err = terraform.ApplyE(t, terraformOptions) - assert.NoError(t, err) + require.NoError(t, err) - AssertNodesAreReady(t, terraformOptions, privateKey) + requireNodesAreReady(t, terraformOptions, privateKey) }) } diff --git a/integrationtests/nomad_test.go b/integrationtests/nomad_test.go index cc20b949..25b0aef2 100644 --- a/integrationtests/nomad_test.go +++ b/integrationtests/nomad_test.go @@ -2,7 +2,6 @@ package integrationtests import ( "context" - "os" "strings" "testing" "time" @@ -32,13 +31,7 @@ func TestNomad(t *testing.T) { firstServerIP := "10.1.2.2" - network := os.Getenv("NETWORK") - if network == "" { - network = "dev" - } - - mnemonic := os.Getenv("MNEMONICS") - tf, err := deployer.NewTFPluginClient(mnemonic, "sr25519", network, "", "", "", 0, true) + tf, err := setup() if err != nil { t.Fatalf("failed to get create tf plugin client: %s", err.Error()) } @@ -50,7 +43,7 @@ func TestNomad(t *testing.T) { context.Background(), tf, types.NodeFilter{ - Status: &status, + Status: []string{status}, FreeMRU: freeMRU, FreeSRU: freeSRU, // Freefarm diff --git a/integrationtests/remoterun.go b/integrationtests/remoterun.go index 31bccc78..46d3db41 100644 --- a/integrationtests/remoterun.go +++ b/integrationtests/remoterun.go @@ -10,11 +10,24 @@ import ( "crypto/x509" "encoding/pem" "net" + "os" "github.com/pkg/errors" + "github.com/threefoldtech/tfgrid-sdk-go/grid-client/deployer" "golang.org/x/crypto/ssh" ) +func setup() (deployer.TFPluginClient, error) { + mnemonics := os.Getenv("MNEMONICS") + + network := os.Getenv("NETWORK") + if network == "" { + network = "dev" + } + + return deployer.NewTFPluginClient(mnemonics, deployer.WithNetwork(network), deployer.WithLogs()) +} + // RemoteRun used for running cmd remotely using ssh func RemoteRun(user string, addr string, cmd string, privateKey string) (string, error) { key, err := ssh.ParsePrivateKey([]byte(privateKey)) diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 7bf7dd7a..c2e2dcf3 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -113,18 +113,30 @@ func providerConfigure(st state.Getter) (func(ctx context.Context, d *schema.Res debug := false opts := []deployer.PluginOpt{ - deployer.WithKeyType(keyType), deployer.WithNetwork(network), - deployer.WithRelayURL(relayURL), - deployer.WithProxyURL(proxyURL), - deployer.WithRMBTimeout(timeout), deployer.WithTwinCache(), } + if timeout > 0 { + opts = append(opts, deployer.WithRMBTimeout(timeout)) + } + + if len(strings.TrimSpace(keyType)) != 0 { + opts = append(opts, deployer.WithKeyType(keyType)) + } + if len(strings.TrimSpace(substrateURL)) > 0 { opts = append(opts, deployer.WithSubstrateURL(substrateURL)) } + if len(strings.TrimSpace(proxyURL)) > 0 { + opts = append(opts, deployer.WithProxyURL(proxyURL)) + } + + if len(strings.TrimSpace(relayURL)) > 0 { + opts = append(opts, deployer.WithRelayURL(relayURL)) + } + if debug { opts = append(opts, deployer.WithLogs()) } @@ -135,7 +147,7 @@ func providerConfigure(st state.Getter) (func(ctx context.Context, d *schema.Res } // set state - tfPluginClient.State.Networks = st.GetState().Networks + tfPluginClient.State.Networks = *st.GetState() return &tfPluginClient, nil }, substrateConn diff --git a/internal/provider/scheduler/request.go b/internal/provider/scheduler/request.go index 8cb51b0e..3b7113e8 100644 --- a/internal/provider/scheduler/request.go +++ b/internal/provider/scheduler/request.go @@ -26,7 +26,7 @@ type Request struct { func (r *Request) constructFilter(twinID uint64) (f proxyTypes.NodeFilter) { // this filter only lacks certification type, which is validated after. // grid proxy should support filtering a node by certification type. - f.Status = &statusUP + f.Status = []string{statusUP} f.AvailableFor = &twinID if r.FarmId != 0 { f.FarmIDs = []uint64{uint64(r.FarmId)} diff --git a/internal/provider/scheduler/request_test.go b/internal/provider/scheduler/request_test.go index 43ecf255..dc631d7d 100644 --- a/internal/provider/scheduler/request_test.go +++ b/internal/provider/scheduler/request_test.go @@ -93,7 +93,7 @@ func TestConstructFilter(t *testing.T) { } con := r.constructFilter(1) - assert.Equal(t, *con.Status, "up", "construct-filter-status") + assert.Equal(t, con.Status, []string{"up"}, "construct-filter-status") assert.Equal(t, *con.FreeMRU, uint64(1), "construct-filter-mru") assert.Equal(t, *con.FreeSRU, uint64(2), "construct-filter-sru") assert.Equal(t, *con.FreeHRU, uint64(3), "construct-filter-hru") From c964857a5d069ced408e0d37d287da19e86ce445 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 29 May 2024 17:49:33 +0300 Subject: [PATCH 08/37] fix removed host IDs from state --- internal/provider/k8s.go | 48 +------------------------------ internal/provider/resource_k8s.go | 6 ++-- internal/state/file_state.go | 15 ++++++---- internal/state/state.go | 24 ---------------- 4 files changed, 13 insertions(+), 80 deletions(-) delete mode 100644 internal/state/state.go diff --git a/internal/provider/k8s.go b/internal/provider/k8s.go index 2b4337d3..fd7e6b76 100644 --- a/internal/provider/k8s.go +++ b/internal/provider/k8s.go @@ -4,14 +4,11 @@ package provider import ( "encoding/hex" "fmt" - "log" - "net" "strconv" "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/threefoldtech/tfgrid-sdk-go/grid-client/state" "github.com/threefoldtech/tfgrid-sdk-go/grid-client/workloads" "github.com/threefoldtech/zos/pkg/gridtypes" ) @@ -96,7 +93,7 @@ func retainChecksums(workers []interface{}, master interface{}, k8s *workloads.K } } -func storeK8sState(d *schema.ResourceData, k8s *workloads.K8sCluster, state state.State) (errors error) { +func storeK8sState(d *schema.ResourceData, k8s *workloads.K8sCluster) (errors error) { workers := make([]interface{}, 0) for _, w := range k8s.Workers { wMap, err := workloads.ToMap(w) @@ -129,8 +126,6 @@ func storeK8sState(d *schema.ResourceData, k8s *workloads.K8sCluster, state stat master["mycelium_ip_seed"] = hex.EncodeToString(k8s.Master.MyceliumIPSeed) retainChecksums(workers, master, k8s) - updateNetworkState(d, k8s, state) - l := []interface{}{master} err = d.Set("master", l) if err != nil { @@ -174,44 +169,3 @@ func storeK8sState(d *schema.ResourceData, k8s *workloads.K8sCluster, state stat return } - -func updateNetworkState(d *schema.ResourceData, k8s *workloads.K8sCluster, state state.State) { - network := state.Networks.GetNetwork(k8s.NetworkName) - - before, _ := d.GetChange("node_deployment_id") - for node, deploymentID := range before.(map[string]interface{}) { - nodeID, err := strconv.Atoi(node) - if err != nil { - log.Printf("error converting node id string to int: %+v", err) - continue - } - deploymentIDStr := uint64(deploymentID.(int)) - network.DeleteDeploymentHostIDs(uint32(nodeID), deploymentIDStr) - } - - // remove old ips - network.DeleteDeploymentHostIDs(k8s.Master.Node, k8s.NodeDeploymentID[k8s.Master.Node]) - for _, worker := range k8s.Workers { - network.DeleteDeploymentHostIDs(worker.Node, (k8s.NodeDeploymentID[worker.Node])) - } - - // append new ips - var masterNodeDeploymentHostIDs []byte - masterIP := net.ParseIP(k8s.Master.IP) - if masterIP == nil { - log.Printf("couldn't parse master ip") - } else { - masterNodeDeploymentHostIDs = append(masterNodeDeploymentHostIDs, masterIP.To4()[3]) - } - network.SetDeploymentHostIDs(k8s.Master.Node, k8s.NodeDeploymentID[k8s.Master.Node], masterNodeDeploymentHostIDs) - for _, worker := range k8s.Workers { - workerNodeDeploymentHostIDs := network.GetDeploymentHostIDs(worker.Node, k8s.NodeDeploymentID[worker.Node]) - workerIP := net.ParseIP(worker.IP) - if workerIP == nil { - log.Printf("couldn't parse worker ip at node (%d)", worker.Node) - } else { - workerNodeDeploymentHostIDs = append(workerNodeDeploymentHostIDs, workerIP.To4()[3]) - } - network.SetDeploymentHostIDs(worker.Node, k8s.NodeDeploymentID[worker.Node], workerNodeDeploymentHostIDs) - } -} diff --git a/internal/provider/resource_k8s.go b/internal/provider/resource_k8s.go index 221305fe..aed39a4f 100644 --- a/internal/provider/resource_k8s.go +++ b/internal/provider/resource_k8s.go @@ -322,7 +322,7 @@ func resourceK8sCreate(ctx context.Context, d *schema.ResourceData, meta interfa return diag.Errorf("couldn't update k8s cluster from remote with error: %v", err) } - err = storeK8sState(d, k8sCluster, *tfPluginClient.State) + err = storeK8sState(d, k8sCluster) if err != nil { diags = diag.FromErr(err) } @@ -352,7 +352,7 @@ func resourceK8sUpdate(ctx context.Context, d *schema.ResourceData, meta interfa return diag.Errorf("couldn't update k8s cluster from remote with error: %v", err) } - err = storeK8sState(d, k8sCluster, *tfPluginClient.State) + err = storeK8sState(d, k8sCluster) if err != nil { diags = diag.FromErr(err) } @@ -390,7 +390,7 @@ func resourceK8sRead(ctx context.Context, d *schema.ResourceData, meta interface return diags } - err = storeK8sState(d, k8sCluster, *tfPluginClient.State) + err = storeK8sState(d, k8sCluster) if err != nil { diags = diag.FromErr(err) } diff --git a/internal/state/file_state.go b/internal/state/file_state.go index e5ae5a6f..641c59ce 100644 --- a/internal/state/file_state.go +++ b/internal/state/file_state.go @@ -7,12 +7,13 @@ import ( "reflect" "github.com/pkg/errors" + "github.com/threefoldtech/tfgrid-sdk-go/grid-client/state" ) // Getter interface for local state type Getter interface { // GetState - GetState() State + GetState() *state.NetworkState } const ( @@ -22,7 +23,7 @@ const ( // LocalFileState struct is the local state file type LocalFileState struct { - st State + st *state.NetworkState } // NewLocalFileState generates a new local state @@ -34,7 +35,7 @@ func NewLocalFileState() LocalFileState { // Load loads state from state.json file func (f *LocalFileState) Load(FileName string) error { // os.OpenFile(FileName, os.O_CREATE, 0644) - f.st = State{} + f.st = &state.NetworkState{} _, err := os.Stat(FileName) if err != nil && os.IsNotExist(err) { _, err = os.OpenFile(FileName, os.O_CREATE, 0644) @@ -56,9 +57,11 @@ func (f *LocalFileState) Load(FileName string) error { } // GetState returns the current state -func (f *LocalFileState) GetState() State { - if reflect.DeepEqual(f.st, State{}) { - state := NewState() +func (f *LocalFileState) GetState() *state.NetworkState { + if reflect.DeepEqual(f.st, &state.NetworkState{}) { + state := &state.NetworkState{ + State: make(map[string]state.Network), + } f.st = state } return f.st diff --git a/internal/state/state.go b/internal/state/state.go deleted file mode 100644 index c731dfbd..00000000 --- a/internal/state/state.go +++ /dev/null @@ -1,24 +0,0 @@ -// Package state provides a state to save the user work in a database. -package state - -import "github.com/threefoldtech/tfgrid-sdk-go/grid-client/state" - -// State struct -type State struct { - Networks state.NetworkState `json:"networks"` -} - -// GetNetworkState gets network state (names and their networks) -func (s *State) GetNetworkState() state.NetworkState { - if s.Networks == nil { - s.Networks = make(state.NetworkState) - } - return s.Networks -} - -// NewState generates a new state -func NewState() State { - return State{ - Networks: make(state.NetworkState), - } -} From fd0520d3c9c711f27af1aea2eab5f17faa5eb53a Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 25 Jun 2024 13:54:13 +0300 Subject: [PATCH 09/37] update pkgs --- .github/workflows/release.yml | 4 +- .github/workflows/test.yml | 2 +- .goreleaser.yml | 3 +- go.mod | 81 ++++++++------- go.sum | 186 ++++++++++++++++++++-------------- 5 files changed, 158 insertions(+), 118 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f11b209b..4a9026c6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,10 +35,10 @@ jobs: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.PASSPHRASE }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v5.1.0 + uses: goreleaser/goreleaser-action@v6.0.0 with: version: latest - args: release --rm-dist + args: release --clean env: GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} # GitHub sets this automatically diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1eb9d3ef..58cf648a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,7 +35,7 @@ jobs: go mod download - name: Install GoReleaser - uses: goreleaser/goreleaser-action@v5.1.0 + uses: goreleaser/goreleaser-action@v6.0.0 with: install-only: true diff --git a/.goreleaser.yml b/.goreleaser.yml index 99557e79..8b909df3 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,5 +1,6 @@ # Visit https://goreleaser.com for documentation on how to customize this # behavior. +version: 2 before: hooks: # this is just an example and not a requirement for provider building/publishing @@ -51,8 +52,6 @@ signs: release: # If you want to manually examine the release before its live, uncomment this line: # draft: true -changelog: - skip: true git: tag_sort: taggerdate diff --git a/go.mod b/go.mod index d8e7626e..826a833d 100644 --- a/go.mod +++ b/go.mod @@ -7,37 +7,39 @@ require ( github.com/google/uuid v1.6.0 github.com/gruntwork-io/terratest v0.46.15 github.com/hashicorp/go-multierror v1.1.1 - github.com/hashicorp/terraform-plugin-docs v0.18.0 - github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0 + github.com/hashicorp/terraform-plugin-docs v0.19.4 + github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.9.0 - github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.5 - github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.5 - github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.5 - github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3 - golang.org/x/crypto v0.23.0 + github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.11 + github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.11 + github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.11 + github.com/threefoldtech/zos v0.5.6-0.20240611092312-66184cdeb953 + golang.org/x/crypto v0.24.0 golang.org/x/sync v0.7.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20210803171230-4253848d036c ) require ( - cloud.google.com/go v0.110.10 // indirect - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go v0.112.0 // indirect + cloud.google.com/go/compute v1.24.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/storage v1.30.1 // indirect + cloud.google.com/go/iam v1.1.6 // indirect + cloud.google.com/go/storage v1.36.0 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect github.com/ChainSafe/go-schnorrkel v1.1.0 // indirect github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect - github.com/ProtonMail/go-crypto v1.1.0-alpha.0 // indirect + github.com/ProtonMail/go-crypto v1.1.0-alpha.2 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/aws/aws-sdk-go v1.44.122 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.0 // indirect + github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v3 v3.2.2 // indirect github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 // indirect @@ -50,17 +52,20 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/ethereum/go-ethereum v1.11.6 // indirect github.com/fatih/color v1.16.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/gomodule/redigo v2.0.0+incompatible // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/schema v1.3.0 // indirect - github.com/gorilla/websocket v1.5.1 // indirect + github.com/gorilla/websocket v1.5.2 // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/cli v1.1.6 // indirect @@ -73,13 +78,13 @@ require ( github.com/hashicorp/go-plugin v1.6.0 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hc-install v0.6.3 // indirect - github.com/hashicorp/hcl/v2 v2.19.1 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/hc-install v0.7.0 // indirect + github.com/hashicorp/hcl/v2 v2.20.1 // indirect github.com/hashicorp/logutils v1.0.0 // indirect - github.com/hashicorp/terraform-exec v0.20.0 // indirect - github.com/hashicorp/terraform-json v0.21.0 // indirect - github.com/hashicorp/terraform-plugin-go v0.22.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-go v0.23.0 // indirect github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect github.com/hashicorp/terraform-registry-address v0.2.3 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect @@ -111,34 +116,40 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect github.com/rs/cors v1.10.1 // indirect github.com/rs/zerolog v1.33.0 // indirect - github.com/russross/blackfriday v1.6.0 // indirect github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/cast v1.5.0 // indirect - github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240227171040-f2a20ee3e965 // indirect + github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240416134707-eb36aa90df2d // indirect github.com/tmccombs/hcl2json v0.3.3 // indirect github.com/ulikunitz/xz v0.5.10 // indirect github.com/vedhavyas/go-subkey v1.0.3 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect - github.com/yuin/goldmark v1.6.0 // indirect + github.com/yuin/goldmark v1.7.1 // indirect github.com/yuin/goldmark-meta v1.1.0 // indirect - github.com/zclconf/go-cty v1.14.2 // indirect + github.com/zclconf/go-cty v1.14.4 // indirect + go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect + go.opentelemetry.io/otel v1.22.0 // indirect + go.opentelemetry.io/otel/metric v1.22.0 // indirect + go.opentelemetry.io/otel/trace v1.22.0 // indirect golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/mod v0.15.0 // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.14.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/oauth2 v0.17.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect gonum.org/v1/gonum v0.15.0 // indirect - google.golang.org/api v0.149.0 // indirect + google.golang.org/api v0.162.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect - google.golang.org/grpc v1.61.1 // indirect + google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/grpc v1.63.2 // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 7f65b780..d0135277 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= -cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= +cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -68,8 +68,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -109,8 +109,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -171,8 +171,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -188,6 +188,8 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v1.1.0 h1:rZ6EU+CZFCjB4sHUE1jIu8VDoB/wRKZxoe1tkcO71Wk= github.com/ChainSafe/go-schnorrkel v1.1.0/go.mod h1:ABkENxiP+cvjFiByMIZ9LYbRoNNLeBLiakC1XeTFxfE= @@ -202,8 +204,8 @@ github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBa github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v1.1.0-alpha.0 h1:nHGfwXmFvJrSR9xu8qL7BkO4DqTHXE9N5vPhgY2I+j0= -github.com/ProtonMail/go-crypto v1.1.0-alpha.0/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/ProtonMail/go-crypto v1.1.0-alpha.2 h1:bkyFVUP+ROOARdgCiJzNQo2V2kiB97LyUpzH9P6Hrlg= +github.com/ProtonMail/go-crypto v1.1.0-alpha.2/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= @@ -222,6 +224,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I= +github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= @@ -254,6 +258,8 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -286,12 +292,16 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/ethereum/go-ethereum v1.11.6 h1:2VF8Mf7XiSUfmoNOy3D+ocfl9Qu8baQBrCNbo2CXQ8E= github.com/ethereum/go-ethereum v1.11.6/go.mod h1:+a8pUj1tOyJ2RinsNQD4326YS+leSoKGiG/uVVb0x6Y= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -303,11 +313,16 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66D github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= -github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= +github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= +github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= @@ -355,8 +370,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= @@ -429,8 +444,8 @@ github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qK github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gorilla/schema v1.3.0 h1:rbciOzXAx3IB8stEFnfTwO3sYa6EWlQk79XdyustPDA= github.com/gorilla/schema v1.3.0/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/gorilla/websocket v1.5.2 h1:qoW6V1GT3aZxybsbC6oLnailWnB+qTMVwMreOso9XUw= +github.com/gorilla/websocket v1.5.2/go.mod h1:0n9H61RBAcf5/38py2MCYbxzPIY9rOkpvvMT24Rqs30= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gruntwork-io/terratest v0.46.15 h1:qfqjTFveymaqe7aAWn3LjlK0SwVGpRfoOut5ggNyfQ8= github.com/gruntwork-io/terratest v0.46.15/go.mod h1:9bd22zAojjBBiYdsp+AR1iyl2iB6bRUVm2Yf1AFhfrA= @@ -464,29 +479,30 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +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/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hc-install v0.6.3 h1:yE/r1yJvWbtrJ0STwScgEnCanb0U9v7zp0Gbkmcoxqs= -github.com/hashicorp/hc-install v0.6.3/go.mod h1:KamGdbodYzlufbWh4r9NRo8y6GLHWZP2GBtdnms1Ln0= +github.com/hashicorp/hc-install v0.7.0 h1:Uu9edVqjKQxxuD28mR5TikkKDd/p55S8vzPC1659aBk= +github.com/hashicorp/hc-install v0.7.0/go.mod h1:ELmmzZlGnEcqoUMKUuykHaPCIR1sYLYX+KSggWSKZuA= github.com/hashicorp/hcl/v2 v2.9.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg= -github.com/hashicorp/hcl/v2 v2.19.1 h1://i05Jqznmb2EXqa39Nsvyan2o5XyMowW5fnCKW5RPI= -github.com/hashicorp/hcl/v2 v2.19.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +github.com/hashicorp/hcl/v2 v2.20.1 h1:M6hgdyz7HYt1UN9e61j+qKJBqR3orTWbI1HKBJEdxtc= +github.com/hashicorp/hcl/v2 v2.20.1/go.mod h1:TZDqQ4kNKCbh1iJp99FdPiUaVDDUPivbqxZulxDYqL4= 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.20.0 h1:DIZnPsqzPGuUnq6cH8jWcPunBfY+C+M8JyYF3vpnuEo= -github.com/hashicorp/terraform-exec v0.20.0/go.mod h1:ckKGkJWbsNqFKV1itgMnE0hY9IYf1HoiekpuN0eWoDw= -github.com/hashicorp/terraform-json v0.21.0 h1:9NQxbLNqPbEMze+S6+YluEdXgJmhQykRyRNd+zTI05U= -github.com/hashicorp/terraform-json v0.21.0/go.mod h1:qdeBs11ovMzo5puhrRibdD6d2Dq6TyE/28JiU4tIQxk= -github.com/hashicorp/terraform-plugin-docs v0.18.0 h1:2bINhzXc+yDeAcafurshCrIjtdu1XHn9zZ3ISuEhgpk= -github.com/hashicorp/terraform-plugin-docs v0.18.0/go.mod h1:iIUfaJpdUmpi+rI42Kgq+63jAjI8aZVTyxp3Bvk9Hg8= -github.com/hashicorp/terraform-plugin-go v0.22.0 h1:1OS1Jk5mO0f5hrziWJGXXIxBrMe2j/B8E+DVGw43Xmc= -github.com/hashicorp/terraform-plugin-go v0.22.0/go.mod h1:mPULV91VKss7sik6KFEcEu7HuTogMLLO/EvWCuFkRVE= +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-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-go v0.23.0 h1:AALVuU1gD1kPb48aPQUjug9Ir/125t+AAurhqphJ2Co= +github.com/hashicorp/terraform-plugin-go v0.23.0/go.mod h1:1E3Cr9h2vMlahWMbsSEcNrOCxovCZhOOIXjFHbjc/lQ= 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.33.0 h1:qHprzXy/As0rxedphECBEQAh3R4yp6pKksKHcqZx5G8= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0/go.mod h1:H+8tjs9TjV2w57QFVSMBQacf8k/E1XwLXGCARgViC6A= +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-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= @@ -540,7 +556,6 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -626,18 +641,16 @@ github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -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.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= -github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= +github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= @@ -657,16 +670,16 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240227171040-f2a20ee3e965 h1:A4EF0webCGCQPym/uWrhhL6H3j/FKn60G99tR+Zl93o= -github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240227171040-f2a20ee3e965/go.mod h1:dtDKAPiUDxAwIkfHV7xcAFZcOm+xwNIuOI1MLFS+MeQ= -github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.5 h1:IGVGNCOd/tUIReRda5kB4T28Y83Gkp47GyBHv5MHqwQ= -github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.5/go.mod h1:wpYbGozgWWPZqolCKe/Doe0h4CCS/SUL/F+3IE/zC/A= -github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.5 h1:JFKqwvB/AYTCBDRsEjrq/bh1z+kUiphk0rkjgFnSeKA= -github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.5/go.mod h1:yg1BDRR/TSr87mkjxEfsKc0VzMTJcbg87WW7C0GUPXQ= -github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.5 h1:hppQB59FSATul3YpBdhvQqJNBVYpfSTni+sguNvmO6U= -github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.5/go.mod h1:NK3GdttfYJ9mNVaECJzStUnXYZ7nxSP0GoPCSzczwmY= -github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3 h1:XsIUZFrT+pSn9w/HftxhYcE3mTohiejYlooNe8Eg+4U= -github.com/threefoldtech/zos v0.5.6-0.20240226114056-364e04acbed3/go.mod h1:FuTchJUh/PaESARVEYreXGBFaGA6SYDCvj7826xYEoM= +github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240416134707-eb36aa90df2d h1:vWHR33VfphOahBlo3aGCE/eKPlfb4BCInhKidGkdp5s= +github.com/threefoldtech/tfchain/clients/tfchain-client-go v0.0.0-20240416134707-eb36aa90df2d/go.mod h1:dtDKAPiUDxAwIkfHV7xcAFZcOm+xwNIuOI1MLFS+MeQ= +github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.11 h1:FmEQplYSZ6pYslmBlUNaUabScOdi6hJialeV/yq0BrY= +github.com/threefoldtech/tfgrid-sdk-go/grid-client v0.15.11/go.mod h1:Obsv0kspgSSwF8jb91Z7CBY2FCQNq6RhiZXIQf26nWY= +github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.11 h1:qsSICIj5cvoVBR4GLWmdu2n3FfJG5isJ2ABnNNWykLU= +github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.11/go.mod h1:7cKHvKPpfdCpU4a/VCznRDDNMPBPI98cJ0uVJoUGrgg= +github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.11 h1:AKDj/GD88UteVWe5RqtmprQCKNy/w2kQz/l8tepfzv0= +github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.11/go.mod h1:5238AvoU1LVPQ8zgVFSfrmxMLaPm8bcnVAryo8VyclM= +github.com/threefoldtech/zos v0.5.6-0.20240611092312-66184cdeb953 h1:hzqMY2Ydb+N2TBrTJHpy5n5i5nflfre1dhoNQH/tfhI= +github.com/threefoldtech/zos v0.5.6-0.20240611092312-66184cdeb953/go.mod h1:yH6T43SiHvQBBuLgKGElECsIhqzJ6fy/dJyaxtO/X0M= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= @@ -694,8 +707,8 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68= -github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.1 h1:3bajkSilaCbjdKVsKdZjZCLBNPL9pYzrCakKaf4U49U= +github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc= github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= @@ -703,9 +716,12 @@ github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.8.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.14.2 h1:kTG7lqmBou0Zkx35r6HJHUQTvaRPr5bIAf3AoHS0izI= -github.com/zclconf/go-cty v1.14.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8= +github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b h1:FosyBZYxY34Wul7O/MSKey3txpPYyCqVO5ZyceuQJEI= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= +go.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ5JnxRw= +go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -715,6 +731,18 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= +go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -727,8 +755,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= 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.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -767,8 +795,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -826,8 +854,8 @@ golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -853,8 +881,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= -golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= +golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -959,15 +987,15 @@ golang.org/x/sys v0.1.0/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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -979,11 +1007,13 @@ golang.org/x/text v0.3.6/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.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1037,8 +1067,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1101,8 +1131,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= -google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= +google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1213,12 +1243,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1254,8 +1284,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY= -google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= From 31d70b5b45eb5a6ca343e82ee5aab97b9a810b5c Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 25 Jun 2024 15:44:31 +0300 Subject: [PATCH 10/37] fix peertube test and example --- examples/resources/peertube/main.tf | 29 ++++++++++++------- integrationtests/peertube/main.tf | 43 +++++++++++++++++++---------- integrationtests/peertube_test.go | 29 ++++++++----------- 3 files changed, 59 insertions(+), 42 deletions(-) diff --git a/examples/resources/peertube/main.tf b/examples/resources/peertube/main.tf index 365f2f23..a9f9add2 100644 --- a/examples/resources/peertube/main.tf +++ b/examples/resources/peertube/main.tf @@ -1,3 +1,8 @@ + +variable "public_key" { + type = string +} + terraform { required_providers { grid = { @@ -18,14 +23,15 @@ resource "grid_scheduler" "sched" { } requests { - name = "domain" - public_config = true + name = "domain" + public_config = true + public_ips_count = 1 } } locals { solution_type = "Peertube" - name = "ashraftube" + name = "peertube" node = grid_scheduler.sched.nodes["peertube"] } @@ -33,7 +39,7 @@ locals { # vm: needs to know the domain in its init script # gateway_name: needs the ip of the vm to use as backend. # - the fqdn can be computed from grid_gateway_domain for the vm -# - the backend can reference the vm ip directly +# - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { node = grid_scheduler.sched.nodes["domain"] name = local.name @@ -44,7 +50,7 @@ resource "grid_network" "net1" { name = local.name nodes = [grid_scheduler.sched.nodes["peertube"]] ip_range = "10.1.0.0/16" - description = "newer network" + description = "peertube network" } resource "grid_deployment" "d1" { node = grid_scheduler.sched.nodes["peertube"] @@ -58,7 +64,7 @@ resource "grid_deployment" "d1" { entrypoint = "/sbin/zinit init" memory = 4096 env_vars = { - SSH_KEY = file("~/.ssh/id_rsa.pub") + SSH_KEY = try(length("${var.public_key}"), 0) > 0 ? "${var.public_key}" : file("~/.ssh/id_rsa.pub") PEERTUBE_DB_SUFFIX = "_prod" PEERTUBE_DB_USERNAME = "peertube" PEERTUBE_DB_PASSWORD = "peertube" @@ -73,19 +79,22 @@ resource "grid_deployment" "d1" { planetary = true } } + +locals { + ygg_ip = try(length(grid_deployment.d1.vms[0].planetary_ip), 0) > 0 ? grid_deployment.d1.vms[0].planetary_ip : "" +} + resource "grid_name_proxy" "p1" { node = grid_scheduler.sched.nodes["domain"] solution_type = local.solution_type name = local.name - backends = [format("http://[%s]:9000", grid_deployment.d1.vms[0].planetary_ip)] + backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false } + output "fqdn" { value = data.grid_gateway_domain.domain.fqdn } -output "node1_zmachine1_ip" { - value = grid_deployment.d1.vms[0].ip -} output "ygg_ip" { value = grid_deployment.d1.vms[0].planetary_ip diff --git a/integrationtests/peertube/main.tf b/integrationtests/peertube/main.tf index 756368c9..9947364c 100644 --- a/integrationtests/peertube/main.tf +++ b/integrationtests/peertube/main.tf @@ -16,36 +16,47 @@ provider "grid" { } resource "grid_scheduler" "sched" { requests { - name = "peertube_instance" + name = "peertube" cru = 2 sru = 512 mru = 4096 } requests { - name = "gateway" + name = "domain" public_config = true public_ips_count = 1 } } + +locals { + solution_type = "Peertube" + name = "peertube" + node = grid_scheduler.sched.nodes["peertube"] +} + # this data source is used to break circular dependency in cases similar to the following: # vm: needs to know the domain in its init script # gateway_name: needs the ip of the vm to use as backend. # - the fqdn can be computed from grid_gateway_domain for the vm -# - the backend can reference the vm ip directly +# - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { - node = grid_scheduler.sched.nodes["gateway"] - name = "peertube" + node = grid_scheduler.sched.nodes["domain"] + name = local.name } + resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["peertube_instance"]] - ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" + solution_type = local.solution_type + name = local.name + nodes = [grid_scheduler.sched.nodes["peertube"]] + ip_range = "10.1.0.0/16" + description = "peertube network" } resource "grid_deployment" "d1" { - node = grid_scheduler.sched.nodes["peertube_instance"] - network_name = grid_network.net1.name + node = grid_scheduler.sched.nodes["peertube"] + solution_type = local.solution_type + name = local.name + network_name = grid_network.net1.name vms { name = "vm1" flist = "https://hub.grid.tf/tf-official-apps/peertube-v3.1.1.flist" @@ -53,7 +64,7 @@ resource "grid_deployment" "d1" { entrypoint = "/sbin/zinit init" memory = 4096 env_vars = { - SSH_KEY = "${var.public_key}" + SSH_KEY = try(length("${var.public_key}"), 0) > 0 ? "${var.public_key}" : file("~/.ssh/id_rsa.pub") PEERTUBE_DB_SUFFIX = "_prod" PEERTUBE_DB_USERNAME = "peertube" PEERTUBE_DB_PASSWORD = "peertube" @@ -74,15 +85,17 @@ locals { } resource "grid_name_proxy" "p1" { - node = grid_scheduler.sched.nodes["gateway"] - name = "peertube" + node = grid_scheduler.sched.nodes["domain"] + solution_type = local.solution_type + name = local.name backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false } + output "fqdn" { value = data.grid_gateway_domain.domain.fqdn } + output "ygg_ip" { value = grid_deployment.d1.vms[0].planetary_ip } - diff --git a/integrationtests/peertube_test.go b/integrationtests/peertube_test.go index 6864178c..6299c6db 100644 --- a/integrationtests/peertube_test.go +++ b/integrationtests/peertube_test.go @@ -4,10 +4,9 @@ import ( "fmt" "net/http" "testing" - "time" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestPeertube(t *testing.T) { @@ -38,32 +37,28 @@ func TestPeertube(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + require.NoError(t, err) // Check that the outputs not empty yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) fqdn := terraform.Output(t, terraformOptions, "fqdn") - assert.NotEmpty(t, fqdn) + require.NotEmpty(t, fqdn) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) // Check that env variables set successfully output, err := RemoteRun("root", yggIP, "zinit list", privateKey) - assert.NoError(t, err) - assert.Contains(t, output, "peertube: Running") + require.NoError(t, err) + require.Contains(t, output, "peertube: Running") statusOk := false - ticker := time.NewTicker(2 * time.Second) - for now := time.Now(); time.Since(now) < 1*time.Minute; { - <-ticker.C - resp, err := http.Get(fmt.Sprintf("https://%s", fqdn)) - if err == nil && resp.StatusCode == 200 { - statusOk = true - break - } + resp, err := http.Get(fmt.Sprintf("https://%s", fqdn)) + if err == nil && resp.StatusCode == 200 { + statusOk = true } - assert.True(t, statusOk, "website did not respond with 200 status code") + + require.True(t, statusOk, "website did not respond with 200 status code") } From df1f55924b37f5b209ac50d1cf0b2690401bc9ff Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 25 Jun 2024 15:44:52 +0300 Subject: [PATCH 11/37] fix ygg installation --- .github/workflows/main_release_test.yml | 2 +- .github/workflows/terratest.yml | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main_release_test.yml b/.github/workflows/main_release_test.yml index 53269af0..829c7b7b 100644 --- a/.github/workflows/main_release_test.yml +++ b/.github/workflows/main_release_test.yml @@ -20,7 +20,7 @@ jobs: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: - terraform-version: 1.0.11 + terraform-version: 1.8.5 - name: install wg and yggdrasil and add peers run: | sudo apt-get update diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 766e39dc..c0b4d7b5 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -25,7 +25,7 @@ jobs: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: - terraform-version: 1.0.11 + terraform-version: 1.8.5 - name: install wg and yggdrasil and add peers run: | sudo apt-get update @@ -38,21 +38,19 @@ jobs: sudo apt-get update sudo apt-get install yggdrasil sudo systemctl enable yggdrasil - PEERS=$(curl https://raw.githubusercontent.com/threefoldtech/zos-config/main/development.json | jq '.yggdrasil.peers[]' -r | sed 's/\//\\\//g' | sed -z 's/\n/\\n/g') - sudo sed -i -- 's/Peers\: \[\]/Peers: [\n'"$PEERS"']/g' /etc/yggdrasil/yggdrasil.conf - sudo systemctl start yggdrasil + PEERS=$(curl https://raw.githubusercontent.com/AhmedHanafy725/yggdrasil-config/main/config.json | jq '.yggdrasil.peers[]' -r | sed 's/\//\\\//g' | sed -z 's/\n/\\n/g') + sudo sed -i -- 's/Peers\: \[\]/Peers: [\n'"$PEERS"']/g' /etc/yggdrasil/yggdrasil.conf + sudo systemctl restart yggdrasil - uses: actions/checkout@v4.1.1 with: fetch-depth: 0 - name: Build - run: | - go mod tidy - mkdir -p ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ - go build -o terraform-provider-grid - mv terraform-provider-grid ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ + run: make build - name: Run Go Tests env: MNEMONICS: ${{ secrets.MNEMONICS }} NETWORK: ${{ matrix.network }} working-directory: integrationtests - run: go test -v ./... --tags=integration -timeout 3600s + run: | + go test -v ./... --tags=integration -run TestPeertube + #go test -v ./... --tags=integration -timeout 3600s From 8b7b7e71315542b9e44c514aeacbfca54672a96c Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 25 Jun 2024 16:12:42 +0300 Subject: [PATCH 12/37] fix presearch tests --- .github/workflows/main_release_test.yml | 54 ------------------------- .github/workflows/terratest.yml | 10 ++++- examples/resources/peertube/main.tf | 7 +--- examples/resources/presearch/main.tf | 12 +++--- integrationtests/peertube_test.go | 20 +++++++-- integrationtests/presearch/main.tf | 31 +++++++++----- integrationtests/presearch_test.go | 15 +++++-- 7 files changed, 66 insertions(+), 83 deletions(-) delete mode 100644 .github/workflows/main_release_test.yml diff --git a/.github/workflows/main_release_test.yml b/.github/workflows/main_release_test.yml deleted file mode 100644 index 829c7b7b..00000000 --- a/.github/workflows/main_release_test.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Latest mainnet release integration tests weekly - -on: - schedule: - - cron: "0 0 * * 0" - workflow_dispatch: - -jobs: - go-tests: - name: Run Go Tests - runs-on: ubuntu-latest - timeout-minutes: 0 - strategy: - fail-fast: false - steps: - - uses: actions/setup-go@v5 - with: - go-version: 1.21 - - uses: autero1/action-terraform@v3.0.1 - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - with: - terraform-version: 1.8.5 - - name: install wg and yggdrasil and add peers - run: | - sudo apt-get update - sudo apt-get install -y wireguard - sudo apt-get install dirmngr - sudo apt-get install curl - gpg --fetch-keys https://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/key.txt - gpg --export 569130E8CA20FBC4CB3FDE555898470A764B32C9 | sudo apt-key add - - echo 'deb http://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/ debian yggdrasil' | sudo tee /etc/apt/sources.list.d/yggdrasil.list - sudo apt-get update - sudo apt-get install yggdrasil - sudo systemctl enable yggdrasil - PEERS=$(curl https://raw.githubusercontent.com/threefoldtech/zos-config/main/development.json | jq '.yggdrasil.peers[]' -r | sed 's/\//\\\//g' | sed -z 's/\n/\\n/g') - sudo sed -i -- 's/Peers\: \[\]/Peers: [\n'"$PEERS"']/g' /etc/yggdrasil/yggdrasil.conf - sudo systemctl start yggdrasil - - uses: actions/checkout@v4.1.1 - with: - fetch-depth: 0 - - run: git checkout $(git describe --tags --match 'v[0-9]*.[0-9]*.[0-9]' --abbrev=0) - - name: Build - run: | - go mod tidy - mkdir -p ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ - go build -o terraform-provider-grid - mv terraform-provider-grid ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ - - name: Run Go Tests - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: main - working-directory: integrationtests - run: go test -v ./... --tags=integration -timeout 3600s diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index c0b4d7b5..4cd73136 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -3,6 +3,7 @@ name: Intgeration tests on: schedule: - cron: "0 0 * * *" + - cron: "0 0 * * 0" workflow_dispatch: push: tags: @@ -45,7 +46,11 @@ jobs: with: fetch-depth: 0 - name: Build - run: make build + run: | + go mod tidy + mkdir -p ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ + go build -o terraform-provider-grid + mv terraform-provider-grid ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ - name: Run Go Tests env: MNEMONICS: ${{ secrets.MNEMONICS }} @@ -53,4 +58,5 @@ jobs: working-directory: integrationtests run: | go test -v ./... --tags=integration -run TestPeertube - #go test -v ./... --tags=integration -timeout 3600s + go test -v ./... --tags=integration -run TestPresearch + # go test -v ./... --tags=integration -timeout 3600s diff --git a/examples/resources/peertube/main.tf b/examples/resources/peertube/main.tf index a9f9add2..0d1d9f91 100644 --- a/examples/resources/peertube/main.tf +++ b/examples/resources/peertube/main.tf @@ -1,8 +1,3 @@ - -variable "public_key" { - type = string -} - terraform { required_providers { grid = { @@ -64,7 +59,7 @@ resource "grid_deployment" "d1" { entrypoint = "/sbin/zinit init" memory = 4096 env_vars = { - SSH_KEY = try(length("${var.public_key}"), 0) > 0 ? "${var.public_key}" : file("~/.ssh/id_rsa.pub") + SSH_KEY = file("~/.ssh/id_rsa.pub") PEERTUBE_DB_SUFFIX = "_prod" PEERTUBE_DB_USERNAME = "peertube" PEERTUBE_DB_PASSWORD = "peertube" diff --git a/examples/resources/presearch/main.tf b/examples/resources/presearch/main.tf index e4a369bc..2498657f 100644 --- a/examples/resources/presearch/main.tf +++ b/examples/resources/presearch/main.tf @@ -11,13 +11,13 @@ provider "grid" { locals { solution_type = "Presearch" - name = "mypreasearch" + name = "presearch" } resource "grid_scheduler" "sched" { requests { - name = "node1" + name = "presearch" cru = 1 sru = 1024 * 10 mru = 1024 @@ -29,9 +29,9 @@ resource "grid_scheduler" "sched" { resource "grid_network" "net1" { solution_type = local.solution_type name = local.name - nodes = [grid_scheduler.sched.nodes["node1"]] + nodes = [grid_scheduler.sched.nodes["presearch"]] ip_range = "10.1.0.0/16" - description = "newer network" + description = "presearch network" add_wg_access = true } @@ -39,7 +39,7 @@ resource "grid_network" "net1" { resource "grid_deployment" "d1" { solution_type = local.solution_type name = local.name - node = grid_scheduler.sched.nodes["node1"] + node = grid_scheduler.sched.nodes["presearch"] network_name = grid_network.net1.name disks { @@ -49,7 +49,7 @@ resource "grid_deployment" "d1" { } vms { - name = "presearch" + name = local.name flist = "https://hub.grid.tf/tf-official-apps/presearch-v2.2.flist" entrypoint = "/sbin/zinit init" publicip = true diff --git a/integrationtests/peertube_test.go b/integrationtests/peertube_test.go index 6299c6db..ee5857a0 100644 --- a/integrationtests/peertube_test.go +++ b/integrationtests/peertube_test.go @@ -1,12 +1,16 @@ package integrationtests import ( + "errors" "fmt" "net/http" "testing" + "time" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) func TestPeertube(t *testing.T) { @@ -37,6 +41,11 @@ func TestPeertube(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) + if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } + require.NoError(t, err) // Check that the outputs not empty @@ -55,9 +64,14 @@ func TestPeertube(t *testing.T) { require.Contains(t, output, "peertube: Running") statusOk := false - resp, err := http.Get(fmt.Sprintf("https://%s", fqdn)) - if err == nil && resp.StatusCode == 200 { - statusOk = true + ticker := time.NewTicker(2 * time.Second) + for now := time.Now(); time.Since(now) < 1*time.Minute; { + <-ticker.C + resp, err := http.Get(fmt.Sprintf("https://%s", fqdn)) + if err == nil && resp.StatusCode == 200 { + statusOk = true + break + } } require.True(t, statusOk, "website did not respond with 200 status code") diff --git a/integrationtests/presearch/main.tf b/integrationtests/presearch/main.tf index a44bbad4..be0c02dc 100644 --- a/integrationtests/presearch/main.tf +++ b/integrationtests/presearch/main.tf @@ -3,7 +3,7 @@ variable "public_key" { type = string } -variable "presearch_regestration_code" { +variable "presearch_registration_code" { type = string } @@ -18,25 +18,36 @@ terraform { provider "grid" { } + +locals { + solution_type = "Presearch" + name = "presearch" +} + + resource "grid_scheduler" "sched" { requests { - name = "presearch_instance" + name = "presearch" cru = 1 sru = 5 * 1024 mru = 1024 } } + resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["presearch_instance"]] - ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" + solution_type = local.solution_type + name = local.name + nodes = [grid_scheduler.sched.nodes["presearch"]] + ip_range = "10.1.0.0/16" + description = "presearch network" } # Deployment specs resource "grid_deployment" "d1" { - node = grid_scheduler.sched.nodes["presearch_instance"] - network_name = grid_network.net1.name + solution_type = local.solution_type + name = local.name + node = grid_scheduler.sched.nodes["presearch"] + network_name = grid_network.net1.name disks { name = "data" @@ -45,16 +56,18 @@ resource "grid_deployment" "d1" { } vms { - name = "presearch" + name = local.name flist = "https://hub.grid.tf/tf-official-apps/presearch-v2.2.flist" entrypoint = "/sbin/zinit init" planetary = true cpu = 1 memory = 1024 + mounts { disk_name = "data" mount_point = "/var/lib/docker" } + env_vars = { SSH_KEY = "${var.public_key}", PRESEARCH_REGISTRATION_CODE = "e5083a8d0a6362c6cf7a3078bfac81e3", diff --git a/integrationtests/presearch_test.go b/integrationtests/presearch_test.go index 61b505d2..c717075a 100644 --- a/integrationtests/presearch_test.go +++ b/integrationtests/presearch_test.go @@ -1,13 +1,16 @@ package integrationtests import ( + "errors" "fmt" "strings" "testing" "time" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/assert" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) func TestPresearch(t *testing.T) { @@ -27,17 +30,23 @@ func TestPresearch(t *testing.T) { if err != nil { t.Fatalf("failed to generate ssh key pair: %s", err.Error()) } - presearchRegestrationCode := "e5083a8d0a6362c6cf7a3078bfac81e3" + + presearchRegistrationCode := "e5083a8d0a6362c6cf7a3078bfac81e3" terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ TerraformDir: "./presearch", Vars: map[string]interface{}{ "public_key": publicKey, - "presearch_regestration_code": presearchRegestrationCode, + "presearch_registration_code": presearchRegistrationCode, }, }) defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) + if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } + assert.NoError(t, err) yggIP := terraform.Output(t, terraformOptions, "ygg_ip") @@ -48,7 +57,7 @@ func TestPresearch(t *testing.T) { output, err := RemoteRun("root", yggIP, "cat /proc/1/environ", privateKey) assert.NoError(t, err) - assert.Contains(t, string(output), fmt.Sprintf("PRESEARCH_REGISTRATION_CODE=%s", presearchRegestrationCode)) + assert.Contains(t, string(output), fmt.Sprintf("PRESEARCH_REGISTRATION_CODE=%s", presearchRegistrationCode)) ticker := time.NewTicker(2 * time.Second) for now := time.Now(); time.Since(now) < 1*time.Minute; { From 81712212fd4c954ac6cda00e758163b3046d4a81 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 26 Jun 2024 12:02:26 +0300 Subject: [PATCH 13/37] fix mattermost and taiga --- .github/workflows/terratest.yml | 2 ++ examples/resources/mattermost/main.tf | 9 ++++-- examples/resources/taiga/main.tf | 3 +- integrationtests/mattermost/main.tf | 46 ++++++++++++++++----------- integrationtests/mattermost_test.go | 25 ++++++++++----- integrationtests/peertube/main.tf | 21 ++++++------ integrationtests/presearch/main.tf | 13 +++++--- integrationtests/presearch_test.go | 16 +++++----- integrationtests/taiga/main.tf | 20 ++++++++---- integrationtests/taiga_test.go | 24 +++++++++----- 10 files changed, 111 insertions(+), 68 deletions(-) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 4cd73136..079ad95c 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -59,4 +59,6 @@ jobs: run: | go test -v ./... --tags=integration -run TestPeertube go test -v ./... --tags=integration -run TestPresearch + go test -v ./... --tags=integration -run TestMattermost + go test -v ./... --tags=integration -run TestTaiga # go test -v ./... --tags=integration -timeout 3600s diff --git a/examples/resources/mattermost/main.tf b/examples/resources/mattermost/main.tf index 6f7b54ab..ff0cae37 100644 --- a/examples/resources/mattermost/main.tf +++ b/examples/resources/mattermost/main.tf @@ -37,6 +37,7 @@ resource "grid_network" "net1" { description = "newer network" add_wg_access = true } + resource "grid_deployment" "d1" { solution_type = local.solution_type name = local.name @@ -60,6 +61,7 @@ resource "grid_deployment" "d1" { planetary = true } } + # this data source is used to break circular dependency in cases similar to the following: # vm: needs to know the domain in its init script # gateway_name: needs the ip of the vm to use as backend. @@ -67,8 +69,9 @@ resource "grid_deployment" "d1" { # - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { node = grid_scheduler.sched.nodes["gateway"] - name = "ashrafmattermost" + name = local.name } + resource "grid_name_proxy" "p1" { solution_type = local.solution_type name = local.name @@ -76,13 +79,15 @@ resource "grid_name_proxy" "p1" { backends = [format("http://[%s]:8000", grid_deployment.d1.vms[0].planetary_ip)] tls_passthrough = false } + output "fqdn" { value = data.grid_gateway_domain.domain.fqdn } + output "node1_zmachine1_ip" { value = grid_deployment.d1.vms[0].ip } + output "ygg_ip" { value = grid_deployment.d1.vms[0].planetary_ip } - diff --git a/examples/resources/taiga/main.tf b/examples/resources/taiga/main.tf index e7551892..d520eb3c 100644 --- a/examples/resources/taiga/main.tf +++ b/examples/resources/taiga/main.tf @@ -33,7 +33,7 @@ resource "grid_network" "net2" { name = local.name nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - description = "newer network" + description = "taiga network" add_wg_access = true } @@ -95,7 +95,6 @@ output "node1_zmachine1_ip" { value = grid_deployment.node1.vms[0].ip } - output "node1_zmachine1_ygg_ip" { value = grid_deployment.node1.vms[0].planetary_ip } diff --git a/integrationtests/mattermost/main.tf b/integrationtests/mattermost/main.tf index b08c2000..cec2b09f 100644 --- a/integrationtests/mattermost/main.tf +++ b/integrationtests/mattermost/main.tf @@ -15,15 +15,20 @@ terraform { } } +resource "random_string" "name" { + length = 8 + special = false +} + provider "grid" { } resource "grid_scheduler" "sched" { requests { - name = "mattermost_instance" + name = "node" cru = 2 - sru = 512 - mru = 4096 + sru = 1 * 1024 + mru = 4 * 1024 } requests { @@ -33,24 +38,17 @@ resource "grid_scheduler" "sched" { } } -# this data source is used to break circular dependency in cases similar to the following: -# vm: needs to know the domain in its init script -# gateway_name: needs the ip of the vm to use as backend. -# - the fqdn can be computed from grid_gateway_domain for the vm -# - the backend can reference the vm ip directly -data "grid_gateway_domain" "domain" { - node = grid_scheduler.sched.nodes["gateway"] - name = "khaledmatter" -} resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["mattermost_instance"]] + name = random_string.name.result + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = "networkk" - description = "newer network" + description = "mattermost network" add_wg_access = true } + resource "grid_deployment" "d1" { - node = grid_scheduler.sched.nodes["mattermost_instance"] + name = random_string.name.result + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" @@ -60,7 +58,7 @@ resource "grid_deployment" "d1" { memory = 4096 env_vars = { SSH_KEY = "${var.public_key}", - DB_PASSWORD = "khaled" + DB_PASSWORD = "ashroof" SITE_URL = format("https://%s", data.grid_gateway_domain.domain.fqdn) SMTPPASSWORD = "password" SMTPUSERNAME = "Ashraf" @@ -75,12 +73,23 @@ locals { ygg_ip = try(length(grid_deployment.d1.vms[0].planetary_ip), 0) > 0 ? grid_deployment.d1.vms[0].planetary_ip : "" } +# this data source is used to break circular dependency in cases similar to the following: +# vm: needs to know the domain in its init script +# gateway_name: needs the ip of the vm to use as backend. +# - the fqdn can be computed from grid_gateway_domain for the vm +# - the backend can reference the vm ip directly +data "grid_gateway_domain" "domain" { + node = grid_scheduler.sched.nodes["gateway"] + name = random_string.name.result +} + resource "grid_name_proxy" "p1" { + name = random_string.name.result node = grid_scheduler.sched.nodes["gateway"] - name = "khaledmatter" backends = [format("http://[%s]:8000", local.ygg_ip)] tls_passthrough = false } + output "fqdn" { value = data.grid_gateway_domain.domain.fqdn } @@ -88,4 +97,3 @@ output "fqdn" { output "ygg_ip" { value = grid_deployment.d1.vms[0].planetary_ip } - diff --git a/integrationtests/mattermost_test.go b/integrationtests/mattermost_test.go index 3d8b21b0..9967bef8 100644 --- a/integrationtests/mattermost_test.go +++ b/integrationtests/mattermost_test.go @@ -1,13 +1,16 @@ package integrationtests import ( + "errors" "fmt" "net/http" "testing" "time" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) func TestMattermost(t *testing.T) { @@ -38,21 +41,26 @@ func TestMattermost(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } + + require.NoError(t, err) // Check that the outputs not empty yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) fqdn := terraform.Output(t, terraformOptions, "fqdn") - assert.NotEmpty(t, fqdn) + require.NotEmpty(t, fqdn) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) // Check that the solution is running successfully output, err := RemoteRun("root", yggIP, "zinit list", privateKey) - assert.NoError(t, err) - assert.Contains(t, output, "mattermost: Running") + require.NoError(t, err) + require.Contains(t, output, "mattermost: Running") statusOk := false ticker := time.NewTicker(2 * time.Second) @@ -64,5 +72,6 @@ func TestMattermost(t *testing.T) { break } } - assert.True(t, statusOk, "website did not respond with 200 status code") + + require.True(t, statusOk, "website did not respond with 200 status code") } diff --git a/integrationtests/peertube/main.tf b/integrationtests/peertube/main.tf index 9947364c..e596ad1f 100644 --- a/integrationtests/peertube/main.tf +++ b/integrationtests/peertube/main.tf @@ -29,9 +29,13 @@ resource "grid_scheduler" "sched" { } } +resource "random_string" "name" { + length = 8 + special = false +} + locals { solution_type = "Peertube" - name = "peertube" node = grid_scheduler.sched.nodes["peertube"] } @@ -42,20 +46,19 @@ locals { # - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { node = grid_scheduler.sched.nodes["domain"] - name = local.name + name = random_string.name.result } resource "grid_network" "net1" { - solution_type = local.solution_type - name = local.name - nodes = [grid_scheduler.sched.nodes["peertube"]] - ip_range = "10.1.0.0/16" - description = "peertube network" + name = random_string.name.result + nodes = [grid_scheduler.sched.nodes["peertube"]] + ip_range = "10.1.0.0/16" + description = "peertube network" } resource "grid_deployment" "d1" { node = grid_scheduler.sched.nodes["peertube"] solution_type = local.solution_type - name = local.name + name = random_string.name.result network_name = grid_network.net1.name vms { name = "vm1" @@ -87,7 +90,7 @@ locals { resource "grid_name_proxy" "p1" { node = grid_scheduler.sched.nodes["domain"] solution_type = local.solution_type - name = local.name + name = random_string.name.result backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false } diff --git a/integrationtests/presearch/main.tf b/integrationtests/presearch/main.tf index be0c02dc..80ce63fa 100644 --- a/integrationtests/presearch/main.tf +++ b/integrationtests/presearch/main.tf @@ -19,12 +19,15 @@ terraform { provider "grid" { } +resource "random_string" "name" { + length = 8 + special = false +} + locals { solution_type = "Presearch" - name = "presearch" } - resource "grid_scheduler" "sched" { requests { name = "presearch" @@ -36,7 +39,7 @@ resource "grid_scheduler" "sched" { resource "grid_network" "net1" { solution_type = local.solution_type - name = local.name + name = random_string.name.result nodes = [grid_scheduler.sched.nodes["presearch"]] ip_range = "10.1.0.0/16" description = "presearch network" @@ -45,7 +48,7 @@ resource "grid_network" "net1" { # Deployment specs resource "grid_deployment" "d1" { solution_type = local.solution_type - name = local.name + name = random_string.name.result node = grid_scheduler.sched.nodes["presearch"] network_name = grid_network.net1.name @@ -56,7 +59,7 @@ resource "grid_deployment" "d1" { } vms { - name = local.name + name = random_string.name.result flist = "https://hub.grid.tf/tf-official-apps/presearch-v2.2.flist" entrypoint = "/sbin/zinit init" planetary = true diff --git a/integrationtests/presearch_test.go b/integrationtests/presearch_test.go index c717075a..a90662c8 100644 --- a/integrationtests/presearch_test.go +++ b/integrationtests/presearch_test.go @@ -9,7 +9,7 @@ import ( "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) @@ -47,17 +47,17 @@ func TestPresearch(t *testing.T) { return } - assert.NoError(t, err) + require.NoError(t, err) yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) output, err := RemoteRun("root", yggIP, "cat /proc/1/environ", privateKey) - assert.NoError(t, err) - assert.Contains(t, string(output), fmt.Sprintf("PRESEARCH_REGISTRATION_CODE=%s", presearchRegistrationCode)) + require.NoError(t, err) + require.Contains(t, string(output), fmt.Sprintf("PRESEARCH_REGISTRATION_CODE=%s", presearchRegistrationCode)) ticker := time.NewTicker(2 * time.Second) for now := time.Now(); time.Since(now) < 1*time.Minute; { @@ -68,6 +68,6 @@ func TestPresearch(t *testing.T) { } } - assert.NoError(t, err) - assert.Contains(t, output, "prenode: Success") + require.NoError(t, err) + require.Contains(t, output, "prenode: Success") } diff --git a/integrationtests/taiga/main.tf b/integrationtests/taiga/main.tf index 60440558..b6e00057 100644 --- a/integrationtests/taiga/main.tf +++ b/integrationtests/taiga/main.tf @@ -15,9 +15,15 @@ terraform { provider "grid" { } + +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "sched" { requests { - name = "taiga_instance" + name = "node" cru = 2 sru = 58 * 1024 mru = 8096 @@ -31,14 +37,15 @@ resource "grid_scheduler" "sched" { } resource "grid_network" "net2" { - nodes = [grid_scheduler.sched.nodes["taiga_instance"]] + name = random_string.name.result + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = "network1" - description = "newer network" + description = "taiga network" } resource "grid_deployment" "node1" { - node = grid_scheduler.sched.nodes["taiga_instance"] + name = random_string.name.result + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net2.name disks { name = "data0" @@ -87,13 +94,12 @@ locals { } resource "grid_name_proxy" "p1" { + name = random_string.name.result node = grid_scheduler.sched.nodes["gateway"] - name = "grid3taiga" backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false } - output "ygg_ip" { value = grid_deployment.node1.vms[0].planetary_ip } diff --git a/integrationtests/taiga_test.go b/integrationtests/taiga_test.go index a3f96edd..fce6a605 100644 --- a/integrationtests/taiga_test.go +++ b/integrationtests/taiga_test.go @@ -1,13 +1,16 @@ package integrationtests import ( + "errors" "fmt" "net/http" "testing" "time" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) func TestTaiga(t *testing.T) { @@ -38,21 +41,26 @@ func TestTaiga(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } + + require.NoError(t, err) // Check that the outputs not empty yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) fqdn := terraform.Output(t, terraformOptions, "fqdn") - assert.NotEmpty(t, fqdn) + require.NotEmpty(t, fqdn) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) output, err := RemoteRun("root", yggIP, "zinit list", privateKey) - assert.NoError(t, err) - assert.Contains(t, output, "taiga: Running") + require.NoError(t, err) + require.Contains(t, output, "taiga: Running") statusOk := false ticker := time.NewTicker(2 * time.Second) @@ -66,5 +74,5 @@ func TestTaiga(t *testing.T) { } } - assert.True(t, statusOk, "website did not respond with 200 status code") + require.True(t, statusOk, "website did not respond with 200 status code") } From f635eb22e4029596e5fd09d995ffbd6196890406 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 26 Jun 2024 12:38:25 +0300 Subject: [PATCH 14/37] fix gateway tests --- .github/workflows/terratest.yml | 10 ++-- examples/resources/gateway_name/main.tf | 1 + examples/resources/taiga/main.tf | 2 +- integrationtests/gateway_name/main.tf | 27 +++++---- integrationtests/gateway_name_private/main.tf | 31 +++++----- integrationtests/gateway_private_test.go | 60 ++++++++++++------- integrationtests/gateway_test.go | 52 +++++++++------- integrationtests/gateway_with_fqdn/main.tf | 18 +++--- .../gateway_with_fqdn_private/main.tf | 12 ++-- integrationtests/mattermost_test.go | 5 +- integrationtests/peertube_test.go | 5 +- integrationtests/presearch_test.go | 4 +- integrationtests/taiga_test.go | 2 +- integrationtests/vm_test.go | 4 +- 14 files changed, 130 insertions(+), 103 deletions(-) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 079ad95c..5244b501 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -57,8 +57,10 @@ jobs: NETWORK: ${{ matrix.network }} working-directory: integrationtests run: | - go test -v ./... --tags=integration -run TestPeertube - go test -v ./... --tags=integration -run TestPresearch - go test -v ./... --tags=integration -run TestMattermost - go test -v ./... --tags=integration -run TestTaiga # go test -v ./... --tags=integration -timeout 3600s + # go test -v ./... --tags=integration -run TestPeertube + # go test -v ./... --tags=integration -run TestPresearch + # go test -v ./... --tags=integration -run TestMattermost + # go test -v ./... --tags=integration -run TestTaiga + go test -v ./... --tags=integration -run TestGateway + go test -v ./... --tags=integration -run TestGatewayPrivate diff --git a/examples/resources/gateway_name/main.tf b/examples/resources/gateway_name/main.tf index 3e911aec..824d3763 100644 --- a/examples/resources/gateway_name/main.tf +++ b/examples/resources/gateway_name/main.tf @@ -33,6 +33,7 @@ resource "grid_name_proxy" "p1" { backends = [format("http://69.164.223.208")] tls_passthrough = false } + output "fqdn" { value = data.grid_gateway_domain.domain.fqdn } diff --git a/examples/resources/taiga/main.tf b/examples/resources/taiga/main.tf index d520eb3c..223a51d1 100644 --- a/examples/resources/taiga/main.tf +++ b/examples/resources/taiga/main.tf @@ -87,7 +87,7 @@ resource "grid_name_proxy" "p1" { solution_type = local.solution_type name = local.name node = grid_scheduler.sched.nodes["gateway"] - backends = [format("http://%s:9000", grid_deployment.node1.vms[0].planetary_ip)] + backends = [format("http://[%s]:9000", grid_deployment.node1.vms[0].planetary_ip)] tls_passthrough = false } diff --git a/integrationtests/gateway_name/main.tf b/integrationtests/gateway_name/main.tf index 46c00370..2d0c6cba 100644 --- a/integrationtests/gateway_name/main.tf +++ b/integrationtests/gateway_name/main.tf @@ -14,9 +14,14 @@ terraform { provider "grid" { } +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "sched" { requests { - name = "node1" + name = "node" cru = 2 sru = 512 mru = 1024 @@ -36,23 +41,18 @@ resource "grid_scheduler" "sched" { # - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { node = grid_scheduler.sched.nodes["gateway"] - name = "examp123456" + name = "test123456" } -locals { - name = "vmtesting" -} - - resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["node1"]] + name = random_string.name.result + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = local.name - description = "newer network" + description = "name gateway network" } resource "grid_deployment" "d1" { - name = local.name - node = grid_scheduler.sched.nodes["node1"] + name = random_string.name.result + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" @@ -73,10 +73,11 @@ locals { resource "grid_name_proxy" "p1" { node = grid_scheduler.sched.nodes["gateway"] - name = "examp123456" + name = data.grid_gateway_domain.domain.name backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false } + output "fqdn" { value = data.grid_gateway_domain.domain.fqdn } diff --git a/integrationtests/gateway_name_private/main.tf b/integrationtests/gateway_name_private/main.tf index 6de7e3e5..67465ca3 100644 --- a/integrationtests/gateway_name_private/main.tf +++ b/integrationtests/gateway_name_private/main.tf @@ -14,9 +14,14 @@ terraform { provider "grid" { } +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "sched" { requests { - name = "node1" + name = "node" cru = 2 sru = 512 mru = 1024 @@ -30,24 +35,20 @@ resource "grid_scheduler" "sched" { # - the fqdn can be computed from grid_gateway_domain for the vm # - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { - node = grid_scheduler.sched.nodes["node1"] - name = "examp123456" + node = grid_scheduler.sched.nodes["node"] + name = "test123456" } -locals { - name = "vmtesting" -} - - resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["node1"]] + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = local.name - description = "newer network" + name = random_string.name.result + description = "private name gateway network" } + resource "grid_deployment" "d1" { - name = local.name - node = grid_scheduler.sched.nodes["node1"] + name = random_string.name.result + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" @@ -67,8 +68,8 @@ locals { } resource "grid_name_proxy" "p1" { - node = grid_scheduler.sched.nodes["node1"] - name = "examp123456" + node = grid_scheduler.sched.nodes["node"] + name = data.grid_gateway_domain.domain.name backends = [format("http://%s:9000", grid_deployment.d1.vms[0].ip)] network = grid_network.net1.name tls_passthrough = false diff --git a/integrationtests/gateway_private_test.go b/integrationtests/gateway_private_test.go index 5683ce77..a895c24a 100644 --- a/integrationtests/gateway_private_test.go +++ b/integrationtests/gateway_private_test.go @@ -4,14 +4,17 @@ import ( "fmt" "io" "net/http" + "os" + "strings" "testing" "time" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) -func TestGateWayPrivate(t *testing.T) { +func TestGatewayPrivate(t *testing.T) { publicKey, privateKey, err := GenerateSSHKeyPair() if err != nil { t.Fatalf("failed to generate ssh key pair: %s", err.Error()) @@ -39,50 +42,60 @@ func TestGateWayPrivate(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + t.Skip("couldn't find any available nodes") + return + } + + require.NoError(t, err) // Check that the outputs not empty fqdn := terraform.Output(t, terraformOptions, "fqdn") - assert.NotEmpty(t, fqdn) + require.NotEmpty(t, fqdn) yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) _, err = RemoteRun("root", yggIP, "apk add python3; python3 -m http.server 9000 --bind :: &> /dev/null &", privateKey) - assert.NoError(t, err) + require.NoError(t, err) time.Sleep(3 * time.Second) response, err := http.Get(fmt.Sprintf("https://%s", fqdn)) - assert.NoError(t, err) + require.NoError(t, err) if response != nil { body, err := io.ReadAll(response.Body) if body != nil { defer response.Body.Close() } - assert.NoError(t, err) - assert.Contains(t, string(body), "Directory listing for") + require.NoError(t, err) + require.Contains(t, string(body), "Directory listing for") } }) t.Run("gateway_fqdn_private", func(t *testing.T) { - t.SkipNow() - /* Test case for deploying a gateway with fdqn. + /* Test case for deploying a gateway with FQDN. **Test Scenario** - Deploy a vm. - - Deploy a gateway with fdqn on the vm private network. + - Deploy a gateway with FQDN on the vm private network. - Assert that outputs are not empty. - Run python server on vm. - Make an http request to fqdn and assert that the response is correct. - Destroy the deployment */ + // make sure the test runs only on devnet + if network, _ := os.LookupEnv("NETWORK"); network != "dev" { + t.Skip() + return + } + fqdn := "hamada1.3x0.me" // points to node 15 devnet terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ @@ -95,33 +108,38 @@ func TestGateWayPrivate(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + t.Skip("couldn't find any available nodes") + return + } + + require.NoError(t, err) // Check that the outputs not empty fqdn = terraform.Output(t, terraformOptions, "fqdn") - assert.NotEmpty(t, fqdn) + require.NotEmpty(t, fqdn) yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) _, err = RemoteRun("root", yggIP, "apk add python3; python3 -m http.server 9000 --bind :: &> /dev/null &", privateKey) - assert.NoError(t, err) + require.NoError(t, err) time.Sleep(3 * time.Second) response, err := http.Get(fmt.Sprintf("https://%s", fqdn)) - assert.NoError(t, err) + require.NoError(t, err) if response != nil { body, err := io.ReadAll(response.Body) if body != nil { defer response.Body.Close() } - assert.NoError(t, err) - assert.Contains(t, string(body), "Directory listing for") + require.NoError(t, err) + require.Contains(t, string(body), "Directory listing for") } }) } diff --git a/integrationtests/gateway_test.go b/integrationtests/gateway_test.go index 462271a8..b9b31408 100644 --- a/integrationtests/gateway_test.go +++ b/integrationtests/gateway_test.go @@ -5,21 +5,23 @@ import ( "io" "net/http" "os" + "strings" "testing" "time" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) -func TestGateWay(t *testing.T) { +func TestGateway(t *testing.T) { publicKey, privateKey, err := GenerateSSHKeyPair() if err != nil { t.Fatalf("failed to generate ssh key pair: %s", err.Error()) } t.Run("gateway_name", func(t *testing.T) { - /* Test case for deployeng a gateway name proxy. + /* Test case for deploying a gateway name proxy. **Test Scenario** @@ -40,42 +42,47 @@ func TestGateWay(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + t.Skip("couldn't find any available nodes") + return + } + + require.NoError(t, err) // Check that the outputs not empty fqdn := terraform.Output(t, terraformOptions, "fqdn") - assert.NotEmpty(t, fqdn) + require.NotEmpty(t, fqdn) yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) _, err = RemoteRun("root", yggIP, "apk add python3; python3 -m http.server 9000 --bind :: &> /dev/null &", privateKey) - assert.NoError(t, err) + require.NoError(t, err) time.Sleep(3 * time.Second) response, err := http.Get(fmt.Sprintf("https://%s", fqdn)) - assert.NoError(t, err) + require.NoError(t, err) if response != nil { body, err := io.ReadAll(response.Body) if body != nil { defer response.Body.Close() } - assert.NoError(t, err) - assert.Contains(t, string(body), "Directory listing for") + require.NoError(t, err) + require.Contains(t, string(body), "Directory listing for") } }) t.Run("gateway_fqdn", func(t *testing.T) { - /* Test case for deployeng a gateway with fdqn. + /* Test case for deploying a gateway with FQDN. **Test Scenario** - - Deploy a gateway with fdqn. + - Deploy a gateway with FQDN. - Deploy a vm. - Assert that outputs are not empty. - Run python server on vm. @@ -101,35 +108,38 @@ func TestGateWay(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - if !assert.NoError(t, err) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + t.Skip("couldn't find any available nodes") return } + require.NoError(t, err) + // Check that the outputs not empty fqdn = terraform.Output(t, terraformOptions, "fqdn") - assert.NotEmpty(t, fqdn) + require.NotEmpty(t, fqdn) yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) _, err = RemoteRun("root", yggIP, "apk add python3; python3 -m http.server 9000 --bind :: &> /dev/null &", privateKey) - assert.NoError(t, err) + require.NoError(t, err) time.Sleep(3 * time.Second) response, err := http.Get(fmt.Sprintf("http://%s", fqdn)) - assert.NoError(t, err) + require.NoError(t, err) if response != nil { body, err := io.ReadAll(response.Body) if body != nil { defer response.Body.Close() } - assert.NoError(t, err) - assert.Contains(t, string(body), "Directory listing for") + require.NoError(t, err) + require.Contains(t, string(body), "Directory listing for") } }) } diff --git a/integrationtests/gateway_with_fqdn/main.tf b/integrationtests/gateway_with_fqdn/main.tf index f434df46..be9b9fb4 100644 --- a/integrationtests/gateway_with_fqdn/main.tf +++ b/integrationtests/gateway_with_fqdn/main.tf @@ -20,27 +20,27 @@ provider "grid" { resource "grid_scheduler" "sched" { requests { - name = "node1" + name = "node" cru = 2 sru = 512 mru = 1024 } } -locals { - name = "luihkybveruvytc" +resource "random_string" "name" { + length = 8 + special = false } - resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["node1"]] + name = random_string.name.result + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = local.name - description = "newer network" + description = "fqdn network" } resource "grid_deployment" "d1" { - name = local.name - node = grid_scheduler.sched.nodes["node1"] + name = random_string.name.result + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" diff --git a/integrationtests/gateway_with_fqdn_private/main.tf b/integrationtests/gateway_with_fqdn_private/main.tf index b059d0e8..582287d4 100644 --- a/integrationtests/gateway_with_fqdn_private/main.tf +++ b/integrationtests/gateway_with_fqdn_private/main.tf @@ -18,19 +18,19 @@ terraform { provider "grid" { } -locals { - name = "luihkybveruvytc" +resource "random_string" "name" { + length = 8 + special = false } - resource "grid_network" "net1" { nodes = [11] ip_range = "10.1.0.0/16" - name = local.name - description = "newer network" + name = random_string.name.result + description = "private FQDN gateway network" } resource "grid_deployment" "d1" { - name = local.name + name = random_string.name.result node = 11 network_name = grid_network.net1.name vms { diff --git a/integrationtests/mattermost_test.go b/integrationtests/mattermost_test.go index 9967bef8..352121fa 100644 --- a/integrationtests/mattermost_test.go +++ b/integrationtests/mattermost_test.go @@ -1,13 +1,12 @@ package integrationtests import ( - "errors" "fmt" "net/http" + "strings" "testing" "time" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -41,7 +40,7 @@ func TestMattermost(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/peertube_test.go b/integrationtests/peertube_test.go index ee5857a0..1b98f5fc 100644 --- a/integrationtests/peertube_test.go +++ b/integrationtests/peertube_test.go @@ -1,13 +1,12 @@ package integrationtests import ( - "errors" "fmt" "net/http" + "strings" "testing" "time" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -41,7 +40,7 @@ func TestPeertube(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/presearch_test.go b/integrationtests/presearch_test.go index a90662c8..c46dd1a1 100644 --- a/integrationtests/presearch_test.go +++ b/integrationtests/presearch_test.go @@ -1,13 +1,11 @@ package integrationtests import ( - "errors" "fmt" "strings" "testing" "time" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -42,7 +40,7 @@ func TestPresearch(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/taiga_test.go b/integrationtests/taiga_test.go index fce6a605..8b144ca9 100644 --- a/integrationtests/taiga_test.go +++ b/integrationtests/taiga_test.go @@ -41,7 +41,7 @@ func TestTaiga(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/vm_test.go b/integrationtests/vm_test.go index a2f74e96..b38b9e1f 100644 --- a/integrationtests/vm_test.go +++ b/integrationtests/vm_test.go @@ -1,12 +1,10 @@ package integrationtests import ( - "errors" "fmt" "strings" "testing" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/assert" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -71,7 +69,7 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.As(err, &retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any nodes with public ip") return } From 75a9d159be9eab200a41912e6f89070f069002ef Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 26 Jun 2024 14:08:40 +0300 Subject: [PATCH 15/37] fix nomad, wg, qsfs and zdb tests --- .github/workflows/terratest.yml | 10 +++- examples/resources/nomad_with_modules/main.tf | 18 +++---- examples/resources/qsfs/main.tf | 21 ++++---- integrationtests/gateway_test.go | 2 +- integrationtests/nomad_test.go | 48 +++++++++---------- integrationtests/nomad_using_module/main.tf | 11 +++-- integrationtests/qsfs/main.tf | 27 +++++++---- integrationtests/qsfs_test.go | 32 ++++++++----- integrationtests/wireguard/main.tf | 8 ++-- integrationtests/wireguard_test.go | 27 ++++++----- integrationtests/zdb_test.go | 28 +++++++---- integrationtests/zdbs/main.tf | 16 ++++--- modules/nomad-module/main.tf | 4 +- 13 files changed, 147 insertions(+), 105 deletions(-) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 5244b501..d549f63d 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -58,9 +58,15 @@ jobs: working-directory: integrationtests run: | # go test -v ./... --tags=integration -timeout 3600s + # go test -v ./... --tags=integration -run TestModuleK8s # SKIPPED # go test -v ./... --tags=integration -run TestPeertube # go test -v ./... --tags=integration -run TestPresearch # go test -v ./... --tags=integration -run TestMattermost # go test -v ./... --tags=integration -run TestTaiga - go test -v ./... --tags=integration -run TestGateway - go test -v ./... --tags=integration -run TestGatewayPrivate + # go test -v ./... --tags=integration -run TestGatewayDeployments + # go test -v ./... --tags=integration -run TestGatewayPrivate + # go test -v ./... --tags=integration -run TestZdbs + # go test -v ./... --tags=integration -run TestQSFS + # go test -v ./... --tags=integration -run TestWireguard + go test -v ./... --tags=integration -run TestNomad + # go test -v ./... --tags=integration -run TestK8s diff --git a/examples/resources/nomad_with_modules/main.tf b/examples/resources/nomad_with_modules/main.tf index ee920f88..8e441584 100644 --- a/examples/resources/nomad_with_modules/main.tf +++ b/examples/resources/nomad_with_modules/main.tf @@ -21,7 +21,7 @@ locals { servers = [ { name = "server1" - node = 13 + node = 13 cpu = 2 memory = 1024 rootfs_size = 1024 @@ -45,10 +45,10 @@ locals { } }, { - name = "server3" - node = 13 - cpu = 2 - memory = 1024 + name = "server3" + node = 13 + cpu = 2 + memory = 1024 rootfs_size = 1024 disk = { name = "server3dsk" @@ -59,10 +59,10 @@ locals { clients = [ { - name = "client1" - node = 27 - cpu = 2 - memory = 1024 + name = "client1" + node = 27 + cpu = 2 + memory = 1024 rootfs_size = 1024 disk = { name = "client1dsk" diff --git a/examples/resources/qsfs/main.tf b/examples/resources/qsfs/main.tf index 383c206c..47f56e78 100644 --- a/examples/resources/qsfs/main.tf +++ b/examples/resources/qsfs/main.tf @@ -16,22 +16,23 @@ locals { resource "grid_scheduler" "sched" { requests { - name = "node1" + name = "node" cru = 2 - sru = 1024 * 10 * 8 + sru = 10 * 1024 mru = 1024 + hru = 8 * 10 * 1024 } } resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["node1"]] - ip_range = "10.1.0.0/16" name = "network" - description = "newer network" + nodes = [grid_scheduler.sched.nodes["node"]] + ip_range = "10.1.0.0/16" + description = "qsfs network" } resource "grid_deployment" "d1" { - node = grid_scheduler.sched.nodes["node1"] + node = grid_scheduler.sched.nodes["node"] dynamic "zdbs" { for_each = local.metas content { @@ -55,7 +56,7 @@ resource "grid_deployment" "d1" { } resource "grid_deployment" "qsfs" { - node = grid_scheduler.sched.nodes["node1"] + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net1.name qsfs { name = "qsfs" @@ -77,7 +78,7 @@ resource "grid_deployment" "qsfs" { dynamic "backends" { for_each = [for zdb in grid_deployment.d1.zdbs : zdb if zdb.mode != "seq"] content { - address = format("[%s]:%d", backends.value.ips[0], backends.value.port) + address = format("[%s]:%d", backends.value.ips[1], backends.value.port) namespace = backends.value.namespace password = backends.value.password } @@ -87,7 +88,7 @@ resource "grid_deployment" "qsfs" { dynamic "backends" { for_each = [for zdb in grid_deployment.d1.zdbs : zdb if zdb.mode == "seq"] content { - address = format("[%s]:%d", backends.value.ips[0], backends.value.port) + address = format("[%s]:%d", backends.value.ips[1], backends.value.port) namespace = backends.value.namespace password = backends.value.password } @@ -110,9 +111,11 @@ resource "grid_deployment" "qsfs" { } } } + output "metrics" { value = grid_deployment.qsfs.qsfs[0].metrics_endpoint } + output "ygg_ip" { value = grid_deployment.qsfs.vms[0].planetary_ip } diff --git a/integrationtests/gateway_test.go b/integrationtests/gateway_test.go index b9b31408..0a148f14 100644 --- a/integrationtests/gateway_test.go +++ b/integrationtests/gateway_test.go @@ -14,7 +14,7 @@ import ( "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) -func TestGateway(t *testing.T) { +func TestGatewayDeployments(t *testing.T) { publicKey, privateKey, err := GenerateSSHKeyPair() if err != nil { t.Fatalf("failed to generate ssh key pair: %s", err.Error()) diff --git a/integrationtests/nomad_test.go b/integrationtests/nomad_test.go index 25b0aef2..199f49ee 100644 --- a/integrationtests/nomad_test.go +++ b/integrationtests/nomad_test.go @@ -7,7 +7,7 @@ import ( "time" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/threefoldtech/tfgrid-sdk-go/grid-client/deployer" "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" ) @@ -36,26 +36,24 @@ func TestNomad(t *testing.T) { t.Fatalf("failed to get create tf plugin client: %s", err.Error()) } - status := "up" - freeMRU := convertMBToBytes(256) - freeSRU := convertGBToBytes(2) nodes, err := deployer.FilterNodes( context.Background(), tf, types.NodeFilter{ - Status: []string{status}, - FreeMRU: freeMRU, - FreeSRU: freeSRU, + Status: []string{"up"}, + FreeMRU: convertMBToBytes(256), + FreeSRU: convertGBToBytes(2), // Freefarm FarmIDs: []uint64{1}, }, []uint64{*convertGBToBytes(1)}, nil, []uint64{*convertGBToBytes(1)}, + 5, ) - tf.Close() - if err != nil || len(nodes) < 5 { - t.Fatal("gridproxy could not find nodes with suitable resources") + if err != nil { + t.Skip("could not find nodes with suitable resources") + return } server1Node := nodes[0].NodeID @@ -144,45 +142,43 @@ func TestNomad(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) defer terraform.Destroy(t, terraformOptions) - if !assert.NoError(t, err) { - return - } + require.NoError(t, err) // Check that the outputs not empty server1IP := terraform.Output(t, terraformOptions, "server1_ip") - assert.NotEmpty(t, server1IP) - assert.Equal(t, server1IP, firstServerIP) + require.NotEmpty(t, server1IP) + require.Equal(t, server1IP, firstServerIP) server1YggIP := terraform.Output(t, terraformOptions, "server1_ygg_ip") - assert.NotEmpty(t, server1YggIP) + require.NotEmpty(t, server1YggIP) server2YggIP := terraform.Output(t, terraformOptions, "server2_ygg_ip") - assert.NotEmpty(t, server2YggIP) + require.NotEmpty(t, server2YggIP) server3YggIP := terraform.Output(t, terraformOptions, "server3_ygg_ip") - assert.NotEmpty(t, server3YggIP) + require.NotEmpty(t, server3YggIP) client1YggIP := terraform.Output(t, terraformOptions, "client1_ygg_ip") - assert.NotEmpty(t, client1YggIP) + require.NotEmpty(t, client1YggIP) // testing connection on port 22, waits at max 3mins until it becomes ready otherwise it fails ok := TestConnection(server1YggIP, "22") - assert.True(t, ok) + require.True(t, ok) ok = TestConnection(server2YggIP, "22") - assert.True(t, ok) + require.True(t, ok) ok = TestConnection(server3YggIP, "22") - assert.True(t, ok) + require.True(t, ok) ok = TestConnection(client1YggIP, "22") - assert.True(t, ok) + require.True(t, ok) // until services are ready - time.Sleep(5 * time.Second) + time.Sleep(10 * time.Second) output, err := RemoteRun("root", server1YggIP, "nomad node status", privateKey) - assert.Empty(t, err) - assert.Equal(t, 2, strings.Count(output, "ready")) + require.Empty(t, err) + require.Equal(t, 2, strings.Count(output, "ready")) }) } diff --git a/integrationtests/nomad_using_module/main.tf b/integrationtests/nomad_using_module/main.tf index 7f5ac15b..22d5a689 100644 --- a/integrationtests/nomad_using_module/main.tf +++ b/integrationtests/nomad_using_module/main.tf @@ -54,18 +54,19 @@ variable "clients" { })) } + output "server1_ip" { - value = module.nomad.servers.vm[0].vms[0].ip + value = module.nomad.servers.vm[0].vms[0].name == "server1" ? module.nomad.servers.vm[0].vms[0].ip : module.nomad.servers.vm[1].vms[0].name == "server1" ? module.nomad.servers.vm[1].vms[0].ip : module.nomad.servers.vm[2].vms[0].ip } output "server1_ygg_ip" { - value = module.nomad.servers.vm[0].vms[0].planetary_ip + value = module.nomad.servers.vm[0].vms[0].name == "server1" ? module.nomad.servers.vm[0].vms[0].planetary_ip : module.nomad.servers.vm[1].vms[0].name == "server1" ? module.nomad.servers.vm[1].vms[0].planetary_ip : module.nomad.servers.vm[2].vms[0].planetary_ip } output "server2_ygg_ip" { - value = module.nomad.servers.vm[1].vms[0].planetary_ip + value = module.nomad.servers.vm[0].vms[0].name == "server2" ? module.nomad.servers.vm[0].vms[0].planetary_ip : module.nomad.servers.vm[1].vms[0].name == "server2" ? module.nomad.servers.vm[1].vms[0].planetary_ip : module.nomad.servers.vm[2].vms[0].planetary_ip } output "server3_ygg_ip" { - value = module.nomad.servers.vm[2].vms[0].planetary_ip + value = module.nomad.servers.vm[0].vms[0].name == "server3" ? module.nomad.servers.vm[0].vms[0].planetary_ip : module.nomad.servers.vm[1].vms[0].name == "server3" ? module.nomad.servers.vm[1].vms[0].planetary_ip : module.nomad.servers.vm[2].vms[0].planetary_ip } output "client1_ygg_ip" { - value = module.nomad.clients.vm[0].vms[0].planetary_ip + value = module.nomad.servers.vm[0].vms[0].name == "client1" ? module.nomad.servers.vm[0].vms[0].planetary_ip : module.nomad.servers.vm[1].vms[0].name == "client1" ? module.nomad.servers.vm[1].vms[0].planetary_ip : module.nomad.servers.vm[2].vms[0].planetary_ip } diff --git a/integrationtests/qsfs/main.tf b/integrationtests/qsfs/main.tf index 248c01c4..d4458674 100644 --- a/integrationtests/qsfs/main.tf +++ b/integrationtests/qsfs/main.tf @@ -13,29 +13,36 @@ terraform { provider "grid" { } + +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "sched" { requests { - name = "qsfs_instance" + name = "node" cru = 2 - sru = 2048 - mru = 1024 + sru = 2 * 1024 + mru = 2 * 1024 hru = 12 * 1024 } } + locals { metas = ["meta1", "meta2", "meta3", "meta4"] datas = ["data1", "data2", "data3", "data4", "data5", "data6", "data7", "data8"] } resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["qsfs_instance"]] + name = random_string.name.result + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = "net1" - description = "newer network" + description = "qsfs network" } resource "grid_deployment" "d1" { - node = grid_scheduler.sched.nodes["qsfs_instance"] + node = grid_scheduler.sched.nodes["node"] dynamic "zdbs" { for_each = local.metas content { @@ -59,12 +66,12 @@ resource "grid_deployment" "d1" { } resource "grid_deployment" "qsfs" { - node = grid_scheduler.sched.nodes["qsfs_instance"] + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net1.name qsfs { name = "qsfs" description = "description6" - cache = 2048 + cache = 2048 # 10 GB minimal_shards = 2 expected_shards = 3 redundant_groups = 0 @@ -114,9 +121,11 @@ resource "grid_deployment" "qsfs" { } } } + output "metrics" { value = grid_deployment.qsfs.qsfs[0].metrics_endpoint } + output "ygg_ip" { value = grid_deployment.qsfs.vms[0].planetary_ip } diff --git a/integrationtests/qsfs_test.go b/integrationtests/qsfs_test.go index 22c8c6b2..96938944 100644 --- a/integrationtests/qsfs_test.go +++ b/integrationtests/qsfs_test.go @@ -1,11 +1,15 @@ package integrationtests import ( + "errors" "os/exec" "testing" + "time" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) func TestQSFS(t *testing.T) { @@ -15,7 +19,7 @@ func TestQSFS(t *testing.T) { } t.Run("qsfs_test", func(t *testing.T) { - /* Test case for deployeng a QSFS check metrics. + /* Test case for deploying a QSFS check metrics. **Test Scenario** - Deploy a qsfs. - Check that the outputs not empty. @@ -34,30 +38,36 @@ func TestQSFS(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } + + require.NoError(t, err) // Check that the outputs not empty metrics := terraform.Output(t, terraformOptions, "metrics") - assert.NotEmpty(t, metrics) + require.NotEmpty(t, metrics) yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) // get metrics cmd := exec.Command("curl", metrics) output, err := cmd.Output() - assert.NoError(t, err) - assert.Contains(t, string(output), "fs_syscalls{syscall=\"create\"} 0") + require.NoError(t, err) + require.Contains(t, string(output), "fs_syscalls{syscall=\"create\"} 0") // try write to a file in mounted disk _, err = RemoteRun("root", yggIP, "cd /qsfs && echo hamadatext >> hamadafile", privateKey) - assert.NoError(t, err) + require.NoError(t, err) + + time.Sleep(5 * time.Second) // get metrics after write cmd = exec.Command("curl", metrics) output, err = cmd.Output() - assert.NoError(t, err) - assert.Contains(t, string(output), "fs_syscalls{syscall=\"create\"} 1") - + require.NoError(t, err) + require.Contains(t, string(output), "fs_syscalls{syscall=\"create\"} 1") }) } diff --git a/integrationtests/wireguard/main.tf b/integrationtests/wireguard/main.tf index c1db2317..6d502b2c 100644 --- a/integrationtests/wireguard/main.tf +++ b/integrationtests/wireguard/main.tf @@ -17,7 +17,7 @@ provider "grid" { resource "grid_scheduler" "scheduler" { requests { - name = "node1" + name = "node" cru = 2 sru = 512 mru = 1024 @@ -25,15 +25,15 @@ resource "grid_scheduler" "scheduler" { } resource "grid_network" "net1" { - nodes = [grid_scheduler.scheduler.nodes["node1"]] + nodes = [grid_scheduler.scheduler.nodes["node"]] ip_range = "10.1.0.0/16" name = "network" - description = "newer network" + description = "wirequard network" add_wg_access = true } resource "grid_deployment" "d1" { - node = grid_scheduler.scheduler.nodes["node1"] + node = grid_scheduler.scheduler.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" diff --git a/integrationtests/wireguard_test.go b/integrationtests/wireguard_test.go index 52e07790..ddb9fd09 100644 --- a/integrationtests/wireguard_test.go +++ b/integrationtests/wireguard_test.go @@ -1,18 +1,21 @@ package integrationtests import ( + "errors" "testing" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) func TestWireguard(t *testing.T) { - /* Test case for deployeng a singlenode. + /* Test case for deploying a wireguard. **Test Scenario** - - Deploy a singlenode. + - Deploy a wireguard. - Check that the output is not empty. - Up wireguard. - Check that containers is reachable @@ -36,32 +39,34 @@ func TestWireguard(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } // Check that the outputs not empty wgVM1IP := terraform.Output(t, terraformOptions, "vm1_wg_ip") - assert.NotEmpty(t, wgVM1IP) + require.NotEmpty(t, wgVM1IP) wgVM2IP := terraform.Output(t, terraformOptions, "vm2_wg_ip") - assert.NotEmpty(t, wgVM2IP) + require.NotEmpty(t, wgVM2IP) // Up wireguard wgConfig := terraform.Output(t, terraformOptions, "wg_config") - assert.NotEmpty(t, wgConfig) + require.NotEmpty(t, wgConfig) tempDir := t.TempDir() conf, err := UpWg(wgConfig, tempDir) - assert.NoError(t, err) + require.NoError(t, err) defer func() { _, err := DownWG(conf) - assert.NoError(t, err) + require.NoError(t, err) }() ips := []string{wgVM1IP, wgVM2IP} for i := range ips { // testing connection - ok := TestConnection(ips[i], "22") - assert.True(t, ok) + require.True(t, TestConnection(ips[i], "22")) } } diff --git a/integrationtests/zdb_test.go b/integrationtests/zdb_test.go index d1d5002d..b748486a 100644 --- a/integrationtests/zdb_test.go +++ b/integrationtests/zdb_test.go @@ -1,17 +1,20 @@ package integrationtests import ( + "errors" "testing" "github.com/go-redis/redis" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) func TestZdbs(t *testing.T) { t.Run("zdb_test", func(t *testing.T) { - /* Test case for deployeng a singlenode. + /* Test case for deploying a zdb. **Test Scenario** @@ -32,29 +35,34 @@ func TestZdbs(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - assert.NoError(t, err) + if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } + + require.NoError(t, err) // Check that the outputs not empty deploymentID := terraform.Output(t, terraformOptions, "deployment_id") - assert.NotEmpty(t, deploymentID) + require.NotEmpty(t, deploymentID) zdbEndpoint := terraform.Output(t, terraformOptions, "zdb1_endpoint") - assert.NotEmpty(t, zdbEndpoint) + require.NotEmpty(t, zdbEndpoint) zdbNamespace := terraform.Output(t, terraformOptions, "zdb1_namespace") - assert.NotEmpty(t, zdbNamespace) + require.NotEmpty(t, zdbNamespace) rdb := redis.NewClient(&redis.Options{ Addr: zdbEndpoint, }) _, err = rdb.Do("SELECT", zdbNamespace, password).Result() - assert.NoError(t, err) + require.NoError(t, err) _, err = rdb.Set("key1", "val1", 0).Result() - assert.NoError(t, err) + require.NoError(t, err) res, err := rdb.Get("key1").Result() - assert.NoError(t, err) - assert.Equal(t, res, "val1") + require.NoError(t, err) + require.Equal(t, res, "val1") }) } diff --git a/integrationtests/zdbs/main.tf b/integrationtests/zdbs/main.tf index e47310b2..534624d7 100644 --- a/integrationtests/zdbs/main.tf +++ b/integrationtests/zdbs/main.tf @@ -16,24 +16,28 @@ provider "grid" { resource "grid_scheduler" "scheduler" { requests { - name = "node1" - hru = 10240 + name = "node" + hru = 10 * 1024 } } +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_deployment" "d1" { - node = grid_scheduler.scheduler.nodes["node1"] + node = grid_scheduler.scheduler.nodes["node"] zdbs { - name = "zdb123" + name = random_string.name.result size = 10 - description = "zdb1 description" + description = "zdb description" password = var.password mode = "user" } } - output "deployment_id" { value = grid_deployment.d1.id } diff --git a/modules/nomad-module/main.tf b/modules/nomad-module/main.tf index 29c99663..726aae4a 100644 --- a/modules/nomad-module/main.tf +++ b/modules/nomad-module/main.tf @@ -40,7 +40,7 @@ resource "grid_deployment" "servers" { entrypoint = local.entrypoint mounts { disk_name = vms.value.disk.name - mount_point = vms.value.mount_point + mount_point = vms.value.mount_point } env_vars = { SSH_KEY = var.ssh_key @@ -78,7 +78,7 @@ resource "grid_deployment" "clients" { entrypoint = local.entrypoint mounts { disk_name = vms.value.disk.name - mount_point = vms.value.mount_point + mount_point = vms.value.mount_point } env_vars = { SSH_KEY = var.ssh_key From d3215ceb3762355784c31c025eb85f2713444a29 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Wed, 26 Jun 2024 16:25:46 +0300 Subject: [PATCH 16/37] fix kubernetes tests --- .github/workflows/terratest.yml | 6 +- examples/resources/k8s/main.tf | 6 +- integrationtests/k8s/main.tf | 29 ++-- integrationtests/k8s_invalid_names/main.tf | 58 +++----- integrationtests/k8s_test.go | 157 ++------------------- integrationtests/k8s_using_module.go | 152 ++++++++++++++++++++ 6 files changed, 209 insertions(+), 199 deletions(-) create mode 100644 integrationtests/k8s_using_module.go diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index d549f63d..f5092702 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -57,7 +57,8 @@ jobs: NETWORK: ${{ matrix.network }} working-directory: integrationtests run: | - # go test -v ./... --tags=integration -timeout 3600s + # go test -v ./... --tags=integration -run TestVM + go test -v ./... --tags=integration -run TestK8s # go test -v ./... --tags=integration -run TestModuleK8s # SKIPPED # go test -v ./... --tags=integration -run TestPeertube # go test -v ./... --tags=integration -run TestPresearch @@ -68,5 +69,4 @@ jobs: # go test -v ./... --tags=integration -run TestZdbs # go test -v ./... --tags=integration -run TestQSFS # go test -v ./... --tags=integration -run TestWireguard - go test -v ./... --tags=integration -run TestNomad - # go test -v ./... --tags=integration -run TestK8s + # go test -v ./... --tags=integration -run TestNomad diff --git a/examples/resources/k8s/main.tf b/examples/resources/k8s/main.tf index bc5bd54c..25ed2295 100644 --- a/examples/resources/k8s/main.tf +++ b/examples/resources/k8s/main.tf @@ -75,15 +75,15 @@ resource "grid_scheduler" "sched" { } locals { - solution_type = "Kubernetes" + solution_type = "kubernetes/mr" name = "myk8s" } + resource "grid_network" "net1" { - solution_type = local.solution_type name = local.name nodes = distinct(values(grid_scheduler.sched.nodes)) ip_range = "10.1.0.0/16" - description = "newer network" + description = "kubernetes network" add_wg_access = true mycelium_keys = { format("%s", grid_scheduler.sched.nodes["master_node"]) = random_bytes.master_mycelium_key.hex diff --git a/integrationtests/k8s/main.tf b/integrationtests/k8s/main.tf index c956a2cc..f14ed0b7 100644 --- a/integrationtests/k8s/main.tf +++ b/integrationtests/k8s/main.tf @@ -14,6 +14,7 @@ terraform { provider "grid" { } + locals { master_disk_size = 2 master_memory = 2048 @@ -21,29 +22,32 @@ locals { worker_memory = 2048 } +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "sched" { requests { - name = "node1" - cru = 2 - sru = local.master_disk_size * 1024 - mru = local.master_memory - farm_id = 1 + name = "node1" + cru = 2 + sru = local.master_disk_size * 1024 + mru = local.master_memory } requests { - name = "node2" - cru = 2 - sru = local.worker_disk_size * 1024 - mru = local.worker_memory - farm_id = 1 + name = "node2" + cru = 2 + sru = local.worker_disk_size * 1024 + mru = local.worker_memory } } resource "grid_network" "net1" { nodes = distinct([grid_scheduler.sched.nodes["node1"], grid_scheduler.sched.nodes["node2"]]) ip_range = "10.1.0.0/16" - name = "network12346" - description = "newer network" + name = random_string.name.result + description = "kubernetes network" add_wg_access = true } @@ -70,7 +74,6 @@ resource "grid_kubernetes" "k8s1" { } } - output "mr_ygg_ip" { value = grid_kubernetes.k8s1.master[0].planetary_ip } diff --git a/integrationtests/k8s_invalid_names/main.tf b/integrationtests/k8s_invalid_names/main.tf index ecb310c6..3ecf896d 100644 --- a/integrationtests/k8s_invalid_names/main.tf +++ b/integrationtests/k8s_invalid_names/main.tf @@ -13,71 +13,53 @@ terraform { provider "grid" { } -resource "grid_scheduler" "sched" { - requests { - name = "node1" - cru = 2 - sru = 512 - mru = 2048 - farm_id = 1 - } - requests { - name = "node2" - cru = 2 - sru = 512 - mru = 2048 - farm_id = 1 - } +resource "random_string" "name" { + length = 8 + special = false +} +resource "grid_scheduler" "sched" { requests { - name = "node3" - cru = 2 - sru = 512 - mru = 2048 - farm_id = 1 + name = "node" + cru = 2 + sru = 3 * 1024 + mru = 6 * 1024 } } resource "grid_network" "net1" { - nodes = distinct([ - grid_scheduler.sched.nodes["node1"], - grid_scheduler.sched.nodes["node2"], - grid_scheduler.sched.nodes["node3"] - ]) + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = "network12346" - description = "newer network" + name = random_string.name.result + description = "kubernetes network" } + resource "grid_kubernetes" "k8s1" { network_name = grid_network.net1.name token = "12345678910122" ssh_key = var.public_key master { - disk_size = 22 - node = grid_scheduler.sched.nodes["node1"] + disk_size = 1 + node = grid_scheduler.sched.nodes["node"] name = "mr" cpu = 2 memory = 2048 } workers { - disk_size = 15 - node = grid_scheduler.sched.nodes["node2"] + disk_size = 1 + node = grid_scheduler.sched.nodes["node"] name = "w0" cpu = 2 memory = 2048 } workers { - disk_size = 13 - node = grid_scheduler.sched.nodes["node3"] + disk_size = 1 + node = grid_scheduler.sched.nodes["node"] name = "w0" - cpu = 1 + cpu = 2 memory = 2048 } } - -output "computed_master_public_ip" { - value = grid_kubernetes.k8s1.master[0].computedip -} diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index f9718a20..0f459f06 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -1,25 +1,25 @@ package integrationtests import ( - "context" + "errors" "strings" "testing" "time" + "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" - "github.com/threefoldtech/tfgrid-sdk-go/grid-client/deployer" - "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" + "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) -// requireNodesAreReady runs `kubectl get node` on the master node and requires that all nodes are ready -func requireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, privateKey string) { +// RequireNodesAreReady runs `kubectl get node` on the master node and requires that all nodes are ready +func RequireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, privateKey string) { t.Helper() masterYggIP := terraform.Output(t, terraformOptions, "mr_ygg_ip") require.NotEmpty(t, masterYggIP) - time.Sleep(10 * time.Second) + time.Sleep(40 * time.Second) output, err := RemoteRun("root", masterYggIP, "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl get node", privateKey) output = strings.TrimSpace(output) @@ -55,6 +55,11 @@ func TestK8s(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) + if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return + } + require.NoError(t, err) // Check that the outputs not empty @@ -77,7 +82,7 @@ func TestK8s(t *testing.T) { require.True(t, ok) // ssh to master node - requireNodesAreReady(t, terraformOptions, privateKey) + RequireNodesAreReady(t, terraformOptions, privateKey) }) t.Run("k8s_invalid_names", func(t *testing.T) { @@ -96,146 +101,14 @@ func TestK8s(t *testing.T) { }, }) defer terraform.Destroy(t, terraformOptions) - _, err = terraform.InitAndApplyE(t, terraformOptions) - if err == nil { t.Errorf("k8s workers and master must have unique names") } - }) - - t.Run("k8s_using_module", func(t *testing.T) { - t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") - /* Test case for deploying a k8s. - - **Test Scenario** - - - Deploy a k8s with modules with one master and one worker. - - Make sure master and worker deployed and ready. - - Add one more worker. - - Make sure that worker is added and ready. - */ - - tfPlugin, err := setup() - require.NoError(t, err) - - status := "up" - freeMRU := uint64(1024) - freeSRU := uint64(2 * 1024) - freeCRU := uint64(1) - f := types.NodeFilter{ - Status: []string{status}, - FreeMRU: &freeMRU, - FreeSRU: &freeSRU, - TotalCRU: &freeCRU, + if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + t.Skip("couldn't find any available nodes") + return } - - nodes, err := deployer.FilterNodes(context.Background(), tfPlugin, f, []uint64{freeSRU}, []uint64{}, []uint64{}, 3) - if err != nil || len(nodes) != 3 { - t.Fatal("grid proxy could not find nodes with suitable resources") - } - require.NoError(t, err) - - masterNode := nodes[0].NodeID - worker0Node := nodes[1].NodeID - worker1Node := nodes[2].NodeID - - terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ - TerraformDir: "./k8s_using_module", - Vars: map[string]interface{}{ - "ssh": publicKey, - "network_nodes": []int{12, masterNode}, - "master": map[string]interface{}{ - "name": "mr", - "node": masterNode, - "cpu": 1, - "memory": 1024, - "disk_name": "mrdisk", - "mount_point": "/mydisk", - "publicip": false, - "planetary": true, - }, - "workers": []map[string]interface{}{ - { - "name": "w0", - "node": worker0Node, - "cpu": 1, - "memory": 1024, - "disk_name": "w0disk", - "mount_point": "/mydisk", - "publicip": false, - "planetary": true, - }, - }, - "disks": []map[string]interface{}{ - { - "name": "mrdisk", - "node": masterNode, - "size": 2, - "description": "", - }, - { - "name": "w0disk", - "node": worker0Node, - "size": 2, - "description": "", - }, - }, - }, - }) - - _, err = terraform.InitAndApplyE(t, terraformOptions) - require.NoError(t, err) - defer terraform.Destroy(t, terraformOptions) - - requireNodesAreReady(t, terraformOptions, privateKey) - - terraformOptions.Vars["workers"] = []map[string]interface{}{ - { - "name": "w0", - "node": worker0Node, - "cpu": 1, - "memory": 1024, - "disk_name": "w0disk", - "mount_point": "/mydisk", - "publicip": false, - "planetary": true, - }, - { - "name": "w1", - "node": worker1Node, - "cpu": 1, - "memory": 1024, - "disk_name": "w1disk", - "mount_point": "/mydisk", - "publicip": false, - "planetary": true, - }, - } - terraformOptions.Vars["disks"] = []map[string]interface{}{ - { - "name": "mrdisk", - "node": masterNode, - "size": 2, - "description": "", - }, - { - "name": "w0disk", - "node": worker0Node, - "size": 2, - "description": "", - }, - { - "name": "w1disk", - "node": worker1Node, - "size": 2, - "description": "", - }, - } - _, err = terraform.ApplyE(t, terraformOptions) - require.NoError(t, err) - - requireNodesAreReady(t, terraformOptions, privateKey) }) } diff --git a/integrationtests/k8s_using_module.go b/integrationtests/k8s_using_module.go new file mode 100644 index 00000000..51068123 --- /dev/null +++ b/integrationtests/k8s_using_module.go @@ -0,0 +1,152 @@ +package integrationtests + +import ( + "context" + "testing" + + "github.com/gruntwork-io/terratest/modules/terraform" + "github.com/stretchr/testify/require" + "github.com/threefoldtech/tfgrid-sdk-go/grid-client/deployer" + "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" +) + +func TestModuleK8s(t *testing.T) { + /* Test case for deploying a k8s. + + **Test Scenario** + + - Deploy a k8s with modules with one master and one worker. + - Make sure master and worker deployed and ready. + - Add one more worker. + - Make sure that worker is added and ready. + + */ + + t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") + + publicKey, privateKey, err := GenerateSSHKeyPair() + if err != nil { + t.Fatalf("failed to generate ssh key pair: %s", err.Error()) + } + + tfPlugin, err := setup() + require.NoError(t, err) + + status := "up" + freeMRU := uint64(1024) + freeSRU := uint64(2 * 1024) + freeCRU := uint64(1) + f := types.NodeFilter{ + Status: []string{status}, + FreeMRU: &freeMRU, + FreeSRU: &freeSRU, + TotalCRU: &freeCRU, + } + + nodes, err := deployer.FilterNodes(context.Background(), tfPlugin, f, []uint64{freeSRU}, []uint64{}, []uint64{}, 3) + if err != nil || len(nodes) != 3 { + t.Fatal("grid proxy could not find nodes with suitable resources") + } + require.NoError(t, err) + + masterNode := nodes[0].NodeID + worker0Node := nodes[1].NodeID + worker1Node := nodes[2].NodeID + + terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ + TerraformDir: "./k8s_using_module", + Vars: map[string]interface{}{ + "ssh": publicKey, + "network_nodes": []int{12, masterNode}, + "master": map[string]interface{}{ + "name": "mr", + "node": masterNode, + "cpu": 1, + "memory": 1024, + "disk_name": "mrdisk", + "mount_point": "/mydisk", + "publicip": false, + "planetary": true, + }, + "workers": []map[string]interface{}{ + { + "name": "w0", + "node": worker0Node, + "cpu": 1, + "memory": 1024, + "disk_name": "w0disk", + "mount_point": "/mydisk", + "publicip": false, + "planetary": true, + }, + }, + "disks": []map[string]interface{}{ + { + "name": "mrdisk", + "node": masterNode, + "size": 2, + "description": "", + }, + { + "name": "w0disk", + "node": worker0Node, + "size": 2, + "description": "", + }, + }, + }, + }) + + _, err = terraform.InitAndApplyE(t, terraformOptions) + require.NoError(t, err) + defer terraform.Destroy(t, terraformOptions) + + RequireNodesAreReady(t, terraformOptions, privateKey) + + terraformOptions.Vars["workers"] = []map[string]interface{}{ + { + "name": "w0", + "node": worker0Node, + "cpu": 1, + "memory": 1024, + "disk_name": "w0disk", + "mount_point": "/mydisk", + "publicip": false, + "planetary": true, + }, + { + "name": "w1", + "node": worker1Node, + "cpu": 1, + "memory": 1024, + "disk_name": "w1disk", + "mount_point": "/mydisk", + "publicip": false, + "planetary": true, + }, + } + terraformOptions.Vars["disks"] = []map[string]interface{}{ + { + "name": "mrdisk", + "node": masterNode, + "size": 2, + "description": "", + }, + { + "name": "w0disk", + "node": worker0Node, + "size": 2, + "description": "", + }, + { + "name": "w1disk", + "node": worker1Node, + "size": 2, + "description": "", + }, + } + _, err = terraform.ApplyE(t, terraformOptions) + require.NoError(t, err) + + RequireNodesAreReady(t, terraformOptions, privateKey) +} From d5922ef55a9200ee60b0d4fc5eb4fcffd9c48b2d Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Thu, 27 Jun 2024 12:18:48 +0300 Subject: [PATCH 17/37] fix vm tests --- .github/workflows/terratest.yml | 24 ++-- integrationtests/k8s_test.go | 6 +- integrationtests/qsfs_test.go | 5 +- integrationtests/taiga_test.go | 5 +- integrationtests/vm/main.tf | 23 ++-- integrationtests/vm_invalid_cpu/main.tf | 23 ++-- integrationtests/vm_invalid_memory/main.tf | 24 ++-- .../vm_mount_invalid_write/main.tf | 67 ---------- integrationtests/vm_mounts/main.tf | 23 ++-- integrationtests/vm_multinode/main.tf | 27 +++-- integrationtests/vm_public_ip/main.tf | 16 ++- integrationtests/vm_test.go | 114 +++++++----------- integrationtests/wireguard_test.go | 5 +- integrationtests/zdb_test.go | 5 +- 14 files changed, 146 insertions(+), 221 deletions(-) delete mode 100644 integrationtests/vm_mount_invalid_write/main.tf diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index f5092702..74c11e88 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -57,16 +57,16 @@ jobs: NETWORK: ${{ matrix.network }} working-directory: integrationtests run: | - # go test -v ./... --tags=integration -run TestVM + go test -v ./... --tags=integration -run TestVM go test -v ./... --tags=integration -run TestK8s - # go test -v ./... --tags=integration -run TestModuleK8s # SKIPPED - # go test -v ./... --tags=integration -run TestPeertube - # go test -v ./... --tags=integration -run TestPresearch - # go test -v ./... --tags=integration -run TestMattermost - # go test -v ./... --tags=integration -run TestTaiga - # go test -v ./... --tags=integration -run TestGatewayDeployments - # go test -v ./... --tags=integration -run TestGatewayPrivate - # go test -v ./... --tags=integration -run TestZdbs - # go test -v ./... --tags=integration -run TestQSFS - # go test -v ./... --tags=integration -run TestWireguard - # go test -v ./... --tags=integration -run TestNomad + go test -v ./... --tags=integration -run TestModuleK8s + go test -v ./... --tags=integration -run TestGatewayDeployments + go test -v ./... --tags=integration -run TestGatewayPrivate + go test -v ./... --tags=integration -run TestWireguard + go test -v ./... --tags=integration -run TestZdbs + go test -v ./... --tags=integration -run TestQSFS + go test -v ./... --tags=integration -run TestPeertube + go test -v ./... --tags=integration -run TestPresearch + go test -v ./... --tags=integration -run TestMattermost + go test -v ./... --tags=integration -run TestTaiga + go test -v ./... --tags=integration -run TestNomad diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index 0f459f06..1d92ba24 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -1,12 +1,10 @@ package integrationtests import ( - "errors" "strings" "testing" "time" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -55,7 +53,7 @@ func TestK8s(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } @@ -106,7 +104,7 @@ func TestK8s(t *testing.T) { t.Errorf("k8s workers and master must have unique names") } - if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/qsfs_test.go b/integrationtests/qsfs_test.go index 96938944..b0290840 100644 --- a/integrationtests/qsfs_test.go +++ b/integrationtests/qsfs_test.go @@ -1,12 +1,11 @@ package integrationtests import ( - "errors" "os/exec" + "strings" "testing" "time" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -38,7 +37,7 @@ func TestQSFS(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/taiga_test.go b/integrationtests/taiga_test.go index 8b144ca9..1e26a203 100644 --- a/integrationtests/taiga_test.go +++ b/integrationtests/taiga_test.go @@ -1,13 +1,12 @@ package integrationtests import ( - "errors" "fmt" "net/http" + "strings" "testing" "time" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -41,7 +40,7 @@ func TestTaiga(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/vm/main.tf b/integrationtests/vm/main.tf index 3c037314..627ab87f 100644 --- a/integrationtests/vm/main.tf +++ b/integrationtests/vm/main.tf @@ -15,31 +15,34 @@ terraform { provider "grid" { } +resource "random_string" "name" { + length = 8 + special = false +} + locals { - name = "testvm" vm_disk_size = 2 vm_memory = 2048 } resource "grid_scheduler" "sched" { requests { - name = "node1" - cru = 2 - sru = local.vm_disk_size * 1024 - mru = local.vm_memory - farm_id = 1 + name = "node" + cru = 2 + sru = local.vm_disk_size * 1024 + mru = local.vm_memory } } resource "grid_network" "net1" { - nodes = [grid_scheduler.sched.nodes["node1"]] + nodes = [grid_scheduler.sched.nodes["node"]] ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" + name = random_string.name.result + description = "vm network" } resource "grid_deployment" "d1" { - node = grid_scheduler.sched.nodes["node1"] + node = grid_scheduler.sched.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" diff --git a/integrationtests/vm_invalid_cpu/main.tf b/integrationtests/vm_invalid_cpu/main.tf index 6b296603..9a7463c4 100644 --- a/integrationtests/vm_invalid_cpu/main.tf +++ b/integrationtests/vm_invalid_cpu/main.tf @@ -11,8 +11,12 @@ terraform { } } +resource "random_string" "name" { + length = 8 + special = false +} + locals { - name = "testvm" vm_disk_size = 2 vm_memory = 2048 } @@ -22,22 +26,21 @@ provider "grid" { resource "grid_scheduler" "scheduler" { requests { - name = "node1" - cru = 0 - sru = local.vm_disk_size * 1024 - mru = local.vm_memory - farm_id = 1 + name = "node" + cru = 0 + sru = local.vm_disk_size * 1024 + mru = local.vm_memory } } resource "grid_network" "net1" { - nodes = [grid_scheduler.scheduler.nodes["node1"]] + nodes = [grid_scheduler.scheduler.nodes["node"]] ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" + name = random_string.name.result + description = "vm network" } resource "grid_deployment" "d1" { - node = grid_scheduler.scheduler.nodes["node1"] + node = grid_scheduler.scheduler.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" diff --git a/integrationtests/vm_invalid_memory/main.tf b/integrationtests/vm_invalid_memory/main.tf index 77f4d58d..3620369e 100644 --- a/integrationtests/vm_invalid_memory/main.tf +++ b/integrationtests/vm_invalid_memory/main.tf @@ -11,8 +11,12 @@ terraform { } } +resource "random_string" "name" { + length = 8 + special = false +} + locals { - name = "testvm" vm_disk_size = 2 vm_memory = 2048 } @@ -22,22 +26,22 @@ provider "grid" { resource "grid_scheduler" "scheduler" { requests { - name = "node1" - cru = 2 - sru = local.vm_disk_size * 1024 - mru = local.vm_memory - farm_id = 1 + name = "node" + cru = 2 + sru = local.vm_disk_size * 1024 + mru = local.vm_memory } } resource "grid_network" "net1" { - nodes = [grid_scheduler.scheduler.nodes["node1"]] + nodes = [grid_scheduler.scheduler.nodes["node"]] ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" + name = random_string.name.result + description = "vm network" } + resource "grid_deployment" "d1" { - node = grid_scheduler.scheduler.nodes["node1"] + node = grid_scheduler.scheduler.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" diff --git a/integrationtests/vm_mount_invalid_write/main.tf b/integrationtests/vm_mount_invalid_write/main.tf deleted file mode 100644 index cc8511ad..00000000 --- a/integrationtests/vm_mount_invalid_write/main.tf +++ /dev/null @@ -1,67 +0,0 @@ - -variable "public_key" { - type = string -} - -variable "disk_size" { - type = number - -} - -terraform { - required_providers { - grid = { - source = "threefoldtechdev.com/providers/grid" - version = "0.2" - } - } -} - -provider "grid" { -} - -resource "grid_scheduler" "scheduler" { - requests { - name = "node1" - cru = 1 - sru = var.disk_size * 1024 - mru = 1024 - farm_id = 1 - } -} - -resource "grid_network" "net1" { - nodes = [grid_scheduler.scheduler.nodes["node1"]] - ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" -} -resource "grid_deployment" "d1" { - node = grid_scheduler.scheduler.nodes["node1"] - network_name = grid_network.net1.name - disks { - name = "data" - size = var.disk_size - description = "volume holding app data" - } - vms { - name = "vm1" - flist = "https://hub.grid.tf/tf-official-apps/base:latest.flist" - cpu = 1 - memory = 1024 - entrypoint = "/sbin/zinit init" - mounts { - disk_name = "data" - mount_point = "/app" - } - env_vars = { - SSH_KEY = "${var.public_key}" - } - planetary = true - - } -} - -output "ygg_ip" { - value = grid_deployment.d1.vms[0].planetary_ip -} diff --git a/integrationtests/vm_mounts/main.tf b/integrationtests/vm_mounts/main.tf index 48fde53d..eacbee57 100644 --- a/integrationtests/vm_mounts/main.tf +++ b/integrationtests/vm_mounts/main.tf @@ -22,24 +22,29 @@ terraform { provider "grid" { } +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "scheduler" { requests { - name = "node1" - cru = 1 - sru = var.disk_size * 1024 - mru = 1024 - farm_id = 1 + name = "node" + cru = 1 + sru = var.disk_size * 1024 + mru = 1024 } } resource "grid_network" "net1" { - nodes = [grid_scheduler.scheduler.nodes["node1"]] + nodes = [grid_scheduler.scheduler.nodes["node"]] ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" + name = random_string.name.result + description = "vm network" } + resource "grid_deployment" "d1" { - node = grid_scheduler.scheduler.nodes["node1"] + node = grid_scheduler.scheduler.nodes["node"] network_name = grid_network.net1.name disks { name = "data" diff --git a/integrationtests/vm_multinode/main.tf b/integrationtests/vm_multinode/main.tf index 84e54292..34ec2f41 100644 --- a/integrationtests/vm_multinode/main.tf +++ b/integrationtests/vm_multinode/main.tf @@ -15,21 +15,24 @@ terraform { provider "grid" { } +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "scheduler" { requests { - name = "node1" - cru = 2 - sru = 512 - mru = 1024 - farm_id = 1 + name = "node1" + cru = 2 + sru = 512 + mru = 1024 } requests { - name = "node2" - cru = 1 - sru = 512 - mru = 1024 - farm_id = 1 + name = "node2" + cru = 1 + sru = 512 + mru = 1024 } } @@ -39,8 +42,8 @@ resource "grid_network" "net1" { grid_scheduler.scheduler.nodes["node2"] ]) ip_range = "172.20.0.0/16" - name = "net1" - description = "new network" + name = random_string.name.result + description = "vm network" } resource "grid_deployment" "d1" { diff --git a/integrationtests/vm_public_ip/main.tf b/integrationtests/vm_public_ip/main.tf index 78cba228..16ba948e 100644 --- a/integrationtests/vm_public_ip/main.tf +++ b/integrationtests/vm_public_ip/main.tf @@ -15,27 +15,31 @@ terraform { provider "grid" { } +resource "random_string" "name" { + length = 8 + special = false +} + resource "grid_scheduler" "scheduler" { requests { - name = "node1" + name = "node" cru = 2 sru = 512 mru = 1024 public_config = true - farm_id = 1 public_ips_count = 1 } } resource "grid_network" "net1" { - nodes = [grid_scheduler.scheduler.nodes["node1"]] + nodes = [grid_scheduler.scheduler.nodes["node"]] ip_range = "10.1.0.0/16" - name = "network" - description = "newer network" + name = random_string.name.result + description = "vm network" } resource "grid_deployment" "d1" { - node = grid_scheduler.scheduler.nodes["node1"] + node = grid_scheduler.scheduler.nodes["node"] network_name = grid_network.net1.name vms { name = "vm1" diff --git a/integrationtests/vm_test.go b/integrationtests/vm_test.go index b38b9e1f..0cbc13d0 100644 --- a/integrationtests/vm_test.go +++ b/integrationtests/vm_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/gruntwork-io/terratest/modules/terraform" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" ) @@ -17,7 +17,7 @@ func TestVM(t *testing.T) { } t.Run("single_vm", func(t *testing.T) { - /* Test case for deployeng a singlenode. + /* Test case for deploying a single vm. **Test Scenario** @@ -35,23 +35,26 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if !(assert.NoError(t, err)) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + t.Skip("couldn't find any available nodes") return } + require.NoError(t, err) + yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) vmIP := terraform.Output(t, terraformOptions, "vm_ip") - assert.NotEmpty(t, vmIP) + require.NotEmpty(t, vmIP) // testing connection ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) }) t.Run("vm_public_ip", func(t *testing.T) { - /* Test case for deployeng a singlenode. + /* Test case for deploying a single vm with public IP. **Test Scenario** @@ -70,29 +73,28 @@ func TestVM(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { - t.Skip("couldn't find any nodes with public ip") - return - } - if !(assert.NoError(t, err)) { + t.Skip("couldn't find any available nodes") return } + require.NoError(t, err) + vmComputedIP := terraform.Output(t, terraformOptions, "vm_public_ip") - assert.NotEmpty(t, vmComputedIP) + require.NotEmpty(t, vmComputedIP) vmIP := terraform.Output(t, terraformOptions, "vm_ip") - assert.NotEmpty(t, vmIP) + require.NotEmpty(t, vmIP) // spliting ip to connect on it publicIP := strings.Split(vmComputedIP, "/")[0] // testing connections ok := TestConnection(publicIP, "22") - assert.True(t, ok) + require.True(t, ok) }) t.Run("vm_invalid_cpu", func(t *testing.T) { - /* Test case for deployeng a singlenode. + /* Test case for deploying a single vm with invalid cpu. **Test Scenario** @@ -110,12 +112,11 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - - assert.Error(t, err, "Should fail with can't deploy with 0 cpu but err is null") + require.Error(t, err, "Should fail with can't deploy with 0 cpu but err is null") }) t.Run("vm_invalid_memory", func(t *testing.T) { - /* Test case for deployeng a singlenode. + /* Test case for deploying a single vm with invalid memory. **Test Scenario** @@ -133,16 +134,17 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - assert.Error(t, err, "Should fail with mem capacity can't be less that 250M but err is null") + require.Error(t, err, "Should fail with mem capacity can't be less that 250M but err is null") }) t.Run("vm_mounts", func(t *testing.T) { - /* Test case for deployeng a disk and mount it. + /* Test case for deploying a disk and mount it and try to create a file bigger than disk size. **Test Scenario** - - Deploy a vm mouting a disk. + - Deploy a vm mounting a disk. - Check that the outputs are not empty. - Check that disk has been mounted successfully. + - try to create a file with size larger than the disk size. - Destroy the deployment. */ @@ -162,63 +164,34 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if !(assert.NoError(t, err)) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + t.Skip("couldn't find any available nodes") return } + require.NoError(t, err) + // Check that the outputs not empty yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) + require.NotEmpty(t, yggIP) vmIP := terraform.Output(t, terraformOptions, "vm_ip") - assert.NotEmpty(t, vmIP) + require.NotEmpty(t, vmIP) ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.True(t, ok) // Check that disk has been mounted successfully output, err := RemoteRun("root", yggIP, fmt.Sprintf("df -h | grep -w /%s", mountPoint), privateKey) - assert.NoError(t, err) - assert.Contains(t, string(output), fmt.Sprintf("%d.0G", diskSize)) - }) - - t.Run("vm_mount_invalid_write", func(t *testing.T) { - /* Test case for deployeng a mount disk and try to create a file bigger than disk size. - - **Test Scenario** - - - Deploy a vm mounting a disk. - - Check that the outputs not empty. - - ssh to VM and try to create a file with size larger than the disk size. - - Destroy the deployment - */ - diskSize := 1 - terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ - TerraformDir: "./vm_mount_invalid_write", - Vars: map[string]interface{}{ - "public_key": publicKey, - "disk_size": diskSize, - }, - }) - defer terraform.Destroy(t, terraformOptions) - - _, err = terraform.InitAndApplyE(t, terraformOptions) - if !(assert.NoError(t, err)) { - return - } - - yggIP := terraform.Output(t, terraformOptions, "ygg_ip") - assert.NotEmpty(t, yggIP) - - ok := TestConnection(yggIP, "22") - assert.True(t, ok) + require.NoError(t, err) + require.Contains(t, string(output), fmt.Sprintf("%d.0G", diskSize)) // ssh to VM and try to create a file bigger than disk size. _, err = RemoteRun("root", yggIP, fmt.Sprintf("cd /app/ && dd if=/dev/vda bs=%dG count=1 of=test.txt", diskSize+1), privateKey) - assert.Error(t, err, "should fail with out of memory") + require.Error(t, err, "should fail with out of memory") }) - t.Run("vm_multinode", func(t *testing.T) { - /* Test case for deployeng a multinode. + t.Run("vm_multi_node", func(t *testing.T) { + /* Test case for deploying multiple vms. **Test Scenario** - Deploy two vms on multiple nodes. @@ -235,28 +208,31 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if !(assert.NoError(t, err)) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + t.Skip("couldn't find any available nodes") return } + require.NoError(t, err) + // Check that the outputs not empty vm1IP := terraform.Output(t, terraformOptions, "vm1_ip") - assert.NotEmpty(t, vm1IP) + require.NotEmpty(t, vm1IP) vm2IP := terraform.Output(t, terraformOptions, "vm2_ip") - assert.NotEmpty(t, vm2IP) + require.NotEmpty(t, vm2IP) vm1YggIP := terraform.Output(t, terraformOptions, "vm1_ygg_ip") - assert.NotEmpty(t, vm1YggIP) + require.NotEmpty(t, vm1YggIP) vm2YggIP := terraform.Output(t, terraformOptions, "vm2_ygg_ip") - assert.NotEmpty(t, vm2YggIP) + require.NotEmpty(t, vm2YggIP) // testing connections ok := TestConnection(vm1YggIP, "22") - assert.True(t, ok) + require.True(t, ok) ok = TestConnection(vm2YggIP, "22") - assert.True(t, ok) + require.True(t, ok) }) } diff --git a/integrationtests/wireguard_test.go b/integrationtests/wireguard_test.go index ddb9fd09..42982be6 100644 --- a/integrationtests/wireguard_test.go +++ b/integrationtests/wireguard_test.go @@ -1,10 +1,9 @@ package integrationtests import ( - "errors" + "strings" "testing" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -39,7 +38,7 @@ func TestWireguard(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/zdb_test.go b/integrationtests/zdb_test.go index b748486a..aa3fdda6 100644 --- a/integrationtests/zdb_test.go +++ b/integrationtests/zdb_test.go @@ -1,11 +1,10 @@ package integrationtests import ( - "errors" + "strings" "testing" "github.com/go-redis/redis" - "github.com/gruntwork-io/terratest/modules/retry" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/require" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" @@ -35,7 +34,7 @@ func TestZdbs(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - if err != nil && errors.Is(err, retry.FatalError{Underlying: scheduler.NoNodesFoundErr}) { + if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { t.Skip("couldn't find any available nodes") return } From d6a7a57cc1411fee0ae044c3e96adeadf092435d Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Thu, 27 Jun 2024 13:17:20 +0300 Subject: [PATCH 18/37] split tests --- .github/workflows/terratest.yml | 91 +++++++++++++++++++++++++++---- integrationtests/peertube/main.tf | 5 +- integrationtests/zdb_test.go | 6 ++ 3 files changed, 88 insertions(+), 14 deletions(-) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 74c11e88..b3758239 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -51,22 +51,89 @@ jobs: mkdir -p ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ go build -o terraform-provider-grid mv terraform-provider-grid ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ - - name: Run Go Tests + - name: Test virtual machines + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestVM + + - name: Test kubernetes env: MNEMONICS: ${{ secrets.MNEMONICS }} NETWORK: ${{ matrix.network }} working-directory: integrationtests run: | - go test -v ./... --tags=integration -run TestVM go test -v ./... --tags=integration -run TestK8s go test -v ./... --tags=integration -run TestModuleK8s - go test -v ./... --tags=integration -run TestGatewayDeployments - go test -v ./... --tags=integration -run TestGatewayPrivate - go test -v ./... --tags=integration -run TestWireguard - go test -v ./... --tags=integration -run TestZdbs - go test -v ./... --tags=integration -run TestQSFS - go test -v ./... --tags=integration -run TestPeertube - go test -v ./... --tags=integration -run TestPresearch - go test -v ./... --tags=integration -run TestMattermost - go test -v ./... --tags=integration -run TestTaiga - go test -v ./... --tags=integration -run TestNomad + + - name: Test Gateways + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestGatewayDeployments + + - name: Test private gateways + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestGatewayPrivate + + - name: Test wireguard + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestWireguard + + - name: Test ZDBs + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestZdbs + + - name: Test QSFS + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestQSFS + + - name: Test peertube + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestPeertube + + - name: Test presearch + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestPresearch + + - name: Test taiga + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestTaiga + + - name: Test mattermost + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestMattermost + + - name: Test nomad + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestNomad + diff --git a/integrationtests/peertube/main.tf b/integrationtests/peertube/main.tf index e596ad1f..d82b90b1 100644 --- a/integrationtests/peertube/main.tf +++ b/integrationtests/peertube/main.tf @@ -36,6 +36,7 @@ resource "random_string" "name" { locals { solution_type = "Peertube" + name = "peertube" node = grid_scheduler.sched.nodes["peertube"] } @@ -46,7 +47,7 @@ locals { # - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { node = grid_scheduler.sched.nodes["domain"] - name = random_string.name.result + name = local.name } resource "grid_network" "net1" { @@ -90,7 +91,7 @@ locals { resource "grid_name_proxy" "p1" { node = grid_scheduler.sched.nodes["domain"] solution_type = local.solution_type - name = random_string.name.result + name = local.name backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false } diff --git a/integrationtests/zdb_test.go b/integrationtests/zdb_test.go index aa3fdda6..bf899b84 100644 --- a/integrationtests/zdb_test.go +++ b/integrationtests/zdb_test.go @@ -1,6 +1,7 @@ package integrationtests import ( + "os" "strings" "testing" @@ -24,6 +25,11 @@ func TestZdbs(t *testing.T) { - Destroy the deployment */ + if network, _ := os.LookupEnv("NETWORK"); network != "test" { + t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") + return + } + password := "password123" terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ TerraformDir: "./zdbs", From 1c94cbfb3148f6cc5ddd1fcab1dcc4d08c88dbe7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Jun 2024 05:58:30 +0000 Subject: [PATCH 19/37] Bump github.com/gruntwork-io/terratest from 0.46.15 to 0.46.16 Bumps [github.com/gruntwork-io/terratest](https://github.com/gruntwork-io/terratest) from 0.46.15 to 0.46.16. - [Release notes](https://github.com/gruntwork-io/terratest/releases) - [Commits](https://github.com/gruntwork-io/terratest/compare/v0.46.15...v0.46.16) --- updated-dependencies: - dependency-name: github.com/gruntwork-io/terratest dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 826a833d..03d433a1 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21 require ( github.com/go-redis/redis v6.15.9+incompatible github.com/google/uuid v1.6.0 - github.com/gruntwork-io/terratest v0.46.15 + github.com/gruntwork-io/terratest v0.46.16 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/terraform-plugin-docs v0.19.4 github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 @@ -73,7 +73,7 @@ require ( github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect - github.com/hashicorp/go-getter v1.7.4 // indirect + github.com/hashicorp/go-getter v1.7.5 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-plugin v1.6.0 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect diff --git a/go.sum b/go.sum index d0135277..40cd4116 100644 --- a/go.sum +++ b/go.sum @@ -447,8 +447,8 @@ github.com/gorilla/schema v1.3.0/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4F github.com/gorilla/websocket v1.5.2 h1:qoW6V1GT3aZxybsbC6oLnailWnB+qTMVwMreOso9XUw= github.com/gorilla/websocket v1.5.2/go.mod h1:0n9H61RBAcf5/38py2MCYbxzPIY9rOkpvvMT24Rqs30= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gruntwork-io/terratest v0.46.15 h1:qfqjTFveymaqe7aAWn3LjlK0SwVGpRfoOut5ggNyfQ8= -github.com/gruntwork-io/terratest v0.46.15/go.mod h1:9bd22zAojjBBiYdsp+AR1iyl2iB6bRUVm2Yf1AFhfrA= +github.com/gruntwork-io/terratest v0.46.16 h1:l+HHuU7lNLwoAl2sP8zkYJy0uoE2Mwha2nw+rim+OhQ= +github.com/gruntwork-io/terratest v0.46.16/go.mod h1:oywHw1cFKXSYvKPm27U7quZVzDUlA22H2xUrKCe26xM= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= @@ -465,8 +465,8 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= -github.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0= -github.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4= +github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= From b112aa328b9cde2218dd9796d067e3a83930f1de Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Thu, 27 Jun 2024 14:09:56 +0300 Subject: [PATCH 20/37] split tests --- integrationtests/mattermost/main.tf | 4 ++-- integrationtests/qsfs_test.go | 6 ++++++ integrationtests/taiga/main.tf | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/integrationtests/mattermost/main.tf b/integrationtests/mattermost/main.tf index cec2b09f..84e31a0a 100644 --- a/integrationtests/mattermost/main.tf +++ b/integrationtests/mattermost/main.tf @@ -80,11 +80,11 @@ locals { # - the backend can reference the vm ip directly data "grid_gateway_domain" "domain" { node = grid_scheduler.sched.nodes["gateway"] - name = random_string.name.result + name = "testmatter" } resource "grid_name_proxy" "p1" { - name = random_string.name.result + name = "testmatter" node = grid_scheduler.sched.nodes["gateway"] backends = [format("http://[%s]:8000", local.ygg_ip)] tls_passthrough = false diff --git a/integrationtests/qsfs_test.go b/integrationtests/qsfs_test.go index b0290840..f24401b9 100644 --- a/integrationtests/qsfs_test.go +++ b/integrationtests/qsfs_test.go @@ -1,6 +1,7 @@ package integrationtests import ( + "os" "os/exec" "strings" "testing" @@ -12,6 +13,11 @@ import ( ) func TestQSFS(t *testing.T) { + if network, _ := os.LookupEnv("NETWORK"); network != "test" { + t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") + return + } + publicKey, privateKey, err := GenerateSSHKeyPair() if err != nil { t.Fatalf("failed to generate ssh key pair: %s", err.Error()) diff --git a/integrationtests/taiga/main.tf b/integrationtests/taiga/main.tf index b6e00057..dfb29541 100644 --- a/integrationtests/taiga/main.tf +++ b/integrationtests/taiga/main.tf @@ -94,7 +94,7 @@ locals { } resource "grid_name_proxy" "p1" { - name = random_string.name.result + name = "grid3taiga" node = grid_scheduler.sched.nodes["gateway"] backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false From ee6dc2ce1887597a9ef9e5a1ee78e5ee137f6870 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Mon, 1 Jul 2024 12:43:02 +0300 Subject: [PATCH 21/37] skip sdk plugin failures --- integrationtests/gateway_private_test.go | 8 ++++++-- integrationtests/gateway_test.go | 8 ++++++-- integrationtests/k8s/main.tf | 18 ++++++++++-------- integrationtests/k8s_test.go | 8 ++++++-- integrationtests/mattermost_test.go | 4 +++- integrationtests/nomad_test.go | 2 +- integrationtests/peertube_test.go | 4 +++- integrationtests/presearch_test.go | 4 +++- integrationtests/qsfs_test.go | 4 +++- integrationtests/taiga/main.tf | 4 ++-- integrationtests/taiga_test.go | 4 +++- integrationtests/vm_test.go | 16 ++++++++++++---- integrationtests/wireguard_test.go | 4 +++- integrationtests/zdb_test.go | 4 +++- 14 files changed, 64 insertions(+), 28 deletions(-) diff --git a/integrationtests/gateway_private_test.go b/integrationtests/gateway_private_test.go index a895c24a..b52b4842 100644 --- a/integrationtests/gateway_private_test.go +++ b/integrationtests/gateway_private_test.go @@ -42,7 +42,9 @@ func TestGatewayPrivate(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } @@ -108,7 +110,9 @@ func TestGatewayPrivate(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/gateway_test.go b/integrationtests/gateway_test.go index 0a148f14..b63f6603 100644 --- a/integrationtests/gateway_test.go +++ b/integrationtests/gateway_test.go @@ -42,7 +42,9 @@ func TestGatewayDeployments(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } @@ -108,7 +110,9 @@ func TestGatewayDeployments(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/k8s/main.tf b/integrationtests/k8s/main.tf index f14ed0b7..f8c041cd 100644 --- a/integrationtests/k8s/main.tf +++ b/integrationtests/k8s/main.tf @@ -29,17 +29,19 @@ resource "random_string" "name" { resource "grid_scheduler" "sched" { requests { - name = "node1" - cru = 2 - sru = local.master_disk_size * 1024 - mru = local.master_memory + name = "node1" + cru = 2 + sru = local.master_disk_size * 1024 + mru = local.master_memory + distinct = true } requests { - name = "node2" - cru = 2 - sru = local.worker_disk_size * 1024 - mru = local.worker_memory + name = "node2" + cru = 2 + sru = local.worker_disk_size * 1024 + mru = local.worker_memory + distinct = true } } diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index 1d92ba24..f7111c06 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -53,7 +53,9 @@ func TestK8s(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } @@ -104,7 +106,9 @@ func TestK8s(t *testing.T) { t.Errorf("k8s workers and master must have unique names") } - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/mattermost_test.go b/integrationtests/mattermost_test.go index 352121fa..07488d94 100644 --- a/integrationtests/mattermost_test.go +++ b/integrationtests/mattermost_test.go @@ -40,7 +40,9 @@ func TestMattermost(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/nomad_test.go b/integrationtests/nomad_test.go index 199f49ee..e0d3cd02 100644 --- a/integrationtests/nomad_test.go +++ b/integrationtests/nomad_test.go @@ -175,7 +175,7 @@ func TestNomad(t *testing.T) { require.True(t, ok) // until services are ready - time.Sleep(10 * time.Second) + time.Sleep(30 * time.Second) output, err := RemoteRun("root", server1YggIP, "nomad node status", privateKey) require.Empty(t, err) diff --git a/integrationtests/peertube_test.go b/integrationtests/peertube_test.go index 1b98f5fc..59619254 100644 --- a/integrationtests/peertube_test.go +++ b/integrationtests/peertube_test.go @@ -40,7 +40,9 @@ func TestPeertube(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/presearch_test.go b/integrationtests/presearch_test.go index c46dd1a1..ec86b77a 100644 --- a/integrationtests/presearch_test.go +++ b/integrationtests/presearch_test.go @@ -40,7 +40,9 @@ func TestPresearch(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/qsfs_test.go b/integrationtests/qsfs_test.go index f24401b9..d308778e 100644 --- a/integrationtests/qsfs_test.go +++ b/integrationtests/qsfs_test.go @@ -43,7 +43,9 @@ func TestQSFS(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/taiga/main.tf b/integrationtests/taiga/main.tf index dfb29541..86f4950a 100644 --- a/integrationtests/taiga/main.tf +++ b/integrationtests/taiga/main.tf @@ -86,7 +86,7 @@ resource "grid_deployment" "node1" { data "grid_gateway_domain" "domain" { node = grid_scheduler.sched.nodes["gateway"] - name = "grid3taiga" + name = "testtaiga" } locals { @@ -94,7 +94,7 @@ locals { } resource "grid_name_proxy" "p1" { - name = "grid3taiga" + name = "testtaiga" node = grid_scheduler.sched.nodes["gateway"] backends = [format("http://[%s]:9000", local.ygg_ip)] tls_passthrough = false diff --git a/integrationtests/taiga_test.go b/integrationtests/taiga_test.go index 1e26a203..81a5e1c9 100644 --- a/integrationtests/taiga_test.go +++ b/integrationtests/taiga_test.go @@ -40,7 +40,9 @@ func TestTaiga(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/vm_test.go b/integrationtests/vm_test.go index 0cbc13d0..8cddbd0a 100644 --- a/integrationtests/vm_test.go +++ b/integrationtests/vm_test.go @@ -35,7 +35,9 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } @@ -72,7 +74,9 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } @@ -164,7 +168,9 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } @@ -208,7 +214,9 @@ func TestVM(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/wireguard_test.go b/integrationtests/wireguard_test.go index 42982be6..05b89936 100644 --- a/integrationtests/wireguard_test.go +++ b/integrationtests/wireguard_test.go @@ -38,7 +38,9 @@ func TestWireguard(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err = terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/zdb_test.go b/integrationtests/zdb_test.go index bf899b84..3ae8c4e5 100644 --- a/integrationtests/zdb_test.go +++ b/integrationtests/zdb_test.go @@ -40,7 +40,9 @@ func TestZdbs(t *testing.T) { defer terraform.Destroy(t, terraformOptions) _, err := terraform.InitAndApplyE(t, terraformOptions) - if err != nil && strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) { + if err != nil && + strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && + strings.Contains(err.Error(), "error creating threefold plugin client") { t.Skip("couldn't find any available nodes") return } From c3cade9bf5d131990e1e68b9d2e8ba346158af07 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Mon, 1 Jul 2024 13:02:11 +0300 Subject: [PATCH 22/37] use freefarm in tests --- .github/workflows/terratest.yml | 1 - integrationtests/gateway_name/main.tf | 10 ++++++---- integrationtests/gateway_name_private/main.tf | 1 + integrationtests/gateway_private_test.go | 8 ++++---- integrationtests/gateway_test.go | 8 ++++---- integrationtests/gateway_with_fqdn/main.tf | 9 +++++---- integrationtests/k8s/main.tf | 1 + integrationtests/k8s_invalid_names/main.tf | 9 +++++---- integrationtests/k8s_test.go | 8 ++++---- integrationtests/mattermost/main.tf | 9 +++++---- integrationtests/mattermost_test.go | 4 ++-- integrationtests/peertube/main.tf | 9 +++++---- integrationtests/peertube_test.go | 4 ++-- integrationtests/presearch/main.tf | 9 +++++---- integrationtests/presearch_test.go | 4 ++-- integrationtests/qsfs/main.tf | 11 ++++++----- integrationtests/qsfs_test.go | 6 +++--- integrationtests/taiga/main.tf | 9 +++++---- integrationtests/taiga_test.go | 4 ++-- integrationtests/vm/main.tf | 9 +++++---- integrationtests/vm_test.go | 16 ++++++++-------- integrationtests/wireguard_test.go | 4 ++-- integrationtests/zdb_test.go | 6 +++--- internal/provider/scheduler/scheduler.go | 11 ++++++----- 24 files changed, 91 insertions(+), 79 deletions(-) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index b3758239..e985eb4c 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -3,7 +3,6 @@ name: Intgeration tests on: schedule: - cron: "0 0 * * *" - - cron: "0 0 * * 0" workflow_dispatch: push: tags: diff --git a/integrationtests/gateway_name/main.tf b/integrationtests/gateway_name/main.tf index 2d0c6cba..d4a55437 100644 --- a/integrationtests/gateway_name/main.tf +++ b/integrationtests/gateway_name/main.tf @@ -21,16 +21,18 @@ resource "random_string" "name" { resource "grid_scheduler" "sched" { requests { - name = "node" - cru = 2 - sru = 512 - mru = 1024 + name = "node" + cru = 2 + sru = 512 + mru = 1024 + farm_id = 1 } # a name workload requests { name = "gateway" public_config = true public_ips_count = 1 + farm_id = 1 } } diff --git a/integrationtests/gateway_name_private/main.tf b/integrationtests/gateway_name_private/main.tf index 67465ca3..dd56d7c4 100644 --- a/integrationtests/gateway_name_private/main.tf +++ b/integrationtests/gateway_name_private/main.tf @@ -26,6 +26,7 @@ resource "grid_scheduler" "sched" { sru = 512 mru = 1024 public_config = true + farm_id = 1 } } diff --git a/integrationtests/gateway_private_test.go b/integrationtests/gateway_private_test.go index b52b4842..75c967b3 100644 --- a/integrationtests/gateway_private_test.go +++ b/integrationtests/gateway_private_test.go @@ -43,8 +43,8 @@ func TestGatewayPrivate(t *testing.T) { _, err := terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } @@ -111,8 +111,8 @@ func TestGatewayPrivate(t *testing.T) { _, err := terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/gateway_test.go b/integrationtests/gateway_test.go index b63f6603..5b1939c7 100644 --- a/integrationtests/gateway_test.go +++ b/integrationtests/gateway_test.go @@ -43,8 +43,8 @@ func TestGatewayDeployments(t *testing.T) { _, err := terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } @@ -111,8 +111,8 @@ func TestGatewayDeployments(t *testing.T) { _, err := terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/gateway_with_fqdn/main.tf b/integrationtests/gateway_with_fqdn/main.tf index be9b9fb4..d71a8115 100644 --- a/integrationtests/gateway_with_fqdn/main.tf +++ b/integrationtests/gateway_with_fqdn/main.tf @@ -20,10 +20,11 @@ provider "grid" { resource "grid_scheduler" "sched" { requests { - name = "node" - cru = 2 - sru = 512 - mru = 1024 + name = "node" + cru = 2 + sru = 512 + mru = 1024 + farm_id = 1 } } diff --git a/integrationtests/k8s/main.tf b/integrationtests/k8s/main.tf index f8c041cd..2902d63c 100644 --- a/integrationtests/k8s/main.tf +++ b/integrationtests/k8s/main.tf @@ -34,6 +34,7 @@ resource "grid_scheduler" "sched" { sru = local.master_disk_size * 1024 mru = local.master_memory distinct = true + farm_id = 1 } requests { diff --git a/integrationtests/k8s_invalid_names/main.tf b/integrationtests/k8s_invalid_names/main.tf index 3ecf896d..d93c48e6 100644 --- a/integrationtests/k8s_invalid_names/main.tf +++ b/integrationtests/k8s_invalid_names/main.tf @@ -21,10 +21,11 @@ resource "random_string" "name" { resource "grid_scheduler" "sched" { requests { - name = "node" - cru = 2 - sru = 3 * 1024 - mru = 6 * 1024 + name = "node" + cru = 2 + sru = 3 * 1024 + mru = 6 * 1024 + farm_id = 1 } } diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index f7111c06..d473abc9 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -54,8 +54,8 @@ func TestK8s(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } @@ -107,8 +107,8 @@ func TestK8s(t *testing.T) { } if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/mattermost/main.tf b/integrationtests/mattermost/main.tf index 84e31a0a..fc2afdbe 100644 --- a/integrationtests/mattermost/main.tf +++ b/integrationtests/mattermost/main.tf @@ -25,10 +25,11 @@ provider "grid" { resource "grid_scheduler" "sched" { requests { - name = "node" - cru = 2 - sru = 1 * 1024 - mru = 4 * 1024 + name = "node" + cru = 2 + sru = 1 * 1024 + mru = 4 * 1024 + farm_id = 1 } requests { diff --git a/integrationtests/mattermost_test.go b/integrationtests/mattermost_test.go index 07488d94..fb3aac9d 100644 --- a/integrationtests/mattermost_test.go +++ b/integrationtests/mattermost_test.go @@ -41,8 +41,8 @@ func TestMattermost(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/peertube/main.tf b/integrationtests/peertube/main.tf index d82b90b1..540e4303 100644 --- a/integrationtests/peertube/main.tf +++ b/integrationtests/peertube/main.tf @@ -16,10 +16,11 @@ provider "grid" { } resource "grid_scheduler" "sched" { requests { - name = "peertube" - cru = 2 - sru = 512 - mru = 4096 + name = "peertube" + cru = 2 + sru = 512 + mru = 4096 + farm_id = 1 } requests { diff --git a/integrationtests/peertube_test.go b/integrationtests/peertube_test.go index 59619254..97a88813 100644 --- a/integrationtests/peertube_test.go +++ b/integrationtests/peertube_test.go @@ -41,8 +41,8 @@ func TestPeertube(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/presearch/main.tf b/integrationtests/presearch/main.tf index 80ce63fa..5774ce1d 100644 --- a/integrationtests/presearch/main.tf +++ b/integrationtests/presearch/main.tf @@ -30,10 +30,11 @@ locals { resource "grid_scheduler" "sched" { requests { - name = "presearch" - cru = 1 - sru = 5 * 1024 - mru = 1024 + name = "presearch" + cru = 1 + sru = 5 * 1024 + mru = 1024 + farm_id = 1 } } diff --git a/integrationtests/presearch_test.go b/integrationtests/presearch_test.go index ec86b77a..0e5d47f7 100644 --- a/integrationtests/presearch_test.go +++ b/integrationtests/presearch_test.go @@ -41,8 +41,8 @@ func TestPresearch(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/qsfs/main.tf b/integrationtests/qsfs/main.tf index d4458674..ef9ef22d 100644 --- a/integrationtests/qsfs/main.tf +++ b/integrationtests/qsfs/main.tf @@ -21,11 +21,12 @@ resource "random_string" "name" { resource "grid_scheduler" "sched" { requests { - name = "node" - cru = 2 - sru = 2 * 1024 - mru = 2 * 1024 - hru = 12 * 1024 + name = "node" + cru = 2 + sru = 2 * 1024 + mru = 2 * 1024 + hru = 12 * 1024 + farm_id = 1 } } diff --git a/integrationtests/qsfs_test.go b/integrationtests/qsfs_test.go index d308778e..b60d6814 100644 --- a/integrationtests/qsfs_test.go +++ b/integrationtests/qsfs_test.go @@ -13,7 +13,7 @@ import ( ) func TestQSFS(t *testing.T) { - if network, _ := os.LookupEnv("NETWORK"); network != "test" { + if network, _ := os.LookupEnv("NETWORK"); network == "test" { t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") return } @@ -44,8 +44,8 @@ func TestQSFS(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/taiga/main.tf b/integrationtests/taiga/main.tf index 86f4950a..1ea9861b 100644 --- a/integrationtests/taiga/main.tf +++ b/integrationtests/taiga/main.tf @@ -23,10 +23,11 @@ resource "random_string" "name" { resource "grid_scheduler" "sched" { requests { - name = "node" - cru = 2 - sru = 58 * 1024 - mru = 8096 + name = "node" + cru = 2 + sru = 58 * 1024 + mru = 8096 + farm_id = 1 } requests { diff --git a/integrationtests/taiga_test.go b/integrationtests/taiga_test.go index 81a5e1c9..e649ff46 100644 --- a/integrationtests/taiga_test.go +++ b/integrationtests/taiga_test.go @@ -41,8 +41,8 @@ func TestTaiga(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/vm/main.tf b/integrationtests/vm/main.tf index 627ab87f..f595fb91 100644 --- a/integrationtests/vm/main.tf +++ b/integrationtests/vm/main.tf @@ -27,10 +27,11 @@ locals { resource "grid_scheduler" "sched" { requests { - name = "node" - cru = 2 - sru = local.vm_disk_size * 1024 - mru = local.vm_memory + name = "node" + cru = 2 + sru = local.vm_disk_size * 1024 + mru = local.vm_memory + farm_id = 1 } } diff --git a/integrationtests/vm_test.go b/integrationtests/vm_test.go index 8cddbd0a..c8844142 100644 --- a/integrationtests/vm_test.go +++ b/integrationtests/vm_test.go @@ -36,8 +36,8 @@ func TestVM(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } @@ -75,8 +75,8 @@ func TestVM(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } @@ -169,8 +169,8 @@ func TestVM(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } @@ -215,8 +215,8 @@ func TestVM(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/wireguard_test.go b/integrationtests/wireguard_test.go index 05b89936..b03a1d5b 100644 --- a/integrationtests/wireguard_test.go +++ b/integrationtests/wireguard_test.go @@ -39,8 +39,8 @@ func TestWireguard(t *testing.T) { _, err = terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/integrationtests/zdb_test.go b/integrationtests/zdb_test.go index 3ae8c4e5..6c519082 100644 --- a/integrationtests/zdb_test.go +++ b/integrationtests/zdb_test.go @@ -25,7 +25,7 @@ func TestZdbs(t *testing.T) { - Destroy the deployment */ - if network, _ := os.LookupEnv("NETWORK"); network != "test" { + if network, _ := os.LookupEnv("NETWORK"); network == "test" { t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") return } @@ -41,8 +41,8 @@ func TestZdbs(t *testing.T) { _, err := terraform.InitAndApplyE(t, terraformOptions) if err != nil && - strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) && - strings.Contains(err.Error(), "error creating threefold plugin client") { + (strings.Contains(err.Error(), scheduler.NoNodesFoundErr.Error()) || + strings.Contains(err.Error(), "error creating threefold plugin client")) { t.Skip("couldn't find any available nodes") return } diff --git a/internal/provider/scheduler/scheduler.go b/internal/provider/scheduler/scheduler.go index 592b73d8..f847dfe3 100644 --- a/internal/provider/scheduler/scheduler.go +++ b/internal/provider/scheduler/scheduler.go @@ -137,11 +137,12 @@ func (n *Scheduler) addNodes(nodes []proxyTypes.Node) { // Schedule makes sure there's at least one node that satisfies the given request func (n *Scheduler) Schedule(ctx context.Context, r *Request) (uint32, error) { - if r.FarmId != 0 { - if n.hasFarmerBot(ctx, r.FarmId) { - return n.farmerBotSchedule(ctx, r) - } - } + // TODO: update farmerbot + // if r.FarmId != 0 { + // if n.hasFarmerBot(ctx, r.FarmId) { + // return n.farmerBotSchedule(ctx, r) + // } + // } return n.gridProxySchedule(ctx, r) } From 44ad5f53391687bd25bc564beb1cf8eb864776d3 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Mon, 1 Jul 2024 14:53:32 +0300 Subject: [PATCH 23/37] try splitting workflow for each network --- .github/workflows/terratest.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index e985eb4c..16f63d74 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -1,4 +1,5 @@ name: Intgeration tests +run-name: Intgeration tests on ${{ matrix.network }} on: schedule: From 89aa40dffb6a6e9091fb94beda4fc192767beab4 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Mon, 1 Jul 2024 15:11:29 +0300 Subject: [PATCH 24/37] remove splitting workflow for each network --- .github/workflows/terratest.yml | 1 - integrationtests/qsfs_test.go | 2 +- integrationtests/zdb_test.go | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 16f63d74..e985eb4c 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -1,5 +1,4 @@ name: Intgeration tests -run-name: Intgeration tests on ${{ matrix.network }} on: schedule: diff --git a/integrationtests/qsfs_test.go b/integrationtests/qsfs_test.go index b60d6814..404ede2b 100644 --- a/integrationtests/qsfs_test.go +++ b/integrationtests/qsfs_test.go @@ -13,7 +13,7 @@ import ( ) func TestQSFS(t *testing.T) { - if network, _ := os.LookupEnv("NETWORK"); network == "test" { + if network, _ := os.LookupEnv("NETWORK"); network == "test" || network == "main" { t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") return } diff --git a/integrationtests/zdb_test.go b/integrationtests/zdb_test.go index 6c519082..728e1f10 100644 --- a/integrationtests/zdb_test.go +++ b/integrationtests/zdb_test.go @@ -25,7 +25,7 @@ func TestZdbs(t *testing.T) { - Destroy the deployment */ - if network, _ := os.LookupEnv("NETWORK"); network == "test" { + if network, _ := os.LookupEnv("NETWORK"); network == "test" || network == "main" { t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") return } From b8ba9e35a279b451d3e9f4230084d477282170ba Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 2 Jul 2024 11:31:27 +0300 Subject: [PATCH 25/37] use latest version in singlenode example --- examples/resources/singlenode/main.tf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/resources/singlenode/main.tf b/examples/resources/singlenode/main.tf index 7f3a6a2a..cb2e075f 100644 --- a/examples/resources/singlenode/main.tf +++ b/examples/resources/singlenode/main.tf @@ -1,8 +1,7 @@ terraform { required_providers { grid = { - source = "threefoldtechdev.com/providers/grid" - version = "0.2" + source = "threefoldtech/grid" } } } From 57a7b09f299b88a1535ba33fd989bfa286fbd9ae Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 2 Jul 2024 13:52:17 +0300 Subject: [PATCH 26/37] update farmerbot with the new golang one --- internal/provider/resource_scheduler.go | 10 +- internal/provider/scheduler/farmer_bot.go | 141 +++++--------------- internal/provider/scheduler/request_test.go | 10 +- internal/provider/scheduler/scheduler.go | 22 +-- 4 files changed, 61 insertions(+), 122 deletions(-) diff --git a/internal/provider/resource_scheduler.go b/internal/provider/resource_scheduler.go index 8d6df191..449d9896 100644 --- a/internal/provider/resource_scheduler.go +++ b/internal/provider/resource_scheduler.go @@ -12,6 +12,7 @@ import ( "github.com/pkg/errors" "github.com/threefoldtech/terraform-provider-grid/internal/provider/scheduler" "github.com/threefoldtech/tfgrid-sdk-go/grid-client/deployer" + "github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go/peer" "github.com/threefoldtech/zos/pkg/gridtypes" ) @@ -132,7 +133,7 @@ func parseRequests(d *schema.ResourceData, assignment map[string]uint32) []sched reqs = append(reqs, scheduler.Request{ Name: mp["name"].(string), - FarmId: uint32(mp["farm_id"].(int)), + FarmID: uint32(mp["farm_id"].(int)), PublicConfig: mp["public_config"].(bool), PublicIpsCount: uint32(mp["public_ips_count"].(int)), Certified: mp["certified"].(bool), @@ -158,7 +159,12 @@ func schedule(ctx context.Context, d *schema.ResourceData, meta interface{}) dia assignment := parseAssignment(d) reqs := parseRequests(d, assignment) - scheduler := scheduler.NewScheduler(tfPluginClient.GridProxyClient, uint64(tfPluginClient.TwinID), tfPluginClient.RMB) + rpcClient, ok := tfPluginClient.RMB.(*peer.RpcClient) + if !ok { + return diag.FromErr(fmt.Errorf("failed to cast rmb client into rpc client")) + } + + scheduler := scheduler.NewScheduler(tfPluginClient.GridProxyClient, uint64(tfPluginClient.TwinID), rpcClient) if err := scheduler.ProcessRequests(ctx, reqs, assignment); err != nil { return diag.FromErr(err) } diff --git a/internal/provider/scheduler/farmer_bot.go b/internal/provider/scheduler/farmer_bot.go index 09eaf400..20966152 100644 --- a/internal/provider/scheduler/farmer_bot.go +++ b/internal/provider/scheduler/farmer_bot.go @@ -4,73 +4,26 @@ import ( "context" "fmt" "log" - "strconv" - "strings" - "time" - "github.com/google/uuid" "github.com/pkg/errors" ) const ( FarmerBotVersionAction = "farmerbot.farmmanager.version" FarmerBotFindNodeAction = "farmerbot.nodemanager.findnode" - FarmerBotRMBFunction = "execute_job" ) -type FarmerBotAction struct { - Guid string `json:"guid"` - TwinID uint32 `json:"twinid"` - Action string `json:"action"` - Args FarmerBotArgs `json:"args"` - Result FarmerBotArgs `json:"result"` - State string `json:"state"` - Start uint64 `json:"start"` - End uint64 `json:"end"` - GracePeriod uint32 `json:"grace_period"` - Error string `json:"error"` - Timeout uint32 `json:"timeout"` - SourceTwinID uint32 `json:"src_twinid"` - SourceAction string `json:"src_action"` - Dependencies []string `json:"dependencies"` -} - -type FarmerBotArgs struct { - Args []Args `json:"args"` - Params []Params `json:"params"` -} - -type Args struct { - RequiredHRU *uint64 `json:"required_hru,omitempty"` - RequiredSRU *uint64 `json:"required_sru,omitempty"` - RequiredCRU *uint64 `json:"required_cru,omitempty"` - RequiredMRU *uint64 `json:"required_mru,omitempty"` - NodeExclude []uint32 `json:"node_exclude,omitempty"` - Dedicated *bool `json:"dedicated,omitempty"` - PublicConfig *bool `json:"public_config,omitempty"` - PublicIPs *uint32 `json:"public_ips"` - Certified *bool `json:"certified,omitempty"` -} - -type Params struct { - Key string `json:"key"` - Value interface{} `json:"value"` -} - func (s *Scheduler) hasFarmerBot(ctx context.Context, farmID uint32) bool { - args := []Args{} - params := []Params{} - data := buildFarmerBotAction(farmID, uint32(s.twinID), args, params, FarmerBotVersionAction) - info, err := s.getFarmInfo(ctx, farmID) if err != nil { return false } dst := info.farmerTwinID - var output FarmerBotAction - err = s.rmbClient.Call(ctx, dst, FarmerBotRMBFunction, data, &output) + service := fmt.Sprintf("farmerbot-%d", farmID) + var version string + err = s.rmbClient.CallWithSession(ctx, info.farmerTwinID, &service, FarmerBotVersionAction, nil, &version) if err != nil { log.Printf("error while pinging farmerbot on farm %d with farmer twin %d. %s", farmID, dst, err.Error()) } @@ -79,94 +32,72 @@ func (s *Scheduler) hasFarmerBot(ctx context.Context, farmID uint32) bool { } func (n *Scheduler) farmerBotSchedule(ctx context.Context, r *Request) (uint32, error) { - info, err := n.getFarmInfo(ctx, r.FarmId) + info, err := n.getFarmInfo(ctx, r.FarmID) if err != nil { - return 0, errors.Wrapf(err, "failed to get farm %d info", r.FarmId) + return 0, errors.Wrapf(err, "failed to get farm %d info", r.FarmID) } - params := buildFarmerBotParams(r) - args := buildFarmerBotArgs(r) - data := buildFarmerBotAction(info.farmerTwinID, uint32(n.twinID), args, params, FarmerBotFindNodeAction) - output := FarmerBotAction{} - err = n.rmbClient.Call(ctx, info.farmerTwinID, FarmerBotRMBFunction, data, &output) - if err != nil { - return 0, err - } - if len(output.Result.Params) < 1 { - return 0, fmt.Errorf("cannot find an eligible node on farm %d", r.FarmId) - } - nodeId, err := strconv.ParseUint(output.Result.Params[0].Value.(string), 10, 32) - if err != nil { + data := buildNodeOptions(r) + var nodeID uint32 + + service := fmt.Sprintf("farmerbot-%d", r.FarmID) + if err := n.rmbClient.CallWithSession(ctx, info.farmerTwinID, &service, FarmerBotFindNodeAction, data, &nodeID); err != nil { return 0, err } - log.Printf("got a node with id %d", nodeId) - return uint32(nodeId), nil + + log.Printf("got a node with id %d", nodeID) + return nodeID, nil } -func buildFarmerBotArgs(r *Request) []Args { - return []Args{} +type NodeFilterOption struct { + NodesExcluded []uint32 `json:"nodes_excluded,omitempty"` + Certified bool `json:"certified,omitempty"` + Dedicated bool `json:"dedicated,omitempty"` + PublicConfig bool `json:"public_config,omitempty"` + PublicIPs uint64 `json:"public_ips,omitempty"` + HRU uint64 `json:"hru,omitempty"` // in GB + SRU uint64 `json:"sru,omitempty"` // in GB + CRU uint64 `json:"cru,omitempty"` + MRU uint64 `json:"mru,omitempty"` // in GB } -func buildFarmerBotParams(r *Request) []Params { - params := []Params{} + +func buildNodeOptions(r *Request) NodeFilterOption { + options := NodeFilterOption{} if r.Capacity.HRU != 0 { - params = append(params, Params{Key: "required_hru", Value: r.Capacity.HRU}) + options.HRU = r.Capacity.HRU } if r.Capacity.SRU != 0 { - params = append(params, Params{Key: "required_sru", Value: r.Capacity.SRU}) + options.SRU = r.Capacity.SRU } if r.Capacity.MRU != 0 { - params = append(params, Params{Key: "required_mru", Value: r.Capacity.MRU}) + options.MRU = r.Capacity.MRU } if r.Capacity.CRU != 0 { - params = append(params, Params{Key: "required_cru", Value: r.Capacity.CRU}) + options.CRU = r.Capacity.CRU } if len(r.NodeExclude) != 0 { - value := strings.Trim(strings.Join(strings.Fields(fmt.Sprint(r.NodeExclude)), ","), "") - params = append(params, Params{Key: "node_exclude", Value: value}) + options.NodesExcluded = append(options.NodesExcluded, r.NodeExclude...) } if r.Dedicated { - params = append(params, Params{Key: "dedicated", Value: r.Dedicated}) + options.Dedicated = r.Dedicated } if r.PublicConfig { - params = append(params, Params{Key: "public_config", Value: r.PublicConfig}) + options.PublicConfig = r.PublicConfig } if r.PublicIpsCount > 0 { - params = append(params, Params{Key: "public_ips", Value: r.PublicIpsCount}) + options.PublicIPs = uint64(r.PublicIpsCount) } if r.Certified { - params = append(params, Params{Key: "certified", Value: r.Certified}) + options.Certified = r.Certified } - return params -} -func buildFarmerBotAction(farmerTwinID uint32, sourceTwinID uint32, args []Args, params []Params, action string) FarmerBotAction { - return FarmerBotAction{ - Guid: uuid.NewString(), - TwinID: farmerTwinID, - Action: action, - Args: FarmerBotArgs{ - Args: args, - Params: params, - }, - Result: FarmerBotArgs{ - Args: []Args{}, - Params: []Params{}, - }, - State: "init", - Start: uint64(time.Now().Unix()), - End: 0, - GracePeriod: 0, - Error: "", - Timeout: 6000, - SourceTwinID: sourceTwinID, - Dependencies: []string{}, - } + return options } diff --git a/internal/provider/scheduler/request_test.go b/internal/provider/scheduler/request_test.go index dc631d7d..44c9e770 100644 --- a/internal/provider/scheduler/request_test.go +++ b/internal/provider/scheduler/request_test.go @@ -29,7 +29,7 @@ func TestFulfilsSuccess(t *testing.T) { SRU: 3, HRU: 3, }, - FarmId: 1, + FarmID: 1, PublicIpsCount: 1, PublicConfig: false, }, farm), true, "fullfil-success") @@ -53,7 +53,7 @@ func TestFulfilsFail(t *testing.T) { SRU: 3, HRU: 3, }, - FarmId: 1, + FarmID: 1, PublicIpsCount: 0, PublicConfig: false, } @@ -66,7 +66,7 @@ func TestFulfilsFail(t *testing.T) { "mru": func(r *Request) { r.Capacity.MRU = 4 }, "sru": func(r *Request) { r.Capacity.SRU = 9 }, "hru": func(r *Request) { r.Capacity.HRU = 4 }, - "farm_id": func(r *Request) { r.FarmId = 2 }, + "farm_id": func(r *Request) { r.FarmID = 2 }, "public_ips_count": func(r *Request) { r.PublicIpsCount = 3 }, "public_config": func(r *Request) { r.PublicConfig = true }, } @@ -86,7 +86,7 @@ func TestConstructFilter(t *testing.T) { HRU: 3, }, Name: "a", - FarmId: 1, + FarmID: 1, PublicIpsCount: 1, PublicConfig: false, Certified: true, @@ -99,7 +99,7 @@ func TestConstructFilter(t *testing.T) { assert.Equal(t, *con.FreeHRU, uint64(3), "construct-filter-hru") assert.Empty(t, con.Country, "construct-filter-country") assert.Empty(t, con.City, "construct-filter-city") - assert.Equal(t, con.FarmIDs, []uint64{uint64(r.FarmId)}, "construct-filter-farm-ids") + assert.Equal(t, con.FarmIDs, []uint64{uint64(r.FarmID)}, "construct-filter-farm-ids") assert.Equal(t, *con.FreeIPs, uint64(1), "construct-filter-free-ips") assert.Empty(t, con.IPv4, "construct-filter-ipv4") assert.Empty(t, con.IPv6, "construct-filter-ipv6") diff --git a/internal/provider/scheduler/scheduler.go b/internal/provider/scheduler/scheduler.go index f847dfe3..1c45e7a3 100644 --- a/internal/provider/scheduler/scheduler.go +++ b/internal/provider/scheduler/scheduler.go @@ -9,19 +9,22 @@ import ( "github.com/pkg/errors" proxy "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/client" proxyTypes "github.com/threefoldtech/tfgrid-sdk-go/grid-proxy/pkg/types" - "github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go" ) // NoNodesFoundErr for empty nodes returned from scheduler var NoNodesFoundErr = errors.New("couldn't find a node satisfying the given requirements") +type rmbClient interface { + CallWithSession(ctx context.Context, twin uint32, session *string, fn string, data interface{}, result interface{}) error +} + // Scheduler struct for scheduling type Scheduler struct { nodes map[uint32]nodeInfo farms map[uint32]farmInfo twinID uint64 gridProxyClient proxy.Client - rmbClient rmb.Client + rmbClient rmbClient } // nodeInfo related to scheduling @@ -45,7 +48,7 @@ func (node *nodeInfo) fulfils(r *Request, farm farmInfo) bool { if r.Capacity.MRU > node.FreeCapacity.MRU || r.Capacity.HRU > node.FreeCapacity.HRU || r.Capacity.SRU > node.FreeCapacity.SRU || - (r.FarmId != 0 && node.Node.FarmID != int(r.FarmId)) || + (r.FarmID != 0 && node.Node.FarmID != int(r.FarmID)) || (r.PublicConfig && node.Node.PublicConfig.Domain == "") || (r.PublicIpsCount > uint32(farm.freeIPs)) || (r.Dedicated && !node.Node.Dedicated) || @@ -57,7 +60,7 @@ func (node *nodeInfo) fulfils(r *Request, farm farmInfo) bool { } // NewScheduler generates a new scheduler -func NewScheduler(gridProxyClient proxy.Client, twinID uint64, rmbClient rmb.Client) Scheduler { +func NewScheduler(gridProxyClient proxy.Client, twinID uint64, rmbClient rmbClient) Scheduler { return Scheduler{ nodes: map[uint32]nodeInfo{}, gridProxyClient: gridProxyClient, @@ -137,12 +140,11 @@ func (n *Scheduler) addNodes(nodes []proxyTypes.Node) { // Schedule makes sure there's at least one node that satisfies the given request func (n *Scheduler) Schedule(ctx context.Context, r *Request) (uint32, error) { - // TODO: update farmerbot - // if r.FarmId != 0 { - // if n.hasFarmerBot(ctx, r.FarmId) { - // return n.farmerBotSchedule(ctx, r) - // } - // } + if r.FarmID != 0 { + if n.hasFarmerBot(ctx, r.FarmID) { + return n.farmerBotSchedule(ctx, r) + } + } return n.gridProxySchedule(ctx, r) } From a4c3a501006672ca443380aadcc35371785e26ff Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 2 Jul 2024 13:52:34 +0300 Subject: [PATCH 27/37] fix tests --- internal/provider/scheduler/scheduler_test.go | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/internal/provider/scheduler/scheduler_test.go b/internal/provider/scheduler/scheduler_test.go index c4b50920..717aa76d 100644 --- a/internal/provider/scheduler/scheduler_test.go +++ b/internal/provider/scheduler/scheduler_test.go @@ -3,7 +3,6 @@ package scheduler import ( "context" "fmt" - "strconv" "testing" "github.com/pkg/errors" @@ -21,9 +20,8 @@ type RMBClientMock struct { hasFarmerBot bool } -func (r *RMBClientMock) Call(ctx context.Context, twin uint32, fn string, data interface{}, result interface{}) error { - d := data.(FarmerBotAction) - switch d.Action { +func (r *RMBClientMock) CallWithSession(ctx context.Context, twin uint32, session *string, fn string, data interface{}, result interface{}) error { + switch fn { case FarmerBotVersionAction: if r.hasFarmerBot { return nil @@ -31,15 +29,13 @@ func (r *RMBClientMock) Call(ctx context.Context, twin uint32, fn string, data i return errors.New("this farm does not have a farmer bot") case FarmerBotFindNodeAction: if r.nodeID == 0 { - d.Error = "could not find node" - return nil + return fmt.Errorf("could not find node") } - output := result.(*FarmerBotAction) - - output.Result.Params = append(output.Args.Params, Params{Key: "nodeid", Value: strconv.FormatUint(uint64(r.nodeID), 10)}) + output := result.(*uint32) + *output = r.nodeID return nil default: - return fmt.Errorf("fn: %s not supported", d.Action) + return fmt.Errorf("fn: %s not supported", fn) } } @@ -126,7 +122,7 @@ func TestSchedulerEmpty(t *testing.T) { }, PublicIpsCount: 1, Name: "req", - FarmId: 10, + FarmID: 10, PublicConfig: true, Certified: false, Dedicated: false, @@ -177,7 +173,7 @@ func TestSchedulerSuccess(t *testing.T) { MRU: 11, }, Name: "req", - FarmId: 1, + FarmID: 1, PublicConfig: true, PublicIpsCount: 1, Certified: false, @@ -232,7 +228,7 @@ func TestSchedulerSuccessOn4thPage(t *testing.T) { }, PublicConfig: true, Name: "req", - FarmId: 1, + FarmID: 1, PublicIpsCount: 1, Certified: false, }) @@ -293,6 +289,7 @@ func TestSchedulerFailure(t *testing.T) { assert.Error(t, err, fmt.Sprintf("scheduler-failure-%s", key)) } } + func TestSchedulerFailureAfterSuccess(t *testing.T) { proxy := &GridProxyClientMock{} rmbClient := &RMBClientMock{ @@ -335,7 +332,7 @@ func TestSchedulerFailureAfterSuccess(t *testing.T) { }, PublicIpsCount: 1, Name: "req", - FarmId: 1, + FarmID: 1, PublicConfig: true, Certified: false, }) @@ -350,7 +347,7 @@ func TestSchedulerFailureAfterSuccess(t *testing.T) { }, PublicIpsCount: 1, Name: "req", - FarmId: 1, + FarmID: 1, PublicConfig: true, Certified: false, }) @@ -400,7 +397,7 @@ func TestSchedulerSuccessAfterSuccess(t *testing.T) { }, PublicIpsCount: 1, Name: "req", - FarmId: 1, + FarmID: 1, PublicConfig: true, Certified: false, }) @@ -415,7 +412,7 @@ func TestSchedulerSuccessAfterSuccess(t *testing.T) { }, PublicIpsCount: 1, Name: "req", - FarmId: 1, + FarmID: 1, PublicConfig: true, Certified: false, }) From b7078f79b7719a479cb215c6aa06bee6dba0adb7 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 2 Jul 2024 13:52:50 +0300 Subject: [PATCH 28/37] add health check to scheduler --- internal/provider/scheduler/request.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/provider/scheduler/request.go b/internal/provider/scheduler/request.go index 3b7113e8..a03bdf87 100644 --- a/internal/provider/scheduler/request.go +++ b/internal/provider/scheduler/request.go @@ -14,7 +14,7 @@ var ( type Request struct { Capacity Capacity Name string - FarmId uint32 + FarmID uint32 PublicConfig bool PublicIpsCount uint32 Certified bool @@ -28,8 +28,9 @@ func (r *Request) constructFilter(twinID uint64) (f proxyTypes.NodeFilter) { // grid proxy should support filtering a node by certification type. f.Status = []string{statusUP} f.AvailableFor = &twinID - if r.FarmId != 0 { - f.FarmIDs = []uint64{uint64(r.FarmId)} + f.Healthy = &trueVal + if r.FarmID != 0 { + f.FarmIDs = []uint64{uint64(r.FarmID)} } if r.Capacity.HRU != 0 { f.FreeHRU = &r.Capacity.HRU From 5f4abccc2c242a4ab078cc63a4c412e25a0f0483 Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 2 Jul 2024 14:59:55 +0300 Subject: [PATCH 29/37] fix units in farmerbot --- internal/provider/scheduler/farmer_bot.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/provider/scheduler/farmer_bot.go b/internal/provider/scheduler/farmer_bot.go index 20966152..b1c3b5fe 100644 --- a/internal/provider/scheduler/farmer_bot.go +++ b/internal/provider/scheduler/farmer_bot.go @@ -64,15 +64,15 @@ type NodeFilterOption struct { func buildNodeOptions(r *Request) NodeFilterOption { options := NodeFilterOption{} if r.Capacity.HRU != 0 { - options.HRU = r.Capacity.HRU + options.HRU = r.Capacity.HRU / (1024 * 1024 * 1024) } if r.Capacity.SRU != 0 { - options.SRU = r.Capacity.SRU + options.SRU = r.Capacity.SRU / (1024 * 1024 * 1024) } if r.Capacity.MRU != 0 { - options.MRU = r.Capacity.MRU + options.MRU = r.Capacity.MRU / (1024 * 1024 * 1024) } if r.Capacity.CRU != 0 { From 6a4d0072cf24ef2c022d411c6de2f9b16ab8fa7d Mon Sep 17 00:00:00 2001 From: rawdaGastan Date: Tue, 2 Jul 2024 16:28:38 +0300 Subject: [PATCH 30/37] set timeout to farmerbot rmb calls --- internal/provider/scheduler/farmer_bot.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/internal/provider/scheduler/farmer_bot.go b/internal/provider/scheduler/farmer_bot.go index b1c3b5fe..2d8ce59c 100644 --- a/internal/provider/scheduler/farmer_bot.go +++ b/internal/provider/scheduler/farmer_bot.go @@ -9,11 +9,15 @@ import ( ) const ( + rmbTimeout = 40 FarmerBotVersionAction = "farmerbot.farmmanager.version" FarmerBotFindNodeAction = "farmerbot.nodemanager.findnode" ) func (s *Scheduler) hasFarmerBot(ctx context.Context, farmID uint32) bool { + ctx, cancel := context.WithTimeout(ctx, rmbTimeout) + defer cancel() + info, err := s.getFarmInfo(ctx, farmID) if err != nil { return false @@ -32,6 +36,9 @@ func (s *Scheduler) hasFarmerBot(ctx context.Context, farmID uint32) bool { } func (n *Scheduler) farmerBotSchedule(ctx context.Context, r *Request) (uint32, error) { + ctx, cancel := context.WithTimeout(ctx, rmbTimeout) + defer cancel() + info, err := n.getFarmInfo(ctx, r.FarmID) if err != nil { return 0, errors.Wrapf(err, "failed to get farm %d info", r.FarmID) From e37ef19bdc86dc9914a27e26228c9d77deec4983 Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Tue, 2 Jul 2024 15:30:48 +0300 Subject: [PATCH 31/37] fix k8s using module test --- .github/workflows/terratest.yml | 164 +++++++++--------- integrationtests/k8s/main.tf | 4 +- integrationtests/k8s_using_module/main.tf | 4 +- ...ing_module.go => k8s_using_module_test.go} | 10 +- modules/k8s-module/validator/main.tf | 2 +- modules/k8s-module/variables.tf | 4 +- 6 files changed, 95 insertions(+), 93 deletions(-) rename integrationtests/{k8s_using_module.go => k8s_using_module_test.go} (93%) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index e985eb4c..09f83ea6 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -1,12 +1,12 @@ name: Intgeration tests on: - schedule: - - cron: "0 0 * * *" + # schedule: + # - cron: "0 0 * * *" workflow_dispatch: push: - tags: - - "v*" + # tags: + # - "v*" jobs: go-tests: @@ -50,89 +50,89 @@ jobs: mkdir -p ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ go build -o terraform-provider-grid mv terraform-provider-grid ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ - - name: Test virtual machines - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestVM - + # - name: Test virtual machines + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestVM + # - name: Test kubernetes env: MNEMONICS: ${{ secrets.MNEMONICS }} NETWORK: ${{ matrix.network }} working-directory: integrationtests run: | - go test -v ./... --tags=integration -run TestK8s + # go test -v ./... --tags=integration -run TestK8s go test -v ./... --tags=integration -run TestModuleK8s - - name: Test Gateways - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestGatewayDeployments - - - name: Test private gateways - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestGatewayPrivate - - - name: Test wireguard - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestWireguard - - - name: Test ZDBs - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestZdbs - - - name: Test QSFS - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestQSFS - - - name: Test peertube - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestPeertube - - - name: Test presearch - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestPresearch - - - name: Test taiga - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestTaiga - - - name: Test mattermost - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestMattermost - - - name: Test nomad - env: - MNEMONICS: ${{ secrets.MNEMONICS }} - NETWORK: ${{ matrix.network }} - working-directory: integrationtests - run: go test -v ./... --tags=integration -run TestNomad - + # - name: Test Gateways + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestGatewayDeployments + # + # - name: Test private gateways + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestGatewayPrivate + # + # - name: Test wireguard + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestWireguard + # + # - name: Test ZDBs + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestZdbs + # + # - name: Test QSFS + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestQSFS + # + # - name: Test peertube + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestPeertube + # + # - name: Test presearch + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestPresearch + # + # - name: Test taiga + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestTaiga + # + # - name: Test mattermost + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestMattermost + # + # - name: Test nomad + # env: + # MNEMONICS: ${{ secrets.MNEMONICS }} + # NETWORK: ${{ matrix.network }} + # working-directory: integrationtests + # run: go test -v ./... --tags=integration -run TestNomad + # diff --git a/integrationtests/k8s/main.tf b/integrationtests/k8s/main.tf index 2902d63c..9c83643f 100644 --- a/integrationtests/k8s/main.tf +++ b/integrationtests/k8s/main.tf @@ -78,7 +78,7 @@ resource "grid_kubernetes" "k8s1" { } output "mr_ygg_ip" { - value = grid_kubernetes.k8s1.master[0].planetary_ip + value = grid_kubernetes.k8s1.master[0] } output "wg_config" { @@ -86,5 +86,5 @@ output "wg_config" { } output "worker_ygg_ip" { - value = grid_kubernetes.k8s1.workers[0].planetary_ip + value = grid_kubernetes.k8s1.workers[0] } diff --git a/integrationtests/k8s_using_module/main.tf b/integrationtests/k8s_using_module/main.tf index c0541e31..d36e504f 100644 --- a/integrationtests/k8s_using_module/main.tf +++ b/integrationtests/k8s_using_module/main.tf @@ -1,5 +1,5 @@ module "kubernetes" { - source = "github.com/threefoldtech/terraform-provider-grid/modules/k8s-module" + source = "../../modules/k8s-module" token = local.token network = local.network master = var.master @@ -64,5 +64,5 @@ locals { } output "mr_ygg_ip" { - value = module.kubernetes.master.planetary_ip + value = module.kubernetes.master } diff --git a/integrationtests/k8s_using_module.go b/integrationtests/k8s_using_module_test.go similarity index 93% rename from integrationtests/k8s_using_module.go rename to integrationtests/k8s_using_module_test.go index 51068123..33c30367 100644 --- a/integrationtests/k8s_using_module.go +++ b/integrationtests/k8s_using_module_test.go @@ -22,7 +22,7 @@ func TestModuleK8s(t *testing.T) { */ - t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") + // t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") publicKey, privateKey, err := GenerateSSHKeyPair() if err != nil { @@ -41,6 +41,8 @@ func TestModuleK8s(t *testing.T) { FreeMRU: &freeMRU, FreeSRU: &freeSRU, TotalCRU: &freeCRU, + Excluded: []uint64{146, 150, 153, 151}, + FarmIDs: []uint64{1}, } nodes, err := deployer.FilterNodes(context.Background(), tfPlugin, f, []uint64{freeSRU}, []uint64{}, []uint64{}, 3) @@ -57,9 +59,9 @@ func TestModuleK8s(t *testing.T) { TerraformDir: "./k8s_using_module", Vars: map[string]interface{}{ "ssh": publicKey, - "network_nodes": []int{12, masterNode}, + "network_nodes": []int{masterNode}, "master": map[string]interface{}{ - "name": "mr", + "name": "master", "node": masterNode, "cpu": 1, "memory": 1024, @@ -70,7 +72,7 @@ func TestModuleK8s(t *testing.T) { }, "workers": []map[string]interface{}{ { - "name": "w0", + "name": "worker0", "node": worker0Node, "cpu": 1, "memory": 1024, diff --git a/modules/k8s-module/validator/main.tf b/modules/k8s-module/validator/main.tf index 020ed26b..7ccc4d3b 100644 --- a/modules/k8s-module/validator/main.tf +++ b/modules/k8s-module/validator/main.tf @@ -2,6 +2,6 @@ variable "names" { type = list(any) validation { condition = length(var.names) == length(distinct(var.names)) - error_message = "Master and workers names ${var.names} must be distinct" + error_message = "Master and workers names must be distinct" } } diff --git a/modules/k8s-module/variables.tf b/modules/k8s-module/variables.tf index 11dc6024..c09c97bb 100644 --- a/modules/k8s-module/variables.tf +++ b/modules/k8s-module/variables.tf @@ -30,7 +30,7 @@ variable "master" { validation { condition = var.master.memory >= 1024 - error_message = "Memory must be at least 1GB not ${var.master.memory}MB" + error_message = "Memory must be at least 1GB" } } @@ -50,7 +50,7 @@ variable "workers" { condition = ([ for w in var.workers : true if w.memory >= 1024 ]) != length(var.workers) - error_message = "Memory must be at least 1GB not ${var.master.memory}MB" + error_message = "Memory must be at least 1GB" } } From a7dceed9365d817fcb3a1e9c460561c7312c7297 Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Tue, 2 Jul 2024 17:02:18 +0300 Subject: [PATCH 32/37] skip k8s test if no enough nodes --- integrationtests/k8s/main.tf | 4 ++-- integrationtests/k8s_test.go | 4 +++- integrationtests/k8s_using_module/main.tf | 2 +- integrationtests/k8s_using_module_test.go | 17 ++++++++--------- integrationtests/remoterun.go | 6 +----- 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/integrationtests/k8s/main.tf b/integrationtests/k8s/main.tf index 9c83643f..2902d63c 100644 --- a/integrationtests/k8s/main.tf +++ b/integrationtests/k8s/main.tf @@ -78,7 +78,7 @@ resource "grid_kubernetes" "k8s1" { } output "mr_ygg_ip" { - value = grid_kubernetes.k8s1.master[0] + value = grid_kubernetes.k8s1.master[0].planetary_ip } output "wg_config" { @@ -86,5 +86,5 @@ output "wg_config" { } output "worker_ygg_ip" { - value = grid_kubernetes.k8s1.workers[0] + value = grid_kubernetes.k8s1.workers[0].planetary_ip } diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index d473abc9..4b23a14b 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -1,6 +1,7 @@ package integrationtests import ( + "fmt" "strings" "testing" "time" @@ -21,10 +22,11 @@ func RequireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, pri output, err := RemoteRun("root", masterYggIP, "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl get node", privateKey) output = strings.TrimSpace(output) - require.Empty(t, err) + require.NoError(t, err) nodesNumber := 2 numberOfReadyNodes := strings.Count(output, "Ready") + fmt.Println(output) require.True(t, numberOfReadyNodes == nodesNumber, "number of ready nodes is not equal to number of nodes only %d nodes are ready", numberOfReadyNodes) } diff --git a/integrationtests/k8s_using_module/main.tf b/integrationtests/k8s_using_module/main.tf index d36e504f..8f425ae5 100644 --- a/integrationtests/k8s_using_module/main.tf +++ b/integrationtests/k8s_using_module/main.tf @@ -64,5 +64,5 @@ locals { } output "mr_ygg_ip" { - value = module.kubernetes.master + value = module.kubernetes.master.planetary_ip } diff --git a/integrationtests/k8s_using_module_test.go b/integrationtests/k8s_using_module_test.go index 33c30367..e46a4d35 100644 --- a/integrationtests/k8s_using_module_test.go +++ b/integrationtests/k8s_using_module_test.go @@ -41,15 +41,13 @@ func TestModuleK8s(t *testing.T) { FreeMRU: &freeMRU, FreeSRU: &freeSRU, TotalCRU: &freeCRU, - Excluded: []uint64{146, 150, 153, 151}, - FarmIDs: []uint64{1}, } - nodes, err := deployer.FilterNodes(context.Background(), tfPlugin, f, []uint64{freeSRU}, []uint64{}, []uint64{}, 3) - if err != nil || len(nodes) != 3 { - t.Fatal("grid proxy could not find nodes with suitable resources") - } + nodes, err := deployer.FilterNodes(context.Background(), tfPlugin, f, []uint64{freeSRU}, []uint64{}, []uint64{}) require.NoError(t, err) + if len(nodes) < 3 { + t.Skip("couldn't find enough nodes") + } masterNode := nodes[0].NodeID worker0Node := nodes[1].NodeID @@ -59,9 +57,9 @@ func TestModuleK8s(t *testing.T) { TerraformDir: "./k8s_using_module", Vars: map[string]interface{}{ "ssh": publicKey, - "network_nodes": []int{masterNode}, + "network_nodes": []int{masterNode, worker0Node, worker1Node}, "master": map[string]interface{}{ - "name": "master", + "name": "mr", "node": masterNode, "cpu": 1, "memory": 1024, @@ -72,7 +70,7 @@ func TestModuleK8s(t *testing.T) { }, "workers": []map[string]interface{}{ { - "name": "worker0", + "name": "w0", "node": worker0Node, "cpu": 1, "memory": 1024, @@ -127,6 +125,7 @@ func TestModuleK8s(t *testing.T) { "planetary": true, }, } + terraformOptions.Vars["disks"] = []map[string]interface{}{ { "name": "mrdisk", diff --git a/integrationtests/remoterun.go b/integrationtests/remoterun.go index 46d3db41..d98ab5cc 100644 --- a/integrationtests/remoterun.go +++ b/integrationtests/remoterun.go @@ -1,6 +1,3 @@ -//go:build integration -// +build integration - // Package integrationtests includes integration tests for deploying solutions on the tf grid, and some utilities to test these solutions. package integrationtests @@ -25,7 +22,7 @@ func setup() (deployer.TFPluginClient, error) { network = "dev" } - return deployer.NewTFPluginClient(mnemonics, deployer.WithNetwork(network), deployer.WithLogs()) + return deployer.NewTFPluginClient(mnemonics, deployer.WithNetwork(network), deployer.WithLogs(), deployer.WithRMBTimeout(60)) } // RemoteRun used for running cmd remotely using ssh @@ -65,7 +62,6 @@ func RemoteRun(user string, addr string, cmd string, privateKey string) (string, // GenerateSSHKeyPair creats the public and private key for the machine func GenerateSSHKeyPair() (string, string, error) { - rsaKey, err := rsa.GenerateKey(rand.Reader, 1024) if err != nil { return "", "", errors.Wrapf(err, "could not generate rsa key") From e4bdc03b0fea76acc239f91e5d223329f70bb4d6 Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Thu, 4 Jul 2024 16:11:02 +0300 Subject: [PATCH 33/37] update RequiredNodesAreReady to get nodesNumber as argument --- integrationtests/k8s_test.go | 5 ++--- integrationtests/k8s_using_module_test.go | 5 +++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index 4b23a14b..1750d60a 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -12,7 +12,7 @@ import ( ) // RequireNodesAreReady runs `kubectl get node` on the master node and requires that all nodes are ready -func RequireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, privateKey string) { +func RequireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, privateKey string, nodesNumber int) { t.Helper() masterYggIP := terraform.Output(t, terraformOptions, "mr_ygg_ip") @@ -24,7 +24,6 @@ func RequireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, pri output = strings.TrimSpace(output) require.NoError(t, err) - nodesNumber := 2 numberOfReadyNodes := strings.Count(output, "Ready") fmt.Println(output) require.True(t, numberOfReadyNodes == nodesNumber, "number of ready nodes is not equal to number of nodes only %d nodes are ready", numberOfReadyNodes) @@ -84,7 +83,7 @@ func TestK8s(t *testing.T) { require.True(t, ok) // ssh to master node - RequireNodesAreReady(t, terraformOptions, privateKey) + RequireNodesAreReady(t, terraformOptions, privateKey, 2) }) t.Run("k8s_invalid_names", func(t *testing.T) { diff --git a/integrationtests/k8s_using_module_test.go b/integrationtests/k8s_using_module_test.go index e46a4d35..c3879176 100644 --- a/integrationtests/k8s_using_module_test.go +++ b/integrationtests/k8s_using_module_test.go @@ -41,6 +41,7 @@ func TestModuleK8s(t *testing.T) { FreeMRU: &freeMRU, FreeSRU: &freeSRU, TotalCRU: &freeCRU, + FarmIDs: []uint64{1}, } nodes, err := deployer.FilterNodes(context.Background(), tfPlugin, f, []uint64{freeSRU}, []uint64{}, []uint64{}) @@ -101,7 +102,7 @@ func TestModuleK8s(t *testing.T) { require.NoError(t, err) defer terraform.Destroy(t, terraformOptions) - RequireNodesAreReady(t, terraformOptions, privateKey) + RequireNodesAreReady(t, terraformOptions, privateKey, 2) terraformOptions.Vars["workers"] = []map[string]interface{}{ { @@ -149,5 +150,5 @@ func TestModuleK8s(t *testing.T) { _, err = terraform.ApplyE(t, terraformOptions) require.NoError(t, err) - RequireNodesAreReady(t, terraformOptions, privateKey) + RequireNodesAreReady(t, terraformOptions, privateKey, 3) } From 28a55f2a37148192f57a3cb578bca01fc0a8217b Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Sun, 7 Jul 2024 08:45:42 +0300 Subject: [PATCH 34/37] revery workflow after fixing tests is compleated --- .github/workflows/terratest.yml | 164 +++++++++++----------- integrationtests/k8s_test.go | 2 - integrationtests/k8s_using_module/main.tf | 2 +- integrationtests/remoterun.go | 5 +- 4 files changed, 87 insertions(+), 86 deletions(-) diff --git a/.github/workflows/terratest.yml b/.github/workflows/terratest.yml index 09f83ea6..e985eb4c 100644 --- a/.github/workflows/terratest.yml +++ b/.github/workflows/terratest.yml @@ -1,12 +1,12 @@ name: Intgeration tests on: - # schedule: - # - cron: "0 0 * * *" + schedule: + - cron: "0 0 * * *" workflow_dispatch: push: - # tags: - # - "v*" + tags: + - "v*" jobs: go-tests: @@ -50,89 +50,89 @@ jobs: mkdir -p ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ go build -o terraform-provider-grid mv terraform-provider-grid ~/.terraform.d/plugins/threefoldtechdev.com/providers/grid/0.2/linux_amd64/ - # - name: Test virtual machines - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestVM - # + - name: Test virtual machines + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestVM + - name: Test kubernetes env: MNEMONICS: ${{ secrets.MNEMONICS }} NETWORK: ${{ matrix.network }} working-directory: integrationtests run: | - # go test -v ./... --tags=integration -run TestK8s + go test -v ./... --tags=integration -run TestK8s go test -v ./... --tags=integration -run TestModuleK8s - # - name: Test Gateways - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestGatewayDeployments - # - # - name: Test private gateways - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestGatewayPrivate - # - # - name: Test wireguard - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestWireguard - # - # - name: Test ZDBs - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestZdbs - # - # - name: Test QSFS - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestQSFS - # - # - name: Test peertube - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestPeertube - # - # - name: Test presearch - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestPresearch - # - # - name: Test taiga - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestTaiga - # - # - name: Test mattermost - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestMattermost - # - # - name: Test nomad - # env: - # MNEMONICS: ${{ secrets.MNEMONICS }} - # NETWORK: ${{ matrix.network }} - # working-directory: integrationtests - # run: go test -v ./... --tags=integration -run TestNomad - # + - name: Test Gateways + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestGatewayDeployments + + - name: Test private gateways + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestGatewayPrivate + + - name: Test wireguard + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestWireguard + + - name: Test ZDBs + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestZdbs + + - name: Test QSFS + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestQSFS + + - name: Test peertube + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestPeertube + + - name: Test presearch + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestPresearch + + - name: Test taiga + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestTaiga + + - name: Test mattermost + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestMattermost + + - name: Test nomad + env: + MNEMONICS: ${{ secrets.MNEMONICS }} + NETWORK: ${{ matrix.network }} + working-directory: integrationtests + run: go test -v ./... --tags=integration -run TestNomad + diff --git a/integrationtests/k8s_test.go b/integrationtests/k8s_test.go index 1750d60a..df59d35a 100644 --- a/integrationtests/k8s_test.go +++ b/integrationtests/k8s_test.go @@ -1,7 +1,6 @@ package integrationtests import ( - "fmt" "strings" "testing" "time" @@ -25,7 +24,6 @@ func RequireNodesAreReady(t *testing.T, terraformOptions *terraform.Options, pri require.NoError(t, err) numberOfReadyNodes := strings.Count(output, "Ready") - fmt.Println(output) require.True(t, numberOfReadyNodes == nodesNumber, "number of ready nodes is not equal to number of nodes only %d nodes are ready", numberOfReadyNodes) } diff --git a/integrationtests/k8s_using_module/main.tf b/integrationtests/k8s_using_module/main.tf index 8f425ae5..c0541e31 100644 --- a/integrationtests/k8s_using_module/main.tf +++ b/integrationtests/k8s_using_module/main.tf @@ -1,5 +1,5 @@ module "kubernetes" { - source = "../../modules/k8s-module" + source = "github.com/threefoldtech/terraform-provider-grid/modules/k8s-module" token = local.token network = local.network master = var.master diff --git a/integrationtests/remoterun.go b/integrationtests/remoterun.go index d98ab5cc..f627a0d8 100644 --- a/integrationtests/remoterun.go +++ b/integrationtests/remoterun.go @@ -1,3 +1,6 @@ +//go:build integration +// +build integration + // Package integrationtests includes integration tests for deploying solutions on the tf grid, and some utilities to test these solutions. package integrationtests @@ -22,7 +25,7 @@ func setup() (deployer.TFPluginClient, error) { network = "dev" } - return deployer.NewTFPluginClient(mnemonics, deployer.WithNetwork(network), deployer.WithLogs(), deployer.WithRMBTimeout(60)) + return deployer.NewTFPluginClient(mnemonics, deployer.WithNetwork(network), deployer.WithLogs()) } // RemoteRun used for running cmd remotely using ssh From fb90e9978644bd11c1f519edd0524ba7d36fe6cd Mon Sep 17 00:00:00 2001 From: Eslam-Nawara Date: Sun, 7 Jul 2024 10:44:57 +0300 Subject: [PATCH 35/37] remove skip test --- integrationtests/k8s_using_module_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/integrationtests/k8s_using_module_test.go b/integrationtests/k8s_using_module_test.go index c3879176..63d03695 100644 --- a/integrationtests/k8s_using_module_test.go +++ b/integrationtests/k8s_using_module_test.go @@ -22,8 +22,6 @@ func TestModuleK8s(t *testing.T) { */ - // t.Skip("https://github.com/threefoldtech/terraform-provider-grid/issues/770") - publicKey, privateKey, err := GenerateSSHKeyPair() if err != nil { t.Fatalf("failed to generate ssh key pair: %s", err.Error()) From 60ee455b75acfc66b73677d1808a2733003016ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 05:17:14 +0000 Subject: [PATCH 36/37] Bump golang.org/x/crypto from 0.24.0 to 0.25.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.24.0 to 0.25.0. - [Commits](https://github.com/golang/crypto/compare/v0.24.0...v0.25.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 03d433a1..4f1290b6 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/threefoldtech/tfgrid-sdk-go/grid-proxy v0.15.11 github.com/threefoldtech/tfgrid-sdk-go/rmb-sdk-go v0.15.11 github.com/threefoldtech/zos v0.5.6-0.20240611092312-66184cdeb953 - golang.org/x/crypto v0.24.0 + golang.org/x/crypto v0.25.0 golang.org/x/sync v0.7.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20210803171230-4253848d036c ) @@ -139,7 +139,7 @@ require ( golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.25.0 // indirect golang.org/x/oauth2 v0.17.0 // indirect - golang.org/x/sys v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect diff --git a/go.sum b/go.sum index 40cd4116..007103f3 100644 --- a/go.sum +++ b/go.sum @@ -755,8 +755,8 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= 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.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -987,15 +987,15 @@ golang.org/x/sys v0.1.0/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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= From 1cca3d9ea4d9cf9e7e400393d0fcfbb4a5368db3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 05:13:31 +0000 Subject: [PATCH 37/37] Bump github.com/gruntwork-io/terratest from 0.46.16 to 0.47.0 Bumps [github.com/gruntwork-io/terratest](https://github.com/gruntwork-io/terratest) from 0.46.16 to 0.47.0. - [Release notes](https://github.com/gruntwork-io/terratest/releases) - [Commits](https://github.com/gruntwork-io/terratest/compare/v0.46.16...v0.47.0) --- updated-dependencies: - dependency-name: github.com/gruntwork-io/terratest dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 03d433a1..9ed88c8c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21 require ( github.com/go-redis/redis v6.15.9+incompatible github.com/google/uuid v1.6.0 - github.com/gruntwork-io/terratest v0.46.16 + github.com/gruntwork-io/terratest v0.47.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/terraform-plugin-docs v0.19.4 github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 diff --git a/go.sum b/go.sum index 40cd4116..c56b563c 100644 --- a/go.sum +++ b/go.sum @@ -447,8 +447,8 @@ github.com/gorilla/schema v1.3.0/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4F github.com/gorilla/websocket v1.5.2 h1:qoW6V1GT3aZxybsbC6oLnailWnB+qTMVwMreOso9XUw= github.com/gorilla/websocket v1.5.2/go.mod h1:0n9H61RBAcf5/38py2MCYbxzPIY9rOkpvvMT24Rqs30= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gruntwork-io/terratest v0.46.16 h1:l+HHuU7lNLwoAl2sP8zkYJy0uoE2Mwha2nw+rim+OhQ= -github.com/gruntwork-io/terratest v0.46.16/go.mod h1:oywHw1cFKXSYvKPm27U7quZVzDUlA22H2xUrKCe26xM= +github.com/gruntwork-io/terratest v0.47.0 h1:xIy1pT7NbGVlMLDZEHl3+3iSnvffh8tN2pL6idn448c= +github.com/gruntwork-io/terratest v0.47.0/go.mod h1:oywHw1cFKXSYvKPm27U7quZVzDUlA22H2xUrKCe26xM= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc=