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..12b6f23 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,7 @@ terraform.tfstate *.iml venv/ .DS_Store -.terraform.lock.hcl +# 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 15fb9d0..23ccc8d 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-PAYG" sys_user_password = "eXaSol1337DB" admin_user_password = "eXaSol1337OP" management_server_instance_type = "m5.xlarge" @@ -148,14 +148,13 @@ 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`. | | `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. | | `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/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) diff --git a/doc/changes/changes_2.0.0.md b/doc/changes/changes_2.0.0.md new file mode 100644 index 0000000..fbc852c --- /dev/null +++ b/doc/changes/changes_2.0.0.md @@ -0,0 +1,15 @@ +# terraform-aws-exasol 2.0.0, released 2024-09-30 + +Code name: Update CloudFormation template and new DB version + +## 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 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 + +- #39: Fixed nodejs version in CF template diff --git a/doc/developers_guide/developers_guide.md b/doc/developers_guide/developers_guide.md index 50dddf1..c15a9b4 100644 --- a/doc/developers_guide/developers_guide.md +++ b/doc/developers_guide/developers_guide.md @@ -4,7 +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) +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 + aws s3api put-object-acl --bucket exasol-cf-templates --key cloudformation_template_${version}.yml --acl public-read + ``` + ## CI Tests @@ -23,9 +29,8 @@ 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 = "" aws_profile = "" ``` diff --git a/main.tf b/main.tf index 73b4269..42f35e7 100644 --- a/main.tf +++ b/main.tf @@ -1,21 +1,18 @@ 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}-*"] + name = "name" + values = ["*${var.ami_image_name}*"] } } resource "aws_cloudformation_stack" "exasol_cluster" { - name = var.cluster_name - capabilities = [ - "CAPABILITY_IAM"] + 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.0.4.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 @@ -34,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 } @@ -60,9 +56,8 @@ data "aws_instance" "management_server" { } resource "null_resource" "exasol_cluster_wait" { - count = var.public_ip ? 1 : 0 - depends_on = [ - aws_cloudformation_stack.exasol_cluster] + count = var.public_ip ? 1 : 0 + depends_on = [aws_cloudformation_stack.exasol_cluster] triggers = { always = uuid() @@ -83,6 +78,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_v2.0.0.yml b/scripts/cloudformation_template_v2.0.0.yml new file mode 100644 index 0000000..c909d1b --- /dev/null +++ b/scripts/cloudformation_template_v2.0.0.yml @@ -0,0 +1,1996 @@ +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 + 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 + 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 + 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' + 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" + - 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 {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) => + {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 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).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.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({}); + - '}' + - '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.''});' + - '}' + - '};' + Runtime: nodejs20.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 {KMS} = require('@aws-sdk/client-kms'); + - const kms = new 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: + Buffer.from(data1.CiphertextBlob).toString(''base64''), ExasolPassword: Buffer.from(data2.CiphertextBlob).toString(''base64'') + });' + - ' });' + - ' });' + - '};' + Runtime: nodejs20.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 {EC2} = require('@aws-sdk/client-ec2'); + - const ec2 = new 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: nodejs20.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: nodejs20.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" + - 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/scripts/exasol_xmlrpc.py b/scripts/exasol_xmlrpc.py index daca346..248c2be 100644 --- a/scripts/exasol_xmlrpc.py +++ b/scripts/exasol_xmlrpc.py @@ -1,65 +1,94 @@ 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(client: ServerProxy) -> bool: started = True try: - server.listMethods() - except: + client.listMethods() + 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(client: 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(client): + 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") - if not server.db_exadb.runningDatabase(): - raise Exception("Exasol database is not started!") +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(client: ServerProxy): + logger.info("Checking if 'exadb' database is running") + running = client.db_exadb.runningDatabase() + if running: + logger.info(f"Exasol database is running: {running}") + else: + 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) - wait(server) - check_db_started(server) + client = create_client( + args.license_server_address, args.username, args.password + ) + wait(client) + check_db_started(client) 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/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= 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", ] } diff --git a/test/simple_exasol_setup/main.tf b/test/simple_exasol_setup/main.tf index b33aee5..a33bdee 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, { @@ -124,7 +120,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-PAYG" sys_user_password = var.exasol_sys_password admin_user_password = var.exasol_admin_password management_server_instance_type = "m5.large" @@ -143,7 +139,6 @@ module "exasol" { project_name = var.project owner = var.owner environment = "dev" - license = "./exasolution.lic" } output "datanode_ip" { 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") } } diff --git a/variables.tf b/variables.tf index d20a914..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, 'R6.1.5-PAYG' or 'R6.2.1-BYOL'." + description = "An Exasol AMI image name. For example, 'Exasol-R7.1.26-PAYG'." type = string } @@ -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." @@ -148,4 +142,3 @@ variable "waited_on" { description = "A variable that this module can wait on." type = string } - 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" } } }