Skip to content

Add Ignition 8.3 container support#83

Closed
kevinherron wants to merge 1 commit into
mussonindustrial:mainfrom
kevinherron:codex/ignition-8.3-support-v0.5
Closed

Add Ignition 8.3 container support#83
kevinherron wants to merge 1 commit into
mussonindustrial:mainfrom
kevinherron:codex/ignition-8.3-support-v0.5

Conversation

@kevinherron

@kevinherron kevinherron commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Make Ignition 8.3.8 the default container image
  • Update built-in modules to use Ignition 8.3 fully qualified identifiers
  • Add developer-mode support for loading unsigned modules
  • Discover third-party module IDs and gateway dependencies from module.xml
  • Wait for the gateway to reach the exact RUNNING state
  • Upgrade Testcontainers to 2.0.5 for current Docker Engine compatibility
  • Set the project version to 0.5.0-SNAPSHOT

Details

withDeveloperMode() passes the required -Dignition.allowunsignedmodules=true JVM argument after the entrypoint's -- delimiter. Entrypoint arguments are composed once so developer mode, debug settings, gateway restoration, memory settings, and additional arguments can be used together.

Third-party module archives are validated and securely parsed before startup. Their module IDs and gateway-scoped dependencies are added to GATEWAY_MODULES_ENABLED, while their IDs are also added to ACCEPT_MODULE_CERTS. This allows unsigned modules and their required gateway modules to participate in automated commissioning without callers duplicating the module dependency graph.

Both singular and plural Path and String third-party-module APIs are available. Existing 0.4.3 capabilities such as explicit license acceptance, opt-in credentials, gateway backups, additional arguments, and mapped-port and URL helpers remain available.

The readiness strategy now polls /StatusPing until the response is exactly {"state":"RUNNING"}. Docker can otherwise report the container as healthy while the gateway is still in COMMISSIONING.

Compatibility notes

  • The no-argument constructor now uses Ignition 8.3.8 instead of 8.1.33.
  • GatewayModule identifiers now represent Ignition 8.3 module IDs.
  • Obsolete 8.1-only module constants have been removed.
  • Testcontainers has been upgraded from 1.21.0 to 2.0.5.

Verification

Ran the complete test suite with an actual unsigned Modbus Server Driver module:

IGNITION_TEST_UNSIGNED_MODULE=/path/to/Modbus-Server-Driver-Module-unsigned.modl ./gradlew clean build

Results:

  • testcontainers-ignition: 8 passed, 0 failed, 0 errors, 0 skipped
  • Ignition image: inductiveautomation/ignition:8.3.8
  • Unsigned module startup confirmed in developer mode
  • OPC UA discovery and connectivity confirmed
  • 0.5.0-SNAPSHOT published successfully to Maven Local

The downstream modbus-server-driver build was also verified against this snapshot:

  • Unit tests: 9 passed
  • Container-backed integration tests: 23 passed
  • Total: 32 passed, 0 failed, 0 errors, 0 skipped

Update commissioning, readiness, and module selection for Ignition 8.3.
Parse third-party module descriptors so unsigned modules and gateway
dependencies can be enabled automatically, and use Testcontainers 2
for compatibility with current Docker engines.
@kevinherron

Copy link
Copy Markdown
Contributor Author

This basically replaces support for 8.1 with 8.3 instead of trying to support both. I'm using it locally so I thought I'd throw it up here. No hurt feelings if you close it / don't want it.

@benmusson benmusson self-assigned this Jul 18, 2026
@benmusson benmusson added the enhancement New feature or request label Jul 18, 2026
@benmusson

Copy link
Copy Markdown
Contributor

Looks good, I especially like the improved health check.

For my use case, I'd like for testcontainers-ignition to support all LTS versions until their EOL date. My local build has changes to support both 8.1 and 8.3 that have never been pushed anywhere. Basically, Ignition81Container and Ignition83Container both extend a generic IgnitionContainer.

I'd like to combine the functional improvements made here (health-check, version updates, developer mode) with the versioned API from my local build.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants