chore(e2e): Remove need to modify /etc/hosts (#6486)

* ce: chore(e2e): Remove need for /etc/hosts modifications

(cherry picked from commit df230ea09af3d006db006487ebd644a0d3dd76f2)

* ce: test(e2e): Fix test that was failing

(cherry picked from commit 310ebf2a9b6c7427c1ff6c1c9e9045c1deb13a40)
This commit is contained in:
Michael Li authored and GitHub committed 2026-03-16 10:24:32 -04:00
1 parent b07883e8aa
commit 67f9815c64
38 files changed
+138 -308

No files matched your search

+15
View File
@@ -233,6 +233,21 @@ jobs:
if: contains(matrix.filter, 'e2e_docker')
run: |
mv ${{ steps.download-docker.outputs.download-path }}/*.tar enos/support/boundary_docker_image.tar
- name: Install other test dependencies
if: contains(matrix.filter, 'e2e_docker_base_plus')
run: |
# mongosh
wget -q https://github.com/mongodb-js/mongosh/releases/download/v2.7.0/mongosh-2.7.0-linux-x64.tgz -O /tmp/mongosh.tgz
tar -xzf /tmp/mongosh.tgz -C "$HOME"
echo "$HOME/mongosh-2.7.0-linux-x64/bin" >> "$GITHUB_PATH"
# cqlsh (cassandra CLI)
wget -q https://downloads.apache.org/cassandra/4.1.10/apache-cassandra-4.1.10-bin.tar.gz -O /tmp/cassandra.tar.gz
tar -xzf /tmp/cassandra.tar.gz -C "$HOME"
echo "$HOME/apache-cassandra-4.1.10/bin" >> "$GITHUB_PATH"
# redis
sudo apt update && sudo apt install -y redis-tools mysql-client
- name: Output Terraform version info
run: |
mkdir -p ./enos/terraform-plugin-cache
@@ -1,9 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
scenario "e2e_docker_base_connect" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -17,6 +14,7 @@ scenario "e2e_docker_base_connect" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -116,7 +114,7 @@ scenario "e2e_docker_base_connect" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
+2 -3
View File
@@ -1,8 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
scenario "e2e_docker_base_plus" {
terraform_cli = terraform_cli.default
@@ -17,6 +15,7 @@ scenario "e2e_docker_base_plus" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -129,7 +128,7 @@ scenario "e2e_docker_base_plus" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
@@ -1,9 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
scenario "e2e_docker_base_with_gcp" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -17,6 +14,7 @@ scenario "e2e_docker_base_with_gcp" {
}
locals {
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -123,7 +121,7 @@ scenario "e2e_docker_base_with_gcp" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
gcp_host_set_filter1 = step.create_gcp_target.filter_label1
gcp_host_set_filter2 = step.create_gcp_target.filter_label2
@@ -1,11 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
# 127.0.0.1 localhost worker
# 127.0.0.1 localhost vault
scenario "e2e_docker_base_with_vault" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -19,6 +14,7 @@ scenario "e2e_docker_base_with_vault" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -141,7 +137,7 @@ scenario "e2e_docker_base_with_vault" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
@@ -149,6 +145,7 @@ scenario "e2e_docker_base_with_vault" {
target_user = "ubuntu"
vault_addr_public = step.create_vault.address_public
vault_addr_private = step.create_vault.address_private
vault_addr_unified = step.create_vault.address_unified
vault_root_token = step.create_vault.token
vault_port = step.create_vault.port
max_page_size = step.create_boundary.max_page_size
@@ -1,10 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
# 127.0.0.1 localhost worker
scenario "e2e_docker_base_with_worker_version" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -18,6 +14,7 @@ scenario "e2e_docker_base_with_worker_version" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -176,7 +173,7 @@ scenario "e2e_docker_base_with_worker_version" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
@@ -1,10 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
# 127.0.0.1 localhost worker
scenario "e2e_docker_base_with_worker" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -18,6 +14,7 @@ scenario "e2e_docker_base_with_worker" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -171,7 +168,7 @@ scenario "e2e_docker_base_with_worker" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
+2 -4
View File
@@ -1,9 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
scenario "e2e_docker_base" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -17,6 +14,7 @@ scenario "e2e_docker_base" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -116,7 +114,7 @@ scenario "e2e_docker_base" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
@@ -1,10 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
# 127.0.0.1 localhost worker
scenario "e2e_docker_worker_registration_controller_led" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -18,6 +14,7 @@ scenario "e2e_docker_worker_registration_controller_led" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -111,7 +108,7 @@ scenario "e2e_docker_worker_registration_controller_led" {
module = module.docker_boundary_cmd
depends_on = [step.create_boundary]
variables {
address = step.create_boundary.address
address = step.create_boundary.container_address
image_name = step.build_boundary_docker_image.image_name
network_name = local.network_cluster
login_name = step.create_boundary.login_name
@@ -186,7 +183,7 @@ scenario "e2e_docker_worker_registration_controller_led" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
@@ -1,10 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
# 127.0.0.1 localhost worker
scenario "e2e_docker_worker_registration_worker_led" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -18,6 +14,7 @@ scenario "e2e_docker_worker_registration_worker_led" {
locals {
aws_ssh_private_key_path = abspath(var.aws_ssh_private_key_path)
local_boundary_dir = var.local_boundary_dir != null ? abspath(var.local_boundary_dir) : null
local_boundary_src_dir = var.local_boundary_src_dir != null ? abspath(var.local_boundary_src_dir) : null
boundary_docker_image_file = abspath(var.boundary_docker_image_file)
license_path = abspath(var.boundary_license_path != null ? var.boundary_license_path : joinpath(path.root, "./support/boundary.hclic"))
@@ -163,7 +160,7 @@ scenario "e2e_docker_worker_registration_worker_led" {
step.create_worker,
]
variables {
address = step.create_boundary.address
address = step.create_boundary.container_address
image_name = step.build_boundary_docker_image.image_name
network_name = local.network_cluster
login_name = step.create_boundary.login_name
@@ -201,7 +198,7 @@ scenario "e2e_docker_worker_registration_worker_led" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_src_dir = local.local_boundary_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
+2 -4
View File
@@ -1,9 +1,6 @@
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# For this scenario to work, add the following line to /etc/hosts
# 127.0.0.1 localhost boundary
scenario "e2e_ui_docker" {
terraform_cli = terraform_cli.default
terraform = terraform.default
@@ -162,7 +159,7 @@ scenario "e2e_ui_docker" {
auth_method_id = step.create_boundary.auth_method_id
auth_login_name = step.create_boundary.login_name
auth_password = step.create_boundary.password
local_boundary_dir = step.build_boundary_docker_image.cli_zip_path
local_boundary_dir = local.local_boundary_dir
local_boundary_ui_src_dir = local.local_boundary_ui_src_dir
aws_ssh_private_key_path = local.aws_ssh_private_key_path
target_address = step.create_host.address
@@ -172,6 +169,7 @@ scenario "e2e_ui_docker" {
target_ca_key_public = step.create_host.ca_key_public
vault_addr_public = step.create_vault.address_public
vault_addr_private = step.create_vault.address_private
vault_addr_unified = step.create_vault.address_unified
vault_root_token = step.create_vault.token
vault_port = step.create_vault.port
ldap_address = step.create_ldap_server.address
@@ -4,7 +4,8 @@
disable_mlock = true
controller {
name = "docker-controller"
name = "docker-controller"
public_cluster_addr = "boundary:9201"
max_page_size = ${max_page_size}
@@ -16,7 +17,6 @@ controller {
worker {
name = "boundary-collocated-worker"
description = "A worker that runs alongside the controller in the same process"
address = "boundary:9202"
tags {
type = ["${worker_type_tag}"]
@@ -24,25 +24,25 @@ worker {
}
listener "tcp" {
address = "boundary:9200"
address = "0.0.0.0:9200"
purpose = "api"
tls_disable = true
}
listener "tcp" {
address = "boundary:9201"
address = "0.0.0.0:9201"
purpose = "cluster"
tls_disable = true
}
listener "tcp" {
address = "boundary:9202"
address = "0.0.0.0:9202"
purpose = "proxy"
tls_disable = true
}
listener "tcp" {
address = "boundary:9203"
address = "0.0.0.0:9203"
purpose = "ops"
tls_disable = true
}
@@ -5,6 +5,7 @@ disable_mlock = true
controller {
name = "docker-controller"
public_cluster_addr = "boundary:9201"
database {
url = "env://BOUNDARY_POSTGRES_URL"
@@ -5,6 +5,7 @@ disable_mlock = true
controller {
name = "docker-controller"
public_cluster_addr = "boundary:9201"
database {
url = "env://BOUNDARY_POSTGRES_URL"
@@ -45,7 +46,6 @@ controller {
worker {
name = "boundary-collocated-worker"
description = "A worker that runs alongside the controller in the same process"
address = "boundary:9202"
tags {
type = ["${worker_type_tag}"]
@@ -53,25 +53,25 @@ worker {
}
listener "tcp" {
address = "boundary:9200"
address = "0.0.0.0:9200"
purpose = "api"
tls_disable = true
}
listener "tcp" {
address = "boundary:9201"
address = "0.0.0.0:9201"
purpose = "cluster"
tls_disable = true
}
listener "tcp" {
address = "boundary:9202"
address = "0.0.0.0:9202"
purpose = "proxy"
tls_disable = true
}
listener "tcp" {
address = "boundary:9203"
address = "0.0.0.0:9203"
purpose = "ops"
tls_disable = true
}
@@ -4,7 +4,8 @@
disable_mlock = true
controller {
name = "docker-controller"
name = "docker-controller"
public_cluster_addr = "boundary:9201"
max_page_size = ${max_page_size}
@@ -16,7 +17,6 @@ controller {
worker {
name = "boundary-collocated-worker"
description = "A worker that runs alongside the controller in the same process"
address = "boundary:9202"
tags {
type = ["${worker_type_tag}"]
@@ -24,25 +24,25 @@ worker {
}
listener "tcp" {
address = "boundary:9200"
address = "0.0.0.0:9200"
purpose = "api"
tls_disable = true
}
listener "tcp" {
address = "boundary:9201"
address = "0.0.0.0:9201"
purpose = "cluster"
tls_disable = true
}
listener "tcp" {
address = "boundary:9202"
address = "0.0.0.0:9202"
purpose = "proxy"
tls_disable = true
}
listener "tcp" {
address = "boundary:9203"
address = "0.0.0.0:9203"
purpose = "ops"
tls_disable = true
}
+13 -8
View File
@@ -77,11 +77,12 @@ resource "enos_local_exec" "init_database" {
}
locals {
db_init_info = jsondecode(enos_local_exec.init_database.stdout)
auth_method_id = local.db_init_info["auth_method"]["auth_method_id"]
login_name = local.db_init_info["auth_method"]["login_name"]
password = local.db_init_info["auth_method"]["password"]
address = "http://${var.container_name}:9200"
db_init_info = jsondecode(enos_local_exec.init_database.stdout)
auth_method_id = local.db_init_info["auth_method"]["auth_method_id"]
login_name = local.db_init_info["auth_method"]["login_name"]
password = local.db_init_info["auth_method"]["password"]
address = "http://127.0.0.1:9200"
container_address = "http://${var.container_name}:9200"
}
resource "docker_container" "boundary" {
@@ -125,7 +126,7 @@ resource "docker_container" "boundary" {
file = "/boundary/boundary-config.hcl"
}
healthcheck {
test = ["CMD", "wget", "--quiet", "-O", "/dev/null", "http://boundary:9203/health"]
test = ["CMD", "wget", "--quiet", "-O", "/dev/null", "http://127.0.0.1:9203/health"]
interval = "3s"
timeout = "5s"
retries = 5
@@ -146,7 +147,7 @@ resource "enos_local_exec" "check_address" {
docker_container.boundary
]
inline = ["timeout 10s bash -c 'until curl http://0.0.0.0:9200; do sleep 2; done'"]
inline = ["timeout 10s bash -c 'until curl http://127.0.0.1:9200; do sleep 2; done'"]
}
resource "enos_local_exec" "check_health" {
@@ -154,13 +155,17 @@ resource "enos_local_exec" "check_health" {
enos_local_exec.check_address
]
inline = ["timeout 10s bash -c 'until curl -i http://0.0.0.0:9203/health; do sleep 2; done'"]
inline = ["timeout 10s bash -c 'until curl -i http://127.0.0.1:9203/health; do sleep 2; done'"]
}
output "address" {
value = local.address
}
output "container_address" {
value = local.container_address
}
output "upstream_address" {
value = "${var.container_name}:9201"
}
+12 -1
View File
@@ -132,14 +132,25 @@ resource "enos_local_exec" "check_health" {
inline = ["timeout 10s bash -c 'until vault status; do sleep 2; done'"]
}
# Get the host machine's IP address
# Uses 'ip' (Linux) with fallback to 'ifconfig' (macOS) for cross-platform support
data "external" "host_ip" {
program = ["bash", "-c", "echo '{\"ip\":\"'$(command -v ip >/dev/null 2>&1 && ip -4 route get 8.8.8.8 | grep -oP 'src \\K[\\d.]+' | head -1 || ifconfig 2>/dev/null | grep 'inet ' | grep -v 127.0.0.1 | head -1 | awk '{print $2}')'\"}' "]
}
output "address_public" {
value = "http://${var.container_name}:${var.vault_port}"
value = "http://127.0.0.1:${var.vault_port}"
}
output "address_private" {
value = "http://${var.container_name}:${var.vault_port_internal}"
}
output "address_unified" {
description = "Unified address accessible from both host and containers"
value = "http://${data.external.host_ip.result.ip}:${var.vault_port}"
}
output "token" {
value = local.root_token
}
+6 -1
View File
@@ -65,6 +65,11 @@ variable "worker_led_registration" {
type = bool
default = false
}
variable "is_downstream_worker" {
description = "Whether this worker is a downstream worker, which affects its health check and registration process"
type = bool
default = false
}
resource "docker_image" "boundary" {
name = var.image_name
@@ -139,7 +144,7 @@ resource "enos_local_exec" "get_worker_led_token" {
}
resource "enos_local_exec" "check_address" {
count = var.worker_led_registration ? 0 : 1
count = var.worker_led_registration || var.is_downstream_worker ? 0 : 1
depends_on = [
docker_container.worker
]
@@ -4,20 +4,23 @@
disable_mlock = true
listener "tcp" {
address = "0.0.0.0:${port}"
# setting to 127.0.0.1 so that it won't be accessible by the local machine
# outside of the container, which is a more realistic configuration for a downstream worker
address = "127.0.0.1:${port}"
purpose = "proxy"
tls_disable = true
}
listener "tcp" {
address = "0.0.0.0:${port_ops}"
# setting to 127.0.0.1 so that it won't be accessible by the local machine
# outside of the container, which is a more realistic configuration for a downstream worker
address = "127.0.0.1:${port_ops}"
purpose = "ops"
tls_disable = true
}
worker {
name = "${worker_name}"
public_addr = "${worker_name}:${port}"
initial_upstreams = ["${initial_upstream}"]
tags {
@@ -17,7 +17,7 @@ listener "tcp" {
worker {
name = "${worker_name}"
public_addr = "${worker_name}:${port}"
public_addr = "127.0.0.1:${port}"
initial_upstreams = ["${initial_upstream}"]
tags {
@@ -16,7 +16,7 @@ listener "tcp" {
}
worker {
public_addr = "${worker_name}:${port}"
public_addr = "127.0.0.1:${port}"
initial_upstreams = ["${initial_upstream}"]
controller_generated_activation_token = "${token}"
@@ -4,20 +4,23 @@
disable_mlock = true
listener "tcp" {
address = "0.0.0.0:${port}"
# setting to 127.0.0.1 so that it won't be accessible by the local machine
# outside of the container, which is a more realistic configuration for a downstream worker
address = "127.0.0.1:${port}"
purpose = "proxy"
tls_disable = true
}
listener "tcp" {
address = "0.0.0.0:${port_ops}"
# setting to 127.0.0.1 so that it won't be accessible by the local machine
# outside of the container, which is a more realistic configuration for a downstream worker
address = "127.0.0.1:${port_ops}"
purpose = "ops"
tls_disable = true
}
worker {
name = "${worker_name}"
public_addr = "${worker_name}:${port}"
initial_upstreams = ["${initial_upstream}"]
tags {
@@ -16,7 +16,7 @@ listener "tcp" {
}
worker {
public_addr = "${worker_name}:${port}"
public_addr = "127.0.0.1:${port}"
initial_upstreams = ["${initial_upstream}"]
tags {
+1 -1
View File
@@ -17,7 +17,7 @@ listener "tcp" {
worker {
name = "${worker_name}"
public_addr = "${worker_name}:${port}"
public_addr = "127.0.0.1:${port}"
initial_upstreams = ["${initial_upstream}"]
tags {
+7 -1
View File
@@ -110,6 +110,11 @@ variable "vault_addr_private" {
type = string
default = ""
}
variable "vault_addr_unified" {
description = "Unified address to a vault instance that can be used for both internal and external communication"
type = string
default = ""
}
variable "vault_root_token" {
description = "Root token for vault instance"
type = string
@@ -336,6 +341,7 @@ resource "enos_local_exec" "run_e2e_test" {
VAULT_TOKEN = var.vault_root_token
E2E_VAULT_ADDR_PUBLIC = var.vault_addr_public
E2E_VAULT_ADDR_PRIVATE = var.vault_addr_private
E2E_VAULT_ADDR_UNIFIED = var.vault_addr_unified
E2E_BUCKET_NAME = var.bucket_name
E2E_BUCKET_ENDPOINT_URL = var.bucket_endpoint_url
E2E_BUCKET_USER_ID = var.bucket_user_id
@@ -375,6 +381,6 @@ resource "enos_local_exec" "run_e2e_test" {
}
inline = var.debug_no_run ? [""] : [
"bash ./${path.module}/test_runner.sh"
"set -o pipefail; PATH=\"${var.local_boundary_dir}:$PATH\" go test -v ${var.test_package} -count=1 -timeout ${var.test_timeout} | tee ${path.module}/../../test-e2e-${local.package_name}.log"
]
}
-132
View File
@@ -1,132 +0,0 @@
#!/usr/bin/env bash
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# This script is used for setting up and executing boundary e2e tests. It sets
# up `pass` as a password store (linux) so that boundary can use it to store
# auth tokens and installs the latest vault cli before executing the desired tests.
set -eux -o pipefail
# Install dependencies
apt update
# unzip is used to unzip boundary.zip
# pass is used to store the auth token from `boundary authenticate``
# lsb-release is used for adding the hashicorp apt source
# postgresql-client is used for postgres tests
# default-mysql-client is used for mysql tests
# wget is used for downloading external dependencies and repository keys
# apt-transport-https enables HTTPS transport for APT repositories
# curl and ca-certificates are required for some repository setups (e.g., MongoDB).
apt install unzip pass lsb-release postgresql-client default-mysql-client wget apt-transport-https curl ca-certificates -y
# Function to install Cassandra
install_cassandra() {
# Add Cassandra repository key
wget -O cassandra.keys https://www.apache.org/dist/cassandra/KEYS
# Convert key to gpg format
gpg --no-default-keyring --keyring ./temp-keyring.gpg --import cassandra.keys
gpg --no-default-keyring --keyring ./temp-keyring.gpg --export --output cassandra.gpg
rm ./temp-keyring.gpg cassandra.keys
mv cassandra.gpg /etc/apt/keyrings/cassandra.gpg
# Add Cassandra repository
echo "deb [signed-by=/etc/apt/keyrings/cassandra.gpg] https://debian.cassandra.apache.org 41x main" | tee -a /etc/apt/sources.list.d/cassandra.sources.list
# Update package list and install Cassandra
apt update
apt install cassandra -y
}
# Install Cassandra
install_cassandra
# Install Redis
apt install redis-server -y
# Create a GPG key
export KEY_PW=boundary
gpg --generate-key --batch <<eoGpgConf
%echo Started!
Key-Type: RSA
Key-Length: default
Subkey-Type: RSA
Name-Real: boundary
Name-Comment: default
Name-Email: default
Expire-Date: 0
Passphrase: $KEY_PW
%commit
%echo Done.
eoGpgConf
# Enable gpg-preset-passphrase so that key passwords can be saved
echo "allow-preset-passphrase" >> ~/.gnupg/gpg-agent.conf
gpg-connect-agent reloadagent /bye &>/dev/null
# Get information about the created keys
export lines=$(gpg --list-secret-keys --with-colons --with-keygrip)
export KEY_ID=""
while read -r line
do
# Save the first key id to be used later
if [[ $line =~ "fpr"* ]]; then
if [[ $KEY_ID == "" ]]; then
KEY_ID="$(echo "$line" | sed -r 's/fpr|://g')"
fi
fi
# Cache the passphrases for the keys so passwords do not need to be entered
if [[ $line =~ "grp"* ]]; then
export KEYGRIP_ID="$(echo "$line" | sed -r 's/grp|://g')"
/usr/lib/gnupg/gpg-preset-passphrase --preset -P $KEY_PW $KEYGRIP_ID
fi
done <<< $lines
# Trust the key
touch /tmp/test.txt
gpg -a --encrypt -r $KEY_ID --trust-model always --batch --yes /tmp/test.txt
echo "trusted-key $KEY_ID" >> ~/.gnupg/gpg.conf
# Initialize the password store
pass init $KEY_ID &>/dev/null
# Install the vault cli
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --batch --yes --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
export lines=$(gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint --with-colons)
while read -r line
do
if [[ $line =~ "fpr"* ]]; then
if [[ "$(echo $line | sed -r 's/fpr|://g')" != "798AEC654E5C15428C8E42EEAA16FCBCA621E701" ]]; then
echo "HashiCorp key fingerprint does not match expected"
exit 1
else
break
fi
fi
done <<< $lines
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
apt update
apt install vault -y
# Install the docker cli
wget -O- https://download.docker.com/linux/debian/gpg | gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install docker-ce-cli -y
# Install MongoDB client (mongosh)
# Reference: https://www.mongodb.com/docs/mongodb-shell/install/#debian
wget -qO- https://www.mongodb.org/static/pgp/server-8.0.asc | tee /etc/apt/trusted.gpg.d/server-8.0.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/server-8.0.asc] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | tee /etc/apt/sources.list.d/mongodb-org-8.0.list
apt update
apt install -y mongodb-mongosh
# Run Tests
unzip /boundary.zip -d /usr/local/bin/
cd /src/boundary
go test -v -count=1 $TEST_PACKAGE -timeout $TEST_TIMEOUT | tee /testlogs/test-e2e-${TEST_PACKAGE##*/}.log
@@ -1,74 +0,0 @@
#!/usr/bin/env bash
# Copyright IBM Corp. 2020, 2025
# SPDX-License-Identifier: BUSL-1.1
# This script sets up a docker container to serve as a test runner for boundary
# e2e tests
set -eux -o pipefail
docker run \
--rm \
--name test-runner \
-e "TEST_PACKAGE=$TEST_PACKAGE" \
-e "TEST_TIMEOUT=$TEST_TIMEOUT" \
-e "E2E_TESTS=$E2E_TESTS" \
-e "BOUNDARY_ADDR=$BOUNDARY_ADDR" \
-e "E2E_PASSWORD_AUTH_METHOD_ID=$E2E_PASSWORD_AUTH_METHOD_ID" \
-e "E2E_PASSWORD_ADMIN_LOGIN_NAME=$E2E_PASSWORD_ADMIN_LOGIN_NAME" \
-e "E2E_PASSWORD_ADMIN_PASSWORD=$E2E_PASSWORD_ADMIN_PASSWORD" \
-e "E2E_TARGET_CONTAINER_NAME=$E2E_TARGET_CONTAINER_NAME" \
-e "E2E_TARGET_ADDRESS=$E2E_TARGET_ADDRESS" \
-e "E2E_TARGET_PORT=$E2E_TARGET_PORT" \
-e "E2E_SSH_USER=$E2E_SSH_USER" \
-e "E2E_SSH_CA_KEY=$E2E_SSH_CA_KEY" \
-e "E2E_SSH_KEY_PATH=/keys/target.pem" \
-e "E2E_REGION=$E2E_REGION" \
-e "E2E_BUCKET_NAME=$E2E_BUCKET_NAME" \
-e "E2E_BUCKET_USER_ID=$E2E_BUCKET_USER_ID" \
-e "E2E_BUCKET_ENDPOINT_URL=$E2E_BUCKET_ENDPOINT_URL" \
-e "E2E_BUCKET_ACCESS_KEY_ID=$E2E_BUCKET_ACCESS_KEY_ID" \
-e "E2E_BUCKET_SECRET_ACCESS_KEY=$E2E_BUCKET_SECRET_ACCESS_KEY" \
-e "E2E_MINIO_ALIAS=$E2E_MINIO_ALIAS" \
-e "VAULT_ADDR=$VAULT_ADDR_INTERNAL" \
-e "VAULT_TOKEN=$VAULT_TOKEN" \
-e "E2E_VAULT_ADDR_PUBLIC=$E2E_VAULT_ADDR_PUBLIC" \
-e "E2E_VAULT_ADDR_PRIVATE=$E2E_VAULT_ADDR_PRIVATE" \
-e "E2E_POSTGRES_USER=$E2E_POSTGRES_USER" \
-e "E2E_POSTGRES_PASSWORD=$E2E_POSTGRES_PASSWORD" \
-e "E2E_POSTGRES_DB_NAME=$E2E_POSTGRES_DB_NAME" \
-e "E2E_POSTGRES_ADDRESS=$E2E_POSTGRES_ADDRESS" \
-e "E2E_POSTGRES_PORT=$E2E_POSTGRES_PORT" \
-e "E2E_WORKER_TAG_INGRESS=$E2E_WORKER_TAG_INGRESS" \
-e "E2E_WORKER_TAG_EGRESS=$E2E_WORKER_TAG_EGRESS" \
-e "E2E_WORKER_TAG_COLLOCATED=$E2E_WORKER_TAG_COLLOCATED" \
-e "E2E_LDAP_ADDR=$E2E_LDAP_ADDR" \
-e "E2E_LDAP_DOMAIN_DN=$E2E_LDAP_DOMAIN_DN" \
-e "E2E_LDAP_ADMIN_DN=$E2E_LDAP_ADMIN_DN" \
-e "E2E_LDAP_ADMIN_PASSWORD=$E2E_LDAP_ADMIN_PASSWORD" \
-e "E2E_LDAP_USER_NAME=$E2E_LDAP_USER_NAME" \
-e "E2E_LDAP_USER_PASSWORD=$E2E_LDAP_USER_PASSWORD" \
-e "E2E_LDAP_GROUP_NAME=$E2E_LDAP_GROUP_NAME" \
-e "E2E_GCP_PRIVATE_KEY_ID=$E2E_GCP_PRIVATE_KEY_ID" \
-e "E2E_GCP_PRIVATE_KEY=$E2E_GCP_PRIVATE_KEY" \
-e "E2E_GCP_CLIENT_EMAIL=$E2E_GCP_CLIENT_EMAIL" \
-e "E2E_GCP_PROJECT_ID=$E2E_GCP_PROJECT_ID" \
-e "E2E_GCP_ZONE=$E2E_GCP_ZONE" \
-e "E2E_GCP_TARGET_SSH_KEY=$E2E_GCP_TARGET_SSH_KEY" \
-e "E2E_GCP_HOST_SET_FILTER1=$E2E_GCP_HOST_SET_FILTER1" \
-e "E2E_GCP_HOST_SET_FILTER2=$E2E_GCP_HOST_SET_FILTER2" \
-e "E2E_GCP_HOST_SET_IPS=$E2E_GCP_HOST_SET_IPS" \
-e "E2E_MAX_PAGE_SIZE=$E2E_MAX_PAGE_SIZE" \
-e "E2E_CONTROLLER_CONTAINER_NAME=$E2E_CONTROLLER_CONTAINER_NAME" \
--mount type=bind,src=$BOUNDARY_DIR,dst=/src/boundary/ \
--mount type=bind,src=$MODULE_DIR/../..,dst=/testlogs \
--mount type=bind,src=$(go env GOCACHE),dst=/root/.cache/go-build \
--mount type=bind,src=$(go env GOMODCACHE),dst=/go/pkg/mod \
-v "$MODULE_DIR/test.sh:/scripts/test.sh" \
-v "$E2E_SSH_KEY_PATH:/keys/target.pem" \
-v "$BOUNDARY_CLI_DIR:/boundary.zip" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
--network $TEST_NETWORK_NAME \
--cap-add=CAP_IPC_LOCK \
$TEST_RUNNER_IMAGE \
/bin/sh -c /scripts/test.sh
+6
View File
@@ -84,6 +84,11 @@ variable "vault_addr_private" {
type = string
default = ""
}
variable "vault_addr_unified" {
description = "Unified address to a vault instance that can be used for both internal and external communication"
type = string
default = ""
}
variable "vault_root_token" {
description = "Root token for vault instance"
type = string
@@ -221,6 +226,7 @@ resource "enos_local_exec" "run_e2e_test" {
VAULT_TOKEN = var.vault_root_token
E2E_VAULT_ADDR_PUBLIC = var.vault_addr_public
E2E_VAULT_ADDR_PRIVATE = var.vault_addr_private
E2E_VAULT_ADDR_UNIFIED = var.vault_addr_unified
E2E_AWS_ACCESS_KEY_ID = var.aws_access_key_id
E2E_AWS_SECRET_ACCESS_KEY = var.aws_secret_access_key
E2E_AWS_HOST_SET_FILTER = var.aws_host_set_filter
@@ -82,7 +82,7 @@ func TestCliTcpTargetConnectTargetWithSessionMaxSecondsTearDown(t *testing.T) {
// Ensure that the session did not run for longer than the time limit
// (plus a small buffer)
end := time.Since(start).Seconds()
require.Less(t, end, float64(sessionMaxSeconds+2))
require.Less(t, end, float64(sessionMaxSeconds+3))
require.Greater(t, end, float64(sessionMaxSeconds-1))
case <-time.After(time.Second * time.Duration(sessionMaxSeconds+5)):
t.Fatal("Timed out waiting for session command to exit")
@@ -249,7 +249,7 @@ func TestAuthMethodOidcVault(t *testing.T) {
fmt.Sprintf("identity/oidc/provider/%s", providerName),
fmt.Sprintf("allowed_client_ids=%s", clientId),
"scopes_supported=groups,user",
fmt.Sprintf("issuer=%s", c.VaultAddr),
fmt.Sprintf("issuer=%s", c.VaultAddrUnified),
),
)
require.NoError(t, output.Err, string(output.Stderr))
@@ -258,7 +258,7 @@ func TestAuthMethodOidcVault(t *testing.T) {
output = e2e.RunCommand(ctx, "curl",
e2e.WithArgs(
"-s",
fmt.Sprintf("%s/v1/identity/oidc/provider/%s/.well-known/openid-configuration", c.VaultAddr, providerName),
fmt.Sprintf("%s/v1/identity/oidc/provider/%s/.well-known/openid-configuration", c.VaultAddrUnified, providerName),
),
)
require.NoError(t, output.Err, string(output.Stderr))
@@ -381,7 +381,7 @@ func TestAuthMethodOidcVault(t *testing.T) {
// Vault: Authenticate to get a client token
res, err = http.Post(
fmt.Sprintf("%s/v1/auth/userpass/login/%s", c.VaultAddr, userName),
fmt.Sprintf("%s/v1/auth/userpass/login/%s", c.VaultAddrUnified, userName),
"application/json",
strings.NewReader(
fmt.Sprintf(`{"password": %q}`, userPassword),
@@ -407,7 +407,7 @@ func TestAuthMethodOidcVault(t *testing.T) {
http.MethodGet,
fmt.Sprintf(
"%s/v1/identity/oidc/provider/%s/authorize?scope=%s&response_type=%s&client_id=%s&redirect_uri=%s&state=%s&nonce=%s&max_age=20",
c.VaultAddr,
c.VaultAddrUnified,
providerName,
"openid+groups+user",
"code",
@@ -114,7 +114,7 @@ func TestApiVaultLdapCredentialLibrary(t *testing.T) {
// Create two Vault LDAP credential libraries: One with static, one with
// dynamic creds.
storeId, err := boundary.CreateCredentialStoreVaultApi(t, t.Context(), client, projectId, c.VaultAddr, vaultToken)
storeId, err := boundary.CreateCredentialStoreVaultApi(t, t.Context(), client, projectId, c.VaultAddrPrivate, vaultToken)
require.NoError(t, err)
staticCredVclId, err := boundary.CreateVaultLdapCredentialLibraryApi(t, t.Context(), client, storeId, fmt.Sprintf("%s/static-cred/%s", c.VaultLdapPath, c.LdapUserName))
require.NoError(t, err)
@@ -288,7 +288,7 @@ func TestCliVaultLdapCredentialLibrary(t *testing.T) {
// Create two Vault LDAP credential libraries: One with static, one with
// dynamic creds.
storeId, err := boundary.CreateCredentialStoreVaultCli(t, t.Context(), projectId, c.VaultAddr, vaultToken)
storeId, err := boundary.CreateCredentialStoreVaultCli(t, t.Context(), projectId, c.VaultAddrPrivate, vaultToken)
require.NoError(t, err)
staticCredVclId, err := boundary.CreateVaultLdapCredentialLibraryCli(t, t.Context(), storeId, fmt.Sprintf("%s/static-cred/%s", c.VaultLdapPath, c.LdapUserName))
require.NoError(t, err)
@@ -128,7 +128,7 @@ func TestCliVaultCredentialStore(t *testing.T) {
t.Log("Created Vault Cred Store Token")
// Create a credential store
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddr, credStoreToken)
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddrPrivate, credStoreToken)
require.NoError(t, err)
// Create a credential library for the private key
@@ -331,7 +331,7 @@ func TestApiVaultCredentialStore(t *testing.T) {
// Create a credential store
csClient := credentialstores.NewClient(client)
newCredentialStoreResult, err := csClient.Create(ctx, "vault", projectId,
credentialstores.WithVaultCredentialStoreAddress(c.VaultAddr),
credentialstores.WithVaultCredentialStoreAddress(c.VaultAddrPrivate),
credentialstores.WithVaultCredentialStoreToken(credStoreToken),
)
require.NoError(t, err)
@@ -12,9 +12,14 @@ type config struct {
TargetPort string `envconfig:"E2E_TARGET_PORT" required:"true"` // e.g. 22
// Note: Key is base64 encoded
TargetCaKey string `envconfig:"E2E_SSH_CA_KEY" required:"true"`
// VaultAddr is the address that the Boundary server uses to interact with the running Vault instance
VaultAddr string `envconfig:"E2E_VAULT_ADDR_PUBLIC" required:"true"` // e.g. "http://127.0.0.1:8200"
// VaultAddr is the address that the Vault CLI can use to interact with the Vault instance
VaultAddr string `envconfig:"E2E_VAULT_ADDR_PUBLIC" required:"true"` // e.g. "http://127.0.0.1:8200"
// VaultAddrPrivate is the address that the Boundary controller can reach Vault
VaultAddrPrivate string `envconfig:"E2E_VAULT_ADDR_PRIVATE" required:"true"` // e.g. "http://10.10.10.10:8200"
// VaultAddrUnified is an address that can be used by both the local machine
// and the Boundary controller to interact with Vault. This is used for
// testing OIDC authentication where the Boundary controller needs to communicate with Vault using the same address as the CLI.
VaultAddrUnified string `envconfig:"E2E_VAULT_ADDR_UNIFIED" required:"true"` // e.g. "http://vault:8200"
VaultSecretPath string `envconfig:"E2E_VAULT_SECRET_PATH" default:"e2e_secrets"`
VaultLdapPath string `envconfig:"E2E_VAULT_LDAP_PATH" default:"e2e_ldap"`
MaxPageSize int `envconfig:"E2E_MAX_PAGE_SIZE" default:"1000"`
@@ -93,7 +93,7 @@ func TestCliPaginateCredentialLibraries(t *testing.T) {
t.Log("Created Vault Cred Store Token")
// Create a credential store
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddr, credStoreToken)
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddrPrivate, credStoreToken)
require.NoError(t, err)
// Create enough credential libraries to overflow a single page.
@@ -248,7 +248,7 @@ func TestApiPaginateCredentialLibraries(t *testing.T) {
t.Log("Created Vault Cred Store Token")
// Create a credential store
storeId, err := boundary.CreateCredentialStoreVaultApi(t, ctx, client, projectId, c.VaultAddr, credStoreToken)
storeId, err := boundary.CreateCredentialStoreVaultApi(t, ctx, client, projectId, c.VaultAddrPrivate, credStoreToken)
require.NoError(t, err)
// Create enough credential libraries to overflow a single page.
@@ -106,7 +106,7 @@ func TestCliTcpTargetVaultGenericConnectTargetWithAuthzToken(t *testing.T) {
t.Log("Created Vault Cred Store Token")
// Create a credential store
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddr, credStoreToken)
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddrPrivate, credStoreToken)
require.NoError(t, err)
// Create a credential library
@@ -106,7 +106,7 @@ func TestCliTcpTargetVaultGenericConnectTargetWithSsh(t *testing.T) {
t.Log("Created Vault Cred Store Token")
// Create a credential store
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddr, credStoreToken)
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddrPrivate, credStoreToken)
require.NoError(t, err)
// Create a credential library
@@ -107,7 +107,7 @@ func TestCliTcpTargetVaultGenericConnectTarget(t *testing.T) {
t.Log("Created Vault Cred Store Token")
// Create a credential store
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddr, credStoreToken)
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddrPrivate, credStoreToken)
require.NoError(t, err)
// Create a credential library
@@ -102,7 +102,7 @@ func TestCliTcpTargetWorkerConnectTarget(t *testing.T) {
t.Log("Created Vault Cred Store Token")
// Create a credential store
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddr, credStoreToken)
storeId, err := boundary.CreateCredentialStoreVaultCli(t, ctx, projectId, c.VaultAddrPrivate, credStoreToken)
require.NoError(t, err)
// Create a credential library