Skip to content

Commit 6ce72bd

Browse files
authoredJan 14, 2025
Merge pull request #25 from swaroopar/feature/buildDevZitadelImage
Feature/build dev zitadel image
2 parents c4d2a80 + 64286b8 commit 6ce72bd

23 files changed

+535
-136
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
name: Build Zitadel Dev Images
2+
3+
on:
4+
workflow_dispatch:
5+
6+
env:
7+
BOT_USER_NAME: eclipse-xpanse-bot
8+
BOT_EMAIL_ID: xpanse-bot@eclipse.org
9+
REGISTRY: ghcr.io
10+
11+
jobs:
12+
build:
13+
runs-on: ubuntu-latest
14+
permissions:
15+
contents: write
16+
packages: write
17+
18+
steps:
19+
- name: Check out code
20+
uses: actions/checkout@v4
21+
22+
- name: Set up Docker Buildx
23+
uses: docker/setup-buildx-action@v2
24+
25+
- name: Login to Github Packages
26+
uses: docker/login-action@v3
27+
with:
28+
registry: ghcr.io
29+
username: ${{ env.BOT_USER_NAME }}
30+
password: ${{ secrets.BOT_GITHUB_DOCKER_TOKEN }}
31+
32+
- name: Set up Terraform
33+
uses: hashicorp/setup-terraform@v3
34+
with:
35+
terraform_version: 1.6.1
36+
37+
- name: build custom postgres image with changed PGDATA
38+
run: |
39+
docker build -t custom-pg-db:latest .
40+
working-directory: zitadel/local/build
41+
42+
- name: start containers using docker build
43+
run: |
44+
mkdir ${{ runner.temp }}/machinekey
45+
VOLUME_POINT=${{ runner.temp }}/machinekey docker compose up -d
46+
working-directory: zitadel/local/build
47+
48+
- name: Wait for API Response
49+
uses: mydea/action-wait-for-api@v1
50+
continue-on-error: true
51+
with:
52+
url: "http://localhost:8088/debug/healthz"
53+
expected-status: "200" # You can specify other 2xx codes as needed
54+
timeout: "60" # Maximum wait time in seconds
55+
interval: "10"
56+
57+
- name: copy admin service account key
58+
run: |
59+
cp ${{ runner.temp }}/machinekey/* .
60+
working-directory: zitadel/terraform
61+
62+
- name: configure Zitadel
63+
run: |
64+
terraform init
65+
terraform apply -var-file=environments/local.tfvars -auto-approve
66+
terraform output -json > output.json
67+
working-directory: zitadel/terraform
68+
69+
- name: Upload Artifacts
70+
uses: actions/upload-artifact@v4
71+
with:
72+
name: access details # Name of the artifact
73+
path: zitadel/terraform/*.json
74+
75+
- name: commit images
76+
run: |
77+
JOB_LINK="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
78+
docker stop compose-zitadel-1
79+
docker stop compose-db-1
80+
docker commit --change="LABEL job_link=\"$JOB_LINK\"" compose-zitadel-1 xpanse-zitadel-dev-server
81+
docker commit --change="LABEL job_link=\"$JOB_LINK\"" compose-db-1 xpanse-zitadel-dev-db
82+
83+
- name: Build and push Docker image
84+
run: |
85+
JOB_LINK="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
86+
docker tag xpanse-zitadel-dev-server:latest ${{ env.REGISTRY }}/${{ github.repository_owner }}/xpanse-zitadel-dev-server:latest
87+
docker tag xpanse-zitadel-dev-db:latest ${{ env.REGISTRY }}/${{ github.repository_owner }}/xpanse-zitadel-dev-db:latest
88+
docker push ${{ env.REGISTRY }}/${{ github.repository_owner }}/xpanse-zitadel-dev-server:latest
89+
docker push ${{ env.REGISTRY }}/${{ github.repository_owner }}/xpanse-zitadel-dev-db:latest

‎.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
*.hcl
66
*.tfstate
77
*token.json
8-
*.tfstate.backup
8+
*.tfstate.backup
9+
zitadel-admin-sa.json

‎zitadel/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ config the xpanse project with the service instance of Zitadel.
1212

1313
Here are two types of service instance deployment solutions. You can deploy a local service instance
1414
of Zitadel according
15-
to the document [local-installation-steps.md](local/local-installation-steps.md) or deploy a
15+
to the document [local-installation-steps.md](local/run/run-dev-zitadel-containers) or deploy a
1616
production service instance of
1717
Zitadel according to the
1818
document [testbed-installation-steps.md](testlab/testbed-installation-steps.md).

‎zitadel/local/build/Dockerfile

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
FROM postgres:16-alpine
2+
3+
# This is necessary. Otherwise the data written to the container will not be part of the created image.
4+
RUN mkdir -p /var/lib/postgresql-static/data
5+
ENV PGDATA=/var/lib/postgresql-static/data
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Build Zitadel Dev Docker Images
2+
3+
To enhance developer experience, we prepare the Zitadel development docker images with all necessary configurations.
4+
The developer will have to simply start these application and database docker containers and
5+
then the environment is ready to use without any additional configuration.
6+
7+
## Image Build Job
8+
9+
The GitHub action [build-dev-images](../../../.github/workflows/build-zitadel-dev-images.yml) builds the necessary images
10+
and uploads it to the GitHub packages and also uploads all configuration details to action artifacts.
11+
12+
> Images will be always simply built with 'latest' tag.
13+
14+
## Configure Client Systems
15+
16+
Whenever this job is executed, the images generated will contain new information for all clients.
17+
Hence, it is necessary for the developer to also update the following files whenever a new image is created
18+
and also inform team that the latest images must be pulled.
19+
20+
- [xpanse UI auth config](https://github.com/eclipse-xpanse/xpanse-ui/blob/main/.env.zitadel-local)
21+
- [xpanse app auth config](https://github.com/eclipse-xpanse/xpanse/blob/main/runtime/src/main/resources/application-zitadel.properties)
+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
services:
2+
zitadel:
3+
user: "${UID:-1001}"
4+
restart: 'always'
5+
networks:
6+
- 'zitadel'
7+
image: 'ghcr.io/zitadel/zitadel:latest'
8+
command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled'
9+
environment:
10+
ZITADEL_DATABASE_POSTGRES_HOST: db
11+
ZITADEL_DATABASE_POSTGRES_PORT: 5432
12+
ZITADEL_DATABASE_POSTGRES_DATABASE: zitadel
13+
ZITADEL_DATABASE_POSTGRES_USER_USERNAME: zitadel
14+
ZITADEL_DATABASE_POSTGRES_USER_PASSWORD: zitadel
15+
ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE: disable
16+
ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME: postgres
17+
ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD: postgres
18+
ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE: disable
19+
ZITADEL_EXTERNALSECURE: false
20+
ZITADEL_FIRSTINSTANCE_MACHINEKEYPATH: /machinekey/zitadel-admin-sa.json
21+
ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINE_USERNAME: zitadel-admin-sa
22+
ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINE_NAME: Admin
23+
ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINEKEY_TYPE: 1
24+
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORDCHANGEREQUIRED: false
25+
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORD: Zitadel@123 # Default admin password.
26+
depends_on:
27+
db:
28+
condition: 'service_healthy'
29+
ports:
30+
- '8088:8080'
31+
volumes:
32+
- ${VOLUME_POINT:-./machinekey}:/machinekey:rw
33+
34+
db:
35+
restart: 'always'
36+
image: custom-pg-db # Custom postgres image.
37+
environment:
38+
PGUSER: postgres
39+
POSTGRES_PASSWORD: postgres
40+
networks:
41+
- 'zitadel'
42+
healthcheck:
43+
test: [ "CMD-SHELL", "pg_isready", "-d", "zitadel", "-U", "postgres" ]
44+
interval: '10s'
45+
timeout: '2400s'
46+
retries: 500
47+
start_period: '20s'
48+
49+
networks:
50+
zitadel:

‎zitadel/local/build/machinekey/.gitkeep

Whitespace-only changes.

‎zitadel/local/compose/docker-compose-local.yaml

-38
This file was deleted.

‎zitadel/local/local-installation-steps.md

-37
This file was deleted.

‎zitadel/local/run/docker-compose.yml

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
services:
2+
zitadel:
3+
# The user should have the permission to write to ./machinekey
4+
user: "${UID:-1001}"
5+
restart: 'always'
6+
networks:
7+
- 'zitadel-dev'
8+
image: ghcr.io/eclipse-xpanse/xpanse-zitadel-dev-server:latest # image built locally by commiting an already initialized zitadel server
9+
command: 'start --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled'
10+
depends_on:
11+
db:
12+
condition: 'service_healthy'
13+
ports:
14+
- '8088:8080'
15+
16+
db:
17+
restart: 'always'
18+
image: ghcr.io/eclipse-xpanse/xpanse-zitadel-dev-db:latest # image built locally by commiting an already initialized zitadel Postgres DB
19+
healthcheck:
20+
test: [ "CMD-SHELL", "pg_isready", "-d", "zitadel", "-U", "postgres" ]
21+
interval: '10s'
22+
timeout: '2400s'
23+
retries: 500
24+
start_period: '20s'
25+
networks:
26+
- 'zitadel-dev'
27+
28+
networks:
29+
zitadel-dev:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Local Development Applications of Xpanse with Local Service of Zitadel
2+
3+
This document will describe how to use docker to build a local service of Zitadel.
4+
5+
Clone project [xpanse-iam](https://github.com/eclipse-xpanse/xpanse-iam.git) from remote to workspace in local machine.
6+
Then enter the root path.
7+
8+
```shell
9+
git clone https://github.com/eclipse-xpanse/xpanse-iam.git
10+
cd xpanse-iam/zitadel/local
11+
```
12+
13+
## Deploy Local Service of Zitadel
14+
15+
Before deploying the local service of Zitadel, please install and start the Docker and Docker Compose service in the
16+
local machine. Then start the local service of Zitadel using the below command:
17+
18+
```shell
19+
docker compose up -d --pull always
20+
```
21+
22+
The below display appears to indicate that the service has started normally.
23+
This step can take around 2 minutes since the database container must sync the changes from
24+
25+
```shell
26+
✔ Network run_zitadel-dev Created 0.4s
27+
✔ Container run-db-1 Healthy 10.1s
28+
✔ Container run-zitadel-1 Started
29+
```
30+
31+
Now you can open favorite internet browser and navigate to http://localhost:8088/ui/console. This is the default IAM
32+
admin users login:
33+
34+
* username: zitadel-admin@zitadel.localhost
35+
* password: Zitadel@123
36+
37+
Other application users can be found [here](../../terraform/environments/local.tfvars).
38+
39+
40+
-8.9 KB
Binary file not shown.

‎zitadel/terraform/client-credentials.tf

+1-39
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,5 @@ resource "zitadel_machine_user" "api_client_user" {
44
name = "api-client"
55
description = "user for xpanse to make authenticated API calls"
66
access_token_type = "ACCESS_TOKEN_TYPE_JWT"
7-
}
8-
9-
// get the default organization ID. The deployer user is on the default organization.
10-
data "zitadel_orgs" "default" {
11-
name = "ZITADEL"
12-
name_method = "TEXT_QUERY_METHOD_EQUALS"
13-
}
14-
15-
// get the user ID of the deployer user.
16-
data "zitadel_machine_users" "deployer" {
17-
user_name = "deployer"
18-
user_name_method = "TEXT_QUERY_METHOD_EQUALS"
19-
}
20-
21-
resource "zitadel_instance_member" "default" {
22-
user_id = data.zitadel_machine_users.deployer.user_ids[0]
23-
roles = ["IAM_OWNER"]
24-
}
25-
26-
resource "zitadel_personal_access_token" "apiclient_user_id_token" {
27-
org_id = data.zitadel_orgs.default.ids[0]
28-
user_id = data.zitadel_machine_users.deployer.user_ids[0]
29-
}
30-
31-
// direct API call since no terraform module available for creating client credentials
32-
resource "terracurl_request" "machine_secret" {
33-
name = "machine_secret"
34-
url = "https://${var.domain}:${var.port}/management/v1/users/${resource.zitadel_machine_user.api_client_user.id}/secret"
35-
method = "PUT"
36-
response_codes = [
37-
200
38-
]
39-
headers = {
40-
x-zitadel-orgid = zitadel_org.xpanse.id
41-
Content-Type = "application/json"
42-
Accept = "application/json"
43-
Authorization = "Bearer ${resource.zitadel_personal_access_token.apiclient_user_id_token.token}"
44-
}
45-
request_body = ""
7+
with_secret = true
468
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// get the user ID of the deployer user.
2+
data "zitadel_machine_users" "deployer" {
3+
count = var.is_local_dev_env ? 0 : 1
4+
user_name = "deployer"
5+
user_name_method = "TEXT_QUERY_METHOD_EQUALS"
6+
}
7+
8+
resource "zitadel_instance_member" "default" {
9+
count = var.is_local_dev_env ? 0 : 1
10+
user_id = data.zitadel_machine_users.deployer[count.index].user_ids[0]
11+
roles = ["IAM_OWNER"]
12+
}
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module "create-dev-users" {
2+
source = "./dev-users"
3+
count = var.is_local_dev_env ? 1 : 0
4+
test_users = var.test_users
5+
xpanse_org_id = zitadel_org.xpanse.id
6+
xpanse_project_id = zitadel_project.eclipse-xpanse.id
7+
domain = var.domain
8+
port = var.port
9+
}

‎zitadel/terraform/dev-users/main.tf

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
// get the default organization ID. The deployer user is on the default organization.
2+
data "zitadel_orgs" "default" {
3+
name = "ZITADEL"
4+
name_method = "TEXT_QUERY_METHOD_EQUALS"
5+
}
6+
7+
// get the user ID of the default service account admin user.
8+
data "zitadel_machine_users" "zitadel-admin-sa" {
9+
user_name = "zitadel-admin-sa"
10+
user_name_method = "TEXT_QUERY_METHOD_EQUALS"
11+
}
12+
13+
# get access token to make API calls.
14+
resource "zitadel_personal_access_token" "apiclient_user_id_token" {
15+
org_id = data.zitadel_orgs.default.ids[0]
16+
user_id = data.zitadel_machine_users.zitadel-admin-sa.user_ids[0]
17+
}
18+
19+
20+
resource "zitadel_human_user" "test-users" {
21+
for_each = {for i, item in var.test_users : i => item}
22+
23+
org_id = var.xpanse_org_id
24+
user_name = each.value.email
25+
first_name = each.value.name
26+
last_name = each.value.name
27+
nick_name = each.value.name
28+
display_name = each.value.name
29+
preferred_language = "en"
30+
gender = "GENDER_MALE"
31+
phone = "+41799999999"
32+
is_phone_verified = true
33+
email = each.value.email
34+
is_email_verified = true
35+
initial_password = "Password1!"
36+
}
37+
38+
locals {
39+
roles_map = {
40+
for created_users in zitadel_human_user.test-users : created_users.user_name => [
41+
for test_user in var.test_users : { id : created_users.id, roles : test_user.roles }
42+
if test_user.email == created_users.user_name
43+
]
44+
}
45+
46+
passwords_map = {
47+
for created_users in zitadel_human_user.test-users : created_users.user_name => [
48+
for test_user in var.test_users : { id : created_users.id, password : test_user.password }
49+
if test_user.email == created_users.user_name
50+
]
51+
}
52+
53+
meta_data_map = flatten([
54+
for created_users in zitadel_human_user.test-users : [
55+
for test_user in var.test_users : [
56+
for meta_data_entry in test_user.meta-data :{
57+
id : created_users.id, user_name : created_users.user_name, data_key : meta_data_entry.key,
58+
data_value : meta_data_entry.value
59+
} if created_users.user_name == test_user.email
60+
]
61+
]
62+
])
63+
}
64+
65+
resource "zitadel_user_grant" "test-roles" {
66+
for_each = local.roles_map
67+
68+
project_id = var.xpanse_project_id
69+
org_id = var.xpanse_org_id
70+
role_keys = each.value[0].roles
71+
user_id = each.value[0].id
72+
}
73+
74+
resource "zitadel_user_metadata" "meta-data" {
75+
for_each = {for obj in local.meta_data_map : "${obj.user_name}-${obj.data_key}" => obj}
76+
77+
org_id = var.xpanse_org_id
78+
user_id = each.value.id
79+
key = each.value.data_key
80+
value = each.value.data_value
81+
}
82+
83+
//direct API call since no terraform module available for creating client credentials
84+
resource "terracurl_request" "update_password" {
85+
lifecycle {
86+
ignore_changes = all
87+
}
88+
for_each = local.passwords_map
89+
name = "update_password"
90+
url = "http://${var.domain}:${var.port}/v2/users/${each.value[0].id}/password"
91+
method = "POST"
92+
response_codes = [
93+
200
94+
]
95+
headers = {
96+
x-zitadel-orgid = var.xpanse_org_id
97+
Content-Type = "application/json"
98+
Accept = "application/json"
99+
Authorization = "Bearer ${resource.zitadel_personal_access_token.apiclient_user_id_token.token}"
100+
}
101+
request_body = <<EOF
102+
{
103+
"newPassword":{
104+
"password": "${each.value[0].password}",
105+
"changeRequired":false
106+
},
107+
"currentPassword":"Password1!"
108+
}
109+
EOF
110+
}
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
terraform {
2+
required_providers {
3+
zitadel = {
4+
source = "zitadel/zitadel"
5+
version = "1.2.0"
6+
}
7+
terracurl = {
8+
source = "devops-rob/terracurl"
9+
version = "1.1.0"
10+
}
11+
}
12+
}
+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
variable "test_users" {
2+
type = list(object({
3+
name = string
4+
email = string
5+
password = string
6+
roles = list(string)
7+
meta-data = list(object({
8+
key = string
9+
value = string
10+
}))
11+
}))
12+
13+
}
14+
15+
variable "xpanse_org_id" {
16+
description = "ID of xpanse organization"
17+
type = string
18+
}
19+
20+
variable "xpanse_project_id" {
21+
description = "ID of eclipse-xpanse project"
22+
type = string
23+
}
24+
25+
variable "domain" {
26+
description = "Domain name of the zitadel instance"
27+
type = string
28+
}
29+
30+
variable "port" {
31+
description = "Port of the zitadel application instance"
32+
type = number
33+
}
+83-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,89 @@
11
domain = "localhost"
22
insecure = "true"
3-
port = "8081"
3+
port = "8088"
44
xpanse-ui_base_uri = "http://localhost:3000"
55
xpanse_swagger-ui_base_uri = "http://localhost:8080"
66
terraform-boot_swagger-ui_base_uri = "http://localhost:9090"
77
tofu-maker_swagger-ui_base_uri = "http://localhost:9092"
8-
auth_token_type = "JWT"
8+
auth_token_type = "JWT"
9+
jwt_profile_file = "zitadel-admin-sa.json"
10+
is_local_dev_env = true
11+
test_users = [
12+
{
13+
"name" : "test-user",
14+
"email" : "test-user@localhost.com",
15+
"password" : "Zitadel@123",
16+
"roles" : [
17+
"isv",
18+
"admin",
19+
"csp",
20+
"user"
21+
],
22+
"meta-data" : [
23+
{
24+
"key" : "csp",
25+
"value" : "HuaweiCloud"
26+
},
27+
{
28+
"key" : "isv",
29+
"value" : "ISV-A"
30+
}
31+
]
32+
},
33+
{
34+
"name" : "openstack-lab-csp",
35+
"email" : "openstacklab@localhost.com",
36+
"password" : "Zitadel@123",
37+
"roles" : [
38+
"csp"
39+
],
40+
"meta-data" : [
41+
{
42+
"key" : "csp",
43+
"value" : "OpenstackTestlab"
44+
}
45+
]
46+
},
47+
{
48+
"name" : "flexible-engine-csp",
49+
"email" : "flexible-engine@localhost.com",
50+
"password" : "Zitadel@123",
51+
"roles" : [
52+
"csp"
53+
],
54+
"meta-data" : [
55+
{
56+
"key" : "csp",
57+
"value" : "FlexibleEngine"
58+
}
59+
]
60+
},
61+
{
62+
"name" : "plus-server-csp",
63+
"email" : "plus-server@localhost.com",
64+
"password" : "Zitadel@123",
65+
"roles" : [
66+
"csp"
67+
],
68+
"meta-data" : [
69+
{
70+
"key" : "csp",
71+
"value" : "PlusServer"
72+
}
73+
]
74+
},
75+
{
76+
"name" : "regio-cloud-csp",
77+
"email" : "regio-cloud@localhost.com",
78+
"password" : "Zitadel@123",
79+
"roles" : [
80+
"csp"
81+
],
82+
"meta-data" : [
83+
{
84+
"key" : "csp",
85+
"value" : "RegioCloud"
86+
}
87+
]
88+
}
89+
]

‎zitadel/terraform/main.tf

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ terraform {
22
required_providers {
33
zitadel = {
44
source = "zitadel/zitadel"
5-
version = "1.0.7"
5+
version = "1.2.0"
66
}
77
terracurl = {
8-
source = "devops-rob/terracurl"
9-
version = "1.1.0"
8+
source = "devops-rob/terracurl"
9+
version = "1.1.0"
1010
}
1111
}
1212
}

‎zitadel/terraform/outputs.tf

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ output "REACT_APP_ZITADEL_CLIENT_ID" {
3939
}
4040

4141
output "oauth-protected-api-client-id" {
42-
value = jsondecode(resource.terracurl_request.machine_secret.response).clientId
42+
value = nonsensitive(zitadel_machine_user.api_client_user.client_id)
4343
description = "Output the value of oauth.protected.api.client.id for configuring the consuming application 'Xpanse-Api'."
4444
}
4545

4646
output "oauth-protected-api-client-secret" {
47-
value = jsondecode(resource.terracurl_request.machine_secret.response).clientSecret
47+
value = nonsensitive(zitadel_machine_user.api_client_user.client_secret)
4848
description = "Output the value of oauth.protected.api.client.secret for configuring the consuming application 'Xpanse-Api'."
4949
}

‎zitadel/terraform/variables.tf

+32-12
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ variable "auth_token_type" {
55
}
66

77
variable "domain" {
8-
type = string
8+
type = string
99
}
1010

1111
variable "insecure" {
12-
type = bool
12+
type = bool
1313
}
1414

1515
variable "port" {
16-
type = number
16+
type = number
1717
}
1818

1919
variable "jwt_profile_file" {
20-
type = string
20+
type = string
2121
}
2222

2323
variable "smtp_sender_address" {
@@ -46,29 +46,49 @@ variable "smtp_login_password" {
4646
}
4747

4848
variable "redirect_xpanse-ui_uris" {
49-
type = list(string)
49+
type = list(string)
5050
}
5151

52-
variable "post_logout_redirect_uris"{
53-
type = list(string)
52+
variable "post_logout_redirect_uris" {
53+
type = list(string)
5454
}
5555

5656
variable "redirect_swagger-ui_uris" {
57-
type = list(string)
57+
type = list(string)
5858
}
5959

6060
variable "xpanse-ui_base_uri" {
61-
type = string
61+
type = string
6262
}
6363

6464
variable "xpanse_swagger-ui_base_uri" {
65-
type = string
65+
type = string
6666
}
6767

6868
variable "terraform-boot_swagger-ui_base_uri" {
69-
type = string
69+
type = string
7070
}
7171

7272
variable "tofu-maker_swagger-ui_base_uri" {
73-
type = string
73+
type = string
74+
}
75+
76+
variable "is_local_dev_env" {
77+
type = bool
78+
description = "Flag to control changes to be done only for dev environments"
79+
}
80+
81+
variable "test_users" {
82+
description = "list of test users that must be created on non-production environments"
83+
type = list(object({
84+
name = string
85+
email = string
86+
password = string
87+
roles = list(string)
88+
meta-data = list(object({
89+
key = string
90+
value = string
91+
}))
92+
}))
93+
7494
}

‎zitadel/testlab/testbed-installation-steps.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ This installation is a replica of production setup but without high availability
88
the following components running
99

1010
1. Zitadel
11-
2. Cockroach DB
11+
2. Postgres DB
1212
3. Nginx Load Balancer
1313
4. CertBot - Not actively running
1414

0 commit comments

Comments
 (0)
Please sign in to comment.