diff --git a/php/containers-schema.json b/php/containers-schema.json index 5bb7b6db3c2..d608895abbf 100644 --- a/php/containers-schema.json +++ b/php/containers-schema.json @@ -96,6 +96,10 @@ "pattern": "^[A-Z_]+$" } }, + "image_tag": { + "type": "string", + "pattern": "^[a-z0-9.-]+$" + }, "devices": { "type": "array", "items": { diff --git a/php/src/Container/Container.php b/php/src/Container/Container.php index a7296a65858..335fdba0465 100644 --- a/php/src/Container/Container.php +++ b/php/src/Container/Container.php @@ -33,6 +33,7 @@ class Container { private bool $readOnlyRootFs; private array $tmpfs; private bool $init; + private string $imageTag; private DockerActionManager $dockerActionManager; public function __construct( @@ -56,6 +57,7 @@ public function __construct( bool $readOnlyRootFs, array $tmpfs, bool $init, + string $imageTag, DockerActionManager $dockerActionManager ) { $this->identifier = $identifier; @@ -78,6 +80,7 @@ public function __construct( $this->readOnlyRootFs = $readOnlyRootFs; $this->tmpfs = $tmpfs; $this->init = $init; + $this->imageTag = $imageTag; $this->dockerActionManager = $dockerActionManager; } @@ -97,6 +100,10 @@ public function GetRestartPolicy() : string { return $this->restartPolicy; } + public function GetImageTag() : string { + return $this->imageTag; + } + public function GetReadOnlySetting() : bool { return $this->readOnlyRootFs; } diff --git a/php/src/ContainerDefinitionFetcher.php b/php/src/ContainerDefinitionFetcher.php index 6641aff4ec8..14cd9c252a7 100644 --- a/php/src/ContainerDefinitionFetcher.php +++ b/php/src/ContainerDefinitionFetcher.php @@ -277,6 +277,11 @@ private function GetDefinition(bool $latest): array $init = $entry['init']; } + $imageTag = ''; + if (isset($entry['image_tag'])) { + $imageTag = $entry['image_tag']; + } + $containers[] = new Container( $entry['container_name'], $displayName, @@ -298,6 +303,7 @@ private function GetDefinition(bool $latest): array $readOnlyRootFs, $tmpfs, $init, + $imageTag, $this->container->get(DockerActionManager::class) ); } diff --git a/php/src/Docker/DockerActionManager.php b/php/src/Docker/DockerActionManager.php index 6e5239ae309..3a3d9c61de2 100644 --- a/php/src/Docker/DockerActionManager.php +++ b/php/src/Docker/DockerActionManager.php @@ -48,7 +48,11 @@ private function BuildApiUrl(string $url) : string { } private function BuildImageName(Container $container) : string { - return $container->GetContainerName() . ':' . $this->GetCurrentChannel(); + $tag = $container->GetImageTag(); + if ($tag === '') { + $tag = $this->GetCurrentChannel(); + } + return $container->GetContainerName() . ':' . $tag; } public function GetContainerRunningState(Container $container) : IContainerState @@ -95,7 +99,10 @@ public function GetContainerRestartingState(Container $container) : IContainerSt public function GetContainerUpdateState(Container $container) : IContainerState { - $tag = $this->GetCurrentChannel(); + $tag = $container->GetImageTag(); + if ($tag === '') { + $tag = $this->GetCurrentChannel(); + } $runningDigests = $this->GetRepoDigestsOfContainer($container->GetIdentifier()); if ($runningDigests === null) {