From df2d723c39eef51f18901c03d168ae1a0c441386 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 25 Sep 2024 16:25:25 +0200 Subject: [PATCH 01/17] Upgrade Go dependencies --- test/go.mod | 90 ++++++++++++++++++++++++++------------------------- test/go.sum | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 44 deletions(-) diff --git a/test/go.mod b/test/go.mod index f170cae..79bf633 100644 --- a/test/go.mod +++ b/test/go.mod @@ -1,77 +1,79 @@ module gihub.exasol.com/terraform-aws-exasol/test -go 1.21 +go 1.23.0 require ( - github.com/exasol/exasol-driver-go v1.0.4 - github.com/gruntwork-io/terratest v0.46.11 - github.com/sethvargo/go-password v0.2.0 + github.com/exasol/exasol-driver-go v1.0.10 + github.com/gruntwork-io/terratest v0.47.1 + github.com/sethvargo/go-password v0.3.1 ) require ( - cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/compute v1.25.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/storage v1.39.0 // indirect + cloud.google.com/go v0.115.1 // indirect + cloud.google.com/go/auth v0.9.4 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect + cloud.google.com/go/compute v1.28.1 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + cloud.google.com/go/iam v1.2.1 // indirect + cloud.google.com/go/storage v1.43.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect - github.com/aws/aws-sdk-go v1.50.34 // indirect + github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/exasol/error-reporting-go v0.2.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/s2a-go v0.1.7 // indirect + github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.2 // indirect - github.com/gorilla/websocket v1.5.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.3 // indirect + github.com/hashicorp/go-getter v1.7.6 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl/v2 v2.20.0 // indirect - github.com/hashicorp/terraform-json v0.21.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/hcl/v2 v2.22.0 // indirect + github.com/hashicorp/terraform-json v0.22.1 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect - github.com/mattn/go-zglob v0.0.4 // indirect + github.com/klauspost/compress v1.17.10 // indirect + github.com/mattn/go-zglob v0.0.6 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/stretchr/testify v1.9.0 // indirect - github.com/tmccombs/hcl2json v0.6.1 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect - github.com/zclconf/go-cty v1.14.3 // indirect + github.com/tmccombs/hcl2json v0.6.4 // indirect + github.com/ulikunitz/xz v0.5.12 // indirect + github.com/zclconf/go-cty v1.15.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/mod v0.16.0 // indirect - golang.org/x/net v0.22.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.19.0 // indirect - google.golang.org/api v0.169.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.29.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/text v0.18.0 // indirect + golang.org/x/time v0.6.0 // indirect + golang.org/x/tools v0.25.0 // indirect + google.golang.org/api v0.198.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7 // indirect - google.golang.org/grpc v1.62.1 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 // indirect + google.golang.org/grpc v1.67.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/test/go.sum b/test/go.sum index 5e551a4..24acf14 100644 --- a/test/go.sum +++ b/test/go.sum @@ -32,6 +32,8 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= 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= @@ -46,6 +48,10 @@ cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjby cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/auth v0.9.4 h1:DxF7imbEbiFu9+zdKC6cKBko1e8XeJnipNqIbWZ+kDI= +cloud.google.com/go/auth v0.9.4/go.mod h1:SHia8n6//Ya940F1rLimhJCjjx7KE17t0ctFEci3HkA= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -70,8 +76,12 @@ cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQH cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= cloud.google.com/go/compute v1.25.0 h1:H1/4SqSUhjPFE7L5ddzHOfY2bCAvjwNRZPNl6Ni5oYU= cloud.google.com/go/compute v1.25.0/go.mod h1:GR7F0ZPZH8EhChlMo9FkLd7eUTwEymjqQagxzilIxIE= +cloud.google.com/go/compute v1.28.1 h1:XwPcZjgMCnU2tkwY10VleUjSAfpTj9RDn+kGrbYsi8o= +cloud.google.com/go/compute v1.28.1/go.mod h1:b72iXMY4FucVry3NR3Li4kVyyTvbMDE7x5WsqvxjsYk= 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/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= @@ -111,6 +121,8 @@ cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= 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/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU= +cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g= 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= @@ -173,6 +185,8 @@ cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeL cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= cloud.google.com/go/storage v1.39.0 h1:brbjUa4hbDHhpQf48tjqMaXEV+f1OGoaTmQau9tmCsA= cloud.google.com/go/storage v1.39.0/go.mod h1:OAEj/WZwUYjA3YHQ10/YcN9ttGuEpLwvaoyBXIPikEk= +cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= +cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= 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= @@ -196,6 +210,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmms github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.50.34 h1:J1LjHzWNN/yVxQDTr0NIlI5vz9xRPvWiNCjQ4+5wh58= github.com/aws/aws-sdk-go v1.50.34/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -232,6 +248,8 @@ github.com/exasol/error-reporting-go v0.2.0 h1:nKIe4zYiTHbYrKJRlSNJcmGjTJCZredDh github.com/exasol/error-reporting-go v0.2.0/go.mod h1:lUzRJqKLiSuYpqRUN2LVyj08WeHzhMEC/8Gmgtuqh1Y= github.com/exasol/exasol-driver-go v1.0.4 h1:HCkfWztr/Ml43e0OpEgkQ+h1qOa3PoY41gg0Y9infrg= github.com/exasol/exasol-driver-go v1.0.4/go.mod h1:TfWZbDQ6cOheE5g8SHfH/sXmnJbbVF/TqbjuXF/Ymos= +github.com/exasol/exasol-driver-go v1.0.10 h1:qr9T4IykdAXEV96GPOhgQp4GRuAKyGWUN6IF6shPmkg= +github.com/exasol/exasol-driver-go v1.0.10/go.mod h1:GNh/abjzz6ULOBMYGNwge7J0Ws5GzILH3irMsPVrbtE= github.com/exasol/exasol-test-setup-abstraction-server/go-client v0.3.4 h1:HlA5nlIu8fZveE9NwsoKH2/5aMMao9GoCnb8X+oCPC4= github.com/exasol/exasol-test-setup-abstraction-server/go-client v0.3.4/go.mod h1:cP/zgvSSXK6h15k+GoL6PfaFWGvQN/FU5wRvZnQGbwQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -244,6 +262,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 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/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/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-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= @@ -309,6 +329,7 @@ github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -326,6 +347,8 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= 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/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= 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= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -335,6 +358,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= 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/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= 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= @@ -346,12 +371,18 @@ github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqE github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= 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.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 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.47.1 h1:qOaxnL7Su5+KpDHYUN/ek1jn8ImvCKtOkaY4OSMS4tI= +github.com/gruntwork-io/terratest v0.47.1/go.mod h1:LnYX8BN5WxUMpDr8rtD39oToSL4CBERWSCusbJ0d/64= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -359,18 +390,26 @@ 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-getter v1.7.3 h1:bN2+Fw9XPFvOCjB0UOevFIMICZ7G2XSQHzfvLUyOM5E= github.com/hashicorp/go-getter v1.7.3/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.6 h1:5jHuM+aH373XNtXl9TNTUH5Qd69Trve11tHIrB+6yj4= +github.com/hashicorp/go-getter v1.7.6/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= 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/hcl/v2 v2.20.0 h1:l++cRs/5jQOiKVvqXZm/P1ZEfVXJmvLS9WSVxkaeTb4= github.com/hashicorp/hcl/v2 v2.20.0/go.mod h1:WmcD/Ym72MDOOx5F62Ly+leloeu6H7m0pG7VBiU6pQk= +github.com/hashicorp/hcl/v2 v2.22.0 h1:hkZ3nCtqeJsDhPRFz5EA9iwcG1hNWGePOTw6oyul12M= +github.com/hashicorp/hcl/v2 v2.22.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= 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-json v0.22.1 h1:xft84GZR0QzjPVWs4lRUwvTcPnegqlyS7orfb5Ltvec= +github.com/hashicorp/terraform-json v0.22.1/go.mod h1:JbWSQCLFSXFFhg42T7l9iJwdGXBYV8fmmD6o/ML4p3A= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= @@ -385,6 +424,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= +github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -399,6 +440,8 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-zglob v0.0.4 h1:LQi2iOm0/fGgu80AioIJ/1j9w9Oh+9DZ39J4VAGzHQM= github.com/mattn/go-zglob v0.0.4/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY= +github.com/mattn/go-zglob v0.0.6 h1:mP8RnmCgho4oaUYDIDn6GNxYk+qJGUs8fJLn+twYj2A= +github.com/mattn/go-zglob v0.0.6/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= @@ -413,6 +456,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sethvargo/go-password v0.2.0 h1:BTDl4CC/gjf/axHMaDQtw507ogrXLci6XRiLc7i/UHI= github.com/sethvargo/go-password v0.2.0/go.mod h1:Ym4Mr9JXLBycr02MFuVQ/0JHidNetSgbzutTr3zsYXE= +github.com/sethvargo/go-password v0.3.1 h1:WqrLTjo7X6AcVYfC6R7GtSyuUQR9hGyAj/f1PYQZCJU= +github.com/sethvargo/go-password v0.3.1/go.mod h1:rXofC1zT54N7R8K/h1WDUdkf9BOx5OptoxrMBcrXzvs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -430,9 +475,13 @@ 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/tmccombs/hcl2json v0.6.1 h1:KYk0h4vqLR2LzecgsgCEhuDbNfdvSu65CEZ7VGDgBl0= github.com/tmccombs/hcl2json v0.6.1/go.mod h1:Bqe5itpqem41iD5O2vCfiP1MoDednwR4/vHTRDpjM4A= +github.com/tmccombs/hcl2json v0.6.4 h1:/FWnzS9JCuyZ4MNwrG4vMrFrzRgsWEOVi+1AyYUVLGw= +github.com/tmccombs/hcl2json v0.6.4/go.mod h1:+ppKlIW3H5nsAsZddXPy2iMyvld3SHxyjswOZhavRDk= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -441,6 +490,8 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.14.3 h1:1JXy1XroaGrzZuG6X9dt7HL6s9AwbY+l4UNL8o5B6ho= github.com/zclconf/go-cty v1.14.3/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.15.0 h1:tTCRWxsexYUmtt/wVxgDClUe+uQusuI443uL6e+5sXQ= +github.com/zclconf/go-cty v1.15.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= 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= @@ -452,16 +503,27 @@ 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.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 h1:hCq2hNMwsegUvPzI7sPOvtO9cqyy5GbWt/Ybp2xrx8Q= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0/go.mod h1:LqaApwGx/oUmzsbqxkzuBvyoPpkxk3JQWnqfVrJ3wCA= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= 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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -471,6 +533,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 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.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= 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= @@ -509,6 +573,8 @@ 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.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -558,6 +624,8 @@ golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 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= @@ -585,6 +653,8 @@ golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= 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= @@ -601,6 +671,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ 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.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -666,11 +738,14 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.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.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= 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= @@ -684,11 +759,15 @@ 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.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 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/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.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= @@ -743,6 +822,8 @@ 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.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= 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= @@ -803,6 +884,8 @@ google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= +google.golang.org/api v0.198.0 h1:OOH5fZatk57iN0A7tjJQzt6aPfYQ1JiWkt1yGseazks= +google.golang.org/api v0.198.0/go.mod h1:/Lblzl3/Xqqk9hw/yS97TImKTUwnf1bv89v7+OagJzc= 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= @@ -915,10 +998,16 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7 h1:5cmXPmmYZddhZs05mvqVzGwPsoE/uq+1YBCeRmBDyMo= google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7/go.mod h1:yA7a1bW1kwl459Ol0m0lV4hLTfrL/7Bkk4Mj2Ir1mWI= +google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61 h1:KipVMxePgXPFBzXOvpKbny3RVdVmJOD64R/Ob7GPWEs= +google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:HiAZQz/G7n0EywFjmncAwsfnmFm2bjm7qPjwl8hyzjM= google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7 h1:bITUotW/BD35GhBwrwGexWa8/P5CKHXACICrmuFJBa8= google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= +google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 h1:pAjq8XSSzXoP9ya73v/w+9QEAAJNluLrpmMq5qFJQNY= +google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:O6rP0uBq4k0mdi/b4ZEMAZjkhYWhS815kCvaMha4VN8= google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7 h1:em/y72n4XlYRtayY/cVj6pnVzHa//BDA1BdoO+z9mdE= google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 h1:N9BgCIAUvn/M+p4NJccWPWb3BWh88+zyL0ll9HgbEeM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 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= @@ -956,6 +1045,8 @@ google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= +google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= 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= @@ -974,6 +1065,8 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw 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.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 65ee822218fc34794e9f0a8f9a28a2d1a8e4810d Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 25 Sep 2024 16:30:23 +0200 Subject: [PATCH 02/17] Update terraform dependencies --- .github/workflows/ci-build.yml | 2 +- .gitignore | 1 - .terraform.lock.hcl | 45 + doc/developers_guide/developers_guide.md | 7 +- main.tf | 2 +- scripts/cloudformation_template_v1.1.0.yml | 2108 ++++++++++++++++++++ versions.tf | 4 +- 7 files changed, 2162 insertions(+), 7 deletions(-) create mode 100644 .terraform.lock.hcl create mode 100644 scripts/cloudformation_template_v1.1.0.yml diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 8be4415..339ccf7 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -23,7 +23,7 @@ jobs: - name: Install tflint uses: terraform-linters/setup-tflint@v4 with: - tflint_version: v0.50.3 + tflint_version: v0.53.0 - name: Log Terraform version run: | diff --git a/.gitignore b/.gitignore index e4362c9..87dc68d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,3 @@ terraform.tfstate *.iml venv/ .DS_Store -.terraform.lock.hcl diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl new file mode 100644 index 0000000..ded508b --- /dev/null +++ b/.terraform.lock.hcl @@ -0,0 +1,45 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "5.68.0" + constraints = "~> 5.68.0" + hashes = [ + "h1:QU+d0rw5poZpVyplpBg5XQ5JsGnLRkZve5dR0lKZ+9U=", + "zh:045f37b115a6c94a05c6a5f2aacfe4cecbaf4b40b56917ba852d988d487e94bf", + "zh:0c388f1a94e7941cf7e6abcd8d958a3e325e513cb60affa3cac82e75c7bbbb73", + "zh:15b1f2587c06bff35a15f2d1c22eab395d549908daf05582608d729cdf54ba40", + "zh:16a9c0c7fa7a33aa22313d4444aeecde20831bf51f9b481a0406e3cf583378fc", + "zh:3330c0d49fb329dff6de17913e1a774e75aa0913106c3197814c73c3a12a4c3f", + "zh:40920318f774ff397c7b6a01b5e89e46eb1a55d7dc9943a310669a9357b9b501", + "zh:838fbac358bb72f46c8d359a28a3effb6a9d7137cdd72b9e4d2f0fcf803dc462", + "zh:84e694c0720bf54b3b8521bf6e05700abe4a1b3e7dd2a104efd1eb55ae5866a0", + "zh:90606c399498027d7d07ab78a71b574a5d8b982c4372e6b67479f7e39e153e2f", + "zh:9162cf25d5c0fdf672c9bbc4c3c84dd87ab6a15b4971df1f32aea6b477c0e028", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:9cd8ec40a88b25e9f0f7d7f51460a921f4529554a260ffbe5083ddeba2f41ae3", + "zh:adeffac1d01a35bc8d2497ccceb9978b4746872143016c2c631de6cb38b6aa8d", + "zh:c7b682c81f9ae850669deb6239a66d8aa960abed984aad25db2d3954c09c2616", + "zh:d10b9f40934e14d55cfc5731d728507e50d014561322e9e0c84b33ab255a4d51", + ] +} + +provider "registry.terraform.io/hashicorp/null" { + version = "3.2.3" + constraints = "3.2.3" + hashes = [ + "h1:nKUqWEza6Lcv3xRlzeiRQrHtqvzX1BhIzjaOVXRYQXQ=", + "zh:22d062e5278d872fe7aed834f5577ba0a5afe34a3bdac2b81f828d8d3e6706d2", + "zh:23dead00493ad863729495dc212fd6c29b8293e707b055ce5ba21ee453ce552d", + "zh:28299accf21763ca1ca144d8f660688d7c2ad0b105b7202554ca60b02a3856d3", + "zh:55c9e8a9ac25a7652df8c51a8a9a422bd67d784061b1de2dc9fe6c3cb4e77f2f", + "zh:756586535d11698a216291c06b9ed8a5cc6a4ec43eee1ee09ecd5c6a9e297ac1", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:9d5eea62fdb587eeb96a8c4d782459f4e6b73baeece4d04b4a40e44faaee9301", + "zh:a6355f596a3fb8fc85c2fb054ab14e722991533f87f928e7169a486462c74670", + "zh:b5a65a789cff4ada58a5baffc76cb9767dc26ec6b45c00d2ec8b1b027f6db4ed", + "zh:db5ab669cf11d0e9f81dc380a6fdfcac437aea3d69109c7aef1a5426639d2d65", + "zh:de655d251c470197bcbb5ac45d289595295acb8f829f6c781d4a75c8c8b7c7dd", + "zh:f5c68199f2e6076bce92a12230434782bf768103a427e9bb9abee99b116af7b5", + ] +} diff --git a/doc/developers_guide/developers_guide.md b/doc/developers_guide/developers_guide.md index 50dddf1..648f793 100644 --- a/doc/developers_guide/developers_guide.md +++ b/doc/developers_guide/developers_guide.md @@ -4,7 +4,10 @@ 1. Make a copy of the latest template in `scripts` for the new version 2. Update the new template -3. Upload the template to S3 bucket `exasol-cf-templates` in region `eu-central-1` (prod account) +3. Upload the template to S3 bucket `exasol-cf-templates` in region `eu-central-1` (prod account), e.g.: + ```sh + aws s3 cp scripts/cloudformation_template_v1.1.0.yml s3://exasol-cf-templates/cloudformation_template_v1.1.0.yml + ``` ## CI Tests @@ -25,7 +28,7 @@ System tests for deploying the Exasol Terraform module are located in the `test` * Install Terraform and Go * Get an Exasol license and store it as `test/simple_exasol_setup/exasolution.lic` * Create the file `test/simple_exasol_setup/terraform.tfvars` and fill in: - ``` + ```properties owner = "" aws_profile = "" ``` diff --git a/main.tf b/main.tf index 73b4269..2e9f1e1 100644 --- a/main.tf +++ b/main.tf @@ -15,7 +15,7 @@ resource "aws_cloudformation_stack" "exasol_cluster" { capabilities = [ "CAPABILITY_IAM"] on_failure = "DELETE" - template_url = "https://exasol-cf-templates.s3.eu-central-1.amazonaws.com/cloudformation_template_v1.0.4.yml" + template_url = "https://exasol-cf-templates.s3.eu-central-1.amazonaws.com/cloudformation_template_v1.1.0.yml" parameters = { DBSystemName = var.database_name DBPassword = var.sys_user_password diff --git a/scripts/cloudformation_template_v1.1.0.yml b/scripts/cloudformation_template_v1.1.0.yml new file mode 100644 index 0000000..b1be1c8 --- /dev/null +++ b/scripts/cloudformation_template_v1.1.0.yml @@ -0,0 +1,2108 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Exasol Database +Metadata: + Images: + regions: + ap-east-1: + RegionKey: apeast1 + ap-northeast-1: + RegionKey: apnortheast1 + ap-northeast-2: + RegionKey: apnortheast2 + ap-south-1: + RegionKey: apsouth1 + ap-southeast-1: + RegionKey: apsoutheast1 + ap-southeast-2: + RegionKey: apsoutheast2 + ca-central-1: + RegionKey: cacentral1 + eu-central-1: + RegionKey: eucentral1 + eu-west-1: + RegionKey: euwest1 + eu-west-2: + RegionKey: euwest2 + eu-west-3: + RegionKey: euwest3 + me-south-1: + RegionKey: mesouth1 + sa-east-1: + RegionKey: saeast1 + us-east-1: + RegionKey: useast1 + us-east-2: + RegionKey: useast2 + us-west-1: + RegionKey: uswest1 + us-west-2: + RegionKey: uswest2 + eu-north-1: + RegionKey: eunorth1 + apeast1: + EXASOL-6.2.3-BYOL: + AMI: '' + EXASOL-6.2.3-PAYG: + AMI: ami-0de9b75e76998c385 + apnortheast1: + EXASOL-6.2.3-BYOL: + AMI: ami-0b737b21393f74342 + EXASOL-6.2.3-PAYG: + AMI: ami-02d49fb9279c46956 + apnortheast2: + EXASOL-6.2.3-BYOL: + AMI: ami-06ed8e5cb0decfc69 + EXASOL-6.2.3-PAYG: + AMI: ami-0183e034f3fa7414c + apsouth1: + EXASOL-6.2.3-BYOL: + AMI: ami-0a4dcb6bd2a3edb12 + EXASOL-6.2.3-PAYG: + AMI: ami-0eb5f467e032361bb + apsoutheast1: + EXASOL-6.2.3-BYOL: + AMI: ami-0649e7776cf55a97b + EXASOL-6.2.3-PAYG: + AMI: ami-0b17d582a0804bfa4 + apsoutheast2: + EXASOL-6.2.3-BYOL: + AMI: ami-0e7a58111deb12b0d + EXASOL-6.2.3-PAYG: + AMI: ami-00d3374eebb5e1314 + cacentral1: + EXASOL-6.2.3-BYOL: + AMI: ami-01a86dbb3d723f888 + EXASOL-6.2.3-PAYG: + AMI: ami-0c762c079adbde022 + eucentral1: + EXASOL-6.2.3-BYOL: + AMI: ami-0c5aeb9ef89b468b6 + EXASOL-6.2.3-PAYG: + AMI: ami-09d192bee0de2cd67 + euwest1: + EXASOL-6.2.3-BYOL: + AMI: ami-0b4fe28d2b33f010c + EXASOL-6.2.3-PAYG: + AMI: ami-078432fa3594a8483 + euwest2: + EXASOL-6.2.3-BYOL: + AMI: ami-09d6d2b1ed7565b35 + EXASOL-6.2.3-PAYG: + AMI: ami-0a5ab70ef686f6cfc + euwest3: + EXASOL-6.2.3-BYOL: + AMI: ami-010539a28bfce118c + EXASOL-6.2.3-PAYG: + AMI: ami-0f13b2b73a6683872 + mesouth1: + EXASOL-6.2.3-BYOL: + AMI: '' + EXASOL-6.2.3-PAYG: + AMI: ami-07c0ce282384a2af4 + saeast1: + EXASOL-6.2.3-BYOL: + AMI: ami-05016930a24ed1f24 + EXASOL-6.2.3-PAYG: + AMI: ami-02ba37883a36d4ed2 + useast1: + EXASOL-6.2.3-BYOL: + AMI: ami-0f5cd72969284091e + EXASOL-6.2.3-PAYG: + AMI: ami-0f1adb5d2a09d0536 + useast2: + EXASOL-6.2.3-BYOL: + AMI: ami-0cb193fea448fd3b0 + EXASOL-6.2.3-PAYG: + AMI: ami-05d83ddd912623efc + uswest1: + EXASOL-6.2.3-BYOL: + AMI: ami-06216b2980843e285 + EXASOL-6.2.3-PAYG: + AMI: ami-014f4a5b61206b09a + uswest2: + EXASOL-6.2.3-BYOL: + AMI: ami-0e424496bc387d697 + EXASOL-6.2.3-PAYG: + AMI: ami-047469a6fd17b4d45 + eunorth1: + EXASOL-6.2.3-BYOL: + AMI: ami-07034abec3e885ddb + EXASOL-6.2.3-PAYG: + AMI: ami-0ebc3f1538c191743 + AWS::CloudFormation::Interface: + ParameterGroups: + - Label: + default: Key Pair + Parameters: + - KeyName + - Label: + default: Default Tags + Parameters: + - ProjectTag + - OwnerTag + - Label: + default: Exasol Database + Parameters: + - DBSystemName + - DBPassword + - ExasolPassword + - Label: + default: VPC/Network/Security + Parameters: + - SubnetId + - PlacementGroupParam + - PublicIP + - CreateS3Bucket + - CreateS3Endpoint + - CreateKMSEndpoint + - CreateEC2Endpoint + - DNSServer + - NTPServer + - Timezone + - SecurityGroupAccess + - OpenPorts + - DBSecurityGroup + - Label: + default: Management Server Configuration + Parameters: + - LicenseServerIP + - LicenseServerInstanceType + - ImageId + - Label: + default: Data Node Configuration + Parameters: + - FirstDataNodeIP + - DBNodeCount + - DatabaseNodeInstanceType + - StandbyNode + - Label: + default: Data Volume Configuration per Node + Parameters: + - DBEBSEncryption + - BlockDeviceVolumeSize + - BlockDeviceCount + - Label: + default: License + Parameters: + - License + ParameterLabels: + ProjectTag: + default: exa:project + OwnerTag: + default: exa:owner + DatabaseNodeInstanceType: + default: Database Node Instance Type and Storage + DBNodeCount: + default: Number of Data Nodes + PlacementGroupParam: + default: Database Placement Group (OPTIONAL) + DBSystemName: + default: Database Name + DBPassword: + default: SYS User Password + ExasolPassword: + default: ADMIN User Password + KeyName: + default: AWS Key Pair + License: + default: License (OPTIONAL) + PublicIP: + default: Public IPs + CreateS3Bucket: + default: S3 Bucket + CreateS3Endpoint: + default: Create S3 endpoint + CreateKMSEndpoint: + default: Create KMS endpoint + CreateEC2Endpoint: + default: Create EC2 endpoint + SubnetId: + default: Database Subnet-Id + SecurityGroupAccess: + default: Remote Access from distinct IP address ranges + OpenPorts: + default: Remote Access from defined Ports + DBSecurityGroup: + default: Security Group for Exasol DB + ImageId: + default: AMI ID + LicenseServerInstanceType: + default: Management Server Instance Type + LicenseServerIP: + default: Management Server IP (OPTIONAL) + FirstDataNodeIP: + default: First Data Node IP (OPTIONAL) + DNSServer: + default: DNS Server + NTPServer: + default: NTP Server + Timezone: + default: System Timezone + DBEBSEncryption: + default: Encrypt EBS volumes + BlockDeviceVolumeSize: + default: Size in GB of Data Block Device Volumes + BlockDeviceCount: + default: Number of Data Block Device Volumes per Node + StandbyNode: + default: Number of Standby Node +Parameters: + ProjectTag: + Description: Tag exa:project for Resource Group arrangement + Type: String + Default: exasol + OwnerTag: + Description: Tag exa:owner for Resource Group arrangement + Type: String + Default: user@example.com + DatabaseNodeInstanceType: + AllowedValues: + - m4.large + - m4.xlarge + - m4.2xlarge + - m4.4xlarge + - m4.10xlarge + - m4.16xlarge + - m5.large + - m5.xlarge + - m5.2xlarge + - m5.4xlarge + - m5.8xlarge + - m5.12xlarge + - m5.16xlarge + - m5.24xlarge + - m5a.large + - m5a.xlarge + - m5a.2xlarge + - m5a.4xlarge + - m5a.8xlarge + - m5a.12xlarge + - m5a.16xlarge + - m5a.24xlarge + - m5d.large + - m5d.xlarge + - m5d.2xlarge + - m5d.4xlarge + - m5d.8xlarge + - m5d.12xlarge + - m5d.16xlarge + - m5d.24xlarge + - c4.large + - c4.xlarge + - c4.2xlarge + - c4.4xlarge + - c4.8xlarge + - c5.large + - c5.xlarge + - c5.2xlarge + - c5.4xlarge + - c5.9xlarge + - c5.12xlarge + - c5.18xlarge + - c5.24xlarge + - c5d.large + - c5d.xlarge + - c5d.2xlarge + - c5d.4xlarge + - c5d.9xlarge + - c5d.12xlarge + - c5d.18xlarge + - r3.large + - r3.xlarge + - r3.2xlarge + - r3.4xlarge + - r3.8xlarge + - r4.large + - r4.xlarge + - r4.2xlarge + - r4.4xlarge + - r4.8xlarge + - r4.16xlarge + - r5.large + - r5.xlarge + - r5.2xlarge + - r5.4xlarge + - r5.8xlarge + - r5.12xlarge + - r5.16xlarge + - r5.24xlarge + - r5a.large + - r5a.xlarge + - r5a.2xlarge + - r5a.4xlarge + - r5a.8xlarge + - r5a.12xlarge + - r5a.16xlarge + - r5a.24xlarge + - r5d.large + - r5d.xlarge + - r5d.2xlarge + - r5d.4xlarge + - r5d.8xlarge + - r5d.12xlarge + - r5d.16xlarge + - r5d.24xlarge + Default: r5.4xlarge + Description: Recommended instance types + Type: String + PublicIP: + AllowedValues: + - 'true' + - 'false' + Default: 'false' + Description: Associate public ip addresses to all instances + Type: String + CreateS3Bucket: + AllowedValues: + - 'true' + - 'false' + Default: 'true' + Description: Create s3 bucket for a default backup location + Type: String + CreateS3Endpoint: + AllowedValues: + - 'true' + - 'false' + Default: 'true' + Description: Set to false if instances are public available or if s3 endpoint + already exist + Type: String + CreateKMSEndpoint: + AllowedValues: + - 'true' + - 'false' + Default: 'true' + Description: Set to false if instances are public available or if kms endpoint + already exists + Type: String + CreateEC2Endpoint: + AllowedValues: + - 'true' + - 'false' + Default: 'true' + Description: Set to false if instances are public available or if ec2 endpoint + already exists + Type: String + StandbyNode: + Default: 0 + Description: A standby node can automatically replace a failed node + Type: Number + DBNodeCount: + Default: 3 + Description: Number of database nodes that store data and process queries (min:1, + max:64) + MaxValue: 64 + MinValue: 1 + Type: Number + DBEBSEncryption: + AllowedValues: + - 'true' + - 'false' + Default: 'true' + Description: Encrypt attached EBS volumes + Type: String + PlacementGroupParam: + Default: '' + Description: Use an existing Placement Group or leave blank for new placement + group creation + Type: String + DBSystemName: + Default: exasol + AllowedPattern: '[a-zA-Z0-9_]{5,20}' + ConstraintDescription: must only contain 5-20 alphanumeric characters and the + underline character + Description: '(Format: only lower case, upper case, underline character, 5-20 + length)' + MaxLength: '20' + MinLength: '5' + Type: String + ExasolPassword: + Description: 'Password for the EXAoperation system administration user ADMIN (Format: + lower case, upper case, digit, 8-20 length)' + MinLength: '8' + MaxLength: '20' + NoEcho: true + Type: String + AllowedPattern: ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=\S+$).{8,}$ + ConstraintDescription: requires one lower case letter, one upper case letter, + one digit, 8-20 length, and no spaces + DBPassword: + Description: 'Password for the database administration user SYS (Format: lower + case, upper case, digit, 8-20 length)' + MinLength: '8' + MaxLength: '20' + NoEcho: true + Type: String + AllowedPattern: ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=\S+$).{8,}$ + ConstraintDescription: requires one lower case letter, one upper case letter, + one digit, 8-20 length, and no spaces + KeyName: + Description: '' + Type: AWS::EC2::KeyPair::KeyName + MinLength: '1' + License: + Default: '' + Description: In case of a BYOL image, an already aquired license can be pasted + here + Type: String + SecurityGroupAccess: + Default: '0.0.0.0/0' + AllowedPattern: \d{1,3}([.]\d{1,3}){3}/\d{1,2} + ConstraintDescription: Must be valid comma separated CIDR blocks, e.g. 0.0.0.0/0 + default route -> allow access from everywhere or 192.168.0.0/24,10.0.0.0/24 + to restrict access to specific ip ranges. + Description: Must be valid comma separated CIDR blocks, e.g. 0.0.0.0/0 default + route -> allow access from everywhere or 192.168.0.0/24,10.0.0.0/24 to restrict + access to specific ip ranges. + Type: List + OpenPorts: + Default: 20,22,443,6583,8563,8835 + AllowedPattern: \d{1,5}([-]\d{1,5}){0,1} + ConstraintDescription: 'Must be a valid notation of comma separated ports or port + ranges (e.g. 2000-3000), default ports are: 22 SSH, 443 EXAOperation, 6583 BucketFS, + 8563 Exasol Database, 8835 CloudUI.' + Description: 'Must be a valid notation of comma separated ports or port ranges + (e.g. 2000-3000), default ports are: 22 SSH, 443 EXAOperation, 6583 BucketFS, + 8563 Exasol Database, 8835 CloudUI.' + Type: List + SubnetId: + Type: AWS::EC2::Subnet::Id + MinLength: '1' + DBSecurityGroup: + Description: Security Group for Exasol DB + Type: AWS::EC2::SecurityGroup::Id + ImageId: + Type: String + Description: Amazon Machine Image ID + AllowedPattern: (?i)\b[a-z]+-[a-z0-9]+ + ConstraintDescription: must correspond to valid AMI ID + Default: ami-09d192bee0de2cd67 + LicenseServerInstanceType: + Default: m5.large + Description: Management Server InstanceType + Type: String + LicenseServerIP: + Type: String + Default: '' + Description: If left blank, then the Management Server is given an IP-Address + with an offset of 10 from the routing prefix (an offset of at least 10 is mandatory) + FirstDataNodeIP: + Default: '' + Description: If left blank, then the first Data Node is given an IP-Address with + an offset of 1 from the Management Server IP-Address (all further Data Nodes + IPs are counting upwards from this one) + Type: String + BlockDeviceVolumeSize: + Default: 345 + Description: Size in GB per block device volume (for optimal performance >= 334GB) + MaxValue: 16000 + Type: Number + BlockDeviceCount: + Default: 4 + MaxValue: 16 + MinValue: 1 + Type: Number + DNSServer: + Default: 169.254.169.253 + Type: String + Description: Default Amazon DNS Server + NTPServer: + Default: ' 169.254.169.123' + Type: String + Description: Default Amazon NTP Server + Timezone: + AllowedValues: + - '' + - Africa/Abidjan + - Africa/Accra + - Africa/Addis_Ababa + - Africa/Algiers + - Africa/Asmara + - Africa/Asmera + - Africa/Bamako + - Africa/Bangui + - Africa/Banjul + - Africa/Bissau + - Africa/Blantyre + - Africa/Brazzaville + - Africa/Bujumbura + - Africa/Cairo + - Africa/Casablanca + - Africa/Ceuta + - Africa/Conakry + - Africa/Dakar + - Africa/Dar_es_Salaam + - Africa/Djibouti + - Africa/Douala + - Africa/El_Aaiun + - Africa/Freetown + - Africa/Gaborone + - Africa/Harare + - Africa/Johannesburg + - Africa/Juba + - Africa/Kampala + - Africa/Khartoum + - Africa/Kigali + - Africa/Kinshasa + - Africa/Lagos + - Africa/Libreville + - Africa/Lome + - Africa/Luanda + - Africa/Lubumbashi + - Africa/Lusaka + - Africa/Malabo + - Africa/Maputo + - Africa/Maseru + - Africa/Mbabane + - Africa/Mogadishu + - Africa/Monrovia + - Africa/Nairobi + - Africa/Ndjamena + - Africa/Niamey + - Africa/Nouakchott + - Africa/Ouagadougou + - Africa/Porto-Novo + - Africa/Sao_Tome + - Africa/Timbuktu + - Africa/Tripoli + - Africa/Tunis + - Africa/Windhoek + - America/Adak + - America/Anchorage + - America/Anguilla + - America/Antigua + - America/Araguaina + - America/Argentina/Buenos_Aires + - America/Argentina/Catamarca + - America/Argentina/ComodRivadavia + - America/Argentina/Cordoba + - America/Argentina/Jujuy + - America/Argentina/La_Rioja + - America/Argentina/Mendoza + - America/Argentina/Rio_Gallegos + - America/Argentina/Salta + - America/Argentina/San_Juan + - America/Argentina/San_Luis + - America/Argentina/Tucuman + - America/Argentina/Ushuaia + - America/Aruba + - America/Asuncion + - America/Atikokan + - America/Atka + - America/Bahia + - America/Bahia_Banderas + - America/Barbados + - America/Belem + - America/Belize + - America/Blanc-Sablon + - America/Boa_Vista + - America/Bogota + - America/Boise + - America/Buenos_Aires + - America/Cambridge_Bay + - America/Campo_Grande + - America/Cancun + - America/Caracas + - America/Catamarca + - America/Cayenne + - America/Cayman + - America/Chicago + - America/Chihuahua + - America/Coral_Harbour + - America/Cordoba + - America/Costa_Rica + - America/Creston + - America/Cuiaba + - America/Curacao + - America/Danmarkshavn + - America/Dawson + - America/Dawson_Creek + - America/Denver + - America/Detroit + - America/Dominica + - America/Edmonton + - America/Eirunepe + - America/El_Salvador + - America/Ensenada + - America/Fortaleza + - America/Fort_Nelson + - America/Fort_Wayne + - America/Glace_Bay + - America/Godthab + - America/Goose_Bay + - America/Grand_Turk + - America/Grenada + - America/Guadeloupe + - America/Guatemala + - America/Guayaquil + - America/Guyana + - America/Halifax + - America/Havana + - America/Hermosillo + - America/Indiana/Indianapolis + - America/Indiana/Knox + - America/Indiana/Marengo + - America/Indiana/Petersburg + - America/Indianapolis + - America/Indiana/Tell_City + - America/Indiana/Vevay + - America/Indiana/Vincennes + - America/Indiana/Winamac + - America/Inuvik + - America/Iqaluit + - America/Jamaica + - America/Jujuy + - America/Juneau + - America/Kentucky/Louisville + - America/Kentucky/Monticello + - America/Knox_IN + - America/Kralendijk + - America/La_Paz + - America/Lima + - America/Los_Angeles + - America/Louisville + - America/Lower_Princes + - America/Maceio + - America/Managua + - America/Manaus + - America/Marigot + - America/Martinique + - America/Matamoros + - America/Mazatlan + - America/Mendoza + - America/Menominee + - America/Merida + - America/Metlakatla + - America/Mexico_City + - America/Miquelon + - America/Moncton + - America/Monterrey + - America/Montevideo + - America/Montreal + - America/Montserrat + - America/Nassau + - America/New_York + - America/Nipigon + - America/Nome + - America/Noronha + - America/North_Dakota/Beulah + - America/North_Dakota/Center + - America/North_Dakota/New_Salem + - America/Ojinaga + - America/Panama + - America/Pangnirtung + - America/Paramaribo + - America/Phoenix + - America/Port-au-Prince + - America/Porto_Acre + - America/Port_of_Spain + - America/Porto_Velho + - America/Puerto_Rico + - America/Rainy_River + - America/Rankin_Inlet + - America/Recife + - America/Regina + - America/Resolute + - America/Rio_Branco + - America/Rosario + - America/Santa_Isabel + - America/Santarem + - America/Santiago + - America/Santo_Domingo + - America/Sao_Paulo + - America/Scoresbysund + - America/Shiprock + - America/Sitka + - America/St_Barthelemy + - America/St_Johns + - America/St_Kitts + - America/St_Lucia + - America/St_Thomas + - America/St_Vincent + - America/Swift_Current + - America/Tegucigalpa + - America/Thule + - America/Thunder_Bay + - America/Tijuana + - America/Toronto + - America/Tortola + - America/Vancouver + - America/Virgin + - America/Whitehorse + - America/Winnipeg + - America/Yakutat + - America/Yellowknife + - Antarctica/Casey + - Antarctica/Davis + - Antarctica/DumontDUrville + - Antarctica/Macquarie + - Antarctica/Mawson + - Antarctica/McMurdo + - Antarctica/Palmer + - Antarctica/Rothera + - Antarctica/South_Pole + - Antarctica/Syowa + - Antarctica/Troll + - Antarctica/Vostok + - Arctic/Longyearbyen + - Asia/Aden + - Asia/Almaty + - Asia/Amman + - Asia/Anadyr + - Asia/Aqtau + - Asia/Aqtobe + - Asia/Ashgabat + - Asia/Ashkhabad + - Asia/Baghdad + - Asia/Bahrain + - Asia/Baku + - Asia/Bangkok + - Asia/Beijing + - Asia/Beirut + - Asia/Bishkek + - Asia/Brunei + - Asia/Calcutta + - Asia/Chita + - Asia/Choibalsan + - Asia/Chongqing + - Asia/Chungking + - Asia/Colombo + - Asia/Dacca + - Asia/Damascus + - Asia/Dhaka + - Asia/Dili + - Asia/Dubai + - Asia/Dushanbe + - Asia/Gaza + - Asia/Harbin + - Asia/Hebron + - Asia/Ho_Chi_Minh + - Asia/Hong_Kong + - Asia/Hovd + - Asia/Irkutsk + - Asia/Istanbul + - Asia/Jakarta + - Asia/Jayapura + - Asia/Jerusalem + - Asia/Kabul + - Asia/Kamchatka + - Asia/Karachi + - Asia/Kashgar + - Asia/Kathmandu + - Asia/Katmandu + - Asia/Khandyga + - Asia/Kolkata + - Asia/Krasnoyarsk + - Asia/Kuala_Lumpur + - Asia/Kuching + - Asia/Kuwait + - Asia/Macao + - Asia/Macau + - Asia/Magadan + - Asia/Makassar + - Asia/Manila + - Asia/Muscat + - Asia/Nicosia + - Asia/Novokuznetsk + - Asia/Novosibirsk + - Asia/Omsk + - Asia/Oral + - Asia/Phnom_Penh + - Asia/Pontianak + - Asia/Pyongyang + - Asia/Qatar + - Asia/Qyzylorda + - Asia/Rangoon + - Asia/Riyadh + - Asia/Saigon + - Asia/Sakhalin + - Asia/Samarkand + - Asia/Seoul + - Asia/Shanghai + - Asia/Singapore + - Asia/Srednekolymsk + - Asia/Taipei + - Asia/Tashkent + - Asia/Tbilisi + - Asia/Tehran + - Asia/Tel_Aviv + - Asia/Thimbu + - Asia/Thimphu + - Asia/Tokyo + - Asia/Ujung_Pandang + - Asia/Ulaanbaatar + - Asia/Ulan_Bator + - Asia/Urumqi + - Asia/Ust-Nera + - Asia/Vientiane + - Asia/Vladivostok + - Asia/Yakutsk + - Asia/Yekaterinburg + - Asia/Yerevan + - Atlantic/Azores + - Atlantic/Bermuda + - Atlantic/Canary + - Atlantic/Cape_Verde + - Atlantic/Faeroe + - Atlantic/Faroe + - Atlantic/Jan_Mayen + - Atlantic/Madeira + - Atlantic/Reykjavik + - Atlantic/South_Georgia + - Atlantic/Stanley + - Atlantic/St_Helena + - Australia/ACT + - Australia/Adelaide + - Australia/Brisbane + - Australia/Broken_Hill + - Australia/Canberra + - Australia/Currie + - Australia/Darwin + - Australia/Eucla + - Australia/Hobart + - Australia/LHI + - Australia/Lindeman + - Australia/Lord_Howe + - Australia/Melbourne + - Australia/North + - Australia/NSW + - Australia/Perth + - Australia/Queensland + - Australia/South + - Australia/Sydney + - Australia/Tasmania + - Australia/Victoria + - Australia/West + - Australia/Yancowinna + - Brazil/Acre + - Brazil/DeNoronha + - Brazil/East + - Brazil/West + - Canada/Atlantic + - Canada/Central + - Canada/Eastern + - Canada/East-Saskatchewan + - Canada/Mountain + - Canada/Newfoundland + - Canada/Pacific + - Canada/Saskatchewan + - Canada/Yukon + - CET + - Chile/Continental + - Chile/EasterIsland + - CST6CDT + - Cuba + - EET + - Egypt + - Eire + - EST + - EST5EDT + - Etc/GMT + - Etc/GMT0 + - Etc/GMT-12 + - Etc/GMT-11 + - Etc/GMT-10 + - Etc/GMT-9 + - Etc/GMT-8 + - Etc/GMT-7 + - Etc/GMT-6 + - Etc/GMT-5 + - Etc/GMT-4 + - Etc/GMT-3 + - Etc/GMT-2 + - Etc/GMT-1 + - Etc/GMT-0 + - Etc/GMT+0 + - Etc/GMT+1 + - Etc/GMT+2 + - Etc/GMT+3 + - Etc/GMT+4 + - Etc/GMT+5 + - Etc/GMT+6 + - Etc/GMT+7 + - Etc/GMT+8 + - Etc/GMT+9 + - Etc/GMT+10 + - Etc/GMT+11 + - Etc/GMT+12 + - Etc/GMT-13 + - Etc/GMT-14 + - Etc/Greenwich + - Etc/UCT + - Etc/Universal + - Etc/UTC + - Etc/Zulu + - Europe/Amsterdam + - Europe/Andorra + - Europe/Athens + - Europe/Belfast + - Europe/Belgrade + - Europe/Berlin + - Europe/Bratislava + - Europe/Brussels + - Europe/Bucharest + - Europe/Budapest + - Europe/Busingen + - Europe/Chisinau + - Europe/Copenhagen + - Europe/Dublin + - Europe/Gibraltar + - Europe/Guernsey + - Europe/Helsinki + - Europe/Isle_of_Man + - Europe/Istanbul + - Europe/Jersey + - Europe/Kaliningrad + - Europe/Kiev + - Europe/Lisbon + - Europe/Ljubljana + - Europe/London + - Europe/Luxembourg + - Europe/Madrid + - Europe/Malta + - Europe/Mariehamn + - Europe/Minsk + - Europe/Monaco + - Europe/Moscow + - Europe/Nicosia + - Europe/Oslo + - Europe/Paris + - Europe/Podgorica + - Europe/Prague + - Europe/Riga + - Europe/Rome + - Europe/Samara + - Europe/San_Marino + - Europe/Sarajevo + - Europe/Simferopol + - Europe/Skopje + - Europe/Sofia + - Europe/Stockholm + - Europe/Tallinn + - Europe/Tirane + - Europe/Tiraspol + - Europe/Uzhgorod + - Europe/Vaduz + - Europe/Vatican + - Europe/Vienna + - Europe/Vilnius + - Europe/Volgograd + - Europe/Warsaw + - Europe/Zagreb + - Europe/Zaporozhye + - Europe/Zurich + - Factory + - GB + - GB-Eire + - GMT + - GMT0 + - GMT-0 + - GMT+0 + - Greenwich + - Hongkong + - HST + - Iceland + - Indian/Antananarivo + - Indian/Chagos + - Indian/Christmas + - Indian/Cocos + - Indian/Comoro + - Indian/Kerguelen + - Indian/Mahe + - Indian/Maldives + - Indian/Mauritius + - Indian/Mayotte + - Indian/Reunion + - Iran + - Israel + - Jamaica + - Japan + - Kwajalein + - Libya + - MET + - Mexico/BajaNorte + - Mexico/BajaSur + - Mexico/General + - MST + - MST7MDT + - Navajo + - NZ + - NZ-CHAT + - Pacific/Apia + - Pacific/Auckland + - Pacific/Bougainville + - Pacific/Chatham + - Pacific/Chuuk + - Pacific/Easter + - Pacific/Efate + - Pacific/Enderbury + - Pacific/Fakaofo + - Pacific/Fiji + - Pacific/Funafuti + - Pacific/Galapagos + - Pacific/Gambier + - Pacific/Guadalcanal + - Pacific/Guam + - Pacific/Honolulu + - Pacific/Johnston + - Pacific/Kiritimati + - Pacific/Kosrae + - Pacific/Kwajalein + - Pacific/Majuro + - Pacific/Marquesas + - Pacific/Midway + - Pacific/Nauru + - Pacific/Niue + - Pacific/Norfolk + - Pacific/Noumea + - Pacific/Pago_Pago + - Pacific/Palau + - Pacific/Pitcairn + - Pacific/Pohnpei + - Pacific/Ponape + - Pacific/Port_Moresby + - Pacific/Rarotonga + - Pacific/Saipan + - Pacific/Samoa + - Pacific/Tahiti + - Pacific/Tarawa + - Pacific/Tongatapu + - Pacific/Truk + - Pacific/Wake + - Pacific/Wallis + - Pacific/Yap + - Poland + - Portugal + - PRC + - PST8PDT + - ROC + - ROK + - Singapore + - Turkey + - UCT + - Universal + - US/Alaska + - US/Aleutian + - US/Arizona + - US/Central + - US/Eastern + - US/East-Indiana + - US/Hawaii + - US/Indiana-Starke + - US/Michigan + - US/Mountain + - US/Pacific + - US/Pacific-New + - US/Samoa + - UTC + - WET + - W-SU + - Zulu + Default: Europe/Berlin + Description: AWS region's timezone + Type: String +Conditions: + PublicIP: !Equals + - !Ref 'PublicIP' + - 'true' + CreateEndpoints: !Equals + - !Ref 'PublicIP' + - 'false' + PlacementGroupNotSet: !Equals + - !Ref 'PlacementGroupParam' + - '' + DBEBSEncryptionNotSet: !Equals + - !Ref 'DBEBSEncryption' + - 'false' + ReplicationFactorOne: !Equals + - !Ref 'DBNodeCount' + - 1 + CreateS3Endpoint: !Equals + - !Ref 'CreateS3Endpoint' + - 'true' + CreateKMSEndpoint: !Equals + - !Ref 'CreateKMSEndpoint' + - 'true' + CreateEC2Endpoint: !Equals + - !Ref 'CreateEC2Endpoint' + - 'true' + CreateS3Bucket: !Equals + - !Ref 'CreateS3Bucket' + - 'true' +Resources: + PlacementGroup: + Type: AWS::EC2::PlacementGroup + Condition: PlacementGroupNotSet + Properties: + Strategy: cluster + InstanceProfileDBNode: + Type: AWS::IAM::InstanceProfile + Properties: + Path: / + Roles: + - !Ref 'EC2RoleDBNode' + InstanceProfileManagementNode: + Type: AWS::IAM::InstanceProfile + Properties: + Path: / + Roles: + - !Ref 'EC2RoleManagementRole' + EC2RoleManagementRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: + - ec2.amazonaws.com + Action: + - sts:AssumeRole + Path: / + Policies: + - PolicyName: EC2Policy + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - ec2:Describe* + Resource: '*' + - Effect: Allow + Action: + - ec2:RunInstances + - ec2:TerminateInstances + - ec2:StartInstances + - ec2:StopInstances + - ec2:RebootInstances + - ec2:CreateVolume + - ec2:DeleteVolume + - ec2:AttachVolume + - ec2:DetachVolume + Resource: + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :subnet/ + - !Ref 'SubnetId' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :network-interface/* + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :instance/* + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :volume/* + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ::image/ + - !Ref 'ImageId' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :key-pair/ + - !Ref 'KeyName' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :security-group/ + - !Ref 'DBSecurityGroup' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :placement-group/ + - !If + - PlacementGroupNotSet + - !Ref 'PlacementGroup' + - !Ref 'PlacementGroupParam' + - Action: + - ec2:ModifyInstanceAttribute + - ec2:CreateTags + - ec2:ModifyVolumeAttribute + - ec2:ModifyVolume + Resource: '*' + Effect: Allow + - Effect: Allow + Action: + - iam:PassRole + Resource: + - !Join + - '' + - - 'arn:aws:iam::' + - !Ref 'AWS::AccountId' + - :role/ + - !Ref 'AWS::StackName' + - -* + - Effect: Allow + Action: s3:* + Resource: !If + - CreateS3Bucket + - !Join + - '' + - - 'arn:aws:s3:::' + - !Ref 'S3Bucket' + - '*' + - arn:aws:s3:::dummybucket + EC2RoleDBNode: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: + - ec2.amazonaws.com + Action: + - sts:AssumeRole + Path: / + Policies: + - PolicyName: EC2Policy + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - ec2:Describe* + Resource: '*' + - Effect: Allow + Action: + - ec2:StartInstances + - ec2:StopInstances + - ec2:RebootInstances + Resource: + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :instance/* + - Effect: Allow + Action: s3:* + Resource: !If + - CreateS3Bucket + - !Join + - '' + - - 'arn:aws:s3:::' + - !Ref 'S3Bucket' + - '*' + - arn:aws:s3:::dummybucket + EC2Instances: + Type: Custom::EC2Instances + Properties: + ServiceToken: !GetAtt 'CreateEC2InstanceLambda.Arn' + ImageId: !Ref 'ImageId' + BlockDeviceMappings: [] + InstanceType: '' + IamInstanceProfile: + Name: !Ref 'InstanceProfileDBNode' + KeyName: !Ref 'KeyName' + MinCount: !Ref 'DBNodeCount' + MaxCount: !Ref 'DBNodeCount' + NetworkInterfaces: + - AssociatePublicIpAddress: !Ref 'PublicIP' + Groups: + - !Ref 'DBSecurityGroup' + DeviceIndex: 0 + PrivateIpAddress: !GetAtt 'IpCalc.FirstDataNodeIp' + SubnetId: !Ref 'SubnetId' + Placement: + GroupName: !If + - PlacementGroupNotSet + - !Ref 'PlacementGroup' + - !Ref 'PlacementGroupParam' + TagSpecifications: + - ResourceType: instance + Tags: + - Key: Name + Value: !Join + - '' + - - !Ref 'AWS::StackName' + - -data_node + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + UserData: !Base64 + Fn::Base64: !Join + - '' + - - "mkdir -p /var/lib/exawolke/\n" + - LICENSE=' + - !Ref 'License' + - "'\n" + - "if ! [[ -z ${LICENSE//} ]]; then mv /usr/opt/EXAWolke/etc/exasolution.lic\ + \ /usr/opt/EXAWolke/etc/exasolution.lic_backup; echo $LICENSE > /usr/opt/EXAWolke/etc/exasolution.lic;\ + \ fi\n" + - FIRSTDATANODEIP=' + - !GetAtt 'IpCalc.FirstDataNodeIp' + - "'\n" + - LICENSE_SERVER_IP=' + - !GetAtt 'IpCalc.LicenseServerIp' + - "'\n" + - DBNODECOUNT=' + - !Ref 'DBNodeCount' + - "'\n" + - DB_STANDBY_NODES=' + - !Ref 'StandbyNode' + - "'\n" + - COS_NETWORK=' + - !GetAtt 'GetSubnetCidr.CidrBlock' + - "'\n" + - "ip2int()\n" + - "{ \n" + - " local a b c d\n" + - " { IFS=. read a b c d; } <<< $1\n" + - " echo $(((((((a << 8) | b) << 8) | c) << 8) | d))\n" + - "}\n" + - "function get_node_list {\n" + - "DATANODE_FIRST=$(($(ip2int ${FIRSTDATANODEIP}) -$(ip2int ${COS_NETWORK%/*})))\n" + - "DATANODE_LAST=$((DATANODE_FIRST+DBNODECOUNT-1+DB_STANDBY_NODES))\n" + - "LICENSE_SERVER_IP_OFFSET=$(($(ip2int ${LICENSE_SERVER_IP}) -$(ip2int\ + \ ${COS_NETWORK%/*}) -10))\n" + - "echo $(seq $DATANODE_FIRST $DATANODE_LAST | while read a; do printf\ + \ 'n%04d ' $((a-LICENSE_SERVER_IP_OFFSET)); done)\n" + - "}\n" + - "ln -sf /var/lib/exawolke/cluster.conf\n" + - "cat <<-EOF > /var/lib/exawolke/cluster.conf\n" + - "NODES='$(get_node_list)'\n" + - PASSWORD_DB=' + - !GetAtt 'EncryptCredentials.DBPassword' + - "'\n" + - PASSWORD=' + - !GetAtt 'EncryptCredentials.ExasolPassword' + - "'\n" + - "KMS='True'\n" + - ST_REPLICATION_FACTOR=' + - !If + - ReplicationFactorOne + - 1 + - 2 + - "'\n" + - DB_NAME=' + - !Ref 'DBSystemName' + - "'\n" + - DB_STANDBY_NODES=' + - !Ref 'StandbyNode' + - "'\n" + - DATA_EBS_ENCRYPTED=' + - !Ref 'DBEBSEncryption' + - "'\n" + - TIMEZONE=' + - !Ref 'Timezone' + - "'\n" + - DNS_SERVER_1=' + - !Ref 'DNSServer' + - "'\n" + - NTP_SERVER_1=' + - !Ref 'NTPServer' + - "'\n" + - DEFAULT_GATEWAY=' + - !GetAtt 'IpCalc.DefaultGateWay' + - "'\n" + - DB_RESTORE_BACKUP_SOURCE=' + - !If + - CreateS3Bucket + - !Join + - '' + - - https:// + - !Ref 'S3Bucket' + - .s3. + - !Ref 'AWS::Region' + - .amazonaws.com + - '' + - "'\n" + - "KERNEL_PARAMETERS=''\n" + - NETWORK_RANGE=' + - !GetAtt 'GetSubnetCidr.CidrBlock' + - "'\n" + - COS_NETWORK=' + - !GetAtt 'GetSubnetCidr.CidrBlock' + - "'\n" + - "COS_NETWORK_OFFSET='0'\n" + - LICENSE_SERVER_IP=' + - !GetAtt 'IpCalc.LicenseServerIp' + - "'\n" + - "LICENSE_SERVER_IP_OFFSET=$(($(ip2int ${LICENSE_SERVER_IP}) -$(ip2int\ + \ ${COS_NETWORK%/*}) -10))\n" + - "TESTS=''\n" + - TAG=' + - !Ref 'AWS::StackName' + - "'\n" + - PLACEMENT_GROUP=' + - !If + - PlacementGroupNotSet + - !Ref 'PlacementGroup' + - !Ref 'PlacementGroupParam' + - "'\n" + - EOF + - "\n" + - "\n" + CreateEC2InstanceLambda: + Type: AWS::Lambda::Function + Properties: + Handler: index.handler + Tags: + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + Role: !GetAtt 'CreateEC2InstanceLambdaRole.Arn' + Code: + ZipFile: !Join + - '' + - - '''use strict'';' + - const response = require('cfn-response'); + - const AWS = require('aws-sdk'); + - const regexIP = /\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/; + - function toInt(ip) {return ip.split('.').map((octet, index, array) => + {return parseInt(octet) * Math.pow(256, (array.length - index - 1));}).reduce((prev, + curr) => {return prev + curr;});} + - function toIP(value) {const result = /\d+/.exec(value);value = result[0];return + [(value>>24)&0xff, (value>>16)&0xff, (value>>8)&0xff, value&0xff].join('.');} + - exports.handler = function(event, context) { + - let physicalId = event.PhysicalResourceId || 'none'; + - function success(data) { + - return response.send(event, context, response.SUCCESS, data, physicalId); + - '}' + - function failed(e) { + - return response.send(event, context, response.FAILED, e, physicalId); + - '}' + - let ec2 = new AWS.EC2(); + - let numberOfInstances = parseInt(event.ResourceProperties.MaxCount) + + parseInt( + - !Ref 'StandbyNode' + - ); + - let privateIPAddress = toInt(event.ResourceProperties.NetworkInterfaces[0].PrivateIpAddress); + - let instanceIds = []; + - event.ResourceProperties.MaxCount=1; + - event.ResourceProperties.MinCount=1; + - event.ResourceProperties.NetworkInterfaces[0].AssociatePublicIpAddress + = (event.ResourceProperties.NetworkInterfaces[0].AssociatePublicIpAddress + == 'true'); + - delete event.ResourceProperties.ServiceToken; + - event.ResourceProperties.InstanceType=' + - !Ref 'DatabaseNodeInstanceType' + - '''.split(''--'')[0];' + - 'event.ResourceProperties.BlockDeviceMappings.push({''DeviceName'': + ''/dev/xvdb'', ''Ebs'': { ''Encrypted'': ' + - !Ref 'DBEBSEncryption' + - ', ''VolumeSize'': 100, ''VolumeType'': ''gp2''}});' + - 'for (let i=1; i <= ' + - !Ref 'BlockDeviceCount' + - ; i++) { + - 'event.ResourceProperties.BlockDeviceMappings.push({''DeviceName'': + ''/dev/xvd''+String.fromCharCode(i+98), ''Ebs'': { ''Encrypted'': ' + - !Ref 'DBEBSEncryption' + - ', ''VolumeSize'': ' + - !Ref 'BlockDeviceVolumeSize' + - ', ''VolumeType'': ''gp2''}});' + - '}' + - if (event.RequestType == 'Create') { + - function createPromise(tries, ipaddress) { + - return new Promise(function cb(resolve, reject) { + - event.ResourceProperties.NetworkInterfaces[0].PrivateIpAddress = ipaddress; + - ec2.runInstances(event.ResourceProperties).promise().then((data) => + { + - instanceIds.push(data['Instances'][0]['InstanceId']); + - 'ec2.describeVolumes({Filters: [{Name: ''attachment.instance-id'', Values: + [data[''Instances''][0][''InstanceId'']]}]}, function(err, data1) {' + - let promisesvolumes = []; + - data1['Volumes'].forEach(y => { + - 'promisesvolumes.push(ec2.createTags({Resources: [ y[''VolumeId'']], + Tags: event.ResourceProperties.TagSpecifications[0].Tags}).promise());' + - '});' + - Promise.all(promisesvolumes).then(_ => { + - if (instanceIds.length == numberOfInstances) { + - physicalId = instanceIds.join(':'); + - return resolve(instanceIds) + - '}' + - '}).catch((e)=> console.log(''Error create Tags: '' + e));' + - '});' + - '}).catch((e) => {' + - 'console.log(''Error run Instances: '' + e);' + - if (--tries > 0) { + - setTimeout(function() { + - cb(resolve, reject); + - '}, 100);' + - '} else {' + - 'return reject(''Too many tries: '' + e)' + - '}' + - '})' + - '});' + - '}' + - for (let i=0; i < numberOfInstances; i++) { + - createPromise(10, toIP(privateIPAddress + i)).then((data) => { + - 'return success({Instances: data});' + - '}).catch((e) => {' + - 'return failed({Error: ''Error during runInstance: '' + e })' + - '});' + - '}' + - '} else if (event.RequestType == ''Delete'') {' + - if (physicalId == 'none') { + - return success({}); + - '}' + - 'let deleteParams = {InstanceIds: physicalId.split('':'')};' + - ec2.terminateInstances(deleteParams).promise().then((data)=> + - ec2.waitFor('instanceTerminated', deleteParams).promise() + - ).then((data) => success({}) + - ').catch((e) => failed({Error: e}));' + - '} else {' + - 'return failed({Error: ''In-place updates not supported.''});' + - '}' + - '};' + Runtime: nodejs16.x + Timeout: '300' + MasterKey: + Type: AWS::KMS::Key + Properties: + Description: Encrypting user data + Tags: + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + KeyPolicy: + Version: '2012-10-17' + Id: User-data-key + Statement: + - Sid: Allow administration of the key + Effect: Allow + Principal: + AWS: !Join + - '' + - - 'arn:aws:iam::' + - !Ref 'AWS::AccountId' + - :root + Action: + - kms:* + Resource: '*' + - Sid: Allow administration of the key + Effect: Allow + Principal: + AWS: !Join + - '' + - - 'arn:aws:iam::' + - !Ref 'AWS::AccountId' + - :role/ + - !Ref 'EC2RoleManagementRole' + Action: + - kms:Decrypt + - kms:Encrypt + Resource: '*' + - Sid: Allow use of the key + Effect: Allow + Principal: + AWS: !Join + - '' + - - 'arn:aws:iam::' + - !Ref 'AWS::AccountId' + - :role/ + - !Ref 'HelperLambdaRole' + Action: + - kms:Encrypt + Resource: '*' + EncryptCredentialsFunction: + Type: AWS::Lambda::Function + Properties: + Handler: index.handler + Tags: + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + Role: !GetAtt 'HelperLambdaRole.Arn' + Code: + ZipFile: !Join + - '' + - - '''use strict'';' + - const response = require('cfn-response'); + - const AWS = require('aws-sdk'); + - const kms = new AWS.KMS(); + - exports.handler = function(event, context) { + - ' kms.encrypt({KeyId:''' + - !Ref 'MasterKey' + - ''',Plaintext: event.ResourceProperties.DBPassword}, function(err, data1) + {' + - ' if (err) { console.log(err, err.stack); }' + - ' kms.encrypt({KeyId:''' + - !Ref 'MasterKey' + - ''',Plaintext: event.ResourceProperties.ExasolPassword}, function(err, + data2) {' + - ' if (err) { console.log(err, err.stack); }' + - ' return response.send(event, context, response.SUCCESS, { DBPassword: + data1.CiphertextBlob.toString(''base64''), ExasolPassword: data2.CiphertextBlob.toString(''base64'') + });' + - ' });' + - ' });' + - '};' + Runtime: nodejs16.x + Timeout: '300' + EncryptCredentials: + Type: Custom::EncryptCredentials + Properties: + ServiceToken: !GetAtt 'EncryptCredentialsFunction.Arn' + DBPassword: !Ref 'DBPassword' + ExasolPassword: !Ref 'ExasolPassword' + GetSubnetCidrFunction: + Type: AWS::Lambda::Function + Properties: + Handler: index.handler + Tags: + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + Role: !GetAtt 'HelperLambdaRole.Arn' + Code: + ZipFile: !Join + - '' + - - '''use strict'';' + - const response = require('cfn-response'); + - const AWS = require('aws-sdk'); + - const ec2 = new AWS.EC2(); + - exports.handler = function(event, context) { + - ' let params = {' + - ' DryRun: false,' + - ' SubnetIds: [event.ResourceProperties.SubnetId]' + - ' };' + - ' ec2.describeSubnets(params, function(err, data) {' + - ' if (err) { console.log(err, err.stack);' + - ' } else {' + - ' ec2.describeRouteTables({Filters: [{Name: ''association.subnet-id'', + Values: [event.ResourceProperties.SubnetId]}]}, function(err1, data1) + {' + - ' try {' + - ' return response.send(event, context, response.SUCCESS, + { CidrBlock: data.Subnets[0].CidrBlock, VpcId: data.Subnets[0].VpcId, + RouteTableId: data1.RouteTables[0].RouteTableId });' + - ' } catch(e) {' + - ' ec2.describeRouteTables({Filters: [{Name: ''vpc-id'', + Values: [data.Subnets[0].VpcId]}]}, function(err2, data2) {' + - ' return response.send(event, context, response.SUCCESS, + { CidrBlock: data.Subnets[0].CidrBlock, VpcId: data.Subnets[0].VpcId, + RouteTableId: data2.RouteTables[0].RouteTableId });' + - ' });' + - ' }' + - ' });' + - ' }' + - ' });' + - '};' + Runtime: nodejs16.x + Timeout: '300' + GetSubnetCidr: + Type: Custom::GetSubnetCidr + Properties: + ServiceToken: !GetAtt 'GetSubnetCidrFunction.Arn' + SubnetId: !Ref 'SubnetId' + IpCalcFunction: + Type: AWS::Lambda::Function + Properties: + Handler: index.handler + Tags: + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + Role: !GetAtt 'HelperLambdaRole.Arn' + Code: + ZipFile: !Join + - '' + - - '''use strict'';' + - const response = require('cfn-response'); + - const regexIP = /\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/; + - function toInt(ip) {return ip.split('.').map((octet, index, array) => + {return parseInt(octet) * Math.pow(256, (array.length - index - 1));}).reduce((prev, + curr) => {return prev + curr;});} + - function toIP(value) {const result = /\d+/.exec(value);value = result[0];return + [(value>>24)&0xff, (value>>16)&0xff, (value>>8)&0xff, value&0xff].join('.');} + - exports.handler = function(event, context) { + - ' let DefaultGateWay = toIP(toInt(event.ResourceProperties.SubnetCidr) + + 1);' + - ' let LicenseServerIp = (event.ResourceProperties.LicenseServerIp + == '''' || toInt(event.ResourceProperties.LicenseServerIp) < (toInt(DefaultGateWay) + + 9)) ? toIP(toInt(event.ResourceProperties.SubnetCidr) + 10) : event.ResourceProperties.LicenseServerIp;' + - ' let FirstDataNodeIp = (event.ResourceProperties.FirstDataNodeIp + == '''' || toInt(event.ResourceProperties.FirstDataNodeIp) < toInt(LicenseServerIp)) + ? toIP(toInt(LicenseServerIp) + 1) : event.ResourceProperties.FirstDataNodeIp;' + - ' return response.send(event, context, response.SUCCESS, { DefaultGateWay: + DefaultGateWay, LicenseServerIp: LicenseServerIp, FirstDataNodeIp: FirstDataNodeIp + });' + - '};' + Runtime: nodejs16.x + Timeout: '300' + IpCalc: + Type: Custom::IpCalc + Properties: + ServiceToken: !GetAtt 'IpCalcFunction.Arn' + SubnetCidr: !GetAtt 'GetSubnetCidr.CidrBlock' + LicenseServerIp: !Ref 'LicenseServerIP' + FirstDataNodeIp: !Ref 'FirstDataNodeIP' + HelperLambdaRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: + - lambda.amazonaws.com + Action: + - sts:AssumeRole + Path: / + ManagedPolicyArns: + - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole + Policies: + - PolicyName: LambdaPolicy + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - ec2:Describe* + Resource: '*' + - Effect: Allow + Action: + - ec2:AuthorizeSecurityGroupIngress + Resource: !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :security-group/* + CreateEC2InstanceLambdaRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: + - lambda.amazonaws.com + Action: + - sts:AssumeRole + Path: / + ManagedPolicyArns: + - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole + Policies: + - PolicyName: LambdaPolicy + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - ec2:Describe* + Resource: '*' + - Effect: Allow + Action: + - ec2:RunInstances + - ec2:TerminateInstances + - ec2:CreateTags + Resource: + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :subnet/ + - !Ref 'SubnetId' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :network-interface/* + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :instance/* + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :volume/* + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ::image/ + - !Ref 'ImageId' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :key-pair/ + - !Ref 'KeyName' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :security-group/ + - !Ref 'DBSecurityGroup' + - !Join + - '' + - - 'arn:aws:ec2:' + - !Ref 'AWS::Region' + - ':' + - !Ref 'AWS::AccountId' + - :placement-group/ + - !If + - PlacementGroupNotSet + - !Ref 'PlacementGroup' + - !Ref 'PlacementGroupParam' + - Effect: Allow + Action: + - iam:PassRole + Resource: + - !Join + - '' + - - 'arn:aws:iam::' + - !Ref 'AWS::AccountId' + - :role/ + - !Ref 'AWS::StackName' + - -* + LicenseServer: + Properties: + ImageId: !Ref 'ImageId' + InstanceType: !Ref 'LicenseServerInstanceType' + KeyName: !Ref 'KeyName' + IamInstanceProfile: !Ref 'InstanceProfileManagementNode' + NetworkInterfaces: + - AssociatePublicIpAddress: !Ref 'PublicIP' + GroupSet: + - !Ref 'DBSecurityGroup' + DeviceIndex: 0 + PrivateIpAddress: !GetAtt 'IpCalc.LicenseServerIp' + SubnetId: !Ref 'SubnetId' + SourceDestCheck: 'false' + Tags: + - Key: Name + Value: !Join + - '' + - - !Ref 'AWS::StackName' + - -management_node + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + UserData: !Base64 + Fn::Base64: !Join + - '' + - - "mkdir -p /var/lib/exawolke/\n" + - LICENSE=' + - !Ref 'License' + - "'\n" + - "if ! [[ -z ${LICENSE//} ]]; then mv /usr/opt/EXAWolke/etc/exasolution.lic\ + \ /usr/opt/EXAWolke/etc/exasolution.lic_backup; echo $LICENSE > /usr/opt/EXAWolke/etc/exasolution.lic;\ + \ fi\n" + - FIRSTDATANODEIP=' + - !GetAtt 'IpCalc.FirstDataNodeIp' + - "'\n" + - LICENSE_SERVER_IP=' + - !GetAtt 'IpCalc.LicenseServerIp' + - "'\n" + - DBNODECOUNT=' + - !Ref 'DBNodeCount' + - "'\n" + - DB_STANDBY_NODES=' + - !Ref 'StandbyNode' + - "'\n" + - COS_NETWORK=' + - !GetAtt 'GetSubnetCidr.CidrBlock' + - "'\n" + - "ip2int()\n" + - "{ \n" + - " local a b c d\n" + - " { IFS=. read a b c d; } <<< $1\n" + - " echo $(((((((a << 8) | b) << 8) | c) << 8) | d))\n" + - "}\n" + - "function get_node_list {\n" + - "DATANODE_FIRST=$(($(ip2int ${FIRSTDATANODEIP}) -$(ip2int ${COS_NETWORK%/*})))\n" + - "DATANODE_LAST=$((DATANODE_FIRST+DBNODECOUNT-1+DB_STANDBY_NODES))\n" + - "LICENSE_SERVER_IP_OFFSET=$(($(ip2int ${LICENSE_SERVER_IP}) -$(ip2int\ + \ ${COS_NETWORK%/*}) -10))\n" + - "echo $(seq $DATANODE_FIRST $DATANODE_LAST | while read a; do printf\ + \ 'n%04d ' $((a-LICENSE_SERVER_IP_OFFSET)); done)\n" + - "}\n" + - "ln -sf /var/lib/exawolke/cluster.conf\n" + - "cat <<-EOF > /var/lib/exawolke/cluster.conf\n" + - "NODES='$(get_node_list)'\n" + - PASSWORD_DB=' + - !GetAtt 'EncryptCredentials.DBPassword' + - "'\n" + - PASSWORD=' + - !GetAtt 'EncryptCredentials.ExasolPassword' + - "'\n" + - "KMS='True'\n" + - ST_REPLICATION_FACTOR=' + - !If + - ReplicationFactorOne + - 1 + - 2 + - "'\n" + - DB_NAME=' + - !Ref 'DBSystemName' + - "'\n" + - DB_STANDBY_NODES=' + - !Ref 'StandbyNode' + - "'\n" + - DATA_EBS_ENCRYPTED=' + - !Ref 'DBEBSEncryption' + - "'\n" + - TIMEZONE=' + - !Ref 'Timezone' + - "'\n" + - DNS_SERVER_1=' + - !Ref 'DNSServer' + - "'\n" + - NTP_SERVER_1=' + - !Ref 'NTPServer' + - "'\n" + - DEFAULT_GATEWAY=' + - !GetAtt 'IpCalc.DefaultGateWay' + - "'\n" + - DB_RESTORE_BACKUP_SOURCE=' + - !If + - CreateS3Bucket + - !Join + - '' + - - https:// + - !Ref 'S3Bucket' + - .s3. + - !Ref 'AWS::Region' + - .amazonaws.com + - '' + - "'\n" + - "KERNEL_PARAMETERS=''\n" + - NETWORK_RANGE=' + - !GetAtt 'GetSubnetCidr.CidrBlock' + - "'\n" + - COS_NETWORK=' + - !GetAtt 'GetSubnetCidr.CidrBlock' + - "'\n" + - "COS_NETWORK_OFFSET='0'\n" + - LICENSE_SERVER_IP=' + - !GetAtt 'IpCalc.LicenseServerIp' + - "'\n" + - "LICENSE_SERVER_IP_OFFSET=$(($(ip2int ${LICENSE_SERVER_IP}) -$(ip2int\ + \ ${COS_NETWORK%/*}) -10))\n" + - "TESTS=''\n" + - TAG=' + - !Ref 'AWS::StackName' + - "'\n" + - PLACEMENT_GROUP=' + - !If + - PlacementGroupNotSet + - !Ref 'PlacementGroup' + - !Ref 'PlacementGroupParam' + - "'\n" + - EOF + - "\n" + - "\n" + Type: AWS::EC2::Instance + S3Bucket: + Type: AWS::S3::Bucket + Condition: CreateS3Bucket + Properties: + Tags: + - Key: Name + Value: !Ref 'AWS::StackName' + - Key: exa:project + Value: !Ref 'ProjectTag' + - Key: exa:owner + Value: !Ref 'OwnerTag' + BucketEncryption: + ServerSideEncryptionConfiguration: + - ServerSideEncryptionByDefault: + SSEAlgorithm: AES256 + KMSEndpoint: + Type: AWS::EC2::VPCEndpoint + Condition: CreateKMSEndpoint + Properties: + SubnetIds: + - !Ref 'SubnetId' + SecurityGroupIds: + - !Ref 'DBSecurityGroup' + ServiceName: !Join + - '' + - - com.amazonaws. + - !Ref 'AWS::Region' + - .kms + VpcId: !GetAtt 'GetSubnetCidr.VpcId' + VpcEndpointType: Interface + PrivateDnsEnabled: true + S3Endpoint: + Type: AWS::EC2::VPCEndpoint + Condition: CreateS3Endpoint + Properties: + ServiceName: !Join + - '' + - - com.amazonaws. + - !Ref 'AWS::Region' + - .s3 + RouteTableIds: + - !GetAtt 'GetSubnetCidr.RouteTableId' + VpcId: !GetAtt 'GetSubnetCidr.VpcId' + EC2Endpoint: + Type: AWS::EC2::VPCEndpoint + Condition: CreateEC2Endpoint + Properties: + SubnetIds: + - !Ref 'SubnetId' + SecurityGroupIds: + - !Ref 'DBSecurityGroup' + ServiceName: !Join + - '' + - - com.amazonaws. + - !Ref 'AWS::Region' + - .ec2 + VpcId: !GetAtt 'GetSubnetCidr.VpcId' + VpcEndpointType: Interface + PrivateDnsEnabled: true +Outputs: + ManagementServer: + Value: !Ref LicenseServer + Datanodes: + Value: !Join [',', !GetAtt EC2Instances.Instances] diff --git a/versions.tf b/versions.tf index 43bbe8d..52bb3b6 100644 --- a/versions.tf +++ b/versions.tf @@ -4,11 +4,11 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "~> 5.40.0" + version = "~> 5.68.0" } null = { source = "hashicorp/null" - version = "3.2.2" + version = "3.2.3" } } } From 843bfac9c63f9aa7d4e6992d1edc009d0072f59b Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 25 Sep 2024 16:36:27 +0200 Subject: [PATCH 03/17] Lock test dependencies --- test/simple_exasol_setup/.terraform.lock.hcl | 114 +++++++++---------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/test/simple_exasol_setup/.terraform.lock.hcl b/test/simple_exasol_setup/.terraform.lock.hcl index 2d3d6dc..fda95f0 100644 --- a/test/simple_exasol_setup/.terraform.lock.hcl +++ b/test/simple_exasol_setup/.terraform.lock.hcl @@ -2,82 +2,82 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.40.0" - constraints = "~> 5.40.0" + version = "5.68.0" + constraints = "~> 5.68.0" hashes = [ - "h1:mLZbhNUyXQTWQXOCoHglI10XwcvqGqvnn21juy/Jk68=", - "zh:11f177a2385703740bd26d0652d3dba08575101d7639f386ce5637bdb0e29a13", - "zh:203fc43e69634f1bd487a9dc24b01944dfd568beac78e491f26677d103d343ed", - "zh:3697ebad4929da30ea98276a85d4ce5ebfc48508f4dd149e17e1dcdc7f306c6e", - "zh:421e0799756587e728f75a9024b8d4e38707cd6d65cf0710cb8d189062c85a58", - "zh:4be2adcd4c32a66159c532908f0d425d793c814b3686832e9af549b1515ae032", - "zh:55778b32470212ce6bbfd402529c88e7ea6ba34b0882f85d6ea001ff5c6255a5", - "zh:689a4c1fd1e1d5dab7b169759389c76f25e366f19a470971674321d6fca09791", - "zh:68a23eda608573a053e8738894457bd0c11766bc243e68826c78ab6b5a144710", + "h1:QU+d0rw5poZpVyplpBg5XQ5JsGnLRkZve5dR0lKZ+9U=", + "zh:045f37b115a6c94a05c6a5f2aacfe4cecbaf4b40b56917ba852d988d487e94bf", + "zh:0c388f1a94e7941cf7e6abcd8d958a3e325e513cb60affa3cac82e75c7bbbb73", + "zh:15b1f2587c06bff35a15f2d1c22eab395d549908daf05582608d729cdf54ba40", + "zh:16a9c0c7fa7a33aa22313d4444aeecde20831bf51f9b481a0406e3cf583378fc", + "zh:3330c0d49fb329dff6de17913e1a774e75aa0913106c3197814c73c3a12a4c3f", + "zh:40920318f774ff397c7b6a01b5e89e46eb1a55d7dc9943a310669a9357b9b501", + "zh:838fbac358bb72f46c8d359a28a3effb6a9d7137cdd72b9e4d2f0fcf803dc462", + "zh:84e694c0720bf54b3b8521bf6e05700abe4a1b3e7dd2a104efd1eb55ae5866a0", + "zh:90606c399498027d7d07ab78a71b574a5d8b982c4372e6b67479f7e39e153e2f", + "zh:9162cf25d5c0fdf672c9bbc4c3c84dd87ab6a15b4971df1f32aea6b477c0e028", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:a1580115c22564e5752e569dc40482503de6cced44da3e9431885cd9d4bf18ea", - "zh:b127756d7ee513691e76c211570580c10eaa2f7a7e4fd27c3566a48ec214991c", - "zh:b7ccea7a759940c8dcf8726272eed6653eed0b31f7223f71e829a344627afd39", - "zh:bb130fc50494fd45406e04b44d242da9a8f138a4a43feb65cf9e86d13aa13629", - "zh:cf1c972c90d5f22c9705274a33792275e284a0a3fcac12ce4083b5a4480463f4", - "zh:ebe60d3887b23703ca6a4c65b15c6d7b8d93ba27a028d996d17882fe6e98d5c0", + "zh:9cd8ec40a88b25e9f0f7d7f51460a921f4529554a260ffbe5083ddeba2f41ae3", + "zh:adeffac1d01a35bc8d2497ccceb9978b4746872143016c2c631de6cb38b6aa8d", + "zh:c7b682c81f9ae850669deb6239a66d8aa960abed984aad25db2d3954c09c2616", + "zh:d10b9f40934e14d55cfc5731d728507e50d014561322e9e0c84b33ab255a4d51", ] } provider "registry.terraform.io/hashicorp/null" { - version = "3.2.2" - constraints = "3.2.2" + version = "3.2.3" + constraints = "3.2.3" hashes = [ - "h1:vWAsYRd7MjYr3adj8BVKRohVfHpWQdvkIwUQ2Jf5FVM=", - "zh:3248aae6a2198f3ec8394218d05bd5e42be59f43a3a7c0b71c66ec0df08b69e7", - "zh:32b1aaa1c3013d33c245493f4a65465eab9436b454d250102729321a44c8ab9a", - "zh:38eff7e470acb48f66380a73a5c7cdd76cc9b9c9ba9a7249c7991488abe22fe3", - "zh:4c2f1faee67af104f5f9e711c4574ff4d298afaa8a420680b0cb55d7bbc65606", - "zh:544b33b757c0b954dbb87db83a5ad921edd61f02f1dc86c6186a5ea86465b546", - "zh:696cf785090e1e8cf1587499516b0494f47413b43cb99877ad97f5d0de3dc539", - "zh:6e301f34757b5d265ae44467d95306d61bef5e41930be1365f5a8dcf80f59452", + "h1:nKUqWEza6Lcv3xRlzeiRQrHtqvzX1BhIzjaOVXRYQXQ=", + "zh:22d062e5278d872fe7aed834f5577ba0a5afe34a3bdac2b81f828d8d3e6706d2", + "zh:23dead00493ad863729495dc212fd6c29b8293e707b055ce5ba21ee453ce552d", + "zh:28299accf21763ca1ca144d8f660688d7c2ad0b105b7202554ca60b02a3856d3", + "zh:55c9e8a9ac25a7652df8c51a8a9a422bd67d784061b1de2dc9fe6c3cb4e77f2f", + "zh:756586535d11698a216291c06b9ed8a5cc6a4ec43eee1ee09ecd5c6a9e297ac1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:913a929070c819e59e94bb37a2a253c228f83921136ff4a7aa1a178c7cce5422", - "zh:aa9015926cd152425dbf86d1abdbc74bfe0e1ba3d26b3db35051d7b9ca9f72ae", - "zh:bb04798b016e1e1d49bcc76d62c53b56c88c63d6f2dfe38821afef17c416a0e1", - "zh:c23084e1b23577de22603cff752e59128d83cfecc2e6819edadd8cf7a10af11e", + "zh:9d5eea62fdb587eeb96a8c4d782459f4e6b73baeece4d04b4a40e44faaee9301", + "zh:a6355f596a3fb8fc85c2fb054ab14e722991533f87f928e7169a486462c74670", + "zh:b5a65a789cff4ada58a5baffc76cb9767dc26ec6b45c00d2ec8b1b027f6db4ed", + "zh:db5ab669cf11d0e9f81dc380a6fdfcac437aea3d69109c7aef1a5426639d2d65", + "zh:de655d251c470197bcbb5ac45d289595295acb8f829f6c781d4a75c8c8b7c7dd", + "zh:f5c68199f2e6076bce92a12230434782bf768103a427e9bb9abee99b116af7b5", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.0" + version = "3.6.3" hashes = [ - "h1:p6WG1IPHnqx1fnJVKNjv733FBaArIugqy58HRZnpPCk=", - "zh:03360ed3ecd31e8c5dac9c95fe0858be50f3e9a0d0c654b5e504109c2159287d", - "zh:1c67ac51254ba2a2bb53a25e8ae7e4d076103483f55f39b426ec55e47d1fe211", - "zh:24a17bba7f6d679538ff51b3a2f378cedadede97af8a1db7dad4fd8d6d50f829", - "zh:30ffb297ffd1633175d6545d37c2217e2cef9545a6e03946e514c59c0859b77d", - "zh:454ce4b3dbc73e6775f2f6605d45cee6e16c3872a2e66a2c97993d6e5cbd7055", + "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", + "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", + "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", + "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", + "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", + "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", + "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:91df0a9fab329aff2ff4cf26797592eb7a3a90b4a0c04d64ce186654e0cc6e17", - "zh:aa57384b85622a9f7bfb5d4512ca88e61f22a9cea9f30febaa4c98c68ff0dc21", - "zh:c4a3e329ba786ffb6f2b694e1fd41d413a7010f3a53c20b432325a94fa71e839", - "zh:e2699bc9116447f96c53d55f2a00570f982e6f9935038c3810603572693712d0", - "zh:e747c0fd5d7684e5bfad8aa0ca441903f15ae7a98a737ff6aca24ba223207e2c", - "zh:f1ca75f417ce490368f047b63ec09fd003711ae48487fba90b4aba2ccf71920e", + "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", + "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", + "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", + "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", + "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", ] } provider "registry.terraform.io/hashicorp/tls" { - version = "4.0.5" + version = "4.0.6" hashes = [ - "h1:yLqz+skP3+EbU3yyvw8JqzflQTKDQGsC9QyZAg+S4dg=", - "zh:01cfb11cb74654c003f6d4e32bbef8f5969ee2856394a96d127da4949c65153e", - "zh:0472ea1574026aa1e8ca82bb6df2c40cd0478e9336b7a8a64e652119a2fa4f32", - "zh:1a8ddba2b1550c5d02003ea5d6cdda2eef6870ece86c5619f33edd699c9dc14b", - "zh:1e3bb505c000adb12cdf60af5b08f0ed68bc3955b0d4d4a126db5ca4d429eb4a", - "zh:6636401b2463c25e03e68a6b786acf91a311c78444b1dc4f97c539f9f78de22a", - "zh:76858f9d8b460e7b2a338c477671d07286b0d287fd2d2e3214030ae8f61dd56e", - "zh:a13b69fb43cb8746793b3069c4d897bb18f454290b496f19d03c3387d1c9a2dc", - "zh:a90ca81bb9bb509063b736842250ecff0f886a91baae8de65c8430168001dad9", - "zh:c4de401395936e41234f1956ebadbd2ed9f414e6908f27d578614aaa529870d4", - "zh:c657e121af8fde19964482997f0de2d5173217274f6997e16389e7707ed8ece8", - "zh:d68b07a67fbd604c38ec9733069fbf23441436fecf554de6c75c032f82e1ef19", + "h1:/sSdjHoiykrPdyBP1JE03V/KDgLXnHZhHcSOYIdDH/A=", + "zh:10de0d8af02f2e578101688fd334da3849f56ea91b0d9bd5b1f7a243417fdda8", + "zh:37fc01f8b2bc9d5b055dc3e78bfd1beb7c42cfb776a4c81106e19c8911366297", + "zh:4578ca03d1dd0b7f572d96bd03f744be24c726bfd282173d54b100fd221608bb", + "zh:6c475491d1250050765a91a493ef330adc24689e8837a0f07da5a0e1269e11c1", + "zh:81bde94d53cdababa5b376bbc6947668be4c45ab655de7aa2e8e4736dfd52509", + "zh:abdce260840b7b050c4e401d4f75c7a199fafe58a8b213947a258f75ac18b3e8", + "zh:b754cebfc5184873840f16a642a7c9ef78c34dc246a8ae29e056c79939963c7a", + "zh:c928b66086078f9917aef0eec15982f2e337914c5c4dbc31dd4741403db7eb18", + "zh:cded27bee5f24de6f2ee0cfd1df46a7f88e84aaffc2ecbf3ff7094160f193d50", + "zh:d65eb3867e8f69aaf1b8bb53bd637c99c6b649ba3db16ded50fa9a01076d1a27", + "zh:ecb0c8b528c7a619fa71852bb3fb5c151d47576c5aab2bf3af4db52588722eeb", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } From e445d18970a52874bdad5ce4a1c2c46359c8fd3d Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 26 Sep 2024 07:33:41 +0200 Subject: [PATCH 04/17] Update exasol ami image name --- README.md | 4 +- doc/developers_guide/developers_guide.md | 1 + main.tf | 15 ++-- scripts/cloudformation_template_v1.1.0.yml | 90 ---------------------- test/simple_exasol_setup/main.tf | 2 +- variables.tf | 3 +- 6 files changed, 10 insertions(+), 105 deletions(-) diff --git a/README.md b/README.md index 15fb9d0..3cbefb1 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ module "exasol" { cluster_name = "exasol-cluster" database_name = "exadb" - ami_image_name = "R6.2.3-PAYG" + ami_image_name = "Exasol-R7.1.26-BYOL" sys_user_password = "eXaSol1337DB" admin_user_password = "eXaSol1337OP" management_server_instance_type = "m5.xlarge" @@ -148,7 +148,7 @@ The following configuration variables are available. | `cluster_name` | `exasol-cluster` | A name for the to be deployed cluster. | | `database_name` | `exadb` | A name of the Exasol database. | | `ami_image_id` | `null` | An Exasol release AMI image id, e.g, `ami-05fad9f0c2609cef0`. | -| `ami_image_name` | __ | An Exasol release AMI image name, e.g, `R6.1.5-PAYG` or `R6.2.1-BYOL`. | +| `ami_image_name` | __ | An Exasol release AMI image name, e.g, `Exasol-R7.1.26-PAYG` or `Exasol-R7.1.26-BYOL`. | | `sys_user_password` | __ | An Exasol database `sys` user password. | | `admin_user_password` | __ | An EXAOperation `admin` user password. | | `management_server_instance_type` | `m5.large` | An EC2 instance type for management server. | diff --git a/doc/developers_guide/developers_guide.md b/doc/developers_guide/developers_guide.md index 648f793..a175464 100644 --- a/doc/developers_guide/developers_guide.md +++ b/doc/developers_guide/developers_guide.md @@ -8,6 +8,7 @@ ```sh aws s3 cp scripts/cloudformation_template_v1.1.0.yml s3://exasol-cf-templates/cloudformation_template_v1.1.0.yml ``` +4. Enable public read access for the uploaded file ## CI Tests diff --git a/main.tf b/main.tf index 2e9f1e1..12c6d18 100644 --- a/main.tf +++ b/main.tf @@ -1,19 +1,16 @@ data "aws_ami" "exasol" { most_recent = true - owners = [ - var.ami_image_owner] + owners = [var.ami_image_owner] filter { name = "name" - values = [ - "*${var.ami_image_name}-*"] + values = ["*${var.ami_image_name}-*"] } } resource "aws_cloudformation_stack" "exasol_cluster" { name = var.cluster_name - capabilities = [ - "CAPABILITY_IAM"] + capabilities = ["CAPABILITY_IAM"] on_failure = "DELETE" template_url = "https://exasol-cf-templates.s3.eu-central-1.amazonaws.com/cloudformation_template_v1.1.0.yml" parameters = { @@ -61,8 +58,7 @@ data "aws_instance" "management_server" { resource "null_resource" "exasol_cluster_wait" { count = var.public_ip ? 1 : 0 - depends_on = [ - aws_cloudformation_stack.exasol_cluster] + depends_on = [aws_cloudformation_stack.exasol_cluster] triggers = { always = uuid() @@ -83,6 +79,5 @@ resource "null_resource" "exasol_cluster_wait" { } resource "null_resource" "exasol_waited_on" { - depends_on = [ - null_resource.exasol_cluster_wait] + depends_on = [null_resource.exasol_cluster_wait] } diff --git a/scripts/cloudformation_template_v1.1.0.yml b/scripts/cloudformation_template_v1.1.0.yml index b1be1c8..7b70e12 100644 --- a/scripts/cloudformation_template_v1.1.0.yml +++ b/scripts/cloudformation_template_v1.1.0.yml @@ -39,96 +39,6 @@ Metadata: RegionKey: uswest2 eu-north-1: RegionKey: eunorth1 - apeast1: - EXASOL-6.2.3-BYOL: - AMI: '' - EXASOL-6.2.3-PAYG: - AMI: ami-0de9b75e76998c385 - apnortheast1: - EXASOL-6.2.3-BYOL: - AMI: ami-0b737b21393f74342 - EXASOL-6.2.3-PAYG: - AMI: ami-02d49fb9279c46956 - apnortheast2: - EXASOL-6.2.3-BYOL: - AMI: ami-06ed8e5cb0decfc69 - EXASOL-6.2.3-PAYG: - AMI: ami-0183e034f3fa7414c - apsouth1: - EXASOL-6.2.3-BYOL: - AMI: ami-0a4dcb6bd2a3edb12 - EXASOL-6.2.3-PAYG: - AMI: ami-0eb5f467e032361bb - apsoutheast1: - EXASOL-6.2.3-BYOL: - AMI: ami-0649e7776cf55a97b - EXASOL-6.2.3-PAYG: - AMI: ami-0b17d582a0804bfa4 - apsoutheast2: - EXASOL-6.2.3-BYOL: - AMI: ami-0e7a58111deb12b0d - EXASOL-6.2.3-PAYG: - AMI: ami-00d3374eebb5e1314 - cacentral1: - EXASOL-6.2.3-BYOL: - AMI: ami-01a86dbb3d723f888 - EXASOL-6.2.3-PAYG: - AMI: ami-0c762c079adbde022 - eucentral1: - EXASOL-6.2.3-BYOL: - AMI: ami-0c5aeb9ef89b468b6 - EXASOL-6.2.3-PAYG: - AMI: ami-09d192bee0de2cd67 - euwest1: - EXASOL-6.2.3-BYOL: - AMI: ami-0b4fe28d2b33f010c - EXASOL-6.2.3-PAYG: - AMI: ami-078432fa3594a8483 - euwest2: - EXASOL-6.2.3-BYOL: - AMI: ami-09d6d2b1ed7565b35 - EXASOL-6.2.3-PAYG: - AMI: ami-0a5ab70ef686f6cfc - euwest3: - EXASOL-6.2.3-BYOL: - AMI: ami-010539a28bfce118c - EXASOL-6.2.3-PAYG: - AMI: ami-0f13b2b73a6683872 - mesouth1: - EXASOL-6.2.3-BYOL: - AMI: '' - EXASOL-6.2.3-PAYG: - AMI: ami-07c0ce282384a2af4 - saeast1: - EXASOL-6.2.3-BYOL: - AMI: ami-05016930a24ed1f24 - EXASOL-6.2.3-PAYG: - AMI: ami-02ba37883a36d4ed2 - useast1: - EXASOL-6.2.3-BYOL: - AMI: ami-0f5cd72969284091e - EXASOL-6.2.3-PAYG: - AMI: ami-0f1adb5d2a09d0536 - useast2: - EXASOL-6.2.3-BYOL: - AMI: ami-0cb193fea448fd3b0 - EXASOL-6.2.3-PAYG: - AMI: ami-05d83ddd912623efc - uswest1: - EXASOL-6.2.3-BYOL: - AMI: ami-06216b2980843e285 - EXASOL-6.2.3-PAYG: - AMI: ami-014f4a5b61206b09a - uswest2: - EXASOL-6.2.3-BYOL: - AMI: ami-0e424496bc387d697 - EXASOL-6.2.3-PAYG: - AMI: ami-047469a6fd17b4d45 - eunorth1: - EXASOL-6.2.3-BYOL: - AMI: ami-07034abec3e885ddb - EXASOL-6.2.3-PAYG: - AMI: ami-0ebc3f1538c191743 AWS::CloudFormation::Interface: ParameterGroups: - Label: diff --git a/test/simple_exasol_setup/main.tf b/test/simple_exasol_setup/main.tf index b33aee5..f7ff1f9 100644 --- a/test/simple_exasol_setup/main.tf +++ b/test/simple_exasol_setup/main.tf @@ -124,7 +124,7 @@ module "exasol" { source = "../../" cluster_name = "${local.project_tag}-exasol-cluster" database_name = "exadb" - ami_image_name = "Exasol-R7.1.20-BYOL" + ami_image_name = "Exasol-R7.1.26-BYOL" sys_user_password = var.exasol_sys_password admin_user_password = var.exasol_admin_password management_server_instance_type = "m5.large" diff --git a/variables.tf b/variables.tf index d20a914..2e1b79e 100644 --- a/variables.tf +++ b/variables.tf @@ -12,7 +12,7 @@ variable "database_name" { } variable "ami_image_name" { - description = "An Exasol AMI image name. For example, 'R6.1.5-PAYG' or 'R6.2.1-BYOL'." + description = "An Exasol AMI image name. For example, 'Exasol-R7.1.26-PAYG' or 'Exasol-R7.1.26-BYOL'." type = string } @@ -148,4 +148,3 @@ variable "waited_on" { description = "A variable that this module can wait on." type = string } - From 494d5e55c51e87ce452d594de0e775555524d597 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 26 Sep 2024 09:24:48 +0200 Subject: [PATCH 05/17] Use correct image --- doc/developers_guide/developers_guide.md | 8 +++++--- main.tf | 2 +- test/simple_exasol_setup/main.tf | 2 +- test/terraform_test.go | 8 +++++++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/doc/developers_guide/developers_guide.md b/doc/developers_guide/developers_guide.md index a175464..d3689e0 100644 --- a/doc/developers_guide/developers_guide.md +++ b/doc/developers_guide/developers_guide.md @@ -4,11 +4,13 @@ 1. Make a copy of the latest template in `scripts` for the new version 2. Update the new template -3. Upload the template to S3 bucket `exasol-cf-templates` in region `eu-central-1` (prod account), e.g.: +3. Upload the template to S3 bucket `exasol-cf-templates` in region `eu-central-1` (prod account) and re-enable public read access: ```sh - aws s3 cp scripts/cloudformation_template_v1.1.0.yml s3://exasol-cf-templates/cloudformation_template_v1.1.0.yml + version=v1.1.0 + aws s3 cp scripts/cloudformation_template_${version}.yml s3://exasol-cf-templates/cloudformation_template_${version}.yml + aws s3api put-object-acl --bucket exasol-cf-templates --key cloudformation_template_${version}.yml --acl public-read ``` -4. Enable public read access for the uploaded file + ## CI Tests diff --git a/main.tf b/main.tf index 12c6d18..5991847 100644 --- a/main.tf +++ b/main.tf @@ -4,7 +4,7 @@ data "aws_ami" "exasol" { filter { name = "name" - values = ["*${var.ami_image_name}-*"] + values = ["*${var.ami_image_name}*"] } } diff --git a/test/simple_exasol_setup/main.tf b/test/simple_exasol_setup/main.tf index f7ff1f9..dc8ce41 100644 --- a/test/simple_exasol_setup/main.tf +++ b/test/simple_exasol_setup/main.tf @@ -124,7 +124,7 @@ module "exasol" { source = "../../" cluster_name = "${local.project_tag}-exasol-cluster" database_name = "exadb" - ami_image_name = "Exasol-R7.1.26-BYOL" + ami_image_name = "Exasol-R7.1.26-PAYG" sys_user_password = var.exasol_sys_password admin_user_password = var.exasol_admin_password management_server_instance_type = "m5.large" diff --git a/test/terraform_test.go b/test/terraform_test.go index a7e2ca8..57f0ca3 100644 --- a/test/terraform_test.go +++ b/test/terraform_test.go @@ -38,19 +38,25 @@ func getRandomPassword() string { } func assertCanConnect(t *testing.T, ip string, sysPassword string) { + port := 8563 + t.Logf("Checking connection to %q:%d...", ip, port) config := exasol.NewConfig("sys", sysPassword). - Port(8563). + Port(port). Host(ip). ValidateServerCertificate(false) conn, err := sql.Open("exasol", config.String()) if err != nil { t.Error("Failed to connect to the exasol database: " + err.Error()) + } else { + t.Logf("Connection to %q:%d successful", ip, port) } defer conn.Close() _, err = conn.Exec("SELECT * FROM DUAL") if err != nil { t.Error("Failed to run query on the exasol database: " + err.Error()) + } else { + t.Log("SQL query succeeded") } } From 12a7a1755e82c52fe7e76b23b9a205d4c4cbf57e Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 26 Sep 2024 09:39:27 +0200 Subject: [PATCH 06/17] Remove lockfile to fix ci --- .gitignore | 2 ++ .terraform.lock.hcl | 45 --------------------------------------------- 2 files changed, 2 insertions(+), 45 deletions(-) delete mode 100644 .terraform.lock.hcl diff --git a/.gitignore b/.gitignore index 87dc68d..01c4821 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ terraform.tfstate *.iml venv/ .DS_Store +# This is ignored because lock files are only relevant when the Terraform template is used +/.terraform.lock.hcl diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl deleted file mode 100644 index ded508b..0000000 --- a/.terraform.lock.hcl +++ /dev/null @@ -1,45 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/aws" { - version = "5.68.0" - constraints = "~> 5.68.0" - hashes = [ - "h1:QU+d0rw5poZpVyplpBg5XQ5JsGnLRkZve5dR0lKZ+9U=", - "zh:045f37b115a6c94a05c6a5f2aacfe4cecbaf4b40b56917ba852d988d487e94bf", - "zh:0c388f1a94e7941cf7e6abcd8d958a3e325e513cb60affa3cac82e75c7bbbb73", - "zh:15b1f2587c06bff35a15f2d1c22eab395d549908daf05582608d729cdf54ba40", - "zh:16a9c0c7fa7a33aa22313d4444aeecde20831bf51f9b481a0406e3cf583378fc", - "zh:3330c0d49fb329dff6de17913e1a774e75aa0913106c3197814c73c3a12a4c3f", - "zh:40920318f774ff397c7b6a01b5e89e46eb1a55d7dc9943a310669a9357b9b501", - "zh:838fbac358bb72f46c8d359a28a3effb6a9d7137cdd72b9e4d2f0fcf803dc462", - "zh:84e694c0720bf54b3b8521bf6e05700abe4a1b3e7dd2a104efd1eb55ae5866a0", - "zh:90606c399498027d7d07ab78a71b574a5d8b982c4372e6b67479f7e39e153e2f", - "zh:9162cf25d5c0fdf672c9bbc4c3c84dd87ab6a15b4971df1f32aea6b477c0e028", - "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9cd8ec40a88b25e9f0f7d7f51460a921f4529554a260ffbe5083ddeba2f41ae3", - "zh:adeffac1d01a35bc8d2497ccceb9978b4746872143016c2c631de6cb38b6aa8d", - "zh:c7b682c81f9ae850669deb6239a66d8aa960abed984aad25db2d3954c09c2616", - "zh:d10b9f40934e14d55cfc5731d728507e50d014561322e9e0c84b33ab255a4d51", - ] -} - -provider "registry.terraform.io/hashicorp/null" { - version = "3.2.3" - constraints = "3.2.3" - hashes = [ - "h1:nKUqWEza6Lcv3xRlzeiRQrHtqvzX1BhIzjaOVXRYQXQ=", - "zh:22d062e5278d872fe7aed834f5577ba0a5afe34a3bdac2b81f828d8d3e6706d2", - "zh:23dead00493ad863729495dc212fd6c29b8293e707b055ce5ba21ee453ce552d", - "zh:28299accf21763ca1ca144d8f660688d7c2ad0b105b7202554ca60b02a3856d3", - "zh:55c9e8a9ac25a7652df8c51a8a9a422bd67d784061b1de2dc9fe6c3cb4e77f2f", - "zh:756586535d11698a216291c06b9ed8a5cc6a4ec43eee1ee09ecd5c6a9e297ac1", - "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:9d5eea62fdb587eeb96a8c4d782459f4e6b73baeece4d04b4a40e44faaee9301", - "zh:a6355f596a3fb8fc85c2fb054ab14e722991533f87f928e7169a486462c74670", - "zh:b5a65a789cff4ada58a5baffc76cb9767dc26ec6b45c00d2ec8b1b027f6db4ed", - "zh:db5ab669cf11d0e9f81dc380a6fdfcac437aea3d69109c7aef1a5426639d2d65", - "zh:de655d251c470197bcbb5ac45d289595295acb8f829f6c781d4a75c8c8b7c7dd", - "zh:f5c68199f2e6076bce92a12230434782bf768103a427e9bb9abee99b116af7b5", - ] -} From 7587d817c37ff1b6b0deede1a194635f978127dd Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 26 Sep 2024 11:03:55 +0200 Subject: [PATCH 07/17] #39: Migrate CF template lambdas to use NodeJS 20.x --- scripts/cloudformation_template_v1.1.0.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/cloudformation_template_v1.1.0.yml b/scripts/cloudformation_template_v1.1.0.yml index 7b70e12..5c9ca82 100644 --- a/scripts/cloudformation_template_v1.1.0.yml +++ b/scripts/cloudformation_template_v1.1.0.yml @@ -1391,7 +1391,8 @@ Resources: - '' - - '''use strict'';' - const response = require('cfn-response'); - - const AWS = require('aws-sdk'); + - const {EC2} = require('@aws-sdk/client-ec2'); + - const ec2 = new EC2(); - const regexIP = /\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/; - function toInt(ip) {return ip.split('.').map((octet, index, array) => {return parseInt(octet) * Math.pow(256, (array.length - index - 1));}).reduce((prev, @@ -1406,7 +1407,6 @@ Resources: - function failed(e) { - return response.send(event, context, response.FAILED, e, physicalId); - '}' - - let ec2 = new AWS.EC2(); - let numberOfInstances = parseInt(event.ResourceProperties.MaxCount) + parseInt( - !Ref 'StandbyNode' @@ -1489,7 +1489,7 @@ Resources: - 'return failed({Error: ''In-place updates not supported.''});' - '}' - '};' - Runtime: nodejs16.x + Runtime: nodejs20.x Timeout: '300' MasterKey: Type: AWS::KMS::Key @@ -1555,8 +1555,8 @@ Resources: - '' - - '''use strict'';' - const response = require('cfn-response'); - - const AWS = require('aws-sdk'); - - const kms = new AWS.KMS(); + - const {KMS} = require('@aws-sdk/client-kms'); + - const kms = new KMS(); - exports.handler = function(event, context) { - ' kms.encrypt({KeyId:''' - !Ref 'MasterKey' @@ -1574,7 +1574,7 @@ Resources: - ' });' - ' });' - '};' - Runtime: nodejs16.x + Runtime: nodejs20.x Timeout: '300' EncryptCredentials: Type: Custom::EncryptCredentials @@ -1597,8 +1597,8 @@ Resources: - '' - - '''use strict'';' - const response = require('cfn-response'); - - const AWS = require('aws-sdk'); - - const ec2 = new AWS.EC2(); + - const {EC2} = require('@aws-sdk/client-ec2'); + - const ec2 = new EC2(); - exports.handler = function(event, context) { - ' let params = {' - ' DryRun: false,' @@ -1626,7 +1626,7 @@ Resources: - ' }' - ' });' - '};' - Runtime: nodejs16.x + Runtime: nodejs20.x Timeout: '300' GetSubnetCidr: Type: Custom::GetSubnetCidr @@ -1667,7 +1667,7 @@ Resources: DefaultGateWay, LicenseServerIp: LicenseServerIp, FirstDataNodeIp: FirstDataNodeIp });' - '};' - Runtime: nodejs16.x + Runtime: nodejs20.x Timeout: '300' IpCalc: Type: Custom::IpCalc From 950a59a87ec036f6ac750dfe22e0abd41e105e20 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 26 Sep 2024 11:52:04 +0200 Subject: [PATCH 08/17] Fix formatting --- test/simple_exasol_setup/main.tf | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/test/simple_exasol_setup/main.tf b/test/simple_exasol_setup/main.tf index dc8ce41..305bee6 100644 --- a/test/simple_exasol_setup/main.tf +++ b/test/simple_exasol_setup/main.tf @@ -50,8 +50,7 @@ resource "aws_security_group" "exasol_db_security_group" { from_port = 22 to_port = 22 protocol = "tcp" - cidr_blocks = [ - "0.0.0.0/0"] + cidr_blocks = ["0.0.0.0/0"] } ingress { @@ -59,8 +58,7 @@ resource "aws_security_group" "exasol_db_security_group" { from_port = 443 protocol = "tcp" to_port = 443 - cidr_blocks = [ - "0.0.0.0/0"] + cidr_blocks = ["0.0.0.0/0"] } ingress { @@ -68,8 +66,7 @@ resource "aws_security_group" "exasol_db_security_group" { from_port = 8563 protocol = "tcp" to_port = 8563 - cidr_blocks = [ - "0.0.0.0/0"] + cidr_blocks = ["0.0.0.0/0"] } ingress { @@ -83,8 +80,7 @@ resource "aws_security_group" "exasol_db_security_group" { from_port = 0 to_port = 0 protocol = "-1" - cidr_blocks = [ - "0.0.0.0/0"] + cidr_blocks = ["0.0.0.0/0"] } tags = merge(local.tags, { From dbb381ae31721ea31f1ee9b367b531f7573c7fce Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 26 Sep 2024 11:55:32 +0200 Subject: [PATCH 09/17] Remove unnecessary promise() call --- scripts/cloudformation_template_v1.1.0.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/cloudformation_template_v1.1.0.yml b/scripts/cloudformation_template_v1.1.0.yml index 5c9ca82..0701755 100644 --- a/scripts/cloudformation_template_v1.1.0.yml +++ b/scripts/cloudformation_template_v1.1.0.yml @@ -1440,7 +1440,7 @@ Resources: - function createPromise(tries, ipaddress) { - return new Promise(function cb(resolve, reject) { - event.ResourceProperties.NetworkInterfaces[0].PrivateIpAddress = ipaddress; - - ec2.runInstances(event.ResourceProperties).promise().then((data) => + - ec2.runInstances(event.ResourceProperties).then((data) => { - instanceIds.push(data['Instances'][0]['InstanceId']); - 'ec2.describeVolumes({Filters: [{Name: ''attachment.instance-id'', Values: @@ -1448,7 +1448,7 @@ Resources: - let promisesvolumes = []; - data1['Volumes'].forEach(y => { - 'promisesvolumes.push(ec2.createTags({Resources: [ y[''VolumeId'']], - Tags: event.ResourceProperties.TagSpecifications[0].Tags}).promise());' + Tags: event.ResourceProperties.TagSpecifications[0].Tags}));' - '});' - Promise.all(promisesvolumes).then(_ => { - if (instanceIds.length == numberOfInstances) { @@ -1481,8 +1481,8 @@ Resources: - return success({}); - '}' - 'let deleteParams = {InstanceIds: physicalId.split('':'')};' - - ec2.terminateInstances(deleteParams).promise().then((data)=> - - ec2.waitFor('instanceTerminated', deleteParams).promise() + - ec2.terminateInstances(deleteParams).then((data)=> + - ec2.waitFor('instanceTerminated', deleteParams) - ).then((data) => success({}) - ').catch((e) => failed({Error: e}));' - '} else {' From 2eb6facee13fe41e4d77595a6423a8040d6dbfff Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 27 Sep 2024 09:57:17 +0200 Subject: [PATCH 10/17] Remove support for BYOL --- .gitignore | 2 + README.md | 1 - doc/changes/changes_2.0.0.md | 15 ++++ doc/developers_guide/developers_guide.md | 3 +- main.tf | 3 +- ...yml => cloudformation_template_v2.0.0.yml} | 38 ++------ scripts/exasol_xmlrpc.py | 90 ++++++++++++------- test/simple_exasol_setup/main.tf | 1 - variables.tf | 6 -- 9 files changed, 85 insertions(+), 74 deletions(-) create mode 100644 doc/changes/changes_2.0.0.md rename scripts/{cloudformation_template_v1.1.0.yml => cloudformation_template_v2.0.0.yml} (97%) diff --git a/.gitignore b/.gitignore index 01c4821..12b6f23 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ venv/ .DS_Store # This is ignored because lock files are only relevant when the Terraform template is used /.terraform.lock.hcl +/lambda-test +/test/simple_exasol_setup/exasol_xmlrpc_polling.log diff --git a/README.md b/README.md index 3cbefb1..23e204e 100644 --- a/README.md +++ b/README.md @@ -155,7 +155,6 @@ The following configuration variables are available. | `datanode_instance_type` | `m5.xlarge` | An EC2 instance type for Exasol datanodes. | | `datanode_count` | `3` | The number of Exasol datanodes. | | `standbynode_count` | `0` | The number of Exasol standby nodes. | -| `license` | `null` | An optional path for the Bring Your Own (BYOL) image license file, e.g, `./mor_byol_license.xml`. | | `public_ip` | `true` | A boolean variable whether to set public IPv4 address to nodes. Skips waiting if set to `false`. | | `key_pair_name` | __ | An EC2 key pair name to attach to nodes. | | `subnet_id` | __ | A subnet id to deploy the Exasol cluster. | diff --git a/doc/changes/changes_2.0.0.md b/doc/changes/changes_2.0.0.md new file mode 100644 index 0000000..8474de1 --- /dev/null +++ b/doc/changes/changes_2.0.0.md @@ -0,0 +1,15 @@ +# terraform-aws-exasol 2.0.0, released 2024-09-?? + +Code name: Fix deprecated Lambdas in CloudFormation template + +## Summary + +This release updates the NodeJS version for Lambdas used by the CloudFormation template during deployment to 20.x. + +### Breaking Change + +The "Bring your Own License" (BYOL) AMI images are deprecated and not available. Specifying your own license file is not possible any more. Please use the "Pay as you go" (PAYG) AMI images. + +## Bug Fixes + +- #39: Fixed nodejs version in CF template diff --git a/doc/developers_guide/developers_guide.md b/doc/developers_guide/developers_guide.md index d3689e0..b225400 100644 --- a/doc/developers_guide/developers_guide.md +++ b/doc/developers_guide/developers_guide.md @@ -6,7 +6,7 @@ 2. Update the new template 3. Upload the template to S3 bucket `exasol-cf-templates` in region `eu-central-1` (prod account) and re-enable public read access: ```sh - version=v1.1.0 + version=v2.0.0 aws s3 cp scripts/cloudformation_template_${version}.yml s3://exasol-cf-templates/cloudformation_template_${version}.yml aws s3api put-object-acl --bucket exasol-cf-templates --key cloudformation_template_${version}.yml --acl public-read ``` @@ -29,7 +29,6 @@ System tests for deploying the Exasol Terraform module are located in the `test` ### Running System Tests * Install Terraform and Go -* Get an Exasol license and store it as `test/simple_exasol_setup/exasolution.lic` * Create the file `test/simple_exasol_setup/terraform.tfvars` and fill in: ```properties owner = "" diff --git a/main.tf b/main.tf index 5991847..d542817 100644 --- a/main.tf +++ b/main.tf @@ -12,7 +12,7 @@ resource "aws_cloudformation_stack" "exasol_cluster" { name = var.cluster_name capabilities = ["CAPABILITY_IAM"] on_failure = "DELETE" - template_url = "https://exasol-cf-templates.s3.eu-central-1.amazonaws.com/cloudformation_template_v1.1.0.yml" + template_url = "https://exasol-cf-templates.s3.eu-central-1.amazonaws.com/cloudformation_template_v2.0.0.yml" parameters = { DBSystemName = var.database_name DBPassword = var.sys_user_password @@ -31,7 +31,6 @@ resource "aws_cloudformation_stack" "exasol_cluster" { CreateKMSEndpoint = var.create_kms_endpoint CreateEC2Endpoint = var.create_ec2_endpoint OpenPorts = var.open_ports - License = var.license == null ? null : file(var.license) OwnerTag = var.owner ProjectTag = var.project } diff --git a/scripts/cloudformation_template_v1.1.0.yml b/scripts/cloudformation_template_v2.0.0.yml similarity index 97% rename from scripts/cloudformation_template_v1.1.0.yml rename to scripts/cloudformation_template_v2.0.0.yml index 0701755..e69b971 100644 --- a/scripts/cloudformation_template_v1.1.0.yml +++ b/scripts/cloudformation_template_v2.0.0.yml @@ -91,10 +91,6 @@ Metadata: - DBEBSEncryption - BlockDeviceVolumeSize - BlockDeviceCount - - Label: - default: License - Parameters: - - License ParameterLabels: ProjectTag: default: exa:project @@ -114,8 +110,6 @@ Metadata: default: ADMIN User Password KeyName: default: AWS Key Pair - License: - default: License (OPTIONAL) PublicIP: default: Public IPs CreateS3Bucket: @@ -350,11 +344,6 @@ Parameters: Description: '' Type: AWS::EC2::KeyPair::KeyName MinLength: '1' - License: - Default: '' - Description: In case of a BYOL image, an already aquired license can be pasted - here - Type: String SecurityGroupAccess: Default: '0.0.0.0/0' AllowedPattern: \d{1,3}([.]\d{1,3}){3}/\d{1,2} @@ -1266,12 +1255,6 @@ Resources: Fn::Base64: !Join - '' - - "mkdir -p /var/lib/exawolke/\n" - - LICENSE=' - - !Ref 'License' - - "'\n" - - "if ! [[ -z ${LICENSE//} ]]; then mv /usr/opt/EXAWolke/etc/exasolution.lic\ - \ /usr/opt/EXAWolke/etc/exasolution.lic_backup; echo $LICENSE > /usr/opt/EXAWolke/etc/exasolution.lic;\ - \ fi\n" - FIRSTDATANODEIP=' - !GetAtt 'IpCalc.FirstDataNodeIp' - "'\n" @@ -1391,7 +1374,7 @@ Resources: - '' - - '''use strict'';' - const response = require('cfn-response'); - - const {EC2} = require('@aws-sdk/client-ec2'); + - const {EC2,waitUntilInstanceTerminated} = require('@aws-sdk/client-ec2'); - const ec2 = new EC2(); - const regexIP = /\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/; - function toInt(ip) {return ip.split('.').map((octet, index, array) => @@ -1480,11 +1463,12 @@ Resources: - if (physicalId == 'none') { - return success({}); - '}' - - 'let deleteParams = {InstanceIds: physicalId.split('':'')};' - - ec2.terminateInstances(deleteParams).then((data)=> - - ec2.waitFor('instanceTerminated', deleteParams) - - ).then((data) => success({}) - - ').catch((e) => failed({Error: e}));' + - 'const deleteParams = {InstanceIds: physicalId.split('':'')};' + - ec2.terminateInstances(deleteParams).then((data)=> { + - console.log('Waiting for instances to terminate...'); + - return waitUntilInstanceTerminated({client: ec2}, deleteParams); + - '}).then((data) => { console.log(''Instances terminated successfully''); return success({});}' + - ').catch((e) => { console.log(''Terminating failed: '' + e); return failed({Error: ''Error when terminating instances: '' + e}); } );' - '} else {' - 'return failed({Error: ''In-place updates not supported.''});' - '}' @@ -1569,7 +1553,7 @@ Resources: data2) {' - ' if (err) { console.log(err, err.stack); }' - ' return response.send(event, context, response.SUCCESS, { DBPassword: - data1.CiphertextBlob.toString(''base64''), ExasolPassword: data2.CiphertextBlob.toString(''base64'') + Buffer.from(data1.CiphertextBlob).toString(''base64''), ExasolPassword: Buffer.from(data2.CiphertextBlob).toString(''base64'') });' - ' });' - ' });' @@ -1841,12 +1825,6 @@ Resources: Fn::Base64: !Join - '' - - "mkdir -p /var/lib/exawolke/\n" - - LICENSE=' - - !Ref 'License' - - "'\n" - - "if ! [[ -z ${LICENSE//} ]]; then mv /usr/opt/EXAWolke/etc/exasolution.lic\ - \ /usr/opt/EXAWolke/etc/exasolution.lic_backup; echo $LICENSE > /usr/opt/EXAWolke/etc/exasolution.lic;\ - \ fi\n" - FIRSTDATANODEIP=' - !GetAtt 'IpCalc.FirstDataNodeIp' - "'\n" diff --git a/scripts/exasol_xmlrpc.py b/scripts/exasol_xmlrpc.py index daca346..a692627 100644 --- a/scripts/exasol_xmlrpc.py +++ b/scripts/exasol_xmlrpc.py @@ -1,65 +1,91 @@ import argparse import ssl import time -from xmlrpc.client import Fault +import logging +from xmlrpc.client import ServerProxy from xmlrpc.client import Server as xmlrpc +import datetime -WAIT_MAX_ITERATIONS = 12 -WAIT_INITIAL_SLEEP_TIME = 60 * 5 # every 5 minutes, total 12 * 5 = 1h wait +logging.basicConfig( + filename="exasol_xmlrpc_polling.log", + format="%(asctime)s %(name)s %(levelname)s %(message)s", + filemode="a", + level=logging.DEBUG, +) +logging.getLogger().addHandler(logging.StreamHandler()) +logger = logging.getLogger("exasol_xmlrpc") -CLUSTER_URL = 'https://{}:{}@{}/cluster1' +WAIT_DURATION: datetime.timedelta = datetime.timedelta(hours=1) +WAIT_SLEEP_TIME: datetime.timedelta = datetime.timedelta(seconds=15) -def has_started(server): + +def has_started(server: ServerProxy) -> bool: started = True try: server.listMethods() - except: + except Exception as ex: + logger.info(f"Server not yet started: {ex}") started = False return started -def wait(server): - sleep_time = WAIT_INITIAL_SLEEP_TIME - max_iterations = WAIT_MAX_ITERATIONS - while max_iterations > 0: - print("Waiting iteration count: %s" % max_iterations) +def wait(server: ServerProxy) -> None: + start = datetime.datetime.now() + + def current_delta(): + return datetime.datetime.now() - start + + def remaining(): + return WAIT_DURATION - current_delta() + + while remaining().total_seconds() > 0: + logger.info( + f"Waiting for {WAIT_DURATION} (remaining: {remaining()}) with sleep time {WAIT_SLEEP_TIME}s" + ) - started = has_started(server) - if started: - break + if has_started(server): + logger.info(f"Server started after {current_delta()}") + return - max_iterations -= 1 - time.sleep(sleep_time) + time.sleep(WAIT_SLEEP_TIME.seconds) - if max_iterations == 0: - raise Exception("Exasol management node could not be started after long time!") + if remaining().total_seconds() < 0: + raise TimeoutError( + f"Exasol management node could not be started after {current_delta()}!" + ) -def create_server(address, username, password): - url = CLUSTER_URL.format(username, password, address) - server = xmlrpc(url, context=ssl._create_unverified_context()) - return server -def check_db_started(server): - print("Checking if 'exadb' database is running") +def create_server(address, username, password) -> ServerProxy: + url = f"https://{username}:{password}@{address}/cluster1" + logger.info(f"Connecting to {username} @ {address}") + return xmlrpc(url, context=ssl._create_unverified_context()) + + +def check_db_started(server: ServerProxy): + logger.info("Checking if 'exadb' database is running") if not server.db_exadb.runningDatabase(): - raise Exception("Exasol database is not started!") + raise RuntimeError("Exasol database is not started!") + def run(): - parser = argparse.ArgumentParser(description='Exasol XMLRPC Interactions') - parser.add_argument('--license-server-address', type=str, required=True) - parser.add_argument('--username', type=str, required=True) - parser.add_argument('--password', type=str, required=True) + parser = argparse.ArgumentParser(description="Exasol XMLRPC Interactions") + parser.add_argument("--license-server-address", type=str, required=True) + parser.add_argument("--username", type=str, required=True) + parser.add_argument("--password", type=str, required=True) args = parser.parse_args() - print("The following arguments are provided: '%s'" % args) + logger.info("The following arguments are provided: '%s'" % args) try: - server = create_server(args.license_server_address, args.username, args.password) + server = create_server( + args.license_server_address, args.username, args.password + ) wait(server) check_db_started(server) except Exception as ex: - print('Exception "%s" was thrown!' % str(ex)) + logger.info('Exception "%s" was thrown!' % str(ex)) return 1 + if __name__ == "__main__": exit(run()) diff --git a/test/simple_exasol_setup/main.tf b/test/simple_exasol_setup/main.tf index 305bee6..a33bdee 100644 --- a/test/simple_exasol_setup/main.tf +++ b/test/simple_exasol_setup/main.tf @@ -139,7 +139,6 @@ module "exasol" { project_name = var.project owner = var.owner environment = "dev" - license = "./exasolution.lic" } output "datanode_ip" { diff --git a/variables.tf b/variables.tf index 2e1b79e..b926f07 100644 --- a/variables.tf +++ b/variables.tf @@ -84,12 +84,6 @@ variable "open_ports" { type = string } -variable "license" { - default = null - description = "A path to license file that can be used with Bring Your Own License (BYOL) installation." - type = string -} - variable "management_server_instance_type" { default = "m5.large" description = "An EC2 instance type for the Exasol management server." From f558389e13934565525935dad37407b20f4b59de Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 27 Sep 2024 10:01:31 +0200 Subject: [PATCH 11/17] Fix yml syntax --- scripts/cloudformation_template_v2.0.0.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cloudformation_template_v2.0.0.yml b/scripts/cloudformation_template_v2.0.0.yml index e69b971..c909d1b 100644 --- a/scripts/cloudformation_template_v2.0.0.yml +++ b/scripts/cloudformation_template_v2.0.0.yml @@ -1466,7 +1466,7 @@ Resources: - 'const deleteParams = {InstanceIds: physicalId.split('':'')};' - ec2.terminateInstances(deleteParams).then((data)=> { - console.log('Waiting for instances to terminate...'); - - return waitUntilInstanceTerminated({client: ec2}, deleteParams); + - 'return waitUntilInstanceTerminated({client: ec2}, deleteParams);' - '}).then((data) => { console.log(''Instances terminated successfully''); return success({});}' - ').catch((e) => { console.log(''Terminating failed: '' + e); return failed({Error: ''Error when terminating instances: '' + e}); } );' - '} else {' From 6d2f83de58d85cb0bf9ca205c61e5fbf7f8805e0 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 27 Sep 2024 10:41:15 +0200 Subject: [PATCH 12/17] Fix formatting --- main.tf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main.tf b/main.tf index d542817..42f35e7 100644 --- a/main.tf +++ b/main.tf @@ -1,15 +1,15 @@ data "aws_ami" "exasol" { most_recent = true - owners = [var.ami_image_owner] + owners = [var.ami_image_owner] filter { - name = "name" + name = "name" values = ["*${var.ami_image_name}*"] } } resource "aws_cloudformation_stack" "exasol_cluster" { - name = var.cluster_name + name = var.cluster_name capabilities = ["CAPABILITY_IAM"] on_failure = "DELETE" template_url = "https://exasol-cf-templates.s3.eu-central-1.amazonaws.com/cloudformation_template_v2.0.0.yml" @@ -56,7 +56,7 @@ data "aws_instance" "management_server" { } resource "null_resource" "exasol_cluster_wait" { - count = var.public_ip ? 1 : 0 + count = var.public_ip ? 1 : 0 depends_on = [aws_cloudformation_stack.exasol_cluster] triggers = { From 59bf8ba0cf52350586418f2f6e92745cf7500e16 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 27 Sep 2024 10:48:53 +0200 Subject: [PATCH 13/17] Update release notes --- README.md | 4 ++-- doc/changes/changes_2.0.0.md | 6 +++--- scripts/exasol_xmlrpc.py | 5 ++++- variables.tf | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 23e204e..23ccc8d 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ module "exasol" { cluster_name = "exasol-cluster" database_name = "exadb" - ami_image_name = "Exasol-R7.1.26-BYOL" + ami_image_name = "Exasol-R7.1.26-PAYG" sys_user_password = "eXaSol1337DB" admin_user_password = "eXaSol1337OP" management_server_instance_type = "m5.xlarge" @@ -148,7 +148,7 @@ The following configuration variables are available. | `cluster_name` | `exasol-cluster` | A name for the to be deployed cluster. | | `database_name` | `exadb` | A name of the Exasol database. | | `ami_image_id` | `null` | An Exasol release AMI image id, e.g, `ami-05fad9f0c2609cef0`. | -| `ami_image_name` | __ | An Exasol release AMI image name, e.g, `Exasol-R7.1.26-PAYG` or `Exasol-R7.1.26-BYOL`. | +| `ami_image_name` | __ | An Exasol release AMI image name, e.g, `Exasol-R7.1.26-PAYG`. | | `sys_user_password` | __ | An Exasol database `sys` user password. | | `admin_user_password` | __ | An EXAOperation `admin` user password. | | `management_server_instance_type` | `m5.large` | An EC2 instance type for management server. | diff --git a/doc/changes/changes_2.0.0.md b/doc/changes/changes_2.0.0.md index 8474de1..6b78e26 100644 --- a/doc/changes/changes_2.0.0.md +++ b/doc/changes/changes_2.0.0.md @@ -1,6 +1,6 @@ -# terraform-aws-exasol 2.0.0, released 2024-09-?? +# terraform-aws-exasol 2.0.0, released 2024-09-27 -Code name: Fix deprecated Lambdas in CloudFormation template +Code name: Update CloudFormation template ## Summary @@ -8,7 +8,7 @@ This release updates the NodeJS version for Lambdas used by the CloudFormation t ### Breaking Change -The "Bring your Own License" (BYOL) AMI images are deprecated and not available. Specifying your own license file is not possible any more. Please use the "Pay as you go" (PAYG) AMI images. +The "Bring your Own License" (BYOL) AMI images are deprecated and not available any more. Specifying your own license file is not possible any more. Please use the "Pay as you go" (PAYG) AMI images, e.g. `Exasol-R7.1.26-PAYG`. ## Bug Fixes diff --git a/scripts/exasol_xmlrpc.py b/scripts/exasol_xmlrpc.py index a692627..54313d7 100644 --- a/scripts/exasol_xmlrpc.py +++ b/scripts/exasol_xmlrpc.py @@ -63,7 +63,10 @@ def create_server(address, username, password) -> ServerProxy: def check_db_started(server: ServerProxy): logger.info("Checking if 'exadb' database is running") - if not server.db_exadb.runningDatabase(): + running = server.db_exadb.runningDatabase() + if running: + logger.info(f"Exasol database is running: {running}") + else: raise RuntimeError("Exasol database is not started!") diff --git a/variables.tf b/variables.tf index b926f07..dc3e8ea 100644 --- a/variables.tf +++ b/variables.tf @@ -12,7 +12,7 @@ variable "database_name" { } variable "ami_image_name" { - description = "An Exasol AMI image name. For example, 'Exasol-R7.1.26-PAYG' or 'Exasol-R7.1.26-BYOL'." + description = "An Exasol AMI image name. For example, 'Exasol-R7.1.26-PAYG'." type = string } From 0fc3751df002074d9b3a64f5f3d95693dd37c1c9 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 27 Sep 2024 10:56:02 +0200 Subject: [PATCH 14/17] Cleanup --- doc/developers_guide/developers_guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/developers_guide/developers_guide.md b/doc/developers_guide/developers_guide.md index b225400..c15a9b4 100644 --- a/doc/developers_guide/developers_guide.md +++ b/doc/developers_guide/developers_guide.md @@ -4,7 +4,7 @@ 1. Make a copy of the latest template in `scripts` for the new version 2. Update the new template -3. Upload the template to S3 bucket `exasol-cf-templates` in region `eu-central-1` (prod account) and re-enable public read access: +3. Upload the template to S3 bucket `exasol-cf-templates` in region `eu-central-1` (prod account) and enable public read access: ```sh version=v2.0.0 aws s3 cp scripts/cloudformation_template_${version}.yml s3://exasol-cf-templates/cloudformation_template_${version}.yml From e232bbf7f16e4166d0c6b4a54dec321cbaeda729 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 27 Sep 2024 14:50:10 +0200 Subject: [PATCH 15/17] Implement review findings --- doc/changes/changes_2.0.0.md | 2 +- scripts/exasol_xmlrpc.py | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/changes/changes_2.0.0.md b/doc/changes/changes_2.0.0.md index 6b78e26..36ed920 100644 --- a/doc/changes/changes_2.0.0.md +++ b/doc/changes/changes_2.0.0.md @@ -1,6 +1,6 @@ # terraform-aws-exasol 2.0.0, released 2024-09-27 -Code name: Update CloudFormation template +Code name: Update CloudFormation template and new DB version ## Summary diff --git a/scripts/exasol_xmlrpc.py b/scripts/exasol_xmlrpc.py index 54313d7..248c2be 100644 --- a/scripts/exasol_xmlrpc.py +++ b/scripts/exasol_xmlrpc.py @@ -19,17 +19,17 @@ WAIT_SLEEP_TIME: datetime.timedelta = datetime.timedelta(seconds=15) -def has_started(server: ServerProxy) -> bool: +def has_started(client: ServerProxy) -> bool: started = True try: - server.listMethods() + client.listMethods() except Exception as ex: logger.info(f"Server not yet started: {ex}") started = False return started -def wait(server: ServerProxy) -> None: +def wait(client: ServerProxy) -> None: start = datetime.datetime.now() def current_delta(): @@ -43,7 +43,7 @@ def remaining(): f"Waiting for {WAIT_DURATION} (remaining: {remaining()}) with sleep time {WAIT_SLEEP_TIME}s" ) - if has_started(server): + if has_started(client): logger.info(f"Server started after {current_delta()}") return @@ -55,15 +55,15 @@ def remaining(): ) -def create_server(address, username, password) -> ServerProxy: +def create_client(address, username, password) -> ServerProxy: url = f"https://{username}:{password}@{address}/cluster1" logger.info(f"Connecting to {username} @ {address}") return xmlrpc(url, context=ssl._create_unverified_context()) -def check_db_started(server: ServerProxy): +def check_db_started(client: ServerProxy): logger.info("Checking if 'exadb' database is running") - running = server.db_exadb.runningDatabase() + running = client.db_exadb.runningDatabase() if running: logger.info(f"Exasol database is running: {running}") else: @@ -80,11 +80,11 @@ def run(): logger.info("The following arguments are provided: '%s'" % args) try: - server = create_server( + client = create_client( args.license_server_address, args.username, args.password ) - wait(server) - check_db_started(server) + wait(client) + check_db_started(client) except Exception as ex: logger.info('Exception "%s" was thrown!' % str(ex)) return 1 From 749e8f1a1b58268afcd80f294047dc0b399555fa Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 30 Sep 2024 07:11:03 +0200 Subject: [PATCH 16/17] Update release date --- doc/changes/changes_2.0.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/changes/changes_2.0.0.md b/doc/changes/changes_2.0.0.md index 36ed920..fbc852c 100644 --- a/doc/changes/changes_2.0.0.md +++ b/doc/changes/changes_2.0.0.md @@ -1,4 +1,4 @@ -# terraform-aws-exasol 2.0.0, released 2024-09-27 +# terraform-aws-exasol 2.0.0, released 2024-09-30 Code name: Update CloudFormation template and new DB version From 6f4eb4ca3f5d980158cdcae68ef31f2769ba5b2f Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 30 Sep 2024 07:28:18 +0200 Subject: [PATCH 17/17] Add link to changelog --- doc/changes/changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index a1fbef0..e938a6d 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [2.0.0](changes_2.0.0.md) * [1.0.4](changes_1.0.4.md) * [1.0.3](changes_1.0.3.md) * [1.0.2](changes_1.0.2.md)