azure: Make it possible to adjust Docker resources per test env

Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
This commit is contained in:
Stanislav Levin
2021-05-10 03:22:06 +03:00
committed by Alexander Bokovoy
parent 6c2db326f8
commit 10461b7091
5 changed files with 142 additions and 7 deletions

View File

@@ -8,7 +8,8 @@ services:
security_opt:
- apparmor:unconfined
- seccomp:./seccomp.json
mem_limit: "1900m"
mem_limit: "${IPA_TESTS_SERVER_MEM_LIMIT}"
memswap_limit: "${IPA_TESTS_SERVER_MEMSWAP_LIMIT}"
volumes:
- /sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd
- ./ipa-test-config.yaml:/root/.ipa/ipa-test-config.yaml:ro
@@ -25,7 +26,8 @@ services:
security_opt:
- apparmor:unconfined
- seccomp:./seccomp.json
mem_limit: "1900m"
mem_limit: "${IPA_TESTS_REPLICA_MEM_LIMIT}"
memswap_limit: "${IPA_TESTS_REPLICA_MEMSWAP_LIMIT}"
volumes:
- /sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd
- ${BUILD_REPOSITORY_LOCALPATH}:${IPA_TESTS_REPO_PATH}:ro
@@ -40,7 +42,8 @@ services:
security_opt:
- apparmor:unconfined
- seccomp:./seccomp.json
mem_limit: "536870912"
mem_limit: "${IPA_TESTS_CLIENT_MEM_LIMIT}"
memswap_limit: "${IPA_TESTS_CLIENT_MEMSWAP_LIMIT}"
volumes:
- /sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd
- ${BUILD_REPOSITORY_LOCALPATH}:${IPA_TESTS_REPO_PATH}:ro

View File

@@ -1,3 +1,14 @@
default_resources:
server:
mem_limit: "1800m"
memswap_limit: "2500m"
replica:
mem_limit: "1800m"
memswap_limit: "2500m"
client:
mem_limit: "512m"
memswap_limit: "1000m"
vms:
- vm_jobs:
- container_job: base

View File

@@ -1,6 +1,22 @@
default_resources:
server:
mem_limit: "2200m"
memswap_limit: "3000m"
replica:
mem_limit: "2200m"
memswap_limit: "3000m"
client:
mem_limit: "512m"
memswap_limit: "1000m"
vms:
- vm_jobs:
- container_job: InstallMaster
containers:
resources:
server:
mem_limit: "3200m"
memswap_limit: "4800m"
tests:
- test_integration/test_installation.py::TestInstallMaster
@@ -14,6 +30,13 @@ vms:
containers:
replicas: 1
clients: 1
resources:
replica:
mem_limit: "2200m"
memswap_limit: "3300m"
client:
mem_limit: "768m"
memswap_limit: "1024m"
tests:
- test_integration/test_forced_client_reenrollment.py
@@ -25,12 +48,20 @@ vms:
- container_job: InstallDNSSECFirst
containers:
replicas: 1
resources:
replica:
mem_limit: "2400m"
memswap_limit: "3500m"
tests:
- test_integration/test_dnssec.py::TestInstallDNSSECFirst
- container_job: simple_replication
containers:
replicas: 1
resources:
replica:
mem_limit: "2400m"
memswap_limit: "3500m"
tests:
- test_integration/test_simple_replication.py
@@ -50,6 +81,10 @@ vms:
- container_job: sudo
containers:
clients: 1
resources:
server:
mem_limit: "2600m"
memswap_limit: "3900m"
tests:
- test_integration/test_sudo.py
@@ -57,6 +92,13 @@ vms:
containers:
replicas: 1
clients: 1
resources:
replica:
mem_limit: "2200m"
memswap_limit: "3300m"
client:
mem_limit: "768m"
memswap_limit: "1024m"
tests:
- test_integration/test_external_ca.py::TestExternalCA
@@ -69,6 +111,10 @@ vms:
- container_job: external_ca_ExternalCAConstraints
containers:
clients: 1
resources:
client:
mem_limit: "768m"
memswap_limit: "1024m"
tests:
- test_integration/test_external_ca.py::TestExternalCAConstraints
@@ -77,13 +123,16 @@ vms:
containers:
replicas: 1
clients: 1
resources:
server:
mem_limit: "3500m"
memswap_limit: "4000m"
client:
mem_limit: "768m"
memswap_limit: "1024m"
tests:
- test_integration/test_commands.py
- container_job: upgrade
tests:
- test_integration/test_upgrade.py
- container_job: membermanager
tests:
- test_integration/test_membermanager.py
@@ -111,6 +160,10 @@ vms:
- container_job: advise
containers:
clients: 1
resources:
client:
mem_limit: "768m"
memswap_limit: "1024m"
tests:
- test_integration/test_advise.py
@@ -120,11 +173,26 @@ vms:
containers:
replicas: 1
clients: 1
resources:
replica:
mem_limit: "2300m"
memswap_limit: "3300m"
- container_job: external_ca_SelfExternalSelf
tests:
- test_integration/test_external_ca.py::TestSelfExternalSelf
- vm_jobs:
- container_job: upgrade
containers:
resources:
server:
mem_limit: "2200m"
memswap_limit: "3300m"
tests:
- test_integration/test_upgrade.py
# requires external DNS configuration, this is not set up yet
# - container_job: authselect
# containers:

View File

@@ -52,6 +52,28 @@ IPA_TESTS_SCRIPTS_OUT="${BUILD_REPOSITORY_LOCALPATH}/${IPA_TESTS_SCRIPTS}"
IPA_TESTS_NETWORK_INTERNAL_VARNAME="IPA_TESTS_NETWORK_INTERNAL_${PROJECT_ID}"
IPA_NETWORK_INTERNAL="${!IPA_TESTS_NETWORK_INTERNAL_VARNAME:-false}"
# Docker resources
# mem_limit
IPA_TESTS_SERVER_MEM_LIMIT_VARNAME="IPA_TESTS_SERVER_MEM_LIMIT_${PROJECT_ID}"
IPA_TESTS_SERVER_MEM_LIMIT="${!IPA_TESTS_SERVER_MEM_LIMIT_VARNAME:-2000m}"
IPA_TESTS_REPLICA_MEM_LIMIT_VARNAME="IPA_TESTS_REPLICA_MEM_LIMIT_${PROJECT_ID}"
IPA_TESTS_REPLICA_MEM_LIMIT="${!IPA_TESTS_REPLICA_MEM_LIMIT_VARNAME:-2000m}"
IPA_TESTS_CLIENT_MEM_LIMIT_VARNAME="IPA_TESTS_CLIENT_MEM_LIMIT_${PROJECT_ID}"
IPA_TESTS_CLIENT_MEM_LIMIT="${!IPA_TESTS_CLIENT_MEM_LIMIT_VARNAME:-512m}"
# memswap_limit
IPA_TESTS_SERVER_MEMSWAP_LIMIT_VARNAME="IPA_TESTS_SERVER_MEMSWAP_LIMIT_${PROJECT_ID}"
IPA_TESTS_SERVER_MEMSWAP_LIMIT="${!IPA_TESTS_SERVER_MEMSWAP_LIMIT_VARNAME:-2500m}"
IPA_TESTS_REPLICA_MEMSWAP_LIMIT_VARNAME="IPA_TESTS_REPLICA_MEMSWAP_LIMIT_${PROJECT_ID}"
IPA_TESTS_REPLICA_MEMSWAP_LIMIT="${!IPA_TESTS_REPLICA_MEMSWAP_LIMIT_VARNAME:-2500m}"
IPA_TESTS_CLIENT_MEMSWAP_LIMIT_VARNAME="IPA_TESTS_CLIENT_MEMSWAP_LIMIT_${PROJECT_ID}"
IPA_TESTS_CLIENT_MEMSWAP_LIMIT="${!IPA_TESTS_CLIENT_MEMSWAP_LIMIT_VARNAME:-768m}"
#
IPA_TESTS_DOMAIN="${IPA_TESTS_DOMAIN:-ipa.test}"
# bash4
IPA_TESTS_REALM="${IPA_TESTS_DOMAIN^^}"
@@ -116,6 +138,12 @@ IPA_DOCKER_IMAGE="${IPA_DOCKER_IMAGE:-freeipa-azure-builder}" \
IPA_NETWORK="${IPA_NETWORK:-ipanet}" \
IPA_NETWORK_INTERNAL="$IPA_NETWORK_INTERNAL" \
IPA_IPV6_SUBNET="2001:db8:1:${PROJECT_ID}::/64" \
IPA_TESTS_SERVER_MEM_LIMIT="$IPA_TESTS_SERVER_MEM_LIMIT" \
IPA_TESTS_REPLICA_MEM_LIMIT="$IPA_TESTS_REPLICA_MEM_LIMIT" \
IPA_TESTS_CLIENT_MEM_LIMIT="$IPA_TESTS_CLIENT_MEM_LIMIT" \
IPA_TESTS_SERVER_MEMSWAP_LIMIT="$IPA_TESTS_SERVER_MEMSWAP_LIMIT" \
IPA_TESTS_REPLICA_MEMSWAP_LIMIT="$IPA_TESTS_REPLICA_MEMSWAP_LIMIT" \
IPA_TESTS_CLIENT_MEMSWAP_LIMIT="$IPA_TESTS_CLIENT_MEMSWAP_LIMIT" \
docker-compose -p "$PROJECT_ID" up \
--scale replica="$IPA_TESTS_REPLICAS" \
--scale client="$IPA_TESTS_CLIENTS" \
@@ -223,6 +251,12 @@ IPA_DOCKER_IMAGE="${IPA_DOCKER_IMAGE:-freeipa-azure-builder}" \
IPA_NETWORK="${IPA_NETWORK:-ipanet}" \
IPA_NETWORK_INTERNAL="$IPA_NETWORK_INTERNAL" \
IPA_IPV6_SUBNET="2001:db8:1:${PROJECT_ID}::/64" \
IPA_TESTS_SERVER_MEM_LIMIT="$IPA_TESTS_SERVER_MEM_LIMIT" \
IPA_TESTS_REPLICA_MEM_LIMIT="$IPA_TESTS_REPLICA_MEM_LIMIT" \
IPA_TESTS_CLIENT_MEM_LIMIT="$IPA_TESTS_CLIENT_MEM_LIMIT" \
IPA_TESTS_SERVER_MEMSWAP_LIMIT="$IPA_TESTS_SERVER_MEMSWAP_LIMIT" \
IPA_TESTS_REPLICA_MEMSWAP_LIMIT="$IPA_TESTS_REPLICA_MEMSWAP_LIMIT" \
IPA_TESTS_CLIENT_MEMSWAP_LIMIT="$IPA_TESTS_CLIENT_MEMSWAP_LIMIT" \
docker-compose -p "$PROJECT_ID" down
popd

