podinfo.go 3.02 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package checkpoint

import (
	commonconsts "github.com/ai-dynamo/dynamo/deploy/operator/internal/consts"
	corev1 "k8s.io/api/core/v1"
)

func EnsurePodInfoVolume(podSpec *corev1.PodSpec) {
12
13
14
15
16
17
18
19
20
21
22
23
	for i := range podSpec.Volumes {
		if podSpec.Volumes[i].Name != commonconsts.PodInfoVolumeName {
			continue
		}
		if podSpec.Volumes[i].DownwardAPI == nil {
			podSpec.Volumes[i].VolumeSource.DownwardAPI = &corev1.DownwardAPIVolumeSource{}
		}
		// Merge required items into existing downwardAPI volume.
		source := podSpec.Volumes[i].DownwardAPI
		pathToIndex := make(map[string]int, len(source.Items))
		for j := range source.Items {
			pathToIndex[source.Items[j].Path] = j
24
		}
25
26
27
28
29
30
31
32
33
		for _, item := range podInfoItems() {
			if idx, ok := pathToIndex[item.Path]; ok {
				source.Items[idx] = item
				continue
			}
			source.Items = append(source.Items, item)
			pathToIndex[item.Path] = len(source.Items) - 1
		}
		return
34
35
36
37
38
39
	}

	podSpec.Volumes = append(podSpec.Volumes, corev1.Volume{
		Name: commonconsts.PodInfoVolumeName,
		VolumeSource: corev1.VolumeSource{
			DownwardAPI: &corev1.DownwardAPIVolumeSource{
40
				Items: podInfoItems(),
41
42
43
44
45
			},
		},
	})
}

46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
func podInfoItems() []corev1.DownwardAPIVolumeFile {
	return []corev1.DownwardAPIVolumeFile{
		{
			Path: "pod_name",
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodName,
			},
		},
		{
			Path: "pod_uid",
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodUID,
			},
		},
		{
			Path: "pod_namespace",
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodNamespace,
			},
		},
		{
			Path: commonconsts.PodInfoFileDynNamespace,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoNamespace + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynNamespaceWorkerSuffix,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoWorkerHash + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynComponent,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoComponentType + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynParentDGDName,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: "metadata.labels['" + commonconsts.KubeLabelDynamoGraphDeploymentName + "']",
			},
		},
		{
			Path: commonconsts.PodInfoFileDynParentDGDNamespace,
			FieldRef: &corev1.ObjectFieldSelector{
				FieldPath: commonconsts.PodInfoFieldPodNamespace,
			},
		},
	}
}

99
100
101
102
103
104
105
106
107
108
109
110
111
func EnsurePodInfoMount(container *corev1.Container) {
	for _, mount := range container.VolumeMounts {
		if mount.Name == commonconsts.PodInfoVolumeName {
			return
		}
	}

	container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{
		Name:      commonconsts.PodInfoVolumeName,
		MountPath: commonconsts.PodInfoMountPath,
		ReadOnly:  true,
	})
}