kubeadm: more validation for Upgrade|ResetConfiguration
- Add unit tests for ValidateUpgrade|ResetConfiguration - Add two more validation points in ValidateUpgradeConfiguration
This commit is contained in:
		@@ -592,7 +592,7 @@ type UpgradeApplyConfiguration struct {
 | 
				
			|||||||
	// ImagePullPolicy specifies the policy for image pulling during kubeadm "upgrade apply" operations.
 | 
						// ImagePullPolicy specifies the policy for image pulling during kubeadm "upgrade apply" operations.
 | 
				
			||||||
	// The value of this field must be one of "Always", "IfNotPresent" or "Never".
 | 
						// The value of this field must be one of "Always", "IfNotPresent" or "Never".
 | 
				
			||||||
	// If this field is unset kubeadm will default it to "IfNotPresent", or pull the required images if not present on the host.
 | 
						// If this field is unset kubeadm will default it to "IfNotPresent", or pull the required images if not present on the host.
 | 
				
			||||||
	ImagePullPolicy v1.PullPolicy `json:"imagePullPolicy,omitempty"`
 | 
						ImagePullPolicy v1.PullPolicy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ImagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
 | 
						// ImagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
 | 
				
			||||||
	ImagePullSerial *bool
 | 
						ImagePullSerial *bool
 | 
				
			||||||
@@ -632,7 +632,7 @@ type UpgradeNodeConfiguration struct {
 | 
				
			|||||||
	// ImagePullPolicy specifies the policy for image pulling during kubeadm "upgrade node" operations.
 | 
						// ImagePullPolicy specifies the policy for image pulling during kubeadm "upgrade node" operations.
 | 
				
			||||||
	// The value of this field must be one of "Always", "IfNotPresent" or "Never".
 | 
						// The value of this field must be one of "Always", "IfNotPresent" or "Never".
 | 
				
			||||||
	// If this field is unset kubeadm will default it to "IfNotPresent", or pull the required images if not present on the host.
 | 
						// If this field is unset kubeadm will default it to "IfNotPresent", or pull the required images if not present on the host.
 | 
				
			||||||
	ImagePullPolicy v1.PullPolicy `json:"imagePullPolicy,omitempty"`
 | 
						ImagePullPolicy v1.PullPolicy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ImagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
 | 
						// ImagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
 | 
				
			||||||
	ImagePullSerial *bool
 | 
						ImagePullSerial *bool
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -766,11 +766,17 @@ func ValidateImagePullPolicy(policy corev1.PullPolicy, fldPath *field.Path) fiel
 | 
				
			|||||||
func ValidateUpgradeConfiguration(c *kubeadm.UpgradeConfiguration) field.ErrorList {
 | 
					func ValidateUpgradeConfiguration(c *kubeadm.UpgradeConfiguration) field.ErrorList {
 | 
				
			||||||
	allErrs := field.ErrorList{}
 | 
						allErrs := field.ErrorList{}
 | 
				
			||||||
	if c.Apply.Patches != nil {
 | 
						if c.Apply.Patches != nil {
 | 
				
			||||||
		allErrs = append(allErrs, ValidateAbsolutePath(c.Apply.Patches.Directory, field.NewPath("patches").Child("directory"))...)
 | 
							allErrs = append(allErrs, ValidateAbsolutePath(c.Apply.Patches.Directory,
 | 
				
			||||||
 | 
								field.NewPath("apply").Child("patches").Child("directory"))...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if c.Node.Patches != nil {
 | 
						if c.Node.Patches != nil {
 | 
				
			||||||
		allErrs = append(allErrs, ValidateAbsolutePath(c.Node.Patches.Directory, field.NewPath("patches").Child("directory"))...)
 | 
							allErrs = append(allErrs, ValidateAbsolutePath(c.Node.Patches.Directory,
 | 
				
			||||||
 | 
								field.NewPath("node").Child("patches").Child("directory"))...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						allErrs = append(allErrs, ValidateImagePullPolicy(c.Apply.ImagePullPolicy,
 | 
				
			||||||
 | 
							field.NewPath("apply").Child("imagePullPolicy"))...)
 | 
				
			||||||
 | 
						allErrs = append(allErrs, ValidateImagePullPolicy(c.Node.ImagePullPolicy,
 | 
				
			||||||
 | 
							field.NewPath("node").Child("imagePullPolicy"))...)
 | 
				
			||||||
	return allErrs
 | 
						return allErrs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1591,3 +1591,91 @@ func TestValidateCertValidity(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestValidateResetConfiguration(t *testing.T) {
 | 
				
			||||||
 | 
						var tests = []struct {
 | 
				
			||||||
 | 
							name           string
 | 
				
			||||||
 | 
							cfg            *kubeadmapi.ResetConfiguration
 | 
				
			||||||
 | 
							expectedErrors int
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "expect 3 errors",
 | 
				
			||||||
 | 
								cfg: &kubeadmapi.ResetConfiguration{
 | 
				
			||||||
 | 
									CRISocket:       "foo",
 | 
				
			||||||
 | 
									CertificatesDir: "bar",
 | 
				
			||||||
 | 
									UnmountFlags:    []string{"baz"},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedErrors: 3,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "expect 0 errors",
 | 
				
			||||||
 | 
								cfg: &kubeadmapi.ResetConfiguration{
 | 
				
			||||||
 | 
									CRISocket:       fmt.Sprintf("%s:///var/run/containerd/containerd.sock", kubeadmapiv1.DefaultContainerRuntimeURLScheme),
 | 
				
			||||||
 | 
									CertificatesDir: "/foo/bar", // this is work on Windows too because of the local isAbs()
 | 
				
			||||||
 | 
									UnmountFlags:    []string{kubeadmapi.UnmountFlagMNTForce},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedErrors: 0,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, tc := range tests {
 | 
				
			||||||
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
 | 
								actual := ValidateResetConfiguration(tc.cfg)
 | 
				
			||||||
 | 
								if len(actual) != tc.expectedErrors {
 | 
				
			||||||
 | 
									t.Errorf("expected errors: %d, got: %+v", tc.expectedErrors, actual)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestValidateUpgradeConfiguration(t *testing.T) {
 | 
				
			||||||
 | 
						var tests = []struct {
 | 
				
			||||||
 | 
							name           string
 | 
				
			||||||
 | 
							cfg            *kubeadmapi.UpgradeConfiguration
 | 
				
			||||||
 | 
							expectedErrors int
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "expect 4 errors",
 | 
				
			||||||
 | 
								cfg: &kubeadmapi.UpgradeConfiguration{
 | 
				
			||||||
 | 
									Apply: kubeadmapi.UpgradeApplyConfiguration{
 | 
				
			||||||
 | 
										Patches: &kubeadmapi.Patches{
 | 
				
			||||||
 | 
											Directory: "foo",
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										ImagePullPolicy: "bar",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Node: kubeadmapi.UpgradeNodeConfiguration{
 | 
				
			||||||
 | 
										Patches: &kubeadmapi.Patches{
 | 
				
			||||||
 | 
											Directory: "foo",
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										ImagePullPolicy: "bar",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedErrors: 4,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "expect 0 errors",
 | 
				
			||||||
 | 
								cfg: &kubeadmapi.UpgradeConfiguration{
 | 
				
			||||||
 | 
									Apply: kubeadmapi.UpgradeApplyConfiguration{
 | 
				
			||||||
 | 
										Patches: &kubeadmapi.Patches{
 | 
				
			||||||
 | 
											Directory: "/foo/bar",
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										ImagePullPolicy: corev1.PullAlways,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Node: kubeadmapi.UpgradeNodeConfiguration{
 | 
				
			||||||
 | 
										Patches: &kubeadmapi.Patches{
 | 
				
			||||||
 | 
											Directory: "/foo/bar",
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										ImagePullPolicy: corev1.PullAlways,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedErrors: 0,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, tc := range tests {
 | 
				
			||||||
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
 | 
								actual := ValidateUpgradeConfiguration(tc.cfg)
 | 
				
			||||||
 | 
								if len(actual) != tc.expectedErrors {
 | 
				
			||||||
 | 
									t.Errorf("expected errors: %d, got: %+v", tc.expectedErrors, actual)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user