Skip to content

Commit

Permalink
Make version field optional
Browse files Browse the repository at this point in the history
The field is not required in air-gapped upgrade case.

Signed-off-by: Kiefer Chang <kiefer.chang@suse.com>
  • Loading branch information
bk201 authored and guangbochen committed Dec 16, 2021
1 parent ab07af2 commit d486bd5
Show file tree
Hide file tree
Showing 7 changed files with 8 additions and 17 deletions.
3 changes: 0 additions & 3 deletions api/openapi-spec/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -6885,9 +6885,6 @@
},
"harvesterhci.io.v1beta1.UpgradeSpec": {
"type": "object",
"required": [
"version"
],
"properties": {
"image": {
"type": "string",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ spec:
type: string
version:
type: string
required:
- version
type: object
status:
properties:
Expand Down
1 change: 0 additions & 1 deletion pkg/apis/harvesterhci.io/v1beta1/openapi_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/apis/harvesterhci.io/v1beta1/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type Upgrade struct {
}

type UpgradeSpec struct {
// +kubebuilder:validation:Required
// +optional
Version string `json:"version"`

// +optional
Expand Down
12 changes: 3 additions & 9 deletions pkg/controller/master/upgrade/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,22 +118,22 @@ func markComplete(upgrade *harvesterv1.Upgrade) {
}

func preparePlan(upgrade *harvesterv1.Upgrade) *upgradev1.Plan {
version := upgrade.Spec.Version
planVersion := upgrade.Name

// Use current running version because new images are not preloaded yet.
imageVersion := upgrade.Status.PreviousVersion
return &upgradev1.Plan{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-prepare", upgrade.Name),
Namespace: sucNamespace,
Labels: map[string]string{
harvesterVersionLabel: version,
harvesterUpgradeLabel: upgrade.Name,
harvesterUpgradeComponentLabel: nodeComponent,
},
},
Spec: upgradev1.PlanSpec{
Concurrency: int64(1),
Version: version,
Version: planVersion,
NodeSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{
harvesterManagedLabel: "true",
Expand Down Expand Up @@ -190,7 +190,6 @@ func preparePlan(upgrade *harvesterv1.Upgrade) *upgradev1.Plan {
}

func applyNodeJob(upgrade *harvesterv1.Upgrade, repoInfo *UpgradeRepoInfo, nodeName string, jobType string) *batchv1.Job {
version := upgrade.Spec.Version
// Use the image tag in the upgrade repo because it's already preloaded and might contain updated codes.
imageVersion := repoInfo.Release.Harvester
hostPathDirectory := corev1.HostPathDirectory
Expand All @@ -200,7 +199,6 @@ func applyNodeJob(upgrade *harvesterv1.Upgrade, repoInfo *UpgradeRepoInfo, nodeN
Name: fmt.Sprintf("%s-%s-%s", upgrade.Name, jobType, nodeName),
Namespace: upgrade.Namespace,
Labels: map[string]string{
harvesterVersionLabel: version,
harvesterUpgradeLabel: upgrade.Name,
harvesterUpgradeComponentLabel: nodeComponent,
harvesterNodeLabel: nodeName,
Expand All @@ -215,7 +213,6 @@ func applyNodeJob(upgrade *harvesterv1.Upgrade, repoInfo *UpgradeRepoInfo, nodeN
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
harvesterVersionLabel: version,
harvesterUpgradeLabel: upgrade.Name,
harvesterUpgradeComponentLabel: nodeComponent,
upgradeJobTypeLabel: jobType,
Expand Down Expand Up @@ -298,15 +295,13 @@ func applyNodeJob(upgrade *harvesterv1.Upgrade, repoInfo *UpgradeRepoInfo, nodeN
}

func applyManifestsJob(upgrade *harvesterv1.Upgrade, repoInfo *UpgradeRepoInfo) *batchv1.Job {
version := upgrade.Spec.Version
// Use the image tag in the upgrade repo because it's already preloaded and might contain updated codes.
imageVersion := repoInfo.Release.Harvester
return &batchv1.Job{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-apply-manifests", upgrade.Name),
Namespace: upgrade.Namespace,
Labels: map[string]string{
harvesterVersionLabel: version,
harvesterUpgradeLabel: upgrade.Name,
harvesterUpgradeComponentLabel: manifestComponent,
},
Expand All @@ -319,7 +314,6 @@ func applyManifestsJob(upgrade *harvesterv1.Upgrade, repoInfo *UpgradeRepoInfo)
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
harvesterVersionLabel: version,
harvesterUpgradeLabel: upgrade.Name,
harvesterUpgradeComponentLabel: manifestComponent,
},
Expand Down
1 change: 0 additions & 1 deletion pkg/controller/master/upgrade/upgrade_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ const (
sucNamespace = "cattle-system"
upgradeServiceAccount = "system-upgrade-controller"
harvesterSystemNamespace = "harvester-system"
harvesterVersionLabel = "harvesterhci.io/version"
harvesterUpgradeLabel = "harvesterhci.io/upgrade"
harvesterManagedLabel = "harvesterhci.io/managed"
harvesterLatestUpgradeLabel = "harvesterhci.io/latestUpgrade"
Expand Down
4 changes: 4 additions & 0 deletions pkg/webhook/resources/upgrade/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ func (v *upgradeValidator) Resource() types.Resource {
func (v *upgradeValidator) Create(request *types.Request, newObj runtime.Object) error {
newUpgrade := newObj.(*v1beta1.Upgrade)

if newUpgrade.Spec.Version == "" && newUpgrade.Spec.Image == "" {
return werror.NewBadRequest("version or image field are not specified.")
}

req, err := labels.NewRequirement(upgradeStateLabel, selection.NotIn, []string{upgrade.StateSucceeded, upgrade.StateFailed})
if err != nil {
return err
Expand Down

0 comments on commit d486bd5

Please sign in to comment.