@@ -26,8 +26,8 @@ import (
26
26
core "k8s.io/api/core/v1"
27
27
28
28
schedulerContainerResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container/resources"
29
- shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
30
29
"github.com/arangodb/kube-arangodb/pkg/util/errors"
30
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/container"
31
31
)
32
32
33
33
const (
@@ -44,23 +44,53 @@ func ConvertImageID2Image(imageID string) string {
44
44
}
45
45
46
46
// 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 ) {
48
48
if pod == nil {
49
49
return "" , errors .New ("failed to get container statuses from nil pod" )
50
50
}
51
51
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
54
55
}
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
+ }
55
84
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
59
90
}
60
91
}
61
92
62
- // If Server container is not found use first container
63
- return ConvertImageID2Image (pod .Status .ContainerStatuses [0 ].ImageID ), nil
93
+ return "" , false
64
94
}
65
95
66
96
// GetImageDetails Returns latest defined Image details
0 commit comments