View File

@@ -1,4 +1,6 @@
import argparse
import copy
import pprint
import json
import yaml
@@ -13,6 +15,7 @@ args = parser.parse_args()
with open(args.azure_template) as f:
data = yaml.safe_load(f)
default_resources = data["default_resources"]
matrix_jobs = {}
for vm in data['vms']:
vm_jobs = vm['vm_jobs']
@@ -33,14 +36,28 @@ with open(args.azure_template) as f:
)
containers = vm_job.get('containers')
cont_resources = copy.deepcopy(default_resources)
replicas = 0
clients = 0
if containers:
replicas = containers.get('replicas', 0)
clients = containers.get('clients', 0)
resources = containers.get("resources")
if resources:
for cont in ["server", "replica", "client"]:
cont_resources[cont].update(
resources.get(cont, {})
)
jobs[f'ipa_tests_replicas_{job_id}'] = replicas
jobs[f'ipa_tests_clients_{job_id}'] = clients
for cont in ["server", "replica", "client"]:
for res in ["mem_limit", "memswap_limit"]:
key = f"ipa_tests_{cont}_{res}_{job_id}"
jobs[key] = cont_resources[cont][res]
if len(vm_jobs) > args.max_azure_env_jobs:
raise ValueError(
f"Number of defined jobs:{len(vm_jobs)} within VM:'{job_name}'"
@@ -49,5 +66,7 @@ with open(args.azure_template) as f:
if job_name in matrix_jobs:
raise ValueError(f"Environment names should be unique:{job_name}")
matrix_jobs[job_name] = jobs
pprint.pprint(matrix_jobs)
print("##vso[task.setVariable variable=matrix;isOutput=true]" +
json.dumps(matrix_jobs))