@@ -26,8 +26,8 @@ import (
2626 core "k8s.io/api/core/v1"
2727
2828 schedulerContainerResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container/resources"
29- shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
3029 "github.com/arangodb/kube-arangodb/pkg/util/errors"
30+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/container"
3131)
3232
3333const (
@@ -44,23 +44,53 @@ func ConvertImageID2Image(imageID string) string {
4444}
4545
4646// GetArangoDBImageIDFromPod returns the ArangoDB specific image from a pod
47- func GetArangoDBImageIDFromPod (pod * core.Pod ) (string , error ) {
47+ func GetArangoDBImageIDFromPod (pod * core.Pod , names ... string ) (string , error ) {
4848 if pod == nil {
4949 return "" , errors .New ("failed to get container statuses from nil pod" )
5050 }
5151
52- if len (pod .Status .ContainerStatuses ) == 0 {
53- return "" , errors .New ("empty list of ContainerStatuses" )
52+ // First try to find container by name
53+ if image , ok := GetArangoDBImageIDFromContainerStatuses (pod .Status .ContainerStatuses , names ... ); ok {
54+ return image , nil
5455 }
56+ if image , ok := GetArangoDBImageIDFromContainers (pod .Spec .Containers , names ... ); ok {
57+ return image , nil
58+ }
59+
60+ if cs := pod .Status .ContainerStatuses ; len (cs ) > 0 {
61+ if image := cs [0 ].ImageID ; image != "" {
62+ return ConvertImageID2Image (image ), nil
63+ }
64+ }
65+ if cs := pod .Spec .Containers ; len (cs ) > 0 {
66+ if image := cs [0 ].Image ; image != "" {
67+ return image , nil
68+ }
69+ }
70+
71+ return "" , errors .Errorf ("Unable to find image from pod" )
72+ }
73+
74+ // GetArangoDBImageIDFromContainerStatuses returns the ArangoDB specific image from a container statuses
75+ func GetArangoDBImageIDFromContainerStatuses (containers []core.ContainerStatus , names ... string ) (string , bool ) {
76+ for _ , name := range names {
77+ if id := container .GetContainerStatusIDByName (containers , name ); id != - 1 {
78+ return ConvertImageID2Image (containers [id ].ImageID ), true
79+ }
80+ }
81+
82+ return "" , false
83+ }
5584
56- for _ , cs := range pod .Status .ContainerStatuses {
57- if cs .Name == shared .ServerContainerName {
58- return ConvertImageID2Image (cs .ImageID ), nil
85+ // GetArangoDBImageIDFromContainers returns the ArangoDB specific image from a container specs
86+ func GetArangoDBImageIDFromContainers (containers []core.Container , names ... string ) (string , bool ) {
87+ for _ , name := range names {
88+ if id := container .GetContainerIDByName (containers , name ); id != - 1 {
89+ return containers [id ].Image , true
5990 }
6091 }
6192
62- // If Server container is not found use first container
63- return ConvertImageID2Image (pod .Status .ContainerStatuses [0 ].ImageID ), nil
93+ return "" , false
6494}
6595
6696// GetImageDetails Returns latest defined Image details
0 commit comments