diff --git a/CHANGELOG.md b/CHANGELOG.md index 23d1ee03..74470514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Calendar Versioning](https://calver.org/). +## [25.11.0] - 2025-11-TBD + +**Upgrade Instructions:** +* It's recommended to perform a full cluster upgrade as Base AMIs and other settings have been updated +```bash +./idea-admin.sh upgrade-cluster --aws-region $IDEA_AWS_REGION --cluster-name $IDEA_CLUSTER_NAME +``` +([Upgrade Documentation](https://docs.idea-hpc.com/first-time-users/cluster-operations/update-idea-cluster/upgrade-cluster)) + +### **🔧 Improvements** +* **Dependencies**: Updated AWS CDK (2.1031.2), Python (3.13.9), Node (22.21.1), and all Python packages +* **NVIDIA GPU Drivers**: Updated driver versions + * LTSB from `470.239.06` to `470.256.02` + * Production from `580.65.06` to `580.105.08` +* **AMI Updates**: Refreshed base and software stack AMI IDs across all regions + * Amazon Linux 2023 updated to kernel 6.12 +* **HPC Job Provisioning**: Added configurable job reconciler interval (`scheduler.job_provisioning.job_reconciler_interval_seconds`, default: 60 seconds) +* **FSx Lustre Support**: Added FSx Lustre support for modern kernels + +### **🐛 Bug Fixes** +* **HPC Job Monitor**: Fixed job monitor thread crash from unhandled exceptions in finished job processor +* **HPC Job Provisioning**: Fixed jobs getting stuck when PBS hooks don't fire immediately + * Added job reconciler fallback to catch missed jobs +* **EC2 Instance Type Cache**: Fixed cache overflow preventing job provisioning for new instance types + * Enhanced with larger size and on-demand fetching +* **Lustre Client Repo**: Fixed repo family on Ubuntu +* **CDK Template**: Removed invalid TTL on Alias record +* **GovCloud VDC Deployment**: Fixed EventBridge scheduler rule deployment failure in AWS GovCloud + ## [25.09.1] - 2025-09-22 **Upgrade Instructions:** diff --git a/IDEA_VERSION.txt b/IDEA_VERSION.txt index 739af04d..6cd39b74 100644 --- a/IDEA_VERSION.txt +++ b/IDEA_VERSION.txt @@ -1 +1 @@ -25.09.1 +25.11.0 diff --git a/deployment/ecr/idea-administrator/Dockerfile b/deployment/ecr/idea-administrator/Dockerfile index 177ba5d7..82cb5760 100644 --- a/deployment/ecr/idea-administrator/Dockerfile +++ b/deployment/ecr/idea-administrator/Dockerfile @@ -1,11 +1,11 @@ # Build arguments for software versions -ARG PYTHON_VERSION=3.13.7 +ARG PYTHON_VERSION=3.13.9 FROM public.ecr.aws/docker/library/python:${PYTHON_VERSION}-slim ARG TARGETARCH -ARG NODE_VERSION=22.18.0 +ARG NODE_VERSION=22.21.1 ARG NVM_VERSION=0.40.3 -ARG AWS_CDK_VERSION=2.1026.0 +ARG AWS_CDK_VERSION=2.1031.2 ENV OS_ARCH="${TARGETARCH:-amd64}" diff --git a/idea-admin-windows.ps1 b/idea-admin-windows.ps1 index a953720f..bf85acd4 100755 --- a/idea-admin-windows.ps1 +++ b/idea-admin-windows.ps1 @@ -38,7 +38,7 @@ function Verify-Command($type,$message,$command) { $IDEADevMode = if ($Env:IDEA_DEV_MODE) {$Env:IDEA_DEV_MODE} else {""} $VirtualEnv = if ($Env:VIRTUAL_ENV) {$Env:VIRTUAL_ENV} else {""} $ScriptDir = $PSScriptRoot -$IDEARevision = if ($Env:IDEA_REVISION) {$Env:IDEA_REVISION} else {"v25.09.1"} +$IDEARevision = if ($Env:IDEA_REVISION) {$Env:IDEA_REVISION} else {"v25.11.0"} $IDEADockerRepo = "public.ecr.aws/s5o2b4m0" $DocumentationError = "https://docs.idea-hpc.com" $AWSProfile = if ($Env:AWS_PROFILE) {$Env:AWS_PROFILE} else {"default"} diff --git a/idea-admin.sh b/idea-admin.sh index 9c8a9847..10ae1cc9 100755 --- a/idea-admin.sh +++ b/idea-admin.sh @@ -28,7 +28,7 @@ # * IDEA_DEV_MODE - Set to "true" if you are working with IDEA sources SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -IDEA_REVISION=${IDEA_REVISION:-"v25.09.1"} +IDEA_REVISION=${IDEA_REVISION:-"v25.11.0"} IDEA_DOCKER_REPO=${IDEA_DOCKER_REPO:-"public.ecr.aws/s5o2b4m0/idea-administrator"} IDEA_ECR_CREDS_RESET=${IDEA_ECR_CREDS_RESET:-"true"} IDEA_ADMIN_AWS_CREDENTIAL_PROVIDER=${IDEA_ADMIN_AWS_CREDENTIAL_PROVIDER:=""} diff --git a/requirements/dev.txt b/requirements/dev.txt index ba88f79c..f6ade817 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,34 +1,34 @@ -aiofiles==24.1.0 -alembic==1.16.5 +aiofiles==25.1.0 +alembic==1.17.2 annotated-types==0.7.0 -arrow==1.3.0 -astroid==3.3.11 -attrs==25.3.0 +arrow==1.4.0 +astroid==4.0.2 +attrs==25.4.0 aws-cdk-asset-awscli-v1==2.2.242 aws-cdk-asset-node-proxy-agent-v6==2.1.0 -aws-cdk-cloud-assembly-schema==48.6.0 -aws-cdk-lib==2.213.0 +aws-cdk-cloud-assembly-schema==48.18.0 +aws-cdk-lib==2.224.0 babel==2.17.0 -backrefs==5.9 +backrefs==6.0.1 banal==1.0.6 blinker==1.9.0 -boto3==1.40.21 -botocore==1.40.21 +boto3==1.40.74 +botocore==1.40.74 build==1.3.0 cacheout==0.16.0 -cachetools==6.2.0 -cattrs==25.1.1 -cdk-nag==2.37.13 -certifi==2025.8.3 -cffi==1.17.1 +cachetools==6.2.2 +cattrs==25.3.0 +cdk-nag==2.37.55 +certifi==2025.11.12 +cffi==2.0.0 cfn-flip==1.3.0 -charset-normalizer==3.4.3 -click==8.2.1 +charset-normalizer==3.4.4 +click==8.3.0 colorama==0.4.6 colored==2.3.1 -constructs==10.4.2 -coverage[toml]==7.10.6 -cryptography==45.0.7 +constructs==10.4.3 +coverage[toml]==7.11.3 +cryptography==46.0.3 dataset==1.6.2 dill==0.4.0 events==0.5 @@ -36,76 +36,76 @@ fastcounter==1.1.0 ghp-import==2.1.0 greenlet==3.2.4 html5tagger==1.3.0 -httptools==0.6.4 -idna==3.10 +httptools==0.7.1 +idna==3.11 importlib-resources==6.5.2 -iniconfig==2.1.0 -invoke==2.2.0 +iniconfig==2.3.0 +invoke==2.2.1 ipaddress==1.0.23 -isort==6.0.1 +isort==7.0.0 jinja2==3.1.6 jmespath==1.0.1 -jsii==1.113.0 +jsii==1.119.0 ldappool==3.0.0 mako==1.3.10 -markdown==3.8.2 +markdown==3.10 markdown-it-py==4.0.0 -markupsafe==3.0.2 +markupsafe==3.0.3 mccabe==0.7.0 mdurl==0.1.2 memory-profiler==0.61.0 mergedeep==1.3.4 mkdocs==1.6.1 mkdocs-get-deps==0.2.0 -mkdocs-material==9.6.18 +mkdocs-material==9.7.0 mkdocs-material-extensions==1.3.1 -multidict==6.6.4 -mypy==1.17.1 +multidict==6.7.0 +mypy==1.18.2 mypy-extensions==1.1.0 openapi-pydantic==0.5.1 opensearch-py==3.0.0 -orjson==3.11.3 +orjson==3.11.4 packaging==25.0 paginate==0.5.7 passlib==1.7.4 pathspec==0.12.1 -pip-tools==7.5.0 -platformdirs==4.4.0 +pip-tools==7.5.2 +platformdirs==4.5.0 pluggy==1.6.0 -prettytable==3.16.0 -prometheus-client==0.22.1 +prettytable==3.17.0 +prometheus-client==0.23.1 prompt-toolkit==3.0.52 -psutil==7.0.0 +psutil==7.1.3 publication==0.0.3 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pycparser==2.22 -pydantic==2.11.7 -pydantic-core==2.33.2 +pycparser==2.23 +pydantic==2.12.4 +pydantic-core==2.41.5 pyfiglet==1.0.4 pygments==2.19.2 pyhocon==0.3.61 pyjwt==2.10.1 -pylint==3.3.8 -pymdown-extensions==10.16.1 -pyparsing==3.2.3 +pylint==4.0.3 +pymdown-extensions==10.17.1 +pyparsing==3.2.5 pyproject-hooks==1.2.0 -pytest==8.4.1 -pytest-cov==6.2.1 -pytest-mock==3.14.1 +pytest==9.0.1 +pytest-cov==7.0.0 +pytest-mock==3.15.1 python-dateutil==2.9.0.post0 python-dynamodb-lock==0.9.1 -python-ldap==3.4.4 +python-ldap==3.4.5 pytz==2025.2 -pyyaml==6.0.2 +pyyaml==6.0.3 pyyaml-env-tag==1.1 questionary==2.1.1 random-password-generator==2.2.0 requests==2.32.5 requests-aws4auth==1.3.1 requests-unixsocket==0.4.1 -rich==14.1.0 -s3transfer==0.13.1 +rich==14.2.0 +s3transfer==0.14.0 sanic==25.3.0 sanic-routing==23.12.0 semver==3.0.4 @@ -113,21 +113,21 @@ sh==2.2.2 shortuuid==1.0.13 six==1.17.0 sqlalchemy==1.4.54 -supervisor @ git+https://github.com/Supervisor/supervisor.git@main +supervisor==4.3.0 tomlkit==0.13.3 tracerite==1.1.3 troposphere==4.9.4 -typeguard==2.13.3 -types-python-dateutil==2.9.0.20250822 +typeguard==4.2.1 typing-extensions==4.15.0 -typing-inspection==0.4.1 +typing-inspection==0.4.2 +tzdata==2025.2 tzlocal==5.3.1 ujson==5.11.0 urllib3==2.5.0 -uvloop==0.21.0 +uvloop==0.22.1 validators==0.35.0 watchdog==6.0.0 -wcwidth==0.2.13 +wcwidth==0.2.14 websockets==15.0.1 wheel==0.45.1 diff --git a/requirements/doc.txt b/requirements/doc.txt index 36fab808..08942670 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -1,27 +1,27 @@ babel==2.17.0 -backrefs==5.9 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.2.1 +backrefs==6.0.1 +certifi==2025.11.12 +charset-normalizer==3.4.4 +click==8.3.0 colorama==0.4.6 ghp-import==2.1.0 -idna==3.10 +idna==3.11 jinja2==3.1.6 -markdown==3.8.2 -markupsafe==3.0.2 +markdown==3.10 +markupsafe==3.0.3 mergedeep==1.3.4 mkdocs==1.6.1 mkdocs-get-deps==0.2.0 -mkdocs-material==9.6.18 +mkdocs-material==9.7.0 mkdocs-material-extensions==1.3.1 packaging==25.0 paginate==0.5.7 pathspec==0.12.1 -platformdirs==4.4.0 +platformdirs==4.5.0 pygments==2.19.2 -pymdown-extensions==10.16.1 +pymdown-extensions==10.17.1 python-dateutil==2.9.0.post0 -pyyaml==6.0.2 +pyyaml==6.0.3 pyyaml-env-tag==1.1 requests==2.32.5 six==1.17.0 diff --git a/requirements/idea-administrator.txt b/requirements/idea-administrator.txt index a430a2f0..5b3ad5e2 100644 --- a/requirements/idea-administrator.txt +++ b/requirements/idea-administrator.txt @@ -1,72 +1,72 @@ -aiofiles==24.1.0 -alembic==1.16.5 +aiofiles==25.1.0 +alembic==1.17.2 annotated-types==0.7.0 -arrow==1.3.0 -attrs==25.3.0 +arrow==1.4.0 +attrs==25.4.0 aws-cdk-asset-awscli-v1==2.2.242 aws-cdk-asset-node-proxy-agent-v6==2.1.0 -aws-cdk-cloud-assembly-schema==48.6.0 -aws-cdk-lib==2.213.0 +aws-cdk-cloud-assembly-schema==48.18.0 +aws-cdk-lib==2.224.0 banal==1.0.6 blinker==1.9.0 -boto3==1.40.21 -botocore==1.40.21 +boto3==1.40.74 +botocore==1.40.74 cacheout==0.16.0 -cattrs==25.1.1 -cdk-nag==2.37.13 -certifi==2025.8.3 -cffi==1.17.1 +cattrs==25.3.0 +cdk-nag==2.37.55 +certifi==2025.11.12 +cffi==2.0.0 cfn-flip==1.3.0 -charset-normalizer==3.4.3 -click==8.2.1 +charset-normalizer==3.4.4 +click==8.3.0 colored==2.3.1 -constructs==10.4.2 -cryptography==45.0.7 +constructs==10.4.3 +cryptography==46.0.3 dataset==1.6.2 events==0.5 fastcounter==1.1.0 greenlet==3.2.4 html5tagger==1.3.0 -httptools==0.6.4 -idna==3.10 +httptools==0.7.1 +idna==3.11 importlib-resources==6.5.2 ipaddress==1.0.23 jinja2==3.1.6 jmespath==1.0.1 -jsii==1.113.0 +jsii==1.119.0 mako==1.3.10 markdown-it-py==4.0.0 -markupsafe==3.0.2 +markupsafe==3.0.3 mdurl==0.1.2 -multidict==6.6.4 -mypy==1.17.1 +multidict==6.7.0 +mypy==1.18.2 mypy-extensions==1.1.0 opensearch-py==3.0.0 -orjson==3.11.3 +orjson==3.11.4 pathspec==0.12.1 -prettytable==3.16.0 -prometheus-client==0.22.1 +prettytable==3.17.0 +prometheus-client==0.23.1 prompt-toolkit==3.0.52 -psutil==7.0.0 +psutil==7.1.3 publication==0.0.3 -pycparser==2.22 -pydantic==2.11.7 -pydantic-core==2.33.2 +pycparser==2.23 +pydantic==2.12.4 +pydantic-core==2.41.5 pygments==2.19.2 pyhocon==0.3.61 pyjwt==2.10.1 -pyparsing==3.2.3 +pyparsing==3.2.5 python-dateutil==2.9.0.post0 python-dynamodb-lock==0.9.1 pytz==2025.2 -pyyaml==6.0.2 +pyyaml==6.0.3 questionary==2.1.1 random-password-generator==2.2.0 requests==2.32.5 requests-aws4auth==1.3.1 requests-unixsocket==0.4.1 -rich==14.1.0 -s3transfer==0.13.1 +rich==14.2.0 +s3transfer==0.14.0 sanic==25.3.0 sanic-routing==23.12.0 semver==3.0.4 @@ -76,16 +76,16 @@ six==1.17.0 sqlalchemy==1.4.54 tracerite==1.1.3 troposphere==4.9.4 -typeguard==2.13.3 -types-python-dateutil==2.9.0.20250822 +typeguard==4.2.1 typing-extensions==4.15.0 -typing-inspection==0.4.1 +typing-inspection==0.4.2 +tzdata==2025.2 tzlocal==5.3.1 ujson==5.11.0 urllib3==2.5.0 -uvloop==0.21.0 +uvloop==0.22.1 validators==0.35.0 -wcwidth==0.2.13 +wcwidth==0.2.14 websockets==15.0.1 # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/idea-cluster-manager.in b/requirements/idea-cluster-manager.in index ffc95c21..f3838dd7 100644 --- a/requirements/idea-cluster-manager.in +++ b/requirements/idea-cluster-manager.in @@ -1,5 +1,5 @@ -r idea-sdk.in -git+https://github.com/Supervisor/supervisor.git@main +supervisor sanic python-ldap ldappool diff --git a/requirements/idea-cluster-manager.txt b/requirements/idea-cluster-manager.txt index 4f363206..ea2e241e 100644 --- a/requirements/idea-cluster-manager.txt +++ b/requirements/idea-cluster-manager.txt @@ -1,64 +1,64 @@ -aiofiles==24.1.0 -alembic==1.16.5 +aiofiles==25.1.0 +alembic==1.17.2 annotated-types==0.7.0 -arrow==1.3.0 +arrow==1.4.0 banal==1.0.6 blinker==1.9.0 -boto3==1.40.21 -botocore==1.40.21 +boto3==1.40.74 +botocore==1.40.74 cacheout==0.16.0 -certifi==2025.8.3 -cffi==1.17.1 +certifi==2025.11.12 +cffi==2.0.0 cfn-flip==1.3.0 -charset-normalizer==3.4.3 -click==8.2.1 -cryptography==45.0.7 +charset-normalizer==3.4.4 +click==8.3.0 +cryptography==46.0.3 dataset==1.6.2 events==0.5 fastcounter==1.1.0 greenlet==3.2.4 html5tagger==1.3.0 -httptools==0.6.4 -idna==3.10 +httptools==0.7.1 +idna==3.11 jinja2==3.1.6 jmespath==1.0.1 ldappool==3.0.0 mako==1.3.10 markdown-it-py==4.0.0 -markupsafe==3.0.2 +markupsafe==3.0.3 mdurl==0.1.2 -multidict==6.6.4 -mypy==1.17.1 +multidict==6.7.0 +mypy==1.18.2 mypy-extensions==1.1.0 opensearch-py==3.0.0 -orjson==3.11.3 +orjson==3.11.4 passlib==1.7.4 pathspec==0.12.1 -prettytable==3.16.0 -prometheus-client==0.22.1 +prettytable==3.17.0 +prometheus-client==0.23.1 prompt-toolkit==3.0.52 -psutil==7.0.0 +psutil==7.1.3 pyasn1==0.6.1 pyasn1-modules==0.4.2 -pycparser==2.22 -pydantic==2.11.7 -pydantic-core==2.33.2 +pycparser==2.23 +pydantic==2.12.4 +pydantic-core==2.41.5 pygments==2.19.2 pyhocon==0.3.61 pyjwt==2.10.1 -pyparsing==3.2.3 +pyparsing==3.2.5 python-dateutil==2.9.0.post0 python-dynamodb-lock==0.9.1 -python-ldap==3.4.4 +python-ldap==3.4.5 pytz==2025.2 -pyyaml==6.0.2 +pyyaml==6.0.3 questionary==2.1.1 random-password-generator==2.2.0 requests==2.32.5 requests-aws4auth==1.3.1 requests-unixsocket==0.4.1 -rich==14.1.0 -s3transfer==0.13.1 +rich==14.2.0 +s3transfer==0.14.0 sanic==25.3.0 sanic-routing==23.12.0 semver==3.0.4 @@ -66,18 +66,18 @@ sh==2.2.2 shortuuid==1.0.13 six==1.17.0 sqlalchemy==1.4.54 -supervisor @ git+https://github.com/Supervisor/supervisor.git@main +supervisor==4.3.0 tracerite==1.1.3 troposphere==4.9.4 -types-python-dateutil==2.9.0.20250822 typing-extensions==4.15.0 -typing-inspection==0.4.1 +typing-inspection==0.4.2 +tzdata==2025.2 tzlocal==5.3.1 ujson==5.11.0 urllib3==2.5.0 -uvloop==0.21.0 +uvloop==0.22.1 validators==0.35.0 -wcwidth==0.2.13 +wcwidth==0.2.14 websockets==15.0.1 # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/idea-dev-lambda.txt b/requirements/idea-dev-lambda.txt index 2a03fbff..e0b561f9 100644 --- a/requirements/idea-dev-lambda.txt +++ b/requirements/idea-dev-lambda.txt @@ -1,11 +1,11 @@ -certifi==2025.8.3 -cffi==1.17.1 -charset-normalizer==3.4.3 -cryptography==45.0.7 +certifi==2025.11.12 +cffi==2.0.0 +charset-normalizer==3.4.4 +cryptography==46.0.3 events==0.5 -idna==3.10 +idna==3.11 opensearch-py==3.0.0 -pycparser==2.22 +pycparser==2.23 python-dateutil==2.9.0.post0 requests==2.32.5 six==1.17.0 diff --git a/requirements/idea-scheduler.in b/requirements/idea-scheduler.in index 23abb6df..21f69b4b 100644 --- a/requirements/idea-scheduler.in +++ b/requirements/idea-scheduler.in @@ -1,5 +1,5 @@ -r idea-sdk.in cachetools prettytable -git+https://github.com/Supervisor/supervisor.git@main +supervisor sanic diff --git a/requirements/idea-scheduler.txt b/requirements/idea-scheduler.txt index d9d6c38b..337e6fe3 100644 --- a/requirements/idea-scheduler.txt +++ b/requirements/idea-scheduler.txt @@ -1,60 +1,60 @@ -aiofiles==24.1.0 -alembic==1.16.5 +aiofiles==25.1.0 +alembic==1.17.2 annotated-types==0.7.0 -arrow==1.3.0 +arrow==1.4.0 banal==1.0.6 blinker==1.9.0 -boto3==1.40.21 -botocore==1.40.21 +boto3==1.40.74 +botocore==1.40.74 cacheout==0.16.0 -cachetools==6.2.0 -certifi==2025.8.3 -cffi==1.17.1 +cachetools==6.2.2 +certifi==2025.11.12 +cffi==2.0.0 cfn-flip==1.3.0 -charset-normalizer==3.4.3 -click==8.2.1 -cryptography==45.0.7 +charset-normalizer==3.4.4 +click==8.3.0 +cryptography==46.0.3 dataset==1.6.2 events==0.5 fastcounter==1.1.0 greenlet==3.2.4 html5tagger==1.3.0 -httptools==0.6.4 -idna==3.10 +httptools==0.7.1 +idna==3.11 jinja2==3.1.6 jmespath==1.0.1 mako==1.3.10 markdown-it-py==4.0.0 -markupsafe==3.0.2 +markupsafe==3.0.3 mdurl==0.1.2 -multidict==6.6.4 -mypy==1.17.1 +multidict==6.7.0 +mypy==1.18.2 mypy-extensions==1.1.0 opensearch-py==3.0.0 -orjson==3.11.3 +orjson==3.11.4 pathspec==0.12.1 -prettytable==3.16.0 -prometheus-client==0.22.1 +prettytable==3.17.0 +prometheus-client==0.23.1 prompt-toolkit==3.0.52 -psutil==7.0.0 -pycparser==2.22 -pydantic==2.11.7 -pydantic-core==2.33.2 +psutil==7.1.3 +pycparser==2.23 +pydantic==2.12.4 +pydantic-core==2.41.5 pygments==2.19.2 pyhocon==0.3.61 pyjwt==2.10.1 -pyparsing==3.2.3 +pyparsing==3.2.5 python-dateutil==2.9.0.post0 python-dynamodb-lock==0.9.1 pytz==2025.2 -pyyaml==6.0.2 +pyyaml==6.0.3 questionary==2.1.1 random-password-generator==2.2.0 requests==2.32.5 requests-aws4auth==1.3.1 requests-unixsocket==0.4.1 -rich==14.1.0 -s3transfer==0.13.1 +rich==14.2.0 +s3transfer==0.14.0 sanic==25.3.0 sanic-routing==23.12.0 semver==3.0.4 @@ -62,18 +62,18 @@ sh==2.2.2 shortuuid==1.0.13 six==1.17.0 sqlalchemy==1.4.54 -supervisor @ git+https://github.com/Supervisor/supervisor.git@main +supervisor==4.3.0 tracerite==1.1.3 troposphere==4.9.4 -types-python-dateutil==2.9.0.20250822 typing-extensions==4.15.0 -typing-inspection==0.4.1 +typing-inspection==0.4.2 +tzdata==2025.2 tzlocal==5.3.1 ujson==5.11.0 urllib3==2.5.0 -uvloop==0.21.0 +uvloop==0.22.1 validators==0.35.0 -wcwidth==0.2.13 +wcwidth==0.2.14 websockets==15.0.1 # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/idea-virtual-desktop-controller.in b/requirements/idea-virtual-desktop-controller.in index 7cd072af..6fafb986 100644 --- a/requirements/idea-virtual-desktop-controller.in +++ b/requirements/idea-virtual-desktop-controller.in @@ -1,3 +1,3 @@ -r idea-sdk.in -git+https://github.com/Supervisor/supervisor.git@main +supervisor sanic diff --git a/requirements/idea-virtual-desktop-controller.txt b/requirements/idea-virtual-desktop-controller.txt index 7f8cc743..07609d77 100644 --- a/requirements/idea-virtual-desktop-controller.txt +++ b/requirements/idea-virtual-desktop-controller.txt @@ -1,58 +1,58 @@ -aiofiles==24.1.0 -alembic==1.16.5 +aiofiles==25.1.0 +alembic==1.17.2 annotated-types==0.7.0 -arrow==1.3.0 +arrow==1.4.0 banal==1.0.6 blinker==1.9.0 -boto3==1.40.21 -botocore==1.40.21 +boto3==1.40.74 +botocore==1.40.74 cacheout==0.16.0 -certifi==2025.8.3 -cffi==1.17.1 +certifi==2025.11.12 +cffi==2.0.0 cfn-flip==1.3.0 -charset-normalizer==3.4.3 -click==8.2.1 -cryptography==45.0.7 +charset-normalizer==3.4.4 +click==8.3.0 +cryptography==46.0.3 dataset==1.6.2 events==0.5 fastcounter==1.1.0 greenlet==3.2.4 html5tagger==1.3.0 -httptools==0.6.4 -idna==3.10 +httptools==0.7.1 +idna==3.11 jinja2==3.1.6 jmespath==1.0.1 mako==1.3.10 markdown-it-py==4.0.0 -markupsafe==3.0.2 +markupsafe==3.0.3 mdurl==0.1.2 -multidict==6.6.4 -mypy==1.17.1 +multidict==6.7.0 +mypy==1.18.2 mypy-extensions==1.1.0 opensearch-py==3.0.0 -orjson==3.11.3 +orjson==3.11.4 pathspec==0.12.1 -prometheus-client==0.22.1 +prometheus-client==0.23.1 prompt-toolkit==3.0.52 -psutil==7.0.0 -pycparser==2.22 -pydantic==2.11.7 -pydantic-core==2.33.2 +psutil==7.1.3 +pycparser==2.23 +pydantic==2.12.4 +pydantic-core==2.41.5 pygments==2.19.2 pyhocon==0.3.61 pyjwt==2.10.1 -pyparsing==3.2.3 +pyparsing==3.2.5 python-dateutil==2.9.0.post0 python-dynamodb-lock==0.9.1 pytz==2025.2 -pyyaml==6.0.2 +pyyaml==6.0.3 questionary==2.1.1 random-password-generator==2.2.0 requests==2.32.5 requests-aws4auth==1.3.1 requests-unixsocket==0.4.1 -rich==14.1.0 -s3transfer==0.13.1 +rich==14.2.0 +s3transfer==0.14.0 sanic==25.3.0 sanic-routing==23.12.0 semver==3.0.4 @@ -60,18 +60,18 @@ sh==2.2.2 shortuuid==1.0.13 six==1.17.0 sqlalchemy==1.4.54 -supervisor @ git+https://github.com/Supervisor/supervisor.git@main +supervisor==4.3.0 tracerite==1.1.3 troposphere==4.9.4 -types-python-dateutil==2.9.0.20250822 typing-extensions==4.15.0 -typing-inspection==0.4.1 +typing-inspection==0.4.2 +tzdata==2025.2 tzlocal==5.3.1 ujson==5.11.0 urllib3==2.5.0 -uvloop==0.21.0 +uvloop==0.22.1 validators==0.35.0 -wcwidth==0.2.13 +wcwidth==0.2.14 websockets==15.0.1 # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/tests.txt b/requirements/tests.txt index 5b8c7b79..226628a3 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -1,10 +1,10 @@ -coverage[toml]==7.10.6 -iniconfig==2.1.0 +coverage[toml]==7.11.3 +iniconfig==2.3.0 memory-profiler==0.61.0 packaging==25.0 pluggy==1.6.0 -psutil==7.0.0 +psutil==7.1.3 pygments==2.19.2 -pytest==8.4.1 -pytest-cov==6.2.1 -pytest-mock==3.14.1 +pytest==9.0.1 +pytest-cov==7.0.0 +pytest-mock==3.15.1 diff --git a/scripts/dev/ami_update.py b/scripts/dev/ami_update.py index 792b56e8..ab7d1710 100644 --- a/scripts/dev/ami_update.py +++ b/scripts/dev/ami_update.py @@ -18,7 +18,7 @@ 'rocky8': 'Rocky-8-EC2-Base-8.9-*.x86_64-*', 'rocky9': 'Rocky-9-EC2-Base-9.6-*.x86_64-*', # "amazonlinux2": "amzn2-ami-kernel-5.10-hvm-*-x86_64-gp2", - 'amazonlinux2023': 'al2023-ami-2023.8.*-kernel-6.1-x86_64', + 'amazonlinux2023': 'al2023-ami-2023.9.*-kernel-6.12-x86_64', } # Generating a timestamp diff --git a/scripts/dev/ami_update_stacks.py b/scripts/dev/ami_update_stacks.py index bf0242fa..5b78ecde 100644 --- a/scripts/dev/ami_update_stacks.py +++ b/scripts/dev/ami_update_stacks.py @@ -3,9 +3,73 @@ import shutil import datetime import concurrent.futures +import argparse from typing import Optional, Tuple from botocore.exceptions import ClientError +# Parse command-line arguments +parser = argparse.ArgumentParser( + description='Update AMI IDs in base-software-stack-config.yaml' +) +parser.add_argument('--rhel8', action='store_true', help='Update only RHEL 8 AMIs') +parser.add_argument('--rhel9', action='store_true', help='Update only RHEL 9 AMIs') +parser.add_argument( + '--rocky8', action='store_true', help='Update only Rocky Linux 8 AMIs' +) +parser.add_argument( + '--rocky9', action='store_true', help='Update only Rocky Linux 9 AMIs' +) +parser.add_argument( + '--ubuntu2204', action='store_true', help='Update only Ubuntu 22.04 AMIs' +) +parser.add_argument( + '--ubuntu2404', action='store_true', help='Update only Ubuntu 24.04 AMIs' +) +parser.add_argument( + '--amazonlinux2', action='store_true', help='Update only Amazon Linux 2 AMIs' +) +parser.add_argument( + '--amazonlinux2023', action='store_true', help='Update only Amazon Linux 2023 AMIs' +) +parser.add_argument( + '--windows2019', action='store_true', help='Update only Windows Server 2019 AMIs' +) +parser.add_argument( + '--windows2022', action='store_true', help='Update only Windows Server 2022 AMIs' +) +parser.add_argument( + '--windows2025', action='store_true', help='Update only Windows Server 2025 AMIs' +) +args = parser.parse_args() + +# Determine which AMI types to update +selected_ami_types = [] +if args.rhel8: + selected_ami_types.append('rhel8') +if args.rhel9: + selected_ami_types.append('rhel9') +if args.rocky8: + selected_ami_types.append('rocky8') +if args.rocky9: + selected_ami_types.append('rocky9') +if args.ubuntu2204: + selected_ami_types.append('ubuntu2204') +if args.ubuntu2404: + selected_ami_types.append('ubuntu2404') +if args.amazonlinux2: + selected_ami_types.append('amazonlinux2') +if args.amazonlinux2023: + selected_ami_types.append('amazonlinux2023') +if args.windows2019: + selected_ami_types.append('windows2019') +if args.windows2022: + selected_ami_types.append('windows2022') +if args.windows2025: + selected_ami_types.append('windows2025') + +# If no specific AMI types selected, update all +update_all = len(selected_ami_types) == 0 + # Define file paths as constants CONFIG_FILE_PATH = '../../source/idea/idea-virtual-desktop-controller/resources/base-software-stack-config.yaml' @@ -26,8 +90,8 @@ 'ubuntu2404/x86-64': 'ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*', 'amazonlinux2/arm64': 'amzn2-ami-kernel-5.10-hvm-*-arm64-gp2', 'amazonlinux2/x86-64': 'amzn2-ami-kernel-5.10-hvm-*-x86_64-gp2', - 'amazonlinux2023/arm64': 'al2023-ami-2023.8*-kernel-6.1-arm64', - 'amazonlinux2023/x86-64': 'al2023-ami-2023.8.*-kernel-6.1-x86_64', + 'amazonlinux2023/arm64': 'al2023-ami-2023.9.*-kernel-6.12-arm64', + 'amazonlinux2023/x86-64': 'al2023-ami-2023.9.*-kernel-6.12-x86_64', # Commented out patterns kept for reference # "rhel7/x86-64": "RHEL-7.9_HVM-*-x86_64-*", 'rocky8/arm64': 'Rocky-8-EC2-Base-8.9-*.aarch64-*', @@ -173,6 +237,10 @@ def format_yaml_file(file_path: str) -> None: # First prepare non-Windows AMI lookup tasks for ami_type in [t for t in data if not t.startswith('windows')]: + # Skip if not in selected types (when filtering is active) + if not update_all and ami_type not in selected_ami_types: + continue + for architecture_type in data[ami_type]: if architecture_type not in ['arm64', 'x86-64']: continue @@ -188,6 +256,10 @@ def format_yaml_file(file_path: str) -> None: if windows_type not in data: continue + # Skip if not in selected types (when filtering is active) + if not update_all and windows_type not in selected_ami_types: + continue + for region in [ r for r in data[windows_type]['x86-64'].keys() if r not in NON_REGION_KEYS ]: @@ -207,6 +279,12 @@ def format_yaml_file(file_path: str) -> None: # Windows AMI results cache windows_ami_cache = {} # format: {(windows_type, region): ami_id} +# Print what we're updating +if update_all: + print('Updating ALL AMI types...') +else: + print(f'Updating selected AMI types: {", ".join(selected_ami_types)}') + print( f'Starting parallel AMI lookups for {len(ami_lookup_tasks)} tasks with {MAX_WORKERS} workers...' ) diff --git a/software_versions.yml b/software_versions.yml index eb07d96b..0f4a3598 100644 --- a/software_versions.yml +++ b/software_versions.yml @@ -1,4 +1,4 @@ -aws_cdk_version: 2.1026.0 -node_version: 22.18.0 +aws_cdk_version: 2.1031.2 +node_version: 22.21.1 nvm_version: 0.40.3 -python_version: 3.13.7 +python_version: 3.13.9 diff --git a/source/idea/idea-administrator/resources/config/region_ami_config.yml b/source/idea/idea-administrator/resources/config/region_ami_config.yml index 81644fd4..9423a109 100644 --- a/source/idea/idea-administrator/resources/config/region_ami_config.yml +++ b/source/idea/idea-administrator/resources/config/region_ami_config.yml @@ -1,169 +1,169 @@ af-south-1: - amazonlinux2023: ami-02839d797c7613993 - rhel8: ami-0e3023f0720f11c13 - rhel9: ami-095957153df81c45c + amazonlinux2023: ami-0713deba82cfb0c03 + rhel8: ami-0f3626218aa340648 + rhel9: ami-0cb1d6ad21772c835 rocky8: ami-0f6740cc2de201555 rocky9: ami-0d1c77289fe17484a ap-east-1: - amazonlinux2023: ami-0271f1e76045d3888 - rhel8: ami-0263e2c6fedd70ac1 - rhel9: ami-0e9fc4febc7be2b44 + amazonlinux2023: ami-012f68d83f9ea6bc7 + rhel8: ami-0567dec70e4b0af65 + rhel9: ami-0a00b12a51c231f99 rocky8: ami-0c839768188cedbda rocky9: ami-09b42a680f493b03c ap-northeast-1: - amazonlinux2023: ami-07faa35bbd2230d90 - rhel8: ami-0abdecc3b47f8d044 - rhel9: ami-0c8576e9021325617 + amazonlinux2023: ami-07f5017dd5609b803 + rhel8: ami-042eeb1edb0b6c871 + rhel9: ami-0a77f7b7e2a7e9e19 rocky8: ami-0025f1507e375f161 rocky9: ami-0bdd4b6c4c6feca84 ap-northeast-2: - amazonlinux2023: ami-0ae2c887094315bed - rhel8: ami-044ae8b12299e7d5f - rhel9: ami-0090b5923aa899b3e + amazonlinux2023: ami-0aa02302a11ea5190 + rhel8: ami-098fcbf3441963062 + rhel9: ami-0b20135730887dc5f rocky8: ami-05d54bac15231e6fa rocky9: ami-06b18c6a9a323f75f ap-northeast-3: - amazonlinux2023: ami-0e293f500c62849a3 - rhel8: ami-05ba099eb4be26cdb - rhel9: ami-0445f6fd13acf90bb + amazonlinux2023: ami-0b29ff76d95260bcc + rhel8: ami-08a18632363377c24 + rhel9: ami-087be824994962471 rocky8: ami-039262f94e381ba82 rocky9: ami-02da14a96759f4bdf ap-south-1: - amazonlinux2023: ami-0861f4e788f5069dd - rhel8: ami-07e3c6a7114ab1cce - rhel9: ami-0d4c71635894eb376 + amazonlinux2023: ami-03f04a34a6d2050e1 + rhel8: ami-03b7070b7406f4e29 + rhel9: ami-02041feaeda79b4ad rocky8: ami-053ac9a936bd4459e rocky9: ami-08e313580b7dba0a6 ap-south-2: - amazonlinux2023: ami-031eac8ecb2726fe0 - rhel8: ami-0d48f4637910be330 - rhel9: ami-06e45ac1eb97fe97b + amazonlinux2023: ami-0811ad491a91bb2bd + rhel8: ami-0205e6d4b79c65b28 + rhel9: ami-02965f34c664643ee rocky8: ami-03e7e740ffbaecda1 rocky9: ami-0aceb9334e1c25d36 ap-southeast-1: - amazonlinux2023: ami-0779c82fbb81e731c - rhel8: ami-074bfecac0ea43471 - rhel9: ami-0c948fd4c2f5a354e + amazonlinux2023: ami-072b337bfb528c3c1 + rhel8: ami-05fb46ceb68b1bfdd + rhel9: ami-05377537700a398ae rocky8: ami-0506f2d559a79a962 rocky9: ami-0058131e22d7c740c ap-southeast-2: - amazonlinux2023: ami-0a0b0b06dd1636865 - rhel8: ami-0da6bb5485efbc4d5 - rhel9: ami-07ea93aa60e095fde + amazonlinux2023: ami-08bebfaae2000fd8b + rhel8: ami-009b00c0c21930c01 + rhel9: ami-09b057cd644d1e4e5 rocky8: ami-0c470b32d41481ad6 rocky9: ami-0e3d660a2b0748434 ap-southeast-3: - amazonlinux2023: ami-0c82cd70874a842cf - rhel8: ami-08ff7c46e39d08eab - rhel9: ami-03f854dd23109d9ee + amazonlinux2023: ami-0d9bbc00c0f86525f + rhel8: ami-062938c5e0fbf56b9 + rhel9: ami-00de88e881f30d6cc rocky8: ami-04835cbf92d9614b9 rocky9: ami-08187f3dae26981ad ap-southeast-4: - amazonlinux2023: ami-055ee3a5e46901f05 - rhel8: ami-0d95f3dc23f6a652c - rhel9: ami-0c59fd474ddff1bda + amazonlinux2023: ami-08bb5e0c969dec208 + rhel8: ami-057e39eef1ce363d7 + rhel9: ami-0573e755612d12103 rocky9: ami-07fb36516f7d1f529 ca-central-1: - amazonlinux2023: ami-0ca3fe9992272540b - rhel8: ami-0b1277c706d430522 - rhel9: ami-03fb74a78bd17729f + amazonlinux2023: ami-05ab0cf09a82f1630 + rhel8: ami-0b7ffb6b3a23d0e90 + rhel9: ami-07a0ee7a51a386be3 rocky8: ami-0829e4c2a7a2dcce1 rocky9: ami-0dc728f2209249218 eu-central-1: - amazonlinux2023: ami-015cbce10f839bd0c - rhel8: ami-091731b9ece6fd532 - rhel9: ami-00cf7a24d4f964306 + amazonlinux2023: ami-0e587597fe2f182db + rhel8: ami-08eaea68c8899746d + rhel9: ami-01d718c210035e8f4 rocky8: ami-03ca52fa7cdd00b6a rocky9: ami-0974816532424c446 eu-central-2: - amazonlinux2023: ami-08e602f915a765814 - rhel8: ami-094404f9ced7b5f71 - rhel9: ami-0b7041e1b9dde0dd6 + amazonlinux2023: ami-016d907b4df42f258 + rhel8: ami-01702d50f36a09821 + rhel9: ami-09110e91e73ed2fd2 rocky8: ami-0a5aa73e9c888d9d7 rocky9: ami-0bade0ccdcb3b5d42 eu-north-1: - amazonlinux2023: ami-0c4fc5dcabc9df21d - rhel8: ami-0dc5dc49af490a93a - rhel9: ami-04c224411e430f285 + amazonlinux2023: ami-0013b4404496ef718 + rhel8: ami-0dc09daa167ea0dba + rhel9: ami-0325b265f53c6be7c rocky8: ami-07337a8cbe0c562e0 rocky9: ami-08a91dd538f707083 eu-south-1: - amazonlinux2023: ami-03ddf59cb93f2d2b0 - rhel8: ami-078d395668f3e28a3 - rhel9: ami-09b8a3308faf219c6 + amazonlinux2023: ami-0e95741b92b5e69fd + rhel8: ami-0ccb11089007235a1 + rhel9: ami-05835c7f37ea2f768 rocky8: ami-0112b02935b39c072 rocky9: ami-09157a1cc0d8d7bd8 eu-south-2: - amazonlinux2023: ami-0cd093182e4afe352 - rhel8: ami-044cb17766116ec68 - rhel9: ami-08367221b727170ac + amazonlinux2023: ami-0f6baa75b104b9c79 + rhel8: ami-0b621332e2addd26b + rhel9: ami-0b811bffa1f8a557b rocky8: ami-01e854fdb97099506 rocky9: ami-09ff808003eb6a15f eu-west-1: - amazonlinux2023: ami-09b024e886d7bbe74 - rhel8: ami-0f5f62c1a18803362 - rhel9: ami-0a59bff376e2065c3 + amazonlinux2023: ami-0611fa5bea09e2d74 + rhel8: ami-065b91f67dd493743 + rhel9: ami-0cb95ced7337e06e1 rocky8: ami-0c14153c77f34b870 rocky9: ami-09f73ba1beba9ad07 eu-west-2: - amazonlinux2023: ami-0cfb394ad3c3ac699 - rhel8: ami-07842f051d035946a - rhel9: ami-012fcb4f119bf9440 + amazonlinux2023: ami-046bf688ea9c248da + rhel8: ami-09d0ac36ee4c107da + rhel9: ami-017249f44aae39eff rocky8: ami-020c6cfb9f8b61b53 rocky9: ami-05a5686f0de7aa5d5 eu-west-3: - amazonlinux2023: ami-096dd88190a75cd20 - rhel8: ami-07a474e263cb5233f - rhel9: ami-054c205f2a3813893 + amazonlinux2023: ami-09866f2a3f2650db4 + rhel8: ami-0bd9c415abb038cd4 + rhel9: ami-0b9b2007e369f4293 rocky8: ami-07b9b3580fd50d52d rocky9: ami-05e6a5fbf52bcf86a il-central-1: - amazonlinux2023: ami-036b0810ff65bc24f - rhel8: ami-0cc464603bea562ea - rhel9: ami-0c61f2894f5e0244b + amazonlinux2023: ami-0cd362f379d1ce70b + rhel8: ami-0e1318d459f1d01f1 + rhel9: ami-0dd653ece6b8e8219 me-central-1: - amazonlinux2023: ami-0b767e62a8ec35261 - rhel8: ami-09f1321c7f7e8e803 - rhel9: ami-079b05c070274bc18 + amazonlinux2023: ami-030b6bb5d4fe74ac1 + rhel8: ami-054f264e93f32f943 + rhel9: ami-0225af1e7b2e460e5 rocky8: ami-04261ed32e4298d90 rocky9: ami-03102da6cb6cc7c39 me-south-1: - amazonlinux2023: ami-05f83cd9df159ee5e - rhel8: ami-00522809bd156a8d7 - rhel9: ami-0c2ed3db7052c018f + amazonlinux2023: ami-05d7796e58fb05ea3 + rhel8: ami-0070b09f2849280fa + rhel9: ami-04ffaa9bf5c182ff2 rocky8: ami-07072a8bd6c72a066 rocky9: ami-0f1af60b10870546d sa-east-1: - amazonlinux2023: ami-02556f6726aa38019 - rhel8: ami-086ac6fa1f5ba13fd - rhel9: ami-035e0d01416627008 + amazonlinux2023: ami-0fc65c6f59692269f + rhel8: ami-027454ed25e6ec32d + rhel9: ami-027910aa765d77130 rocky8: ami-0070a028fc72c8f48 rocky9: ami-01d0e68ff218b8ad8 us-east-1: - amazonlinux2023: ami-00ca32bbc84273381 - rhel8: ami-01955109048f9b11d - rhel9: ami-00f1cb0e129bb040e + amazonlinux2023: ami-03c870feb7c37e4ff + rhel8: ami-0b199850d21f36238 + rhel9: ami-0ea1a49a8f4f31832 rocky8: ami-011ef2017d41cb239 rocky9: ami-0f2425d4cce4e97dd us-east-2: - amazonlinux2023: ami-0b016c703b95ecbe4 - rhel8: ami-0b01f27fa22796307 - rhel9: ami-0919ab58157b7ed85 + amazonlinux2023: ami-08d96a04ebb630b47 + rhel8: ami-0b0e825b34a8c218e + rhel9: ami-0f4412a999926c130 rocky8: ami-02391db2758465a87 rocky9: ami-0e529d862bbe9899c us-gov-west-1: - amazonlinux2023: ami-03cf5523cebb8d54d + amazonlinux2023: ami-0acfcbd827c06446a rhel8: ami-008177b99929ea0db rhel9: ami-045a012096d84fb13 us-west-1: - amazonlinux2023: ami-0945610b37068d87a - rhel8: ami-0187e3235e360333a - rhel9: ami-054f42fd684bb7451 + amazonlinux2023: ami-067ec7f9e54a67559 + rhel8: ami-0b7f0f85ce309831f + rhel9: ami-0e30fb4f5acf66d4c rocky8: ami-054c64de4b29296be rocky9: ami-0112e62b61894b311 us-west-2: - amazonlinux2023: ami-01102c5e8ab69fb75 - rhel8: ami-0bed2b29c076e8607 - rhel9: ami-06fc763747998da87 + amazonlinux2023: ami-0ac7ba4c75080fe26 + rhel8: ami-069fe92d07d6b4cf7 + rhel9: ami-086730b1f427d6f3d rocky8: ami-0f74cc83310468775 rocky9: ami-0adebe3adcec1fa34 diff --git a/source/idea/idea-administrator/resources/config/templates/global-settings/settings.yml b/source/idea/idea-administrator/resources/config/templates/global-settings/settings.yml index e09d6507..e348d8e9 100644 --- a/source/idea/idea-administrator/resources/config/templates/global-settings/settings.yml +++ b/source/idea/idea-administrator/resources/config/templates/global-settings/settings.yml @@ -442,8 +442,8 @@ package_config: {% if 'scheduler' in enabled_modules %} efa: version: "1.41.0" - url: "https://efa-installer.amazonaws.com/aws-efa-installer-1.41.0.tar.gz" - checksum: "19ebd76b5f7d69f8d37d48ab2beedc65767920c2788c83c5a21537252d938540b682e7c8197b3cc516afcff22365424d" + url: "https://efa-installer.amazonaws.com/aws-efa-installer-1.44.0.tar.gz" + checksum: "6a7c41e815c8187bac7a0d9690bfa561bfecaa3e47fec0d9d53a0a383282edcf2e163c042d858cb5385c452cba89dc2d" checksum_method: sha384 openpbs: version: "23.06.06" @@ -451,7 +451,7 @@ package_config: checksum: "8a4d7f9c326fd1de5c103e700422bc4d49edc9d50f142c033e9e7de8d10d52f5c4f92e902e107b8e89d3e12c147ebef4" checksum_method: sha384 repo_url: "https://github.com/openpbs/openpbs.git" - commit: "5efba714a8e80a69d0b57136c7bfd8b82c26d668" + commit: "4c11ca4a13992802efb450a15be9e82ea501c965" # For non-AL2 since openpbs is getting fairly regular updates in git but not tagged releases, # we're using the latest commit on the main branch as the version. # additional customizations can be implemented in idea-bootstrap/_templates/linux/openpbs.jinja2 @@ -667,8 +667,8 @@ gpu_settings: - g4dn - g4ad nvidia_public_driver_versions: - ltsb_version: <sb_version 470.239.06 - production_version: &production_version 580.65.06 + ltsb_version: <sb_version 470.256.02 + production_version: &production_version 580.105.08 p2: *ltsb_version g2: *ltsb_version g3: *production_version diff --git a/source/idea/idea-administrator/resources/config/templates/scheduler/settings.yml b/source/idea/idea-administrator/resources/config/templates/scheduler/settings.yml index 9edf42d1..71f00e92 100644 --- a/source/idea/idea-administrator/resources/config/templates/scheduler/settings.yml +++ b/source/idea/idea-administrator/resources/config/templates/scheduler/settings.yml @@ -128,6 +128,9 @@ job_provisioning: # refer to https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_InstancesDistribution.html for more info on_demand_allocation_strategy: prioritized # can be one of [prioritized, lowest-price] + # How often (seconds) to run the job reconciler + job_reconciler_interval_seconds: 60 + # Placement Group config placement_group: # refer to: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html for more details diff --git a/source/idea/idea-administrator/src/ideaadministrator/app/cdk/cdk_app.py b/source/idea/idea-administrator/src/ideaadministrator/app/cdk/cdk_app.py index 344dbe98..1a38195b 100644 --- a/source/idea/idea-administrator/src/ideaadministrator/app/cdk/cdk_app.py +++ b/source/idea/idea-administrator/src/ideaadministrator/app/cdk/cdk_app.py @@ -28,6 +28,7 @@ import aws_cdk as cdk from aws_cdk import Aspects from cdk_nag import AwsSolutionsChecks +import warnings class CdkApp: @@ -45,6 +46,13 @@ def __init__( termination_protection: bool, aws_profile: str = None, ): + # Suppress typeguard warning about IReusableStackSynthesizer protocol + warnings.filterwarnings( + 'ignore', + message='.*IReusableStackSynthesizer.*non-runtime protocol.*', + category=UserWarning, + ) + self.cluster_name = cluster_name self.module_name = module_name self.module_id = module_id diff --git a/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/cluster_stack.py b/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/cluster_stack.py index 0e16ca75..01e22e94 100644 --- a/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/cluster_stack.py +++ b/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/cluster_stack.py @@ -1221,7 +1221,6 @@ def build_cluster_endpoints(self): target=route53.RecordTarget.from_alias( route53_targets.LoadBalancerTarget(self.internal_alb) ), - ttl=cdk.Duration.minutes(5), record_name=f'internal-alb.{self.private_hosted_zone.zone_name}', zone=self.private_hosted_zone, ) diff --git a/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/virtual_desktop_controller_stack.py b/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/virtual_desktop_controller_stack.py index ae3ffdd2..01522f1d 100644 --- a/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/virtual_desktop_controller_stack.py +++ b/source/idea/idea-administrator/src/ideaadministrator/app/cdk/stacks/virtual_desktop_controller_stack.py @@ -400,7 +400,14 @@ def build_scheduled_event_notification_infra(self): schedule_trigger_rule.add_target( events_targets.LambdaFunction(scheduled_event_transformer_lambda) ) - self.add_common_tags(schedule_trigger_rule) + + # CloudFormation doesn't support Tags on EventBridge Rules in GovCloud + # even though the Console UI shows the capability + aws_partition = self.context.config().get_string( + 'cluster.aws.partition', required=True + ) + if aws_partition != 'aws-us-gov': + self.add_common_tags(schedule_trigger_rule) def build_oauth2_client(self): # add resource server diff --git a/source/idea/idea-administrator/src/ideaadministrator_meta/__init__.py b/source/idea/idea-administrator/src/ideaadministrator_meta/__init__.py index 0beefbf5..b5bb2d00 100644 --- a/source/idea/idea-administrator/src/ideaadministrator_meta/__init__.py +++ b/source/idea/idea-administrator/src/ideaadministrator_meta/__init__.py @@ -12,4 +12,4 @@ # pkg config for idea-admin. no dependencies. __name__ = 'idea-administrator' -__version__ = '25.09.1' +__version__ = '25.11.0' diff --git a/source/idea/idea-bootstrap/_templates/linux/fsx_lustre_client.jinja2 b/source/idea/idea-bootstrap/_templates/linux/fsx_lustre_client.jinja2 index 89eaac91..36bbfd3e 100644 --- a/source/idea/idea-bootstrap/_templates/linux/fsx_lustre_client.jinja2 +++ b/source/idea/idea-bootstrap/_templates/linux/fsx_lustre_client.jinja2 @@ -3,18 +3,6 @@ # Kernel management is now handled separately by set_kernel.jinja2 # Removed check_kernel_update function - no longer needed -# Function to check if kernel is supported for FSx Lustre on Amazon Linux 2023 -is_al2023_kernel_supported() { - local kernel=$(uname -r) - # FSx Lustre on AL2023 supports kernels in the 6.1.x range, kernel 6.12+ is not supported - local major_minor=$(echo $kernel | cut -d. -f1-2) - if [[ $(echo "$major_minor >= 6.12" | bc -l) -eq 1 ]]; then - log_info "Kernel $kernel is not supported for FSx Lustre on Amazon Linux 2023. Skipping Lustre client installation." - return 1 - fi - return 0 -} - {% if context.base_os == 'amazonlinux2' %} if [[ -z "$(rpm -qa lustre-client)" ]]; then # Check if kernel update is pending @@ -23,13 +11,8 @@ fi {% endif %} {% if context.base_os == 'amazonlinux2023' %} if [[ -z "$(rpm -qa lustre-client)" ]]; then - # Check if current kernel is supported for FSx Lustre - if ! is_al2023_kernel_supported; then - log_info "Skipping FSx Lustre client installation due to unsupported kernel version" - else - # Check if kernel update is pending - check_kernel_update || dnf install -y lustre-client - fi + # Check if kernel update is pending + check_kernel_update || dnf install -y lustre-client fi {% endif %} {% if context.base_os in ('rhel8', 'rocky8') %} @@ -40,7 +23,7 @@ if [[ -z "$(rpm -qa lustre-client)" ]]; then log_info "Found kernel version: $kernel running on: $machine" # Only update kernel if not already on a supported version - if [[ ! ($kernel == *"4.18.0-477"*$machine || $kernel == *"4.18.0-425"*$machine || $kernel == *"4.18.0-372"*$machine || $kernel == *"4.18.0-348"*$machine || $kernel == *"4.18.0-305"*$machine || $kernel == *"4.18.0-240"*$machine || $kernel == *"4.18.0-193"*$machine || $kernel == *"4.18.0-553"*$machine) ]]; then + if [[ ! ($kernel == *"4.18.0-477"*$machine || $kernel == *"4.18.0-425"*$machine || $kernel == *"4.18.0-372"*$machine || $kernel == *"4.18.0-348"*$machine || $kernel == *"4.18.0-305"*$machine || $kernel == *"4.18.0-240"*$machine || $kernel == *"4.18.0-193"*$machine || $kernel == *"4.18.0-513"*$machine || $kernel == *"4.18.0-553"*$machine) ]]; then log_info "Current kernel is not a supported version for FSx Lustre. Updating kernel..." yum install -y kernel kernel-devel else @@ -55,6 +38,7 @@ if [[ -z "$(rpm -qa lustre-client)" ]]; then curl https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc -o /tmp/fsx-rpm-public-key.asc rpm --import /tmp/fsx-rpm-public-key.asc curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/8/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo + sed -i 's#8#8.8#' /etc/yum.repos.d/aws-fsx.repo yum install -y kmod-lustre-client lustre-client set_reboot_required "FSx for Lustre client installed" elif [[ $kernel == *"4.18.0-425"*$machine ]]; then @@ -99,14 +83,22 @@ if [[ -z "$(rpm -qa lustre-client)" ]]; then sed -i 's#8#8.2#' /etc/yum.repos.d/aws-fsx.repo yum install -y kmod-lustre-client lustre-client set_reboot_required "FSx for Lustre client installed" + elif [[ $kernel == *"4.18.0-513"*$machine ]]; then + curl https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc -o /tmp/fsx-rpm-public-key.asc + rpm --import /tmp/fsx-rpm-public-key.asc + curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/8/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo + sed -i 's#8#8.9#' /etc/yum.repos.d/aws-fsx.repo + yum install -y kmod-lustre-client lustre-client + set_reboot_required "FSx for Lustre client installed" elif [[ $kernel == *"4.18.0-553"*$machine ]]; then curl https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc -o /tmp/fsx-rpm-public-key.asc rpm --import /tmp/fsx-rpm-public-key.asc curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/8/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo + sed -i 's#8#8.10#' /etc/yum.repos.d/aws-fsx.repo yum install -y kmod-lustre-client lustre-client set_reboot_required "FSx for Lustre client installed" else - log_error "Can't install FSx for Lustre client as kernel version $kernel isn't matching expected versions: (x86_64: 4.18.0-193, -240, -305, -348, -372, -425)!" + log_error "Can't install FSx for Lustre client as kernel version $kernel isn't matching expected versions: (x86_64: 4.18.0-193, -240, -305, -348, -372, -425, -477, -513, -553)!" fi fi {% endif %} @@ -118,7 +110,7 @@ if [[ -z "$(rpm -qa lustre-client)" ]]; then log_info "Found kernel version: $kernel running on: $machine" # Only update kernel if not already on a supported version - if [[ ! ($kernel == *"5.14.0-427"*$machine || $kernel == *"5.14.0-362"*$machine || $kernel == *"5.14.0-70"*$machine || $kernel == *"5.14.0-503"*$machine) ]]; then + if [[ ! ($kernel == *"5.14.0-427"*$machine || $kernel == *"5.14.0-362"*$machine || $kernel == *"5.14.0-70"*$machine || $kernel == *"5.14.0-503"*$machine || $kernel == *"5.14.0-570"*$machine || $kernel == *"5.14.0-611"*$machine) ]]; then log_info "Current kernel is not a supported version for FSx Lustre. Updating kernel..." yum install -y kernel kernel-devel else @@ -151,7 +143,7 @@ if [[ -z "$(rpm -qa lustre-client)" ]]; then elif [[ $kernel == *"5.14.0-70"*$machine ]]; then curl https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc -o /tmp/fsx-rpm-public-key.asc sudo rpm --import /tmp/fsx-rpm-public-key.asc - sudo curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/8/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo + sudo curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/9/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo sudo sed -i 's#9#9.0#' /etc/yum.repos.d/aws-fsx.repo sudo yum clean all sudo yum install -y kmod-lustre-client lustre-client @@ -160,11 +152,28 @@ if [[ -z "$(rpm -qa lustre-client)" ]]; then curl https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc -o /tmp/fsx-rpm-public-key.asc sudo rpm --import /tmp/fsx-rpm-public-key.asc sudo curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/9/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo + sudo sed -i 's#9#9.5#' /etc/yum.repos.d/aws-fsx.repo + sudo yum clean all + sudo yum install -y kmod-lustre-client lustre-client + set_reboot_required "FSx for Lustre client installed" + elif [[ $kernel == *"5.14.0-570"*$machine ]]; then + curl https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc -o /tmp/fsx-rpm-public-key.asc + sudo rpm --import /tmp/fsx-rpm-public-key.asc + sudo curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/9/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo + sudo sed -i 's#9#9.6#' /etc/yum.repos.d/aws-fsx.repo + sudo yum clean all + sudo yum install -y kmod-lustre-client lustre-client + set_reboot_required "FSx for Lustre client installed" + elif [[ $kernel == *"5.14.0-611"*$machine ]]; then + curl https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc -o /tmp/fsx-rpm-public-key.asc + sudo rpm --import /tmp/fsx-rpm-public-key.asc + sudo curl https://fsx-lustre-client-repo.s3.amazonaws.com/el/9/fsx-lustre-client.repo -o /etc/yum.repos.d/aws-fsx.repo + sudo sed -i 's#9#9.7#' /etc/yum.repos.d/aws-fsx.repo sudo yum clean all sudo yum install -y kmod-lustre-client lustre-client set_reboot_required "FSx for Lustre client installed" else - log_error "Can't install FSx for Lustre client as kernel version $kernel isn't matching expected versions: (x86_64: 5.14.0-362, -70)!" + log_error "Can't install FSx for Lustre client as kernel version $kernel isn't matching expected versions: (x86_64: 5.14.0-70, -362, -427, -503, -570, -611)!" fi fi fi @@ -173,7 +182,7 @@ fi if [[ -z "$(dpkg -l lustre-client-utils | grep ^ii)" ]]; then # Kernel version is now managed by set_kernel.jinja2 - proceed with installation wget -O - https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-ubuntu-public-key.asc | gpg --dearmor | sudo tee /usr/share/keyrings/fsx-ubuntu-public-key.gpg >/dev/null - bash -c 'echo "deb [signed-by=/usr/share/keyrings/fsx-ubuntu-public-key.gpg] https://fsx-lustre-client-repo.s3.amazonaws.com/ubuntu jammy main" > /etc/apt/sources.list.d/fsxlustreclientrepo.list && apt update' + bash -c 'echo "deb [signed-by=/usr/share/keyrings/fsx-ubuntu-public-key.gpg] https://fsx-lustre-client-repo.s3.amazonaws.com/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/fsxlustreclientrepo.list && apt update' if DEBIAN_FRONTEND=noninteractive apt install -y lustre-client-modules-aws; then set_reboot_required "FSx for Lustre client installed" diff --git a/source/idea/idea-cluster-manager/src/ideaclustermanager_meta/__init__.py b/source/idea/idea-cluster-manager/src/ideaclustermanager_meta/__init__.py index f32fd585..97f4b505 100644 --- a/source/idea/idea-cluster-manager/src/ideaclustermanager_meta/__init__.py +++ b/source/idea/idea-cluster-manager/src/ideaclustermanager_meta/__init__.py @@ -10,4 +10,4 @@ # and limitations under the License. __name__ = 'idea-cluster-manager' -__version__ = '25.09.1' +__version__ = '25.11.0' diff --git a/source/idea/idea-cluster-manager/webapp/.env b/source/idea/idea-cluster-manager/webapp/.env index 4a9d755e..ec4ee787 100644 --- a/source/idea/idea-cluster-manager/webapp/.env +++ b/source/idea/idea-cluster-manager/webapp/.env @@ -1,4 +1,4 @@ REACT_APP_IDEA_HTTP_ENDPOINT="http://localhost:8080" REACT_APP_IDEA_ALB_ENDPOINT="http://localhost:8080" REACT_APP_IDEA_HTTP_API_SUFFIX="/api/v1" -REACT_APP_IDEA_RELEASE_VERSION="25.09.1" +REACT_APP_IDEA_RELEASE_VERSION="25.11.0" diff --git a/source/idea/idea-cluster-manager/webapp/package.json b/source/idea/idea-cluster-manager/webapp/package.json index 4f303707..fa041ee8 100644 --- a/source/idea/idea-cluster-manager/webapp/package.json +++ b/source/idea/idea-cluster-manager/webapp/package.json @@ -1,6 +1,6 @@ { "name": "web-portal", - "version": "25.09.1", + "version": "25.11.0", "private": true, "dependencies": { "@aperturerobotics/chonky": "^0.3.1", diff --git a/source/idea/idea-cluster-manager/webapp/yarn.lock b/source/idea/idea-cluster-manager/webapp/yarn.lock index 1ed09e2a..c1b58d41 100644 --- a/source/idea/idea-cluster-manager/webapp/yarn.lock +++ b/source/idea/idea-cluster-manager/webapp/yarn.lock @@ -4093,9 +4093,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001716: - version "1.0.30001717" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz#5d9fec5ce09796a1893013825510678928aca129" - integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw== + version "1.0.30001754" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz" + integrity sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" diff --git a/source/idea/idea-data-model/src/ideadatamodel_meta/__init__.py b/source/idea/idea-data-model/src/ideadatamodel_meta/__init__.py index dbe9cb77..d17d8faa 100644 --- a/source/idea/idea-data-model/src/ideadatamodel_meta/__init__.py +++ b/source/idea/idea-data-model/src/ideadatamodel_meta/__init__.py @@ -10,4 +10,4 @@ # and limitations under the License. __name__ = 'idea-data-model' -__version__ = '25.09.1' +__version__ = '25.11.0' diff --git a/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/finished_job_processor.py b/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/finished_job_processor.py index f72c8fba..2d9cca8f 100644 --- a/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/finished_job_processor.py +++ b/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/finished_job_processor.py @@ -265,10 +265,19 @@ def _process_finished_jobs(self, jobs: List[SocaJob]): def _poll_finished_jobs(self): while not self._exit.is_set(): try: + self._logger.debug('FinishedJobProcessor: Starting processing cycle') + jobs_table = self._context.job_cache.get_jobs_table() - active_job_ids = OpenPBSQSelect(self._context).list_jobs_ids() - active_job_ids = set(active_job_ids) + try: + active_job_ids = OpenPBSQSelect(self._context).list_jobs_ids() + active_job_ids = set(active_job_ids) + self._logger.debug( + f'FinishedJobProcessor: Retrieved {len(active_job_ids)} active jobs from PBS' + ) + except Exception as e: + self._logger.error(f'Failed to get active job IDs from PBS: {e}') + continue jobs_deleted = 0 jobs_finished = 0 @@ -292,6 +301,9 @@ def _poll_finished_jobs(self): entry ) if completed_job is None: + self._logger.warning( + f'Failed to convert job {job_id} from cache entry, skipping' + ) continue # if job was not provisioned, it was most certainly deleted using qdel @@ -311,7 +323,13 @@ def _poll_finished_jobs(self): self._logger.exception(f'failed to process finished job: {e}') if len(jobs_ids_to_delete) > 0: - self._context.job_cache.delete_jobs(job_ids=jobs_ids_to_delete) + try: + self._logger.debug( + f'FinishedJobProcessor: Deleting {len(jobs_ids_to_delete)} jobs from cache' + ) + self._context.job_cache.delete_jobs(job_ids=jobs_ids_to_delete) + except Exception as e: + self._logger.error(f'Failed to delete jobs from cache: {e}') if jobs_deleted + jobs_finished > 0: self._logger.info( @@ -321,6 +339,18 @@ def _poll_finished_jobs(self): if len(finished_jobs) > 0: self._process_finished_jobs(finished_jobs) + self._logger.debug( + 'FinishedJobProcessor: Processing cycle completed successfully' + ) + + except Exception as e: + # CRITICAL: Top-level exception handler to prevent thread death + # This catches any unhandled exception that would otherwise kill the thread + self._logger.exception( + f'CRITICAL: Unhandled exception in FinishedJobProcessor cycle: {e}' + ) + # Thread continues running despite the exception + finally: if not self._exit.is_set(): self._exit.wait( diff --git a/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/job_monitor.py b/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/job_monitor.py index 97d52acc..711d09f7 100644 --- a/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/job_monitor.py +++ b/source/idea/idea-scheduler/src/ideascheduler/app/provisioning/job_monitor/job_monitor.py @@ -349,6 +349,44 @@ def _sync_jobs(self, job_updates: Set[JobUpdate], job_type: str): except Exception as e: self._logger.exception(f'failed to process {job_type} jobs', exc_info=e) + def _job_reconciler(self): + """ + Job reconciliation fallback to catch jobs missed by hooks. + This handles cases where PBS hooks don't fire immediately or fail. + """ + try: + queue_profiles = self._context.queue_profiles.list_queue_profiles() + for queue_profile in queue_profiles: + if not Utils.is_true(queue_profile.enabled): + continue + + for queue in queue_profile.queues: + if self._exit.is_set(): + break + + # Query PBS directly for queued/held jobs with stack_id=tbd + queued_job_ids = OpenPBSQSelect( + context=self._context, + logger=self._logger, + log_tag='job-reconciler', + stack_id='tbd', + queue=queue, + job_state=[SocaJobState.QUEUED, SocaJobState.HELD], + ).list_jobs_ids() + + if len(queued_job_ids) > 0: + self._logger.info( + f'job reconciler found {len(queued_job_ids)} queued job(s) in queue {queue}: {queued_job_ids}' + ) + queued_jobs = self._context.scheduler.list_jobs( + job_ids=queued_job_ids + ) + self._context.job_cache.sync(jobs=queued_jobs) + self._submit_to_provisioning_queue(jobs=queued_jobs) + + except Exception as e: + self._logger.exception(f'job reconciler failed: {e}') + def _monitor_job_submission(self): while not self._exit.is_set(): try: @@ -363,16 +401,31 @@ def _monitor_job_submission(self): ) self._sync_jobs(job_updates=job_updates.running, job_type='running') + # Job reconciler fallback - check PBS directly every N seconds + # This catches jobs when hooks fail to fire immediately + now = arrow.utcnow() + reconciler_interval = self._context.config().get_int( + 'scheduler.job_provisioning.job_reconciler_interval_seconds', + default=60, + ) + if ( + self._state._last_periodic_run is None + or (now - self._state._last_periodic_run).total_seconds() + >= reconciler_interval + ): + self._job_reconciler() + self._state._last_periodic_run = now + except Exception as e: self._logger.exception(f'job monitor iteration failed: {e}') finally: try: self._monitor.acquire() - # need to better handle scenario when wait_for timeout occurs exactly at the same time as - # as job is queued from the hook. the scheduler might not return the queued job as the job - # is not yet queued (race condition). - # worst case scenario is job will be queued in the periodic update with a 1 minute delay. + # need to better handle scenario when wait_for timeout occurs exactly at the same time as + # as job is queued from the hook. the scheduler might not return the queued job as the job + # is not yet queued (race condition). + # worst case scenario is job will be caught in the job reconciler after a short delay (default 60 seconds). # delta job updates if any, will be processed at an interval of 1 second self._monitor.wait_for( diff --git a/source/idea/idea-scheduler/src/ideascheduler_meta/__init__.py b/source/idea/idea-scheduler/src/ideascheduler_meta/__init__.py index e8d5df6c..e9c57697 100644 --- a/source/idea/idea-scheduler/src/ideascheduler_meta/__init__.py +++ b/source/idea/idea-scheduler/src/ideascheduler_meta/__init__.py @@ -12,4 +12,4 @@ # pkgconfig for ideascheduler. no dependencies # noqa __name__ = 'idea-scheduler' -__version__ = '25.09.1' +__version__ = '25.11.0' diff --git a/source/idea/idea-sdk/src/ideasdk/aws/ec2_instance_types_db.py b/source/idea/idea-sdk/src/ideasdk/aws/ec2_instance_types_db.py index 41e11e9a..3872fdcf 100644 --- a/source/idea/idea-sdk/src/ideasdk/aws/ec2_instance_types_db.py +++ b/source/idea/idea-sdk/src/ideasdk/aws/ec2_instance_types_db.py @@ -16,9 +16,10 @@ from typing import Optional, Set, List from cacheout import Cache from threading import RLock -from math import ceil -INSTANCE_TYPES_DEFAULT_SIZE: int = 512 +INSTANCE_TYPES_CACHE_SIZE: int = ( + 2048 # AWS has 700-800+ instance types; use 2x for headroom +) INSTANCE_TYPES_TTL_SECS: int = 15 * 24 * 60 * 60 # 15 days # EC2 instance capability cache from describe_instance_types @@ -39,9 +40,8 @@ def __init__(self, context: SocaContextProtocol): ) self._cache_last_refresh = int(0) # Force refresh self._cache = Cache( - maxsize=INSTANCE_TYPES_DEFAULT_SIZE, ttl=INSTANCE_TYPES_TTL_SECS + maxsize=INSTANCE_TYPES_CACHE_SIZE, ttl=INSTANCE_TYPES_TTL_SECS ) - self._instance_types_lock = RLock() self._add_instance_data_to_cache() @@ -56,58 +56,62 @@ def _add_instance_data_to_cache(self): ) self._cache.clear() - _ec2_paginator = ( - self._context.aws().ec2().get_paginator('describe_instance_types') - ) - _ec2_iterator = _ec2_paginator.paginate(MaxResults=100) - - _page_num: int = 0 - for _page in _ec2_iterator: - _page_num += 1 - _page_start: int = Utils.current_time_ms() - - # Once per page we consider increasing the cache size - if self._cache.size() >= int(self._cache.maxsize * 0.90): - # Expand 15% at a time in minimum increments of 32 - _new_size: int = 32 * round(ceil(self._cache.maxsize * 1.15) / 32) - self._logger.debug( - f'Auto-growing EC2 instance type cache size {self._cache.maxsize} -> {_new_size}' - ) - self._cache.configure(maxsize=_new_size) - - _instance_types: list = Utils.get_value_as_list( - key='InstanceTypes', obj=_page + try: + _ec2_paginator = ( + self._context.aws().ec2().get_paginator('describe_instance_types') ) + _ec2_iterator = _ec2_paginator.paginate(MaxResults=100) - # Per instance grinding/update - for _instance_data in _instance_types: - _instance_name: str = Utils.get_value_as_string( - key='InstanceType', obj=_instance_data, default=None + _page_num: int = 0 + for _page in _ec2_iterator: + _page_num += 1 + _page_start: int = Utils.current_time_ms() + + _instance_types: list = Utils.get_value_as_list( + key='InstanceTypes', obj=_page ) - if _instance_name is None: - self._logger.error( - f'Missing InstanceType? InstanceType: {_instance_name} for: {_instance_data}' + for _instance_data in _instance_types: + _instance_name: str = Utils.get_value_as_string( + key='InstanceType', obj=_instance_data, default=None ) - raise exceptions.SocaException( - error_code=errorcodes.INVALID_EC2_INSTANCE_TYPE, - message=f'ec2 instance_type is invalid: {_instance_name}', + + if _instance_name is None: + self._logger.error( + f'Missing InstanceType? InstanceType: {_instance_name} for: {_instance_data}' + ) + raise exceptions.SocaException( + error_code=errorcodes.INVALID_EC2_INSTANCE_TYPE, + message=f'ec2 instance_type is invalid: {_instance_name}', + ) + + self._cache.set( + key=_instance_name, + value=EC2InstanceType(data=_instance_data), ) - self._cache.set( - key=_instance_name, value=EC2InstanceType(data=_instance_data) + _page_stop: int = Utils.current_time_ms() + self._logger.debug( + f'Instance Type Cache - Page #{_page_num}: Added {len(_instance_types)} to {self._cache.size()} - duration {_page_stop - _page_start}ms' ) - _page_stop: int = Utils.current_time_ms() - self._logger.debug( - f'Instance Type Cache - Page #{_page_num}: Added {len(_instance_types)} to {self._cache.size()} - duration {_page_stop - _page_start}ms' + _end_ec2_data: int = Utils.current_time_ms() + self._cache_last_refresh = Utils.current_time() + self._logger.info( + f'EC2 instance type cache refresh completed - ' + f'Cached {self._cache.size()} instance types in {_end_ec2_data - _start_ec2_data}ms' ) - _end_ec2_data: int = Utils.current_time_ms() - self._cache_last_refresh = Utils.current_time() - self._logger.debug( - f'AWS EC2 instance type cache refresh - Size: {self._cache.size()}/{self._cache.maxsize} Duration: {_end_ec2_data - _start_ec2_data}ms. TTL: {self._cache_refresh_interval}' - ) + except Exception as e: + self._logger.error( + f'Failed to populate EC2 instance type cache completely. Cache may be incomplete. Error: {e}', + exc_info=True, + ) + # Set last refresh time anyway to avoid hammering the API + self._cache_last_refresh = Utils.current_time() + # Re-raise if cache is empty - this is a critical failure + if self._cache.size() == 0: + raise def _instance_type_names_from_botocore(self) -> List[str]: """ @@ -119,6 +123,39 @@ def _instance_type_names_from_botocore(self) -> List[str]: def all_instance_type_names(self) -> Set[str]: return set(self._cache.keys()) + def _fetch_single_instance_type( + self, instance_type: str + ) -> Optional[EC2InstanceType]: + """ + Fetch a single instance type from AWS EC2 API. + Returns None if the instance type doesn't exist in the region. + """ + try: + response = ( + self._context.aws() + .ec2() + .describe_instance_types(InstanceTypes=[instance_type]) + ) + instance_types = Utils.get_value_as_list( + key='InstanceTypes', obj=response, default=[] + ) + if instance_types: + instance_data = instance_types[0] + ec2_instance_type = EC2InstanceType(data=instance_data) + # Cache the instance type for future use + with self._instance_types_lock: + self._cache.set(key=instance_type, value=ec2_instance_type) + self._logger.info( + f'Successfully fetched and cached instance type: {instance_type}' + ) + return ec2_instance_type + return None + except Exception as e: + self._logger.debug( + f'Failed to fetch instance type {instance_type} from AWS: {e}' + ) + return None + def get(self, instance_type: str) -> Optional[EC2InstanceType]: _current_time: int = Utils.current_time() if (_current_time - self._cache_refresh_interval) > self._cache_last_refresh: @@ -127,14 +164,23 @@ def get(self, instance_type: str) -> Optional[EC2InstanceType]: ) self._add_instance_data_to_cache() - if instance_type not in self._cache: - raise exceptions.SocaException( - error_code=errorcodes.INVALID_EC2_INSTANCE_TYPE, - message=f'ec2 instance_type is invalid: {instance_type}', - ) + # Check cache first + if instance_type in self._cache: + ec2_instance_type = self._cache.get(key=instance_type) + if ec2_instance_type is not None: + return ec2_instance_type - # If we get here it is refreshed or not real - ec2_instance_type = self._cache.get(key=instance_type) + # Instance type not in cache - try to fetch it directly from AWS + self._logger.warning( + f'Instance type {instance_type} not found in cache. Attempting on-demand fetch from AWS API.' + ) + ec2_instance_type = self._fetch_single_instance_type(instance_type) if ec2_instance_type is not None: return ec2_instance_type + + # Instance type truly doesn't exist or isn't available in this region + raise exceptions.SocaException( + error_code=errorcodes.INVALID_EC2_INSTANCE_TYPE, + message=f'ec2 instance_type is invalid or not available in region: {instance_type}', + ) diff --git a/source/idea/idea-sdk/src/ideasdk_meta/__init__.py b/source/idea/idea-sdk/src/ideasdk_meta/__init__.py index 4d0206e4..d8b1e4e3 100644 --- a/source/idea/idea-sdk/src/ideasdk_meta/__init__.py +++ b/source/idea/idea-sdk/src/ideasdk_meta/__init__.py @@ -12,4 +12,4 @@ # pkgconfig for soca-sdk. no dependencies # noqa __name__ = 'idea-sdk' -__version__ = '25.09.1' +__version__ = '25.11.0' diff --git a/source/idea/idea-virtual-desktop-controller/resources/base-software-stack-config.yaml b/source/idea/idea-virtual-desktop-controller/resources/base-software-stack-config.yaml index c5d98eda..b1293f9d 100644 --- a/source/idea/idea-virtual-desktop-controller/resources/base-software-stack-config.yaml +++ b/source/idea/idea-virtual-desktop-controller/resources/base-software-stack-config.yaml @@ -7,88 +7,88 @@ amazonlinux2: default-min-storage-value: 20 default-name: 'Amazon Linux 2 - arm64' af-south-1: - - ami-id: ami-0ffc5654d8ae25bb9 + - ami-id: ami-0a2585b4ca52b94d1 ss-id-suffix: base ap-east-1: - - ami-id: ami-0472bde7632e3d2dc + - ami-id: ami-08ecfca52712e5d32 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-0ecbbdbfe882de6dd + - ami-id: ami-006274d53c9358f5e ss-id-suffix: base ap-northeast-2: - - ami-id: ami-05b584d2102398c70 + - ami-id: ami-0339ef5690bd7caaf ss-id-suffix: base ap-northeast-3: - - ami-id: ami-0bed297cd12d29802 + - ami-id: ami-0916e85f3d35f65cc ss-id-suffix: base ap-south-1: - - ami-id: ami-061e68c5cd776d1eb + - ami-id: ami-071b05da762ccc22e ss-id-suffix: base ap-south-2: - - ami-id: ami-03f6da3626af17e70 + - ami-id: ami-0e4dea1171c0deeeb ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0a53fe56e8300cb68 + - ami-id: ami-0a62196bff61b9ae1 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-05be586a78aa5203c + - ami-id: ami-0e5323f41096dd1df ss-id-suffix: base ap-southeast-3: - - ami-id: ami-03fe23343febae4fb + - ami-id: ami-091235c964ef5d62a ss-id-suffix: base ap-southeast-4: - - ami-id: ami-015073fc0c5886fb7 + - ami-id: ami-09f51262b343502e5 ss-id-suffix: base ca-central-1: - - ami-id: ami-055d0d3bec3b0c60f + - ami-id: ami-0c8285a6b92ed295d ss-id-suffix: base eu-central-1: - - ami-id: ami-0ad87f58883239c99 + - ami-id: ami-06ffe8f656279e7ce ss-id-suffix: base eu-central-2: - - ami-id: ami-0c6855989d19c3cf9 + - ami-id: ami-008bc6ef501284c20 ss-id-suffix: base eu-north-1: - - ami-id: ami-0a85b6926b09659b3 + - ami-id: ami-0914c5a39ca276f0d ss-id-suffix: base eu-south-1: - - ami-id: ami-0f62f459ac55fe88f + - ami-id: ami-0d6c9a3cd5dd24b3f ss-id-suffix: base eu-south-2: - - ami-id: ami-07d2b281b918282a7 + - ami-id: ami-0e6570b491ce43d87 ss-id-suffix: base eu-west-1: - - ami-id: ami-0ac977e53b3aa035b + - ami-id: ami-04c55c52a976524b1 ss-id-suffix: base eu-west-2: - - ami-id: ami-062cf045ae7fe5457 + - ami-id: ami-03292d9f4fa62b337 ss-id-suffix: base eu-west-3: - - ami-id: ami-0a0c474e52cfae476 + - ami-id: ami-00838d5c3adb200d2 ss-id-suffix: base me-central-1: - - ami-id: ami-0c374d37b8ffb80a2 + - ami-id: ami-07ee47101b78e83a6 ss-id-suffix: base me-south-1: - - ami-id: ami-020bc1640a5fed454 + - ami-id: ami-0f7b77460abeb015b ss-id-suffix: base sa-east-1: - - ami-id: ami-0c6cf78b90dadcaff + - ami-id: ami-0114d06552760da4b ss-id-suffix: base us-east-1: - - ami-id: ami-07f49305857a65449 + - ami-id: ami-0de1a3fc027903221 ss-id-suffix: base us-east-2: - - ami-id: ami-05bcaf8af4db4165f + - ami-id: ami-015a4889e1ec77b63 ss-id-suffix: base us-gov-west-1: - - ami-id: ami-0d2b6923bd7c5cb45 + - ami-id: ami-078705f452e7927cf ss-id-suffix: base us-west-1: - - ami-id: ami-05454024d82fe411f + - ami-id: ami-0d37ad4aefbf11690 ss-id-suffix: base us-west-2: - - ami-id: ami-0299edf03b08340ed + - ami-id: ami-0211de8982bbf4738 ss-id-suffix: base x86-64: default-description: 'Amazon Linux 2 - x86_64' @@ -98,88 +98,88 @@ amazonlinux2: default-min-storage-value: 20 default-name: 'Amazon Linux 2 - x86_64' af-south-1: - - ami-id: ami-08d59198e3d636a5e + - ami-id: ami-04c8e1aa34b989992 ss-id-suffix: base ap-east-1: - - ami-id: ami-0016f605ce470ac4a + - ami-id: ami-09e664c1cd4511db5 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-04f0ec354fecef2be + - ami-id: ami-06315a16484d67634 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0419906fcda71de4c + - ami-id: ami-039fbed7056a2b165 ss-id-suffix: base ap-northeast-3: - - ami-id: ami-04b028cfa5004fa8d + - ami-id: ami-070bf14e6b2c1b2f4 ss-id-suffix: base ap-south-1: - - ami-id: ami-046f6a472f118894d + - ami-id: ami-0478c83d13a37ada6 ss-id-suffix: base ap-south-2: - - ami-id: ami-03e9a8ea4e95554ee + - ami-id: ami-046ab5720304b7d6a ss-id-suffix: base ap-southeast-1: - - ami-id: ami-04da6849fde95e2c3 + - ami-id: ami-08a02fb69cb230901 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-0d4e7db31a6be7d0d + - ami-id: ami-03cd39a56bc429c77 ss-id-suffix: base ap-southeast-3: - - ami-id: ami-01f99c5545a8f486d + - ami-id: ami-048ae70caf91ab598 ss-id-suffix: base ap-southeast-4: - - ami-id: ami-01d30e658b6d731bf + - ami-id: ami-039a563d7e6f463bb ss-id-suffix: base ca-central-1: - - ami-id: ami-0ec418868ffa2baba + - ami-id: ami-00774b6fb10bc333d ss-id-suffix: base eu-central-1: - - ami-id: ami-08a804cca9150c2f9 + - ami-id: ami-0bf973d5da082bbfc ss-id-suffix: base eu-central-2: - - ami-id: ami-0ce90e553d8a652a6 + - ami-id: ami-09b18fd7bfd99cca0 ss-id-suffix: base eu-north-1: - - ami-id: ami-04232acb1837a64f0 + - ami-id: ami-0692f803ff39aca48 ss-id-suffix: base eu-south-1: - - ami-id: ami-00e15201005290cc1 + - ami-id: ami-02ede56d37a57cfc7 ss-id-suffix: base eu-south-2: - - ami-id: ami-0bc67842e3195f552 + - ami-id: ami-0e344a69ab0e19a66 ss-id-suffix: base eu-west-1: - - ami-id: ami-054fbdbf8c7bee08a + - ami-id: ami-00aef265a2ba791ad ss-id-suffix: base eu-west-2: - - ami-id: ami-08127ba5be1440747 + - ami-id: ami-05b16ea36df9c45a9 ss-id-suffix: base eu-west-3: - - ami-id: ami-00bf0d0cd07b9555c + - ami-id: ami-01a24651a50a4e6ef ss-id-suffix: base me-central-1: - - ami-id: ami-0a1e63b62e89fdc0b + - ami-id: ami-01ac948ef4290bf89 ss-id-suffix: base me-south-1: - - ami-id: ami-07abb4c260cd76293 + - ami-id: ami-08c095377062fd334 ss-id-suffix: base sa-east-1: - - ami-id: ami-0c90499e5c9d5d937 + - ami-id: ami-07dae1e87346cf162 ss-id-suffix: base us-east-1: - - ami-id: ami-02759793c6797d132 + - ami-id: ami-0c713bebb27813cec ss-id-suffix: base us-east-2: - - ami-id: ami-00755d94918d41fc8 + - ami-id: ami-01fc6397ad6936b6e ss-id-suffix: base us-gov-west-1: - - ami-id: ami-060b9559b3306033d + - ami-id: ami-0c8cca7741249023e ss-id-suffix: base us-west-1: - - ami-id: ami-08a47e0bb4fe2623f + - ami-id: ami-00030a0c00dae5e52 ss-id-suffix: base us-west-2: - - ami-id: ami-016e419899f172b29 + - ami-id: ami-00a61c67562abcf87 ss-id-suffix: base amazonlinux2023: arm64: @@ -190,88 +190,88 @@ amazonlinux2023: default-min-storage-value: 20 default-name: 'Amazon Linux 2023 - arm64' af-south-1: - - ami-id: ami-0a76608d7f678a101 + - ami-id: ami-03cdb454b9ea5abb7 ss-id-suffix: base ap-east-1: - - ami-id: ami-053d986f593403539 + - ami-id: ami-0587a430630ed2d22 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-011bdd6d8e8705a3c + - ami-id: ami-0c8c9ae041a896827 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-02eb96b4aa0940b85 + - ami-id: ami-0996dc96a444e2948 ss-id-suffix: base ap-northeast-3: - - ami-id: ami-0de193cebcaf62407 + - ami-id: ami-043cf21c1d2636a3f ss-id-suffix: base ap-south-1: - - ami-id: ami-0fad8318b9405c6fb + - ami-id: ami-09da041714dd6132b ss-id-suffix: base ap-south-2: - - ami-id: ami-0cf6ffaea4fef404f + - ami-id: ami-04f13a34efbdcf632 ss-id-suffix: base ap-southeast-1: - - ami-id: ami-08a566a7bb555c96e + - ami-id: ami-09ddbf2a339cee9df ss-id-suffix: base ap-southeast-2: - - ami-id: ami-0f315500adaeb4cd8 + - ami-id: ami-0e5128b9bd0310337 ss-id-suffix: base ap-southeast-3: - - ami-id: ami-0fffad2fc75943ff5 + - ami-id: ami-076b7e12b3b9ff079 ss-id-suffix: base ap-southeast-4: - - ami-id: ami-0a8345060f7c9feab + - ami-id: ami-073c20f60fdf389d8 ss-id-suffix: base ca-central-1: - - ami-id: ami-06d0702f98a7e2ed5 + - ami-id: ami-029692d18becb3f3e ss-id-suffix: base eu-central-1: - - ami-id: ami-0c76eed7d4d298d55 + - ami-id: ami-084151417b8a7f079 ss-id-suffix: base eu-central-2: - - ami-id: ami-0857066341ba4250e + - ami-id: ami-03a690a9f5f188ed4 ss-id-suffix: base eu-north-1: - - ami-id: ami-07ca8bbd22d87429f + - ami-id: ami-04a6ee97493c5fffc ss-id-suffix: base eu-south-1: - - ami-id: ami-020575ef855b529be + - ami-id: ami-0e83e81659c0bf51c ss-id-suffix: base eu-south-2: - - ami-id: ami-0cd0767d8ed6ad0a9 + - ami-id: ami-0889f4affaf9dd3a6 ss-id-suffix: base eu-west-1: - - ami-id: ami-0bec58f5985730abf + - ami-id: ami-03c93ec3a69cd7d4f ss-id-suffix: base eu-west-2: - - ami-id: ami-0b70702ca929b20d1 + - ami-id: ami-03f7491dbd437367d ss-id-suffix: base eu-west-3: - - ami-id: ami-0162d8c7826c15e85 + - ami-id: ami-016a738305edf3e6f ss-id-suffix: base me-central-1: - - ami-id: ami-055d2c4c09861dac3 + - ami-id: ami-07f47e62c5a83cdea ss-id-suffix: base me-south-1: - - ami-id: ami-03aacc625f2dd55a9 + - ami-id: ami-0b88107e4b266d195 ss-id-suffix: base sa-east-1: - - ami-id: ami-0076501279de65f82 + - ami-id: ami-09be05765b95c27d8 ss-id-suffix: base us-east-1: - - ami-id: ami-0aa7db6294d00216f + - ami-id: ami-03f05f1a97033e6dc ss-id-suffix: base us-east-2: - - ami-id: ami-0e2369dd6317d0d7e + - ami-id: ami-04278c9c25711eddd ss-id-suffix: base us-gov-west-1: - - ami-id: ami-08f825acf162d987e + - ami-id: ami-09a9d1cda190df632 ss-id-suffix: base us-west-1: - - ami-id: ami-07e43f2bfde153b21 + - ami-id: ami-0db02d38a812417bb ss-id-suffix: base us-west-2: - - ami-id: ami-075401717f89f691f + - ami-id: ami-083632412de95d20e ss-id-suffix: base x86-64: default-description: 'Amazon Linux 2023 - x86_64' @@ -281,88 +281,88 @@ amazonlinux2023: default-min-storage-value: 20 default-name: 'Amazon Linux 2023 - x86_64' af-south-1: - - ami-id: ami-02839d797c7613993 + - ami-id: ami-0713deba82cfb0c03 ss-id-suffix: base ap-east-1: - - ami-id: ami-0271f1e76045d3888 + - ami-id: ami-012f68d83f9ea6bc7 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-07faa35bbd2230d90 + - ami-id: ami-07f5017dd5609b803 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0ae2c887094315bed + - ami-id: ami-0aa02302a11ea5190 ss-id-suffix: base ap-northeast-3: - - ami-id: ami-0e293f500c62849a3 + - ami-id: ami-0b29ff76d95260bcc ss-id-suffix: base ap-south-1: - - ami-id: ami-0861f4e788f5069dd + - ami-id: ami-03f04a34a6d2050e1 ss-id-suffix: base ap-south-2: - - ami-id: ami-031eac8ecb2726fe0 + - ami-id: ami-0811ad491a91bb2bd ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0779c82fbb81e731c + - ami-id: ami-072b337bfb528c3c1 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-0a0b0b06dd1636865 + - ami-id: ami-08bebfaae2000fd8b ss-id-suffix: base ap-southeast-3: - - ami-id: ami-0c82cd70874a842cf + - ami-id: ami-0d9bbc00c0f86525f ss-id-suffix: base ap-southeast-4: - - ami-id: ami-055ee3a5e46901f05 + - ami-id: ami-08bb5e0c969dec208 ss-id-suffix: base ca-central-1: - - ami-id: ami-0ca3fe9992272540b + - ami-id: ami-05ab0cf09a82f1630 ss-id-suffix: base eu-central-1: - - ami-id: ami-015cbce10f839bd0c + - ami-id: ami-0e587597fe2f182db ss-id-suffix: base eu-central-2: - - ami-id: ami-08e602f915a765814 + - ami-id: ami-016d907b4df42f258 ss-id-suffix: base eu-north-1: - - ami-id: ami-0c4fc5dcabc9df21d + - ami-id: ami-0013b4404496ef718 ss-id-suffix: base eu-south-1: - - ami-id: ami-03ddf59cb93f2d2b0 + - ami-id: ami-0e95741b92b5e69fd ss-id-suffix: base eu-south-2: - - ami-id: ami-0cd093182e4afe352 + - ami-id: ami-0f6baa75b104b9c79 ss-id-suffix: base eu-west-1: - - ami-id: ami-09b024e886d7bbe74 + - ami-id: ami-0611fa5bea09e2d74 ss-id-suffix: base eu-west-2: - - ami-id: ami-0cfb394ad3c3ac699 + - ami-id: ami-046bf688ea9c248da ss-id-suffix: base eu-west-3: - - ami-id: ami-096dd88190a75cd20 + - ami-id: ami-09866f2a3f2650db4 ss-id-suffix: base me-central-1: - - ami-id: ami-0b767e62a8ec35261 + - ami-id: ami-030b6bb5d4fe74ac1 ss-id-suffix: base me-south-1: - - ami-id: ami-05f83cd9df159ee5e + - ami-id: ami-05d7796e58fb05ea3 ss-id-suffix: base sa-east-1: - - ami-id: ami-02556f6726aa38019 + - ami-id: ami-0fc65c6f59692269f ss-id-suffix: base us-east-1: - - ami-id: ami-00ca32bbc84273381 + - ami-id: ami-03c870feb7c37e4ff ss-id-suffix: base us-east-2: - - ami-id: ami-0b016c703b95ecbe4 + - ami-id: ami-08d96a04ebb630b47 ss-id-suffix: base us-gov-west-1: - - ami-id: ami-03cf5523cebb8d54d + - ami-id: ami-0acfcbd827c06446a ss-id-suffix: base us-west-1: - - ami-id: ami-0945610b37068d87a + - ami-id: ami-067ec7f9e54a67559 ss-id-suffix: base us-west-2: - - ami-id: ami-01102c5e8ab69fb75 + - ami-id: ami-0ac7ba4c75080fe26 ss-id-suffix: base rhel8: arm64: @@ -373,91 +373,91 @@ rhel8: default-min-storage-value: 20 default-name: 'RHEL 8 - arm64' af-south-1: - - ami-id: ami-0324d7eb5635771a0 + - ami-id: ami-075d08857bcae8e7c ss-id-suffix: base ap-east-1: - - ami-id: ami-003258430d0b17b7b + - ami-id: ami-0a6e6f7bb052a2c8d ss-id-suffix: base ap-northeast-1: - - ami-id: ami-0ff23138dec2850c0 + - ami-id: ami-049bdc4739690c4fa ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0f77f9395e374527a + - ami-id: ami-0e1407b2d905a4371 ss-id-suffix: base ap-northeast-3: - - ami-id: ami-042e065cccf436bd2 + - ami-id: ami-0d4edf71de45fbbc4 ss-id-suffix: base ap-south-1: - - ami-id: ami-0fd13b8eb8cd5a5b3 + - ami-id: ami-09028d33564b913a9 ss-id-suffix: base ap-south-2: - - ami-id: ami-071e7601bdc5f7174 + - ami-id: ami-0916b7548e998720d ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0bc06af7dcc562161 + - ami-id: ami-0f345d1ecfb3dba18 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-021ad9075a349caa8 + - ami-id: ami-0b0a820bf46487473 ss-id-suffix: base ap-southeast-3: - - ami-id: ami-040dd2481bb513959 + - ami-id: ami-011fa4faa450ca0ad ss-id-suffix: base ap-southeast-4: - - ami-id: ami-0f3f2d3407aa5fa43 + - ami-id: ami-0e8f39ec1bc6a6326 ss-id-suffix: base ca-central-1: - - ami-id: ami-03418d8a4b57e4156 + - ami-id: ami-0adc622f3929faee2 ss-id-suffix: base eu-central-1: - - ami-id: ami-05aab2a160c4828b7 + - ami-id: ami-08ff9bda5524556a7 ss-id-suffix: base eu-central-2: - - ami-id: ami-022ca952f14763513 + - ami-id: ami-07440f1e6de1bfecb ss-id-suffix: base eu-north-1: - - ami-id: ami-04a49125e373ce9dd + - ami-id: ami-00b601fc4d2759eb9 ss-id-suffix: base eu-south-1: - - ami-id: ami-0588ffe26564e59f8 + - ami-id: ami-0da78df8142501596 ss-id-suffix: base eu-south-2: - - ami-id: ami-07bade2fe311cb7db + - ami-id: ami-0f6042f60ec9139a9 ss-id-suffix: base eu-west-1: - - ami-id: ami-0b04f47cee8bcb323 + - ami-id: ami-035b54fc7b02f2fa8 ss-id-suffix: base eu-west-2: - - ami-id: ami-008f465c131fef2af + - ami-id: ami-0c8cf447544b582b9 ss-id-suffix: base eu-west-3: - - ami-id: ami-0a55316a804d6de31 + - ami-id: ami-0a2b81185713db4e0 ss-id-suffix: base il-central-1: - - ami-id: ami-096b75735a8948ac0 + - ami-id: ami-0fa7130379c951614 ss-id-suffix: base me-central-1: - - ami-id: ami-03c9ea6fdbaf05984 + - ami-id: ami-04db836dda01941a3 ss-id-suffix: base me-south-1: - - ami-id: ami-0584034be47e47086 + - ami-id: ami-0f0ccf0e6ea2cac1e ss-id-suffix: base sa-east-1: - - ami-id: ami-0955ec6f7a8d4981b + - ami-id: ami-054edb7a09c5c11e4 ss-id-suffix: base us-east-1: - - ami-id: ami-07b9f661203f8b4e5 + - ami-id: ami-06120262bb544a0b1 ss-id-suffix: base us-east-2: - - ami-id: ami-062e4c9afce4ad028 + - ami-id: ami-03d77a230e7719d19 ss-id-suffix: base us-gov-west-1: - ami-id: ami-0eb36a65e2b074ab7 ss-id-suffix: base us-west-1: - - ami-id: ami-0f435848ff3f42c37 + - ami-id: ami-079eabad7cc0bdec0 ss-id-suffix: base us-west-2: - - ami-id: ami-0f52717fc1f2b83ba + - ami-id: ami-07cd8a442361099fb ss-id-suffix: base x86-64: default-description: 'RHEL 8 - x86_64' @@ -467,91 +467,91 @@ rhel8: default-min-storage-value: 20 default-name: 'RHEL 8 - x86_64' af-south-1: - - ami-id: ami-0e3023f0720f11c13 + - ami-id: ami-0f3626218aa340648 ss-id-suffix: base ap-east-1: - - ami-id: ami-0263e2c6fedd70ac1 + - ami-id: ami-0567dec70e4b0af65 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-0abdecc3b47f8d044 + - ami-id: ami-042eeb1edb0b6c871 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-044ae8b12299e7d5f + - ami-id: ami-098fcbf3441963062 ss-id-suffix: base ap-northeast-3: - - ami-id: ami-05ba099eb4be26cdb + - ami-id: ami-08a18632363377c24 ss-id-suffix: base ap-south-1: - - ami-id: ami-07e3c6a7114ab1cce + - ami-id: ami-03b7070b7406f4e29 ss-id-suffix: base ap-south-2: - - ami-id: ami-0d48f4637910be330 + - ami-id: ami-0205e6d4b79c65b28 ss-id-suffix: base ap-southeast-1: - - ami-id: ami-074bfecac0ea43471 + - ami-id: ami-05fb46ceb68b1bfdd ss-id-suffix: base ap-southeast-2: - - ami-id: ami-0da6bb5485efbc4d5 + - ami-id: ami-009b00c0c21930c01 ss-id-suffix: base ap-southeast-3: - - ami-id: ami-08ff7c46e39d08eab + - ami-id: ami-062938c5e0fbf56b9 ss-id-suffix: base ap-southeast-4: - - ami-id: ami-0d95f3dc23f6a652c + - ami-id: ami-057e39eef1ce363d7 ss-id-suffix: base ca-central-1: - - ami-id: ami-0b1277c706d430522 + - ami-id: ami-0b7ffb6b3a23d0e90 ss-id-suffix: base eu-central-1: - - ami-id: ami-091731b9ece6fd532 + - ami-id: ami-08eaea68c8899746d ss-id-suffix: base eu-central-2: - - ami-id: ami-094404f9ced7b5f71 + - ami-id: ami-01702d50f36a09821 ss-id-suffix: base eu-north-1: - - ami-id: ami-0dc5dc49af490a93a + - ami-id: ami-0dc09daa167ea0dba ss-id-suffix: base eu-south-1: - - ami-id: ami-078d395668f3e28a3 + - ami-id: ami-0ccb11089007235a1 ss-id-suffix: base eu-south-2: - - ami-id: ami-044cb17766116ec68 + - ami-id: ami-0b621332e2addd26b ss-id-suffix: base eu-west-1: - - ami-id: ami-0f5f62c1a18803362 + - ami-id: ami-065b91f67dd493743 ss-id-suffix: base eu-west-2: - - ami-id: ami-07842f051d035946a + - ami-id: ami-09d0ac36ee4c107da ss-id-suffix: base eu-west-3: - - ami-id: ami-07a474e263cb5233f + - ami-id: ami-0bd9c415abb038cd4 ss-id-suffix: base il-central-1: - - ami-id: ami-0cc464603bea562ea + - ami-id: ami-0e1318d459f1d01f1 ss-id-suffix: base me-central-1: - - ami-id: ami-09f1321c7f7e8e803 + - ami-id: ami-054f264e93f32f943 ss-id-suffix: base me-south-1: - - ami-id: ami-00522809bd156a8d7 + - ami-id: ami-0070b09f2849280fa ss-id-suffix: base sa-east-1: - - ami-id: ami-086ac6fa1f5ba13fd + - ami-id: ami-027454ed25e6ec32d ss-id-suffix: base us-east-1: - - ami-id: ami-01955109048f9b11d + - ami-id: ami-0b199850d21f36238 ss-id-suffix: base us-east-2: - - ami-id: ami-0b01f27fa22796307 + - ami-id: ami-0b0e825b34a8c218e ss-id-suffix: base us-gov-west-1: - ami-id: ami-008177b99929ea0db ss-id-suffix: base us-west-1: - - ami-id: ami-0187e3235e360333a + - ami-id: ami-0b7f0f85ce309831f ss-id-suffix: base us-west-2: - - ami-id: ami-0bed2b29c076e8607 + - ami-id: ami-069fe92d07d6b4cf7 ss-id-suffix: base ubuntu2204: arm64: @@ -562,52 +562,52 @@ ubuntu2204: default-min-storage-value: 20 default-name: 'Ubuntu 22.04 - arm64' ap-northeast-1: - - ami-id: ami-098db043beb8cbda7 + - ami-id: ami-0dae7de3fc301bf80 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0e6c43c67db18194b + - ami-id: ami-09cd382520f248e66 ss-id-suffix: base ap-south-1: - - ami-id: ami-0e639fddd264584f2 + - ami-id: ami-016fd3af5e1c04fce ss-id-suffix: base ap-southeast-1: - - ami-id: ami-083a81ad779b66399 + - ami-id: ami-02dc879fcbd4eedea ss-id-suffix: base ap-southeast-2: - - ami-id: ami-0fb5b8ea3f0b67282 + - ami-id: ami-0733d845c06ce17e8 ss-id-suffix: base ca-central-1: - - ami-id: ami-00503a7580b6fe4bc + - ami-id: ami-0b051e709ad9d9e12 ss-id-suffix: base eu-central-1: - - ami-id: ami-0335bfce26facdee4 + - ami-id: ami-0e06a72298a8f4078 ss-id-suffix: base eu-south-1: - - ami-id: ami-0514c8555ca769ac5 + - ami-id: ami-08d01ef5a5e2cab7b ss-id-suffix: base eu-west-1: - - ami-id: ami-09e9c07795597a92b + - ami-id: ami-0c23207821fff9986 ss-id-suffix: base eu-west-2: - - ami-id: ami-080f42bff42933009 + - ami-id: ami-036dec38a388c5f23 ss-id-suffix: base eu-west-3: - - ami-id: ami-0e83e7608655d355b + - ami-id: ami-07c945711d0e5c6b9 ss-id-suffix: base il-central-1: - - ami-id: ami-006714bdb2a502b6b + - ami-id: ami-02ecf237dcfb7b099 ss-id-suffix: base us-east-1: - - ami-id: ami-01b2110eef525172b + - ami-id: ami-0ee62663c48914422 ss-id-suffix: base us-east-2: - - ami-id: ami-05b580e994a808c42 + - ami-id: ami-032f62ff67d149091 ss-id-suffix: base us-west-1: - - ami-id: ami-0d36c13877cfad64e + - ami-id: ami-0de8667f772775c1a ss-id-suffix: base us-west-2: - - ami-id: ami-0bca608fe0242d666 + - ami-id: ami-0dd60ee743e1107f9 ss-id-suffix: base us-gov-west-1: - ami-id: ami-0a501501fa2401815 @@ -620,52 +620,52 @@ ubuntu2204: default-min-storage-value: 20 default-name: 'Ubuntu 22.04 - x86_64' ap-northeast-1: - - ami-id: ami-0d88b56ff2c65082e + - ami-id: ami-03873003744ddc492 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-02835aed2a5cb1d2a + - ami-id: ami-0d7f51b914bb4b808 ss-id-suffix: base ap-south-1: - - ami-id: ami-07f07a6e1060cd2a8 + - ami-id: ami-0f457776b2f2411c1 ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0a2fc2446ff3412c3 + - ami-id: ami-02bc5c6d2fa1bcd77 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-01361d3186814b895 + - ami-id: ami-003107ac7f78f1db1 ss-id-suffix: base ca-central-1: - - ami-id: ami-052f47efa5f766ee3 + - ami-id: ami-01cba724358721b21 ss-id-suffix: base eu-central-1: - - ami-id: ami-0699c78c4486e5f1e + - ami-id: ami-022814934cf926361 ss-id-suffix: base eu-south-1: - - ami-id: ami-06f0efc4f78655a9e + - ami-id: ami-0b9a8d64e9e687d43 ss-id-suffix: base eu-west-1: - - ami-id: ami-0b016d1e12e0375a8 + - ami-id: ami-0651fd5b99debb0f4 ss-id-suffix: base eu-west-2: - - ami-id: ami-0379821d182aac933 + - ami-id: ami-028af9a1eb20046ca ss-id-suffix: base eu-west-3: - - ami-id: ami-0809e1e48f650e1f9 + - ami-id: ami-0543d9f4d802a31c1 ss-id-suffix: base il-central-1: - - ami-id: ami-08c9ab64ab2668d43 + - ami-id: ami-029c63f2c0edfbc76 ss-id-suffix: base us-east-1: - - ami-id: ami-0bbdd8c17ed981ef9 + - ami-id: ami-00b13f11600160c10 ss-id-suffix: base us-east-2: - - ami-id: ami-0d9a665f802ae6227 + - ami-id: ami-0911fd09f1f167a99 ss-id-suffix: base us-west-1: - - ami-id: ami-0ddac4b9aed8d5d46 + - ami-id: ami-0289129c06e0e1c30 ss-id-suffix: base us-west-2: - - ami-id: ami-065778886ef8ec7c8 + - ami-id: ami-0ffde298a37fd43b7 ss-id-suffix: base us-gov-west-1: - ami-id: ami-0158011b8a9e6533f @@ -679,52 +679,52 @@ ubuntu2404: default-min-storage-value: 20 default-name: 'Ubuntu 24.04 - arm64' ap-northeast-1: - - ami-id: ami-08d313830388ca0eb + - ami-id: ami-0cad1c698be6edc12 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0607797cadde98e9b + - ami-id: ami-01989d01cf7397c60 ss-id-suffix: base ap-south-1: - - ami-id: ami-0b9093ea00a0fed92 + - ami-id: ami-010bed997d599df71 ss-id-suffix: base ap-southeast-1: - - ami-id: ami-078f840c20e30f90d + - ami-id: ami-03a5ed29bd29eaa8e ss-id-suffix: base ap-southeast-2: - - ami-id: ami-0194ebe51305012e9 + - ami-id: ami-0409e50755538732c ss-id-suffix: base ca-central-1: - - ami-id: ami-0b4c83e07a50ede59 + - ami-id: ami-0be6f589d63085d32 ss-id-suffix: base eu-central-1: - - ami-id: ami-0ed1e06189d76073f + - ami-id: ami-0772892944d03734e ss-id-suffix: base eu-south-1: - - ami-id: ami-022c0c81267111d7c + - ami-id: ami-0235bc3c6b26bf605 ss-id-suffix: base eu-west-1: - - ami-id: ami-092125beea023c84a + - ami-id: ami-0286aec5ffa097fdf ss-id-suffix: base eu-west-2: - - ami-id: ami-0122205e4fe2524d5 + - ami-id: ami-065d1c99bd0a2f99a ss-id-suffix: base eu-west-3: - - ami-id: ami-01d488cf20ce2c208 + - ami-id: ami-0d89d34ff119bf104 ss-id-suffix: base il-central-1: - - ami-id: ami-0949832b0539b92f3 + - ami-id: ami-099430a8aa34e1add ss-id-suffix: base us-east-1: - - ami-id: ami-026fccd88446aa0bf + - ami-id: ami-083f1fc4f8bcff379 ss-id-suffix: base us-east-2: - - ami-id: ami-03d9fcc39480315d4 + - ami-id: ami-039e808802de4ff32 ss-id-suffix: base us-west-1: - - ami-id: ami-0109f5561f23848a0 + - ami-id: ami-0956795e802e30f2b ss-id-suffix: base us-west-2: - - ami-id: ami-0326baaa98cf958ed + - ami-id: ami-048a324b5ce62d46f ss-id-suffix: base us-gov-west-1: - ami-id: ami-04c2d4bc47bdcbe21 @@ -737,52 +737,52 @@ ubuntu2404: default-min-storage-value: 20 default-name: 'Ubuntu 24.04 - x86_64' ap-northeast-1: - - ami-id: ami-0a71a0b9c988d5e5e + - ami-id: ami-02e94d274addde12d ss-id-suffix: base ap-northeast-2: - - ami-id: ami-00e73adb2e2c80366 + - ami-id: ami-09e6663b7762b278f ss-id-suffix: base ap-south-1: - - ami-id: ami-02d26659fd82cf299 + - ami-id: ami-06c28eeae75712f2d ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0933f1385008d33c4 + - ami-id: ami-014533a88507df1ae ss-id-suffix: base ap-southeast-2: - - ami-id: ami-0279a86684f669718 + - ami-id: ami-01b4dfcc9b411b50c ss-id-suffix: base ca-central-1: - - ami-id: ami-0dd67d541aa70c8b9 + - ami-id: ami-0bbc54c1bc11fdfaa ss-id-suffix: base eu-central-1: - - ami-id: ami-0a116fa7c861dd5f9 + - ami-id: ami-09f704d47900bfaca ss-id-suffix: base eu-south-1: - - ami-id: ami-0bb1c333c72a7ebb4 + - ami-id: ami-087baa098a6ac65dc ss-id-suffix: base eu-west-1: - - ami-id: ami-0bc691261a82b32bc + - ami-id: ami-07448619ba6edca91 ss-id-suffix: base eu-west-2: - - ami-id: ami-046c2381f11878233 + - ami-id: ami-0f343b554f7aa943d ss-id-suffix: base eu-west-3: - - ami-id: ami-02d7ced41dff52ebc + - ami-id: ami-005600f7f06c2c597 ss-id-suffix: base il-central-1: - - ami-id: ami-04dbb447f35f57d09 + - ami-id: ami-0257e1e954b6b21cc ss-id-suffix: base us-east-1: - - ami-id: ami-0360c520857e3138f + - ami-id: ami-09c63204a7d809e8f ss-id-suffix: base us-east-2: - - ami-id: ami-0cfde0ea8edd312d4 + - ami-id: ami-0bb1986d42f3ea965 ss-id-suffix: base us-west-1: - - ami-id: ami-00271c85bf8a52b84 + - ami-id: ami-0aa310610d1ac5b45 ss-id-suffix: base us-west-2: - - ami-id: ami-03aa99ddf5498ceb9 + - ami-id: ami-0e6b7bf043dce3460 ss-id-suffix: base us-gov-west-1: - ami-id: ami-025244f2c0c149bb5 @@ -796,88 +796,88 @@ rhel9: default-min-storage-value: 20 default-name: 'RHEL 9 - arm64' af-south-1: - - ami-id: ami-06d2aa85dd03bd7d1 + - ami-id: ami-0a068ebe1acd46c84 ss-id-suffix: base ap-east-1: - - ami-id: ami-03192149223a29330 + - ami-id: ami-085e4a4e4afdb6b9a ss-id-suffix: base ap-northeast-1: - - ami-id: ami-0dac2d448a7380467 + - ami-id: ami-05886fb339b740dc3 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0937436cf8d57a039 + - ami-id: ami-0deabd5f51f9c5d51 ss-id-suffix: base ap-northeast-3: - - ami-id: ami-0851fdef6e243a4dc + - ami-id: ami-0e2914e1a5ca3d410 ss-id-suffix: base ap-south-1: - - ami-id: ami-0cddb5d6cc75103df + - ami-id: ami-0efcc8ecf6425f23f ss-id-suffix: base ap-south-2: - - ami-id: ami-059c8cbc81b29ebe3 + - ami-id: ami-072202bc4098df8ad ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0659e7f2ccfbaaa33 + - ami-id: ami-0bab0f4b645dc9963 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-076588b075aa18b00 + - ami-id: ami-06a6c2b9c30304262 ss-id-suffix: base ap-southeast-3: - - ami-id: ami-043bf6f45bc422d79 + - ami-id: ami-0e79b3e82aa9e8ddf ss-id-suffix: base ap-southeast-4: - - ami-id: ami-068a3d5725d494fa2 + - ami-id: ami-0302d99ffaaa50394 ss-id-suffix: base ca-central-1: - - ami-id: ami-0bd0abecf40a36c89 + - ami-id: ami-02d07cb7d7a795faa ss-id-suffix: base eu-central-1: - - ami-id: ami-095c4dfdbee0dee13 + - ami-id: ami-08ff9a91088c9d11c ss-id-suffix: base eu-central-2: - - ami-id: ami-0cacd98d7a75aebf3 + - ami-id: ami-0f61a4cf70e6f211c ss-id-suffix: base eu-north-1: - - ami-id: ami-088a669a951717d29 + - ami-id: ami-006eb123b6e0205f0 ss-id-suffix: base eu-south-1: - - ami-id: ami-05f8d66095fed837a + - ami-id: ami-04e763b619f189422 ss-id-suffix: base eu-south-2: - - ami-id: ami-0a497cc2d06ec830a + - ami-id: ami-0a0fe0f13f159e113 ss-id-suffix: base eu-west-1: - - ami-id: ami-0c7dd36917130661a + - ami-id: ami-00df37b20be78a4b0 ss-id-suffix: base eu-west-2: - - ami-id: ami-0fc3dc0740d6656c3 + - ami-id: ami-01434bb752d3d59be ss-id-suffix: base eu-west-3: - - ami-id: ami-0579b17163cd4dc73 + - ami-id: ami-0655704a5fbe079d2 ss-id-suffix: base il-central-1: - - ami-id: ami-04afdf3d6a7632b22 + - ami-id: ami-026d4c396a1864886 ss-id-suffix: base me-central-1: - - ami-id: ami-0d06305e264e7b9e0 + - ami-id: ami-0b83a069cc68924b7 ss-id-suffix: base me-south-1: - - ami-id: ami-06bb556b3ada270b1 + - ami-id: ami-0d78410a76c0adaef ss-id-suffix: base sa-east-1: - - ami-id: ami-062bbc19c4833391e + - ami-id: ami-0a4f1c290d6bdb793 ss-id-suffix: base us-east-1: - - ami-id: ami-01efe47be56f52d02 + - ami-id: ami-0a3e0824a410fd569 ss-id-suffix: base us-east-2: - - ami-id: ami-06c196bebe58b0c28 + - ami-id: ami-0e5c1816703e8af75 ss-id-suffix: base us-west-1: - - ami-id: ami-021f957060d13c1e1 + - ami-id: ami-06b20ea3e7960d779 ss-id-suffix: base us-west-2: - - ami-id: ami-0cfc0330d1b2401bd + - ami-id: ami-0b8c1cdf23d2ee576 ss-id-suffix: base us-gov-west-1: - ami-id: ami-06ac1fe9004042996 @@ -890,88 +890,88 @@ rhel9: default-min-storage-value: 20 default-name: 'RHEL 9 - x86_64' af-south-1: - - ami-id: ami-095957153df81c45c + - ami-id: ami-0cb1d6ad21772c835 ss-id-suffix: base ap-east-1: - - ami-id: ami-0e9fc4febc7be2b44 + - ami-id: ami-0a00b12a51c231f99 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-0c8576e9021325617 + - ami-id: ami-0a77f7b7e2a7e9e19 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0090b5923aa899b3e + - ami-id: ami-0b20135730887dc5f ss-id-suffix: base ap-northeast-3: - - ami-id: ami-0445f6fd13acf90bb + - ami-id: ami-087be824994962471 ss-id-suffix: base ap-south-1: - - ami-id: ami-0d4c71635894eb376 + - ami-id: ami-02041feaeda79b4ad ss-id-suffix: base ap-south-2: - - ami-id: ami-06e45ac1eb97fe97b + - ami-id: ami-02965f34c664643ee ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0c948fd4c2f5a354e + - ami-id: ami-05377537700a398ae ss-id-suffix: base ap-southeast-2: - - ami-id: ami-07ea93aa60e095fde + - ami-id: ami-09b057cd644d1e4e5 ss-id-suffix: base ap-southeast-3: - - ami-id: ami-03f854dd23109d9ee + - ami-id: ami-00de88e881f30d6cc ss-id-suffix: base ap-southeast-4: - - ami-id: ami-0c59fd474ddff1bda + - ami-id: ami-0573e755612d12103 ss-id-suffix: base ca-central-1: - - ami-id: ami-03fb74a78bd17729f + - ami-id: ami-07a0ee7a51a386be3 ss-id-suffix: base eu-central-1: - - ami-id: ami-00cf7a24d4f964306 + - ami-id: ami-01d718c210035e8f4 ss-id-suffix: base eu-central-2: - - ami-id: ami-0b7041e1b9dde0dd6 + - ami-id: ami-09110e91e73ed2fd2 ss-id-suffix: base eu-north-1: - - ami-id: ami-04c224411e430f285 + - ami-id: ami-0325b265f53c6be7c ss-id-suffix: base eu-south-1: - - ami-id: ami-09b8a3308faf219c6 + - ami-id: ami-05835c7f37ea2f768 ss-id-suffix: base eu-south-2: - - ami-id: ami-08367221b727170ac + - ami-id: ami-0b811bffa1f8a557b ss-id-suffix: base eu-west-1: - - ami-id: ami-0a59bff376e2065c3 + - ami-id: ami-0cb95ced7337e06e1 ss-id-suffix: base eu-west-2: - - ami-id: ami-012fcb4f119bf9440 + - ami-id: ami-017249f44aae39eff ss-id-suffix: base eu-west-3: - - ami-id: ami-054c205f2a3813893 + - ami-id: ami-0b9b2007e369f4293 ss-id-suffix: base il-central-1: - - ami-id: ami-0c61f2894f5e0244b + - ami-id: ami-0dd653ece6b8e8219 ss-id-suffix: base me-central-1: - - ami-id: ami-079b05c070274bc18 + - ami-id: ami-0225af1e7b2e460e5 ss-id-suffix: base me-south-1: - - ami-id: ami-0c2ed3db7052c018f + - ami-id: ami-04ffaa9bf5c182ff2 ss-id-suffix: base sa-east-1: - - ami-id: ami-035e0d01416627008 + - ami-id: ami-027910aa765d77130 ss-id-suffix: base us-east-1: - - ami-id: ami-00f1cb0e129bb040e + - ami-id: ami-0ea1a49a8f4f31832 ss-id-suffix: base us-east-2: - - ami-id: ami-0919ab58157b7ed85 + - ami-id: ami-0f4412a999926c130 ss-id-suffix: base us-west-1: - - ami-id: ami-054f42fd684bb7451 + - ami-id: ami-0e30fb4f5acf66d4c ss-id-suffix: base us-west-2: - - ami-id: ami-06fc763747998da87 + - ami-id: ami-086730b1f427d6f3d ss-id-suffix: base us-gov-west-1: - ami-id: ami-045a012096d84fb13 @@ -1333,107 +1333,107 @@ windows2019: default-min-storage-value: 40 default-name: 'Windows 2019 - x86_64' af-south-1: - - ami-id: ami-077126c209bf70f26 + - ami-id: ami-0dbe8150fd249e626 description: Windows 2019 name: Windows 2019 ss-id-suffix: base ap-east-1: - - ami-id: ami-0f99364c8d65f2c95 + - ami-id: ami-079ee1649117aa3ac description: Windows 2019 name: Windows 2019 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-021fb1b3337008a10 + - ami-id: ami-0efbe768263af5d10 description: Windows 2019 name: Windows 2019 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-042dc043462b83eba + - ami-id: ami-0d52ee09942a6aa59 description: Windows 2019 name: Windows 2019 ss-id-suffix: base ap-south-1: - - ami-id: ami-07247b44a617713f0 + - ami-id: ami-0e4a35fed5861133f description: Windows 2019 name: Windows 2019 ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0737736fc7e746066 + - ami-id: ami-030aa2cf26fd3fcab description: Windows 2019 name: Windows 2019 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-007502ed7a90efa11 + - ami-id: ami-03b101f0b89adf2eb description: Windows 2019 name: Windows 2019 ss-id-suffix: base ca-central-1: - - ami-id: ami-08ef1058f594cdbf2 + - ami-id: ami-0ef324e4cd8d97875 description: Windows 2019 name: Windows 2019 ss-id-suffix: base eu-central-1: - - ami-id: ami-09be247d758de1166 + - ami-id: ami-0852a4ffb1d7b687f description: Windows 2019 name: Windows 2019 ss-id-suffix: base eu-north-1: - - ami-id: ami-0f5ebae3785d566bf + - ami-id: ami-05685a907dd80d96c description: Windows 2019 name: Windows 2019 ss-id-suffix: base eu-south-1: - - ami-id: ami-03905969f7f3cf7ea + - ami-id: ami-066c633f7d1799cc5 description: Windows 2019 name: Windows 2019 ss-id-suffix: base eu-west-1: - - ami-id: ami-0d868d42baefca90b + - ami-id: ami-05f66f1b481368355 description: Windows 2019 name: Windows 2019 ss-id-suffix: base eu-west-2: - - ami-id: ami-03c8cd9ad2f2d6256 + - ami-id: ami-0dfb58a0ca05ad98f description: Windows 2019 name: Windows 2019 ss-id-suffix: base eu-west-3: - - ami-id: ami-0de2019035b25727a + - ami-id: ami-0a4c1700182f3bc09 description: Windows 2019 name: Windows 2019 ss-id-suffix: base me-south-1: - - ami-id: ami-064d2408a1bb107a0 + - ami-id: ami-0a2eb057c0e9df9db description: Windows 2019 name: Windows 2019 ss-id-suffix: base sa-east-1: - - ami-id: ami-0bc602ea86ab42dec + - ami-id: ami-08a1f648be13145cb description: Windows 2019 name: Windows 2019 ss-id-suffix: base us-east-1: - - ami-id: ami-043cf96255cd85b98 + - ami-id: ami-07ef6937cf3893b6b description: Windows 2019 name: Windows 2019 ss-id-suffix: base us-east-2: - - ami-id: ami-09ec80849b5a2616f + - ami-id: ami-0e1b92804ef3c49af description: Windows 2019 name: Windows 2019 ss-id-suffix: base us-west-1: - - ami-id: ami-055384d62dfb74c12 + - ami-id: ami-05aa30cc35d4f4e78 description: Windows 2019 name: Windows 2019 ss-id-suffix: base us-west-2: - - ami-id: ami-0cd9cf04a6eef51d7 + - ami-id: ami-0948bfde6d7c1b495 description: Windows 2019 name: Windows 2019 ss-id-suffix: base us-gov-west-1: - - ami-id: ami-093fc09e1d29d04f7 + - ami-id: ami-0c98f593c9724e7e4 description: Windows 2019 name: Windows 2019 ss-id-suffix: base @@ -1446,107 +1446,107 @@ windows2022: default-min-storage-value: 40 default-name: 'Windows 2022 - x86_64' af-south-1: - - ami-id: ami-081aaf3830ee2bb32 + - ami-id: ami-0440056477823a750 description: Windows 2022 name: Windows 2022 ss-id-suffix: base ap-east-1: - - ami-id: ami-0da143127476f245f + - ami-id: ami-018436cea6e70919d description: Windows 2022 name: Windows 2022 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-00a66e3dd31fb1ca8 + - ami-id: ami-003132f484ae638fb description: Windows 2022 name: Windows 2022 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-0cdc7dd30dfdb7004 + - ami-id: ami-0539d5248d64c47b8 description: Windows 2022 name: Windows 2022 ss-id-suffix: base ap-south-1: - - ami-id: ami-02361a32f239ab309 + - ami-id: ami-0461fa01e655a4ad6 description: Windows 2022 name: Windows 2022 ss-id-suffix: base ap-southeast-1: - - ami-id: ami-035c53d5ace226b4c + - ami-id: ami-03be241adb5d86153 description: Windows 2022 name: Windows 2022 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-015845d4ba0b79c5e + - ami-id: ami-0dd05e08aa1cb22a9 description: Windows 2022 name: Windows 2022 ss-id-suffix: base ca-central-1: - - ami-id: ami-025660c72719e19ce + - ami-id: ami-0d78daeff2f737316 description: Windows 2022 name: Windows 2022 ss-id-suffix: base eu-central-1: - - ami-id: ami-01d8dcc8d094a481c + - ami-id: ami-032c954118df38cd0 description: Windows 2022 name: Windows 2022 ss-id-suffix: base eu-north-1: - - ami-id: ami-0e9c82b18effbd63e + - ami-id: ami-00da059f43ed8af30 description: Windows 2022 name: Windows 2022 ss-id-suffix: base eu-south-1: - - ami-id: ami-0d746f4a7ef048137 + - ami-id: ami-02876dfd918022bd4 description: Windows 2022 name: Windows 2022 ss-id-suffix: base eu-west-1: - - ami-id: ami-0a109132a5ba2d3f8 + - ami-id: ami-03fcec7e979752797 description: Windows 2022 name: Windows 2022 ss-id-suffix: base eu-west-2: - - ami-id: ami-057dd43215f7ef304 + - ami-id: ami-07c7ade22c224d6fe description: Windows 2022 name: Windows 2022 ss-id-suffix: base eu-west-3: - - ami-id: ami-00b0192204bb17d88 + - ami-id: ami-06c7e975fc3d5e67f description: Windows 2022 name: Windows 2022 ss-id-suffix: base me-south-1: - - ami-id: ami-016511cebb4e3a940 + - ami-id: ami-0f2a9e3a142e7bc26 description: Windows 2022 name: Windows 2022 ss-id-suffix: base sa-east-1: - - ami-id: ami-0d1b9f1a046b31485 + - ami-id: ami-083cb1c0b5e58b05d description: Windows 2022 name: Windows 2022 ss-id-suffix: base us-east-1: - - ami-id: ami-028dc1123403bd543 + - ami-id: ami-0159172a5a821bafd description: Windows 2022 name: Windows 2022 ss-id-suffix: base us-east-2: - - ami-id: ami-0ec2b487a01dc5e02 + - ami-id: ami-08f787888f20cc63c description: Windows 2022 name: Windows 2022 ss-id-suffix: base us-west-1: - - ami-id: ami-0904402d48b6ad26a + - ami-id: ami-07d1169edc703a15b description: Windows 2022 name: Windows 2022 ss-id-suffix: base us-west-2: - - ami-id: ami-01cc7b75f51e45f7e + - ami-id: ami-06c51948c651b8e45 description: Windows 2022 name: Windows 2022 ss-id-suffix: base us-gov-west-1: - - ami-id: ami-0c6c91781711bab7e + - ami-id: ami-027ab8ee2047b5aca description: Windows 2022 name: Windows 2022 ss-id-suffix: base @@ -1559,107 +1559,107 @@ windows2025: default-min-storage-value: 40 default-name: 'Windows 2025 - x86_64' af-south-1: - - ami-id: ami-06e6bfb41a99db45e + - ami-id: ami-06f014aa9ca67c9aa description: Windows 2025 name: Windows 2025 ss-id-suffix: base ap-east-1: - - ami-id: ami-0d87c5400c2efac04 + - ami-id: ami-0845e4e7252a8d101 description: Windows 2025 name: Windows 2025 ss-id-suffix: base ap-northeast-1: - - ami-id: ami-0e38d6909a7ab212f + - ami-id: ami-0b51e695d29ce106d description: Windows 2025 name: Windows 2025 ss-id-suffix: base ap-northeast-2: - - ami-id: ami-05aa2f57654146319 + - ami-id: ami-045293d19d738a663 description: Windows 2025 name: Windows 2025 ss-id-suffix: base ap-south-1: - - ami-id: ami-0ed981b8451912647 + - ami-id: ami-0ae0093476c7a1da6 description: Windows 2025 name: Windows 2025 ss-id-suffix: base ap-southeast-1: - - ami-id: ami-0d6a6fdea11ea0f9f + - ami-id: ami-0fd85f9a5f419db8a description: Windows 2025 name: Windows 2025 ss-id-suffix: base ap-southeast-2: - - ami-id: ami-059d28cc56020f335 + - ami-id: ami-06bbf8059c35349ab description: Windows 2025 name: Windows 2025 ss-id-suffix: base ca-central-1: - - ami-id: ami-0d077b72316f5e8a7 + - ami-id: ami-0560600f1d3c03b3a description: Windows 2025 name: Windows 2025 ss-id-suffix: base eu-central-1: - - ami-id: ami-0a272fb33ad892b21 + - ami-id: ami-0fc9005ac913da1f6 description: Windows 2025 name: Windows 2025 ss-id-suffix: base eu-north-1: - - ami-id: ami-021d3c39a81ecf615 + - ami-id: ami-010e40c6557403885 description: Windows 2025 name: Windows 2025 ss-id-suffix: base eu-south-1: - - ami-id: ami-0b583019c7ce1a55f + - ami-id: ami-0c4f2859a07abb28b description: Windows 2025 name: Windows 2025 ss-id-suffix: base eu-west-1: - - ami-id: ami-0a37fced109d0e4ec + - ami-id: ami-0f4dbc4289c547d4d description: Windows 2025 name: Windows 2025 ss-id-suffix: base eu-west-2: - - ami-id: ami-01fa145c5f1cb2443 + - ami-id: ami-0c7f78741f81ce0c4 description: Windows 2025 name: Windows 2025 ss-id-suffix: base eu-west-3: - - ami-id: ami-04473281f2ba44f48 + - ami-id: ami-0b6b0673ea2782973 description: Windows 2025 name: Windows 2025 ss-id-suffix: base me-south-1: - - ami-id: ami-0d0cf0b308bb561b2 + - ami-id: ami-092035c8b2ddbbbbc description: Windows 2025 name: Windows 2025 ss-id-suffix: base sa-east-1: - - ami-id: ami-0124bcc9b9c031164 + - ami-id: ami-0503d11fdab70a85b description: Windows 2025 name: Windows 2025 ss-id-suffix: base us-east-1: - - ami-id: ami-0efee5160a1079475 + - ami-id: ami-0b4bc1e90f30ca1ec description: Windows 2025 name: Windows 2025 ss-id-suffix: base us-east-2: - - ami-id: ami-05b00365623a86bd3 + - ami-id: ami-0325e1499e14d1d8f description: Windows 2025 name: Windows 2025 ss-id-suffix: base us-west-1: - - ami-id: ami-015eb52029f53ced2 + - ami-id: ami-0d2835c4b3f78d0ad description: Windows 2025 name: Windows 2025 ss-id-suffix: base us-west-2: - - ami-id: ami-04c2f6bb6267328ca + - ami-id: ami-0c70d556495b25a90 description: Windows 2025 name: Windows 2025 ss-id-suffix: base us-gov-west-1: - - ami-id: ami-000ca67f388ba5afb + - ami-id: ami-0ab818629d449c3a1 description: Windows 2025 name: Windows 2025 ss-id-suffix: base diff --git a/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller/cli/software_stacks.py b/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller/cli/software_stacks.py index bb05669c..a2128c4d 100644 --- a/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller/cli/software_stacks.py +++ b/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller/cli/software_stacks.py @@ -663,20 +663,20 @@ def get_software_stacks_index_name(context): 'windows2025/x86-64/base': 'Windows_Server-2025-English-Full-Base-2025.*', 'rhel8/arm64': 'RHEL-8.10.0_HVM-*-arm64-*', 'rhel8/x86-64': 'RHEL-8.10.0_HVM-*-x86_64-*', - 'rhel9/arm64': 'RHEL-9.5.0_HVM-*-arm64-*', - 'rhel9/x86-64': 'RHEL-9.5.0_HVM-*-x86_64-*', + 'rhel9/arm64': 'RHEL-9.6.0_HVM-*-arm64-*', + 'rhel9/x86-64': 'RHEL-9.6.0_HVM-*-x86_64-*', 'ubuntu2204/arm64': 'ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-arm64-server-*', 'ubuntu2204/x86-64': 'ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*', 'ubuntu2404/arm64': 'ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-arm64-server-*', 'ubuntu2404/x86-64': 'ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*', 'amazonlinux2/arm64': 'amzn2-ami-kernel-5.10-hvm-*-arm64-gp2', 'amazonlinux2/x86-64': 'amzn2-ami-kernel-5.10-hvm-*-x86_64-gp2', - 'amazonlinux2023/arm64': 'al2023-ami-2023.7*-kernel-6.1-arm64', - 'amazonlinux2023/x86-64': 'al2023-ami-2023.7.*-kernel-6.1-x86_64', + 'amazonlinux2023/arm64': 'al2023-ami-2023.9.*-kernel-6.12-arm64', + 'amazonlinux2023/x86-64': 'al2023-ami-2023.9.*-kernel-6.12-x86_64', 'rocky8/arm64': 'Rocky-8-EC2-Base-8.9-*.aarch64-*', 'rocky8/x86-64': 'Rocky-8-EC2-Base-8.9-*.x86_64-*', - 'rocky9/arm64': 'Rocky-9-EC2-Base-9.5-*.aarch64-*', - 'rocky9/x86-64': 'Rocky-9-EC2-Base-9.5-*.x86_64-*', + 'rocky9/arm64': 'Rocky-9-EC2-Base-9.6-*.aarch64-*', + 'rocky9/x86-64': 'Rocky-9-EC2-Base-9.6-*.x86_64-*', } diff --git a/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller_meta/__init__.py b/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller_meta/__init__.py index 7d94cf7f..a452f30a 100644 --- a/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller_meta/__init__.py +++ b/source/idea/idea-virtual-desktop-controller/src/ideavirtualdesktopcontroller_meta/__init__.py @@ -10,4 +10,4 @@ # and limitations under the License. __name__ = 'idea-virtual-desktop-controller' -__version__ = '25.09.1' +__version__ = '25.11.0'