Skip to content

Commit 76c6740

Browse files
authored
Merge pull request #6 from cybozu-go/add-nodeimageset-crd
Create a template for the NodeImageSet CRD
2 parents 82f6db3 + 529ec25 commit 76c6740

17 files changed

+621
-10
lines changed

PROJECT

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,12 @@ resources:
1313
kind: ImagePrefetch
1414
path: github.com/cybozu-go/ofen/api/v1
1515
version: v1
16+
- api:
17+
crdVersion: v1
18+
controller: true
19+
domain: cybozu.io
20+
group: ofen
21+
kind: NodeImageSet
22+
path: github.com/cybozu-go/ofen/api/v1
23+
version: v1
1624
version: "3"

api/v1/imageprefetch_types.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ type ImagePrefetchStatus struct {
5757
}
5858

5959
const (
60-
ConditionReady = "Ready"
61-
ConditionProgressing = "Progressing"
62-
ConditionImageDownloadFailed = "ImageDownloadFailed"
60+
ConditionReady = "Ready"
61+
ConditionProgressing = "Progressing"
62+
ConditionImagePullFailed = "ImagePullFailed"
6363
)
6464

6565
// +kubebuilder:object:root=true

api/v1/nodeimageset_types.go

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package v1
2+
3+
import (
4+
corev1 "k8s.io/api/core/v1"
5+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
6+
)
7+
8+
// NodeImageSetSpec defines the desired state of NodeImageSet
9+
type NodeImageSetSpec struct {
10+
// ImageSet is a list of image sets to be downloaded.
11+
ImageSet []ImageSet `json:"imageSet"`
12+
13+
// NodeName is the name of the node where the image is downloaded.
14+
NodeName string `json:"nodeName"`
15+
16+
// ImagePullSecrets is a list of secret names that contain credentials for authenticating with container registries
17+
// +optional
18+
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
19+
20+
// ImageDownloadRetryLimit specifies the maximum number of retry attempts for image downloads
21+
// +optional
22+
// +kubebuilder:default:=3
23+
ImageDownloadRetryLimit int32 `json:"imageDownloadRetryLimit,omitempty"`
24+
}
25+
26+
type ImageSet struct {
27+
// image is the name of the image.
28+
Image string `json:"image"`
29+
30+
// Registry Policy is the policy for downloading images from the registry.
31+
RegistryPolicy RegistryPolicy `json:"registryPolicy"`
32+
}
33+
34+
type RegistryPolicy string
35+
36+
const (
37+
// RegistryPolicyDefault download images according to containerd host configuration.
38+
// If registry mirror are configured, it attempts to download images from registry mirror first,
39+
// then falls back to upstream registry.
40+
RegistryPolicyDefault RegistryPolicy = "Default"
41+
42+
// RegistryPolicyMirrorOnly downloads images only from registry mirrors defined in the containerd host configuration.
43+
RegistryPolicyMirrorOnly RegistryPolicy = "MirrorOnly"
44+
)
45+
46+
// NodeImageSetStatus defines the observed state of NodeImageSet
47+
type NodeImageSetStatus struct {
48+
// The generation observed by the controller.
49+
// +optional
50+
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
51+
52+
// Conditions represent the latest available observations of an object's state
53+
// +listType=map
54+
// +listMapKey=type
55+
// +optional
56+
Conditions []metav1.Condition `json:"conditions,omitempty"`
57+
58+
// DesiredImages is the number of images that need to be downloaded.
59+
// +optional
60+
//+kubebuilder:default:=0
61+
DesiredImages int `json:"desiredImages,omitempty"`
62+
63+
// AvailableImages is the number of images that have completed downloading.
64+
// +optional
65+
//+kubebuilder:default:=0
66+
AvailableImages int `json:"availableImages,omitempty"`
67+
68+
// DownloadFailedImages is the number of images that failed to download.
69+
// +optional
70+
//+kubebuilder:default:=0
71+
DownloadFailedImages int `json:"downloadFailedImages,omitempty"`
72+
}
73+
74+
const (
75+
ConditionImageAvailable = "ImageAvailable"
76+
ConditionImageDownloadComplete = "ImageDownloadComplete"
77+
ConditionImageDownloadFailed = "ImageDownloadFailed"
78+
)
79+
80+
// +kubebuilder:object:root=true
81+
// +kubebuilder:subresource:status
82+
// +kubebuilder:resource:scope=Cluster
83+
84+
// NodeImageSet is the Schema for the nodeimagesets API
85+
type NodeImageSet struct {
86+
metav1.TypeMeta `json:",inline"`
87+
metav1.ObjectMeta `json:"metadata,omitempty"`
88+
89+
Spec NodeImageSetSpec `json:"spec,omitempty"`
90+
Status NodeImageSetStatus `json:"status,omitempty"`
91+
}
92+
93+
// +kubebuilder:object:root=true
94+
95+
// NodeImageSetList contains a list of NodeImageSet
96+
type NodeImageSetList struct {
97+
metav1.TypeMeta `json:",inline"`
98+
metav1.ListMeta `json:"metadata,omitempty"`
99+
Items []NodeImageSet `json:"items"`
100+
}
101+
102+
func init() {
103+
SchemeBuilder.Register(&NodeImageSet{}, &NodeImageSetList{})
104+
}

api/v1/zz_generated.deepcopy.go

Lines changed: 121 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/main.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,13 @@ func main() {
133133
setupLog.Error(err, "unable to create controller", "controller", "ImagePrefetch")
134134
os.Exit(1)
135135
}
136+
if err = (&controller.NodeImageSetReconciler{
137+
Client: mgr.GetClient(),
138+
Scheme: mgr.GetScheme(),
139+
}).SetupWithManager(mgr); err != nil {
140+
setupLog.Error(err, "unable to create controller", "controller", "NodeImageSet")
141+
os.Exit(1)
142+
}
136143
// +kubebuilder:scaffold:builder
137144

138145
if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {

0 commit comments

Comments
 (0)