Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HVT-4407 implement ip allowlist in terraform provider #625

Conversation

aslamovamir
Copy link
Contributor

@aslamovamir aslamovamir commented Oct 6, 2023

🛠️ Description

Adding a new field ip_allowlist to the hcp_vault_cluster resource to support IP Allowlisting - a Block List (list of objects).
Jira ticket: https://hashicorp.atlassian.net/browse/HVT-4407

🏗️ Acceptance tests

  • Are there any feature flags that are required to use this functionality?
  • Have you added an acceptance test for the functionality being added?
  • Have you run the acceptance tests on this branch?

Output from acceptance testing:

AWS
amiraslamov ~/Documents/GitHub/terraform-provider-hcp (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ make testacc TESTARGS='-run=TestAccVaultClusterAWS'
==> Checking that code complies with gofmt requirements...
golangci-lint run --config ./golangci-config.yml 
TF_ACC=1 go test ./internal/... -v -run=TestAccVaultClusterAWS -timeout 360m -parallel=10
?       github.com/hashicorp/terraform-provider-hcp/internal/clients/iampolicy  [no test files]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/clients    (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/consul     (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/hcpvalidator       (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/input      (cached) [no tests to run]
?       github.com/hashicorp/terraform-provider-hcp/internal/provider   [no test files]
?       github.com/hashicorp/terraform-provider-hcp/internal/provider/acctest   [no test files]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/iam       (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/logstreaming      (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/resourcemanager   (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/vaultsecrets      (cached) [no tests to run]
=== RUN   TestAccVaultClusterAWS
=== PAUSE TestAccVaultClusterAWS
=== CONT  TestAccVaultClusterAWS
--- PASS: TestAccVaultClusterAWS (3666.39s)
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/providersdkv2      3667.048s
Azure
amiraslamov ~/Documents/GitHub/terraform-provider-hcp (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ make testacc TESTARGS='-run=TestAccVaultClusterAzure'
==> Checking that code complies with gofmt requirements...
golangci-lint run --config ./golangci-config.yml 
TF_ACC=1 go test ./internal/... -v -run=TestAccVaultClusterAzure -timeout 360m -parallel=10
?       github.com/hashicorp/terraform-provider-hcp/internal/clients/iampolicy  [no test files]
?       github.com/hashicorp/terraform-provider-hcp/internal/provider   [no test files]
?       github.com/hashicorp/terraform-provider-hcp/internal/provider/acctest   [no test files]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/clients    0.930s [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/consul     0.659s [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/hcpvalidator       1.244s [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/input      0.989s [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/iam       2.582s [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/logstreaming      1.722s [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/resourcemanager   2.144s [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/vaultsecrets      1.274s [no tests to run]
=== RUN   TestAccVaultClusterAzure
=== PAUSE TestAccVaultClusterAzure
=== CONT  TestAccVaultClusterAzure
--- PASS: TestAccVaultClusterAzure (3659.65s)
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/providersdkv2      3662.802s
Consul cluster test
amiraslamov ~/Documents/GitHub/terraform-provider-hcp (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ make testacc TESTARGS='-run=TestAccConsulCluster'
==> Checking that code complies with gofmt requirements...
golangci-lint run --config ./golangci-config.yml 
TF_ACC=1 go test ./internal/... -v -run=TestAccConsulCluster -timeout 360m -parallel=10
?       github.com/hashicorp/terraform-provider-hcp/internal/clients/iampolicy  [no test files]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/clients    (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/consul     (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/hcpvalidator       (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/input      (cached) [no tests to run]
?       github.com/hashicorp/terraform-provider-hcp/internal/provider   [no test files]
?       github.com/hashicorp/terraform-provider-hcp/internal/provider/acctest   [no test files]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/iam       (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/logstreaming      (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/resourcemanager   (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/provider/vaultsecrets      (cached) [no tests to run]
=== RUN   TestAccConsulCluster
--- PASS: TestAccConsulCluster (697.97s)
PASS
ok      github.com/hashicorp/terraform-provider-hcp/internal/providersdkv2      698.631s

End to End Tests (PROD)

Test AWS Cluster with IP Allowlist

Resource CREATE

  1. Generate the provider locally with make dev in root of repo
  2. Make a test folder test/
  3. In test folder, create a main.tf with following :
locals {
  hvn_region = "us-west-2"
  cluster_id = "ip-allowlist-cluster"
  hvn_id     = "vault-tf-hvn"
}

terraform {
  required_providers {
    hcp = {
      source  = "localhost/providers/hcp"
      version = "0.0.1"
    }
  }
}

// Organization principal
provider "hcp" {
  client_id     = "KdxErVa8Mtd0BOFOg0OMHahvhvk6akrn"
  client_secret = "LuBhWi5vJzbJ0fb1f_KBVt6gLwqo2E5eAcvpMA9T2h5KIazrdsrKYR1T_BiUly6C"
  project_id = "aa02bed1-7174-44ae-8dee-8fc94243534b"
}

resource "hcp_hvn" "main" {
  hvn_id         = local.hvn_id
  cloud_provider = "aws"
  region         = local.hvn_region
  cidr_block     = "172.25.32.0/20"
}

resource "hcp_vault_cluster" "main" {
  cluster_id      = local.cluster_id
  hvn_id          = hcp_hvn.main.hvn_id
  public_endpoint = true
  tier            = "STANDARD_SMALL"
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }
  
  ip_allowlist {
    address     = "192.163.1.0/24"
    description = "this is an IPV4 address"
  }
}
  1. Run terraform init
  2. Run terraform plan
  3. Results from terraform plan:
    Screenshot 2024-01-17 at 3 43 18 PM
  4. Run terraform apply
  5. Results from terraform apply:
amiraslamov ~/Documents/GitHub/terraform-provider-hcp/test (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # hcp_hvn.main will be created
  + resource "hcp_hvn" "main" {
      + cidr_block          = "172.25.32.0/20"
      + cloud_provider      = "aws"
      + created_at          = (known after apply)
      + hvn_id              = "vault-tf-hvn"
      + id                  = (known after apply)
      + organization_id     = (known after apply)
      + project_id          = (known after apply)
      + provider_account_id = (known after apply)
      + region              = "us-west-2"
      + self_link           = (known after apply)
      + state               = (known after apply)
    }

  # hcp_vault_cluster.main will be created
  + resource "hcp_vault_cluster" "main" {
      + cloud_provider             = (known after apply)
      + cluster_id                 = "ip-allowlist-cluster"
      + created_at                 = (known after apply)
      + hvn_id                     = "vault-tf-hvn"
      + id                         = (known after apply)
      + namespace                  = (known after apply)
      + organization_id            = (known after apply)
      + project_id                 = (known after apply)
      + proxy_endpoint             = "DISABLED"
      + public_endpoint            = true
      + region                     = (known after apply)
      + self_link                  = (known after apply)
      + state                      = (known after apply)
      + tier                       = "STANDARD_SMALL"
      + vault_private_endpoint_url = (known after apply)
      + vault_proxy_endpoint_url   = (known after apply)
      + vault_public_endpoint_url  = (known after apply)
      + vault_version              = (known after apply)

      + ip_allowlist {
          + address     = "192.163.1.0/24"
          + description = "this is an IPV4 address"
        }

      + major_version_upgrade_config {
          + maintenance_window_day  = "MONDAY"
          + maintenance_window_time = "WINDOW_12AM_4AM"
          + upgrade_type            = "SCHEDULED"
        }
    }

Plan: 2 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

hcp_hvn.main: Creating...
hcp_hvn.main: Still creating... [10s elapsed]
hcp_hvn.main: Still creating... [20s elapsed]
hcp_hvn.main: Still creating... [30s elapsed]
hcp_hvn.main: Still creating... [40s elapsed]
hcp_hvn.main: Still creating... [50s elapsed]
hcp_hvn.main: Creation complete after 1m0s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/vault-tf-hvn]
hcp_vault_cluster.main: Creating...
hcp_vault_cluster.main: Still creating... [10s elapsed]
hcp_vault_cluster.main: Still creating... [20s elapsed]
hcp_vault_cluster.main: Still creating... [30s elapsed]
hcp_vault_cluster.main: Still creating... [40s elapsed]
hcp_vault_cluster.main: Still creating... [50s elapsed]
hcp_vault_cluster.main: Still creating... [1m0s elapsed]
hcp_vault_cluster.main: Still creating... [1m10s elapsed]
hcp_vault_cluster.main: Still creating... [1m20s elapsed]
hcp_vault_cluster.main: Still creating... [1m30s elapsed]
hcp_vault_cluster.main: Still creating... [1m40s elapsed]
hcp_vault_cluster.main: Still creating... [1m50s elapsed]
hcp_vault_cluster.main: Still creating... [2m0s elapsed]
hcp_vault_cluster.main: Still creating... [2m10s elapsed]
hcp_vault_cluster.main: Still creating... [2m20s elapsed]
hcp_vault_cluster.main: Still creating... [2m30s elapsed]
hcp_vault_cluster.main: Still creating... [2m40s elapsed]
hcp_vault_cluster.main: Still creating... [2m50s elapsed]
hcp_vault_cluster.main: Still creating... [3m0s elapsed]
hcp_vault_cluster.main: Still creating... [3m10s elapsed]
hcp_vault_cluster.main: Still creating... [3m20s elapsed]
hcp_vault_cluster.main: Still creating... [3m30s elapsed]
hcp_vault_cluster.main: Still creating... [3m40s elapsed]
hcp_vault_cluster.main: Still creating... [3m50s elapsed]
hcp_vault_cluster.main: Still creating... [4m0s elapsed]
hcp_vault_cluster.main: Still creating... [4m10s elapsed]
hcp_vault_cluster.main: Still creating... [4m20s elapsed]
hcp_vault_cluster.main: Still creating... [4m30s elapsed]
hcp_vault_cluster.main: Still creating... [4m40s elapsed]
hcp_vault_cluster.main: Still creating... [4m50s elapsed]
hcp_vault_cluster.main: Creation complete after 4m54s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Screenshot 2024-01-17 at 3 51 48 PM Screenshot 2024-01-17 at 3 52 06 PM Screenshot 2024-01-17 at 3 52 36 PM

Datasource (READ ONLY)

  1. Modify main.tf with the following:
data hcp_vault_cluster "test" {
    cluster_id = local.cluster_id
}

output "verify_allowlist_output" {
    description = "output of the ALLOWLIST"
    value = data.hcp_vault_cluster.test.ip_allowlist
}
  1. run terraform apply
  2. Results:
    Screenshot 2024-01-17 at 4 01 02 PM

Resource UPDATE

  1. Modify the hcp_vault_cluster resource:
resource "hcp_vault_cluster" "main" {
  cluster_id      = local.cluster_id
  hvn_id          = hcp_hvn.main.hvn_id
  public_endpoint = true
  tier            = "STANDARD_SMALL"
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }
  
  ip_allowlist {
    address     = "160.20.10.0/24"
    description = "modified!!!"
  }
}
  1. Run terraform apply
  2. Results:
amiraslamov ~/Documents/GitHub/terraform-provider-hcp/test (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ terraform apply
hcp_hvn.main: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/vault-tf-hvn]
hcp_vault_cluster.main: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # hcp_vault_cluster.main will be updated in-place
  ~ resource "hcp_vault_cluster" "main" {
        id                         = "/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster"
        # (16 unchanged attributes hidden)

      ~ ip_allowlist {
          ~ address     = "192.163.1.0/24" -> "160.20.10.0/24"
          ~ description = "this is an IPV4 address" -> "modified!!!"
        }

        # (1 unchanged block hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

hcp_vault_cluster.main: Modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...orp.vault.cluster/ip-allowlist-cluster, 10s elapsed]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...orp.vault.cluster/ip-allowlist-cluster, 20s elapsed]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...orp.vault.cluster/ip-allowlist-cluster, 30s elapsed]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...orp.vault.cluster/ip-allowlist-cluster, 40s elapsed]
hcp_vault_cluster.main: Modifications complete after 46s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

Outputs:

verify_allowlist_output = tolist([
  {
    "address" = "192.163.1.0/24"
    "description" = "this is an IPV4 address"
  },
])
Screenshot 2024-01-17 at 4 11 56 PM
Test AWS and Azure clusters together with IP allowlist

Resource CREATE

  1. Generate the provider locally with make dev in root of repo
  2. Make a test folder test2/
  3. In test folder, create a main.tf with following :
terraform {
  required_providers {
    hcp = {
      source  = "localhost/providers/hcp"
      version = "0.0.1"
    }
  }
}

// Organization principal
provider "hcp" {
  client_id     = "KdxErVa8Mtd0BOFOg0OMHahvhvk6akrn"
  client_secret = "LuBhWi5vJzbJ0fb1f_KBVt6gLwqo2E5eAcvpMA9T2h5KIazrdsrKYR1T_BiUly6C"
  project_id = "aa02bed1-7174-44ae-8dee-8fc94243534b"
}

// Create a HashiCorp Virtual Network (HVN):
resource "hcp_hvn" "terraform-hvn" {
  hvn_id         = "terraform-hvn"
  cloud_provider = "aws"
  region         = "us-west-2"
  cidr_block     = "172.25.16.0/20"
}

resource "hcp_hvn" "terraform-hvn-az" {
  hvn_id         = "terraform-hvn-az"
  cloud_provider = "azure"
  region         = "eastus"
  cidr_block     = "172.26.16.0/20"
}

// Create HCPV cluster on AWS:
resource "hcp_vault_cluster" "tf-vault-cluster" {
  depends_on      = [hcp_hvn.terraform-hvn]
  hvn_id          = hcp_hvn.terraform-hvn.hvn_id
  cluster_id      = "tf-vault-cluster"
  tier            = "STANDARD_SMALL"
  public_endpoint = true
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }

  ip_allowlist {
    address = "172.25.16.0/24"
    description = "Allow access to this IP"
  }

  ip_allowlist {
    address = "192.168.1.0/24"
    description = "Allow access to this IP too"
  }
}

// Create HCPV cluster on Azure:
resource "hcp_vault_cluster" "tf-vault-cluster-az" {
  depends_on      = [hcp_hvn.terraform-hvn-az]
  hvn_id          = hcp_hvn.terraform-hvn-az.hvn_id
  cluster_id      = "tf-vault-cluster-az"
  tier            = "STANDARD_SMALL"
  public_endpoint = true
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }

  ip_allowlist {
    address = "172.25.16.0/24"
    description = "Allow access to this IP"
  }

  ip_allowlist {
    address = "192.168.1.0/24"
    description = "Allow access to this IP too"
  }
}
  1. Run terraform init
  2. Run terraform plan
  3. Results from terraform plan:
amiraslamov ~/Documents/GitHub/terraform-provider-hcp/test2 (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # hcp_hvn.terraform-hvn will be created
  + resource "hcp_hvn" "terraform-hvn" {
      + cidr_block          = "172.25.16.0/20"
      + cloud_provider      = "aws"
      + created_at          = (known after apply)
      + hvn_id              = "terraform-hvn"
      + id                  = (known after apply)
      + organization_id     = (known after apply)
      + project_id          = (known after apply)
      + provider_account_id = (known after apply)
      + region              = "us-west-2"
      + self_link           = (known after apply)
      + state               = (known after apply)
    }

  # hcp_hvn.terraform-hvn-az will be created
  + resource "hcp_hvn" "terraform-hvn-az" {
      + cidr_block          = "172.26.16.0/20"
      + cloud_provider      = "azure"
      + created_at          = (known after apply)
      + hvn_id              = "terraform-hvn-az"
      + id                  = (known after apply)
      + organization_id     = (known after apply)
      + project_id          = (known after apply)
      + provider_account_id = (known after apply)
      + region              = "eastus"
      + self_link           = (known after apply)
      + state               = (known after apply)
    }

  # hcp_vault_cluster.tf-vault-cluster will be created
  + resource "hcp_vault_cluster" "tf-vault-cluster" {
      + cloud_provider             = (known after apply)
      + cluster_id                 = "tf-vault-cluster"
      + created_at                 = (known after apply)
      + hvn_id                     = "terraform-hvn"
      + id                         = (known after apply)
      + namespace                  = (known after apply)
      + organization_id            = (known after apply)
      + project_id                 = (known after apply)
      + proxy_endpoint             = "DISABLED"
      + public_endpoint            = true
      + region                     = (known after apply)
      + self_link                  = (known after apply)
      + state                      = (known after apply)
      + tier                       = "STANDARD_SMALL"
      + vault_private_endpoint_url = (known after apply)
      + vault_proxy_endpoint_url   = (known after apply)
      + vault_public_endpoint_url  = (known after apply)
      + vault_version              = (known after apply)

      + ip_allowlist {
          + address     = "172.25.16.0/24"
          + description = "Allow access to this IP"
        }
      + ip_allowlist {
          + address     = "192.168.1.0/24"
          + description = "Allow access to this IP too"
        }

      + major_version_upgrade_config {
          + maintenance_window_day  = "MONDAY"
          + maintenance_window_time = "WINDOW_12AM_4AM"
          + upgrade_type            = "SCHEDULED"
        }
    }

  # hcp_vault_cluster.tf-vault-cluster-az will be created
  + resource "hcp_vault_cluster" "tf-vault-cluster-az" {
      + cloud_provider             = (known after apply)
      + cluster_id                 = "tf-vault-cluster-az"
      + created_at                 = (known after apply)
      + hvn_id                     = "terraform-hvn-az"
      + id                         = (known after apply)
      + namespace                  = (known after apply)
      + organization_id            = (known after apply)
      + project_id                 = (known after apply)
      + proxy_endpoint             = "DISABLED"
      + public_endpoint            = true
      + region                     = (known after apply)
      + self_link                  = (known after apply)
      + state                      = (known after apply)
      + tier                       = "STANDARD_SMALL"
      + vault_private_endpoint_url = (known after apply)
      + vault_proxy_endpoint_url   = (known after apply)
      + vault_public_endpoint_url  = (known after apply)
      + vault_version              = (known after apply)

      + ip_allowlist {
          + address     = "172.25.16.0/24"
          + description = "Allow access to this IP"
        }
      + ip_allowlist {
          + address     = "192.168.1.0/24"
          + description = "Allow access to this IP too"
        }

      + major_version_upgrade_config {
          + maintenance_window_day  = "MONDAY"
          + maintenance_window_time = "WINDOW_12AM_4AM"
          + upgrade_type            = "SCHEDULED"
        }
    }

Plan: 4 to add, 0 to change, 0 to destroy.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
  1. Run terraform apply
  2. Results from terraform apply:
amiraslamov ~/Documents/GitHub/terraform-provider-hcp/test2 (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # hcp_hvn.terraform-hvn will be created
  + resource "hcp_hvn" "terraform-hvn" {
      + cidr_block          = "172.25.16.0/20"
      + cloud_provider      = "aws"
      + created_at          = (known after apply)
      + hvn_id              = "terraform-hvn"
      + id                  = (known after apply)
      + organization_id     = (known after apply)
      + project_id          = (known after apply)
      + provider_account_id = (known after apply)
      + region              = "us-west-2"
      + self_link           = (known after apply)
      + state               = (known after apply)
    }

  # hcp_hvn.terraform-hvn-az will be created
  + resource "hcp_hvn" "terraform-hvn-az" {
      + cidr_block          = "172.26.16.0/20"
      + cloud_provider      = "azure"
      + created_at          = (known after apply)
      + hvn_id              = "terraform-hvn-az"
      + id                  = (known after apply)
      + organization_id     = (known after apply)
      + project_id          = (known after apply)
      + provider_account_id = (known after apply)
      + region              = "eastus"
      + self_link           = (known after apply)
      + state               = (known after apply)
    }

  # hcp_vault_cluster.tf-vault-cluster will be created
  + resource "hcp_vault_cluster" "tf-vault-cluster" {
      + cloud_provider             = (known after apply)
      + cluster_id                 = "tf-vault-cluster"
      + created_at                 = (known after apply)
      + hvn_id                     = "terraform-hvn"
      + id                         = (known after apply)
      + namespace                  = (known after apply)
      + organization_id            = (known after apply)
      + project_id                 = (known after apply)
      + proxy_endpoint             = "DISABLED"
      + public_endpoint            = true
      + region                     = (known after apply)
      + self_link                  = (known after apply)
      + state                      = (known after apply)
      + tier                       = "STANDARD_SMALL"
      + vault_private_endpoint_url = (known after apply)
      + vault_proxy_endpoint_url   = (known after apply)
      + vault_public_endpoint_url  = (known after apply)
      + vault_version              = (known after apply)

      + ip_allowlist {
          + address     = "172.25.16.0/24"
          + description = "Allow access to this IP"
        }
      + ip_allowlist {
          + address     = "192.168.1.0/24"
          + description = "Allow access to this IP too"
        }

      + major_version_upgrade_config {
          + maintenance_window_day  = "MONDAY"
          + maintenance_window_time = "WINDOW_12AM_4AM"
          + upgrade_type            = "SCHEDULED"
        }
    }

  # hcp_vault_cluster.tf-vault-cluster-az will be created
  + resource "hcp_vault_cluster" "tf-vault-cluster-az" {
      + cloud_provider             = (known after apply)
      + cluster_id                 = "tf-vault-cluster-az"
      + created_at                 = (known after apply)
      + hvn_id                     = "terraform-hvn-az"
      + id                         = (known after apply)
      + namespace                  = (known after apply)
      + organization_id            = (known after apply)
      + project_id                 = (known after apply)
      + proxy_endpoint             = "DISABLED"
      + public_endpoint            = true
      + region                     = (known after apply)
      + self_link                  = (known after apply)
      + state                      = (known after apply)
      + tier                       = "STANDARD_SMALL"
      + vault_private_endpoint_url = (known after apply)
      + vault_proxy_endpoint_url   = (known after apply)
      + vault_public_endpoint_url  = (known after apply)
      + vault_version              = (known after apply)

      + ip_allowlist {
          + address     = "172.25.16.0/24"
          + description = "Allow access to this IP"
        }
      + ip_allowlist {
          + address     = "192.168.1.0/24"
          + description = "Allow access to this IP too"
        }

      + major_version_upgrade_config {
          + maintenance_window_day  = "MONDAY"
          + maintenance_window_time = "WINDOW_12AM_4AM"
          + upgrade_type            = "SCHEDULED"
        }
    }

Plan: 4 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

hcp_hvn.terraform-hvn-az: Creating...
hcp_hvn.terraform-hvn: Creating...
hcp_hvn.terraform-hvn-az: Still creating... [10s elapsed]
hcp_hvn.terraform-hvn: Still creating... [10s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [20s elapsed]
hcp_hvn.terraform-hvn: Still creating... [20s elapsed]
hcp_hvn.terraform-hvn: Still creating... [30s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [30s elapsed]
hcp_hvn.terraform-hvn: Still creating... [40s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [40s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [50s elapsed]
hcp_hvn.terraform-hvn: Still creating... [50s elapsed]
hcp_hvn.terraform-hvn: Creation complete after 54s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/terraform-hvn]
hcp_vault_cluster.tf-vault-cluster: Creating...
hcp_hvn.terraform-hvn-az: Still creating... [1m0s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [10s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [1m10s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [20s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [1m20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [30s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [1m30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [40s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [1m40s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [50s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [1m50s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [1m0s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [2m0s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [1m10s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [2m10s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [1m20s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [2m20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [1m30s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [2m30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [1m40s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [2m40s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [1m50s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [2m50s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [2m0s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [3m0s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [2m10s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [3m10s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [2m20s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [3m20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [2m30s elapsed]
hcp_hvn.terraform-hvn-az: Still creating... [3m30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [2m40s elapsed]
hcp_hvn.terraform-hvn-az: Creation complete after 3m37s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/terraform-hvn-az]
hcp_vault_cluster.tf-vault-cluster-az: Creating...
hcp_vault_cluster.tf-vault-cluster: Still creating... [2m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [10s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [3m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [3m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [3m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [40s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [3m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [50s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [3m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [1m0s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [3m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [1m10s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [4m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [1m20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [4m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [1m30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [4m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [1m40s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [4m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [1m50s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [4m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [2m0s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [4m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [2m10s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [5m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [2m20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [5m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [2m30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [5m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [2m40s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still creating... [5m30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Creation complete after 5m32s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [2m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [3m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [3m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [3m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [3m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [3m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [3m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [4m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [4m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [4m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [4m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [4m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [4m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [5m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [5m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [5m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [5m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [5m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [5m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [6m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [6m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [6m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [6m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [6m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [6m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [7m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [7m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [7m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [7m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [7m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [7m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [8m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [8m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [8m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [8m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [8m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [8m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [9m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [9m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [9m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [9m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [9m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [9m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [10m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [10m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [10m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [10m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [10m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [10m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [11m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [11m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [11m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [11m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [11m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [11m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [12m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [12m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [12m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [12m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [12m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [12m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [13m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [13m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [13m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [13m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [13m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [13m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [14m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [14m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [14m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [14m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [14m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [14m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [15m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [15m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [15m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [15m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [15m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [15m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [16m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [16m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [16m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [16m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [16m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [16m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [17m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still creating... [17m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Creation complete after 17m18s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster-az]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Screenshot 2024-01-18 at 10 12 22 AM Screenshot 2024-01-18 at 10 12 56 AM Screenshot 2024-01-18 at 10 13 16 AM

Resource UPDATE

  1. Modify the two cluster resources with the following:
// Create HCPV cluster on AWS:
resource "hcp_vault_cluster" "tf-vault-cluster" {
  depends_on      = [hcp_hvn.terraform-hvn]
  hvn_id          = hcp_hvn.terraform-hvn.hvn_id
  cluster_id      = "tf-vault-cluster"
  tier            = "STANDARD_SMALL"
  public_endpoint = true
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }

  ip_allowlist {
    address = "160.22.10.0/24"
    description = "Modified the first for AWS!!"
  }

  ip_allowlist {
    address = "160.25.12.0/24"
    description = "Modified the second for AWS!!"
  }
}

// Create HCPV cluster on Azure:
resource "hcp_vault_cluster" "tf-vault-cluster-az" {
  depends_on      = [hcp_hvn.terraform-hvn-az]
  hvn_id          = hcp_hvn.terraform-hvn-az.hvn_id
  cluster_id      = "tf-vault-cluster-az"
  tier            = "STANDARD_SMALL"
  public_endpoint = true
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }

  ip_allowlist {
    address = "160.22.10.0/24"
    description = "Modified the first for Azure!!"
  }

  ip_allowlist {
    address = "160.25.12.0/24"
    description = "Modified the second for Azure!!"
  }
  1. Run terraform apply:
    For AWS:https://cadence.us-east-1.aws.hashicorp.cloud/domains/hcp/workflows/vault%2Fproject%2Faa02bed1-7174-44ae-8dee-8fc94243534b%2Fhashicorp.vault.cluster%2Ftf-vault-cluster%2Fupdate-networkconfig/53446f76-4c3d-4816-8e39-ad36698dd4bc/summary
Screenshot 2024-01-18 at 11 47 45 AM

For Azure:https://cadence.us-east-1.aws.hashicorp.cloud/domains/hcp/workflows/vault%2Fproject%2Faa02bed1-7174-44ae-8dee-8fc94243534b%2Fhashicorp.vault.cluster%2Ftf-vault-cluster-az%2Fcde217db-0bb5-4d07-879f-9962d5811206%2Fupdate/fe981d2f-8473-4272-9473-bbf67d027c9e/summary
Screenshot 2024-01-18 at 12 08 17 PM

amiraslamov ~/Documents/GitHub/terraform-provider-hcp/test2 (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ terraform apply
hcp_hvn.terraform-hvn-az: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/terraform-hvn-az]
hcp_hvn.terraform-hvn: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/terraform-hvn]
hcp_vault_cluster.tf-vault-cluster-az: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster-az]
hcp_vault_cluster.tf-vault-cluster: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # hcp_vault_cluster.tf-vault-cluster will be updated in-place
  ~ resource "hcp_vault_cluster" "tf-vault-cluster" {
        id                         = "/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster"
        # (16 unchanged attributes hidden)

      ~ ip_allowlist {
          ~ address     = "172.27.17.1/24" -> "160.22.10.0/24"
          ~ description = "Modified the first for AWS!" -> "Modified the first for AWS!!"
        }
      ~ ip_allowlist {
          ~ address     = "192.169.3.2/24" -> "160.25.12.0/24"
          ~ description = "Modified the second for Azure!" -> "Modified the second for AWS!!"
        }

        # (1 unchanged block hidden)
    }

  # hcp_vault_cluster.tf-vault-cluster-az will be updated in-place
  ~ resource "hcp_vault_cluster" "tf-vault-cluster-az" {
        id                         = "/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster-az"
        # (16 unchanged attributes hidden)

      ~ ip_allowlist {
          ~ address     = "172.22.12.2/24" -> "160.22.10.0/24"
          ~ description = "Modified the first for Azure!" -> "Modified the first for Azure!!"
        }
      ~ ip_allowlist {
          ~ address     = "192.163.3.3/24" -> "160.25.12.0/24"
          ~ description = "Modified the second for Azure!" -> "Modified the second for Azure!!"
        }

        # (1 unchanged block hidden)
    }

Plan: 0 to add, 2 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

hcp_vault_cluster.tf-vault-cluster-az: Modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster-az]
hcp_vault_cluster.tf-vault-cluster: Modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster]
hcp_vault_cluster.tf-vault-cluster: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...shicorp.vault.cluster/tf-vault-cluster, 10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...shicorp.vault.cluster/tf-vault-cluster, 20s elapsed]
hcp_vault_cluster.tf-vault-cluster: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...shicorp.vault.cluster/tf-vault-cluster, 30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 30s elapsed]
hcp_vault_cluster.tf-vault-cluster: Modifications complete after 37s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 1m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 1m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 1m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 1m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 1m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 1m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 2m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 2m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 2m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 2m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 2m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 2m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 3m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 3m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 3m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 3m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 3m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 3m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 4m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 4m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 4m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 4m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 4m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 4m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 5m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 5m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 5m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 5m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 5m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 5m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 6m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 6m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 6m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 6m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 6m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 6m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 7m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 7m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 7m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 7m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 7m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 7m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 8m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 8m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 8m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 8m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 8m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 8m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 9m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 9m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 9m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 9m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 9m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 9m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 10m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 10m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 10m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 10m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 10m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 10m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 11m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 11m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 11m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 11m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 11m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 11m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 12m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 12m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 12m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 12m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 12m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 12m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 13m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 13m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 13m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 13m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 13m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 13m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 14m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 14m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 14m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 14m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 14m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 14m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 15m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 15m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 15m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 15m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 15m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 15m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 16m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 16m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 16m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 16m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 16m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 16m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 17m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 17m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 17m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 17m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 17m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 17m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 18m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 18m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 18m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 18m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 18m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 18m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 19m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 19m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 19m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 19m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 19m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 19m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 20m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 20m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 20m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 20m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 20m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 20m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 21m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 21m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 21m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 21m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 21m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 21m50s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 22m0s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 22m10s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 22m20s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 22m30s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...corp.vault.cluster/tf-vault-cluster-az, 22m40s elapsed]
hcp_vault_cluster.tf-vault-cluster-az: Modifications complete after 22m40s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/tf-vault-cluster-az]

Apply complete! Resources: 0 added, 2 changed, 0 destroyed.
Test a cluster by adding IP allowlist after cluster creation
  1. Generate the provider locally with make dev in root of repo
  2. Make a test folder test3/
  3. In test folder, create a main.tf with following :
locals {
  hvn_region = "us-west-2"
  cluster_id = "ip-allowlist-cluster-2"
  hvn_id     = "vault-tf-hvn-2"
}

terraform {
  required_providers {
    hcp = {
      source  = "localhost/providers/hcp"
      version = "0.0.1"
    }
  }
}

// Organization principal
provider "hcp" {
  client_id     = "KdxErVa8Mtd0BOFOg0OMHahvhvk6akrn"
  client_secret = "LuBhWi5vJzbJ0fb1f_KBVt6gLwqo2E5eAcvpMA9T2h5KIazrdsrKYR1T_BiUly6C"
  project_id = "aa02bed1-7174-44ae-8dee-8fc94243534b"
}

resource "hcp_hvn" "main" {
  hvn_id         = local.hvn_id
  cloud_provider = "aws"
  region         = local.hvn_region
  cidr_block     = "172.25.32.0/20"
}

resource "hcp_vault_cluster" "main" {
  cluster_id      = local.cluster_id
  hvn_id          = hcp_hvn.main.hvn_id
  public_endpoint = true
  tier            = "STANDARD_SMALL"
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }
}
  1. Run terraform init.
  2. Run terraform apply:
amiraslamov ~/Documents/GitHub/terraform-provider-hcp/test3 (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # hcp_hvn.main will be created
  + resource "hcp_hvn" "main" {
      + cidr_block          = "172.25.32.0/20"
      + cloud_provider      = "aws"
      + created_at          = (known after apply)
      + hvn_id              = "vault-tf-hvn-2"
      + id                  = (known after apply)
      + organization_id     = (known after apply)
      + project_id          = (known after apply)
      + provider_account_id = (known after apply)
      + region              = "us-west-2"
      + self_link           = (known after apply)
      + state               = (known after apply)
    }

  # hcp_vault_cluster.main will be created
  + resource "hcp_vault_cluster" "main" {
      + cloud_provider             = (known after apply)
      + cluster_id                 = "ip-allowlist-cluster-2"
      + created_at                 = (known after apply)
      + hvn_id                     = "vault-tf-hvn-2"
      + id                         = (known after apply)
      + namespace                  = (known after apply)
      + organization_id            = (known after apply)
      + project_id                 = (known after apply)
      + proxy_endpoint             = "DISABLED"
      + public_endpoint            = true
      + region                     = (known after apply)
      + self_link                  = (known after apply)
      + state                      = (known after apply)
      + tier                       = "STANDARD_SMALL"
      + vault_private_endpoint_url = (known after apply)
      + vault_proxy_endpoint_url   = (known after apply)
      + vault_public_endpoint_url  = (known after apply)
      + vault_version              = (known after apply)

      + major_version_upgrade_config {
          + maintenance_window_day  = "MONDAY"
          + maintenance_window_time = "WINDOW_12AM_4AM"
          + upgrade_type            = "SCHEDULED"
        }
    }

Plan: 2 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

hcp_hvn.main: Creating...
hcp_hvn.main: Still creating... [10s elapsed]
hcp_hvn.main: Still creating... [20s elapsed]
hcp_hvn.main: Still creating... [30s elapsed]
hcp_hvn.main: Still creating... [40s elapsed]
hcp_hvn.main: Creation complete after 46s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/vault-tf-hvn-2]
hcp_vault_cluster.main: Creating...
hcp_vault_cluster.main: Still creating... [10s elapsed]
hcp_vault_cluster.main: Still creating... [20s elapsed]
hcp_vault_cluster.main: Still creating... [30s elapsed]
hcp_vault_cluster.main: Still creating... [40s elapsed]
hcp_vault_cluster.main: Still creating... [50s elapsed]
hcp_vault_cluster.main: Still creating... [1m0s elapsed]
hcp_vault_cluster.main: Still creating... [1m10s elapsed]
hcp_vault_cluster.main: Still creating... [1m20s elapsed]
hcp_vault_cluster.main: Still creating... [1m30s elapsed]
hcp_vault_cluster.main: Still creating... [1m40s elapsed]
hcp_vault_cluster.main: Still creating... [1m50s elapsed]
hcp_vault_cluster.main: Still creating... [2m0s elapsed]
hcp_vault_cluster.main: Still creating... [2m10s elapsed]
hcp_vault_cluster.main: Still creating... [2m20s elapsed]
hcp_vault_cluster.main: Still creating... [2m30s elapsed]
hcp_vault_cluster.main: Still creating... [2m40s elapsed]
hcp_vault_cluster.main: Still creating... [2m50s elapsed]
hcp_vault_cluster.main: Still creating... [3m0s elapsed]
hcp_vault_cluster.main: Still creating... [3m10s elapsed]
hcp_vault_cluster.main: Still creating... [3m20s elapsed]
hcp_vault_cluster.main: Still creating... [3m30s elapsed]
hcp_vault_cluster.main: Still creating... [3m40s elapsed]
hcp_vault_cluster.main: Still creating... [3m50s elapsed]
hcp_vault_cluster.main: Still creating... [4m0s elapsed]
hcp_vault_cluster.main: Still creating... [4m10s elapsed]
hcp_vault_cluster.main: Still creating... [4m20s elapsed]
hcp_vault_cluster.main: Still creating... [4m30s elapsed]
hcp_vault_cluster.main: Still creating... [4m40s elapsed]
hcp_vault_cluster.main: Still creating... [4m50s elapsed]
hcp_vault_cluster.main: Still creating... [5m0s elapsed]
hcp_vault_cluster.main: Still creating... [5m10s elapsed]
hcp_vault_cluster.main: Still creating... [5m20s elapsed]
hcp_vault_cluster.main: Still creating... [5m30s elapsed]
hcp_vault_cluster.main: Still creating... [5m40s elapsed]
hcp_vault_cluster.main: Creation complete after 5m48s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster-2]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Screenshot 2024-01-18 at 12 26 45 PM Screenshot 2024-01-18 at 12 26 55 PM
  1. Now update the resource cluster with the following by adding IP allowlist entrees:
resource "hcp_vault_cluster" "main" {
  cluster_id      = local.cluster_id
  hvn_id          = hcp_hvn.main.hvn_id
  public_endpoint = true
  tier            = "STANDARD_SMALL"
  proxy_endpoint = "DISABLED"

  lifecycle {
    prevent_destroy = false
  }

  major_version_upgrade_config {
    upgrade_type = "SCHEDULED"
    maintenance_window_day = "MONDAY"
    maintenance_window_time = "WINDOW_12AM_4AM"
  }

  ip_allowlist {
    address = "160.22.10.0/24"
    description = "The first IP allowlist entree!"
  }

  ip_allowlist {
    address = "160.25.12.0/24"
    description = "The second IP allowlist entree!"
  }
}
  1. Now run terraform apply:
amiraslamov ~/Documents/GitHub/terraform-provider-hcp/test3 (aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider)$ terraform apply
hcp_hvn.main: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.network.hvn/vault-tf-hvn-2]
hcp_vault_cluster.main: Refreshing state... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster-2]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # hcp_vault_cluster.main will be updated in-place
  ~ resource "hcp_vault_cluster" "main" {
        id                         = "/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster-2"
        # (16 unchanged attributes hidden)

      + ip_allowlist {
          + address     = "160.22.10.0/24"
          + description = "The first IP allowlist entree!"
        }
      + ip_allowlist {
          + address     = "160.25.12.0/24"
          + description = "The second IP allowlist entree!"
        }

        # (1 unchanged block hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

hcp_vault_cluster.main: Modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster-2]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...p.vault.cluster/ip-allowlist-cluster-2, 10s elapsed]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...p.vault.cluster/ip-allowlist-cluster-2, 20s elapsed]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...p.vault.cluster/ip-allowlist-cluster-2, 30s elapsed]
hcp_vault_cluster.main: Still modifying... [id=/project/aa02bed1-7174-44ae-8dee-8fc942...p.vault.cluster/ip-allowlist-cluster-2, 40s elapsed]
hcp_vault_cluster.main: Modifications complete after 46s [id=/project/aa02bed1-7174-44ae-8dee-8fc94243534b/hashicorp.vault.cluster/ip-allowlist-cluster-2]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
Screenshot 2024-01-18 at 12 29 01 PM

https://cadence.us-east-1.aws.hashicorp.cloud/domains/hcp/workflows/vault%2Fproject%2Faa02bed1-7174-44ae-8dee-8fc94243534b%2Fhashicorp.vault.cluster%2Fip-allowlist-cluster-2%2Fupdate-networkconfig/d6d872e0-114f-4b85-addc-36bb404a2a28/summary

Validation

No more than 50 CIDRs Screenshot 2024-01-18 at 10 00 56 AM
Description Length Screenshot 2024-01-18 at 10 00 06 AM
Invalid CIDR Screenshot 2024-01-18 at 9 59 03 AM

@hashicorp-cla
Copy link

hashicorp-cla commented Oct 6, 2023

CLA assistant check
All committers have signed the CLA.

@aslamovamir
Copy link
Contributor Author

Still in the process of running acceptance tests, but wanted to do a draft PR for now to get early feedback on the progress so far:)

@aslamovamir
Copy link
Contributor Author

@aoripov I have been able to manually test this PR and updated the PR description accordingly. Is this kind of testing comprehensive enough? Also, updating the ip allowlist seems to work (referenced in PR description), even though when the apply happens, it does not trigger any update operation inside the cluster, is this expected?

@aslamovamir aslamovamir marked this pull request as ready for review January 17, 2024 21:16
@aslamovamir aslamovamir requested review from a team as code owners January 17, 2024 21:16
@aslamovamir aslamovamir self-assigned this Jan 17, 2024
@aslamovamir
Copy link
Contributor Author

aslamovamir commented Jan 18, 2024

@aoripov I have been able to manually test this PR and updated the PR description accordingly. Is this kind of testing comprehensive enough? Also, updating the ip allowlist seems to work (referenced in PR description), even though when the apply happens, it does not trigger any update operation inside the cluster, is this expected?

Actually, it is triggering the update-networkconfig workflow, all looks good to me! https://cadence.us-east-1.aws.hashicorp.cloud/domains/hcp/workflows/vault%2Fproject%2Faa02bed1-7174-44ae-8dee-8fc94243534b%2Fhashicorp.vault.cluster%2Fip-allowlist-cluster%2Fupdate-networkconfig/db8ad618-0b10-4231-bb5e-6823a02b9a33/history?format=compact&eventId=23#
Screenshot 2024-01-18 at 8 52 25 AM

@aslamovamir
Copy link
Contributor Author

aslamovamir commented Jan 18, 2024

@Achooo Hi! This is a very similar work from your PR on the Consul side, and just tagging you here because my PR slightly changes Consul code by renaming some of the functions. Can I please have a go from your side by ensuring these Consul code changes do not break anything? Thanks a ton!

Copy link
Contributor

@helenfufu helenfufu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes look great to me. Awesome testing in the PR description!

For the final testing (with updates from master branch and updated terraform CLI version), I think it's enough to check the AWS and Azure acceptance tests pass. Less priority on the manual end-to-end tests - if it gives peace of mind, one manual end-to-end test should be sufficient and no need to repeat all the cases from the PR description.

Plan to stamp after the final testing

.changelog/625.txt Outdated Show resolved Hide resolved
internal/providersdkv2/resource_vault_cluster_test.go Outdated Show resolved Hide resolved
internal/providersdkv2/resource_vault_cluster_test.go Outdated Show resolved Hide resolved
@aslamovamir
Copy link
Contributor Author

Changes look great to me. Awesome testing in the PR description!

For the final testing (with updates from master branch and updated terraform CLI version), I think it's enough to check the AWS and Azure acceptance tests pass. Less priority on the manual end-to-end tests - if it gives peace of mind, one manual end-to-end test should be sufficient and no need to repeat all the cases from the PR description.

Plan to stamp after the final testing

Sounds good, Helen, thank you! I am working on rerunning acceptance tests once again with the upgraded Terraform CLI.

Copy link
Contributor

@helenfufu helenfufu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stamping for same reason as Slack comment:

My concerns are addressed (re-running the acceptance tests as they currently stand without encountering the incompatibility errors you were facing earlier).

Will defer to Gaurav for final review of validation suggestions.

Copy link
Contributor

@codergs codergs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm. I realized validation on 50 doesn't make sense as MaxItem construct should correctly enforce it :)

@@ -295,17 +298,27 @@ func updateClusterTier(t *testing.T, in *inputT) resource.TestStep {
}
}

// This step verifies the successful update of "public_endpoint", "proxy_endpoint", "audit_log", "metrics" and MVU config.
// This step verifies the successful update of "public_endpoint", "proxy_endpoint", "ip_allowlist", "audit_log", "metrics" and MVU config.
func updatePublicProxyObservabilityAndMVU(t *testing.T, in *inputT) resource.TestStep {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: func name is growing or should grow with ipAllowList

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have already renamed the function to updateNetworkObservabilityAndMVU:)

@aslamovamir aslamovamir merged commit 9e9b50e into main Jan 22, 2024
6 checks passed
@aslamovamir aslamovamir deleted the aslamovamir-HVT-4407-implement-ip-allowlist-in-terraform-provider branch January 22, 2024 16:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants