mirror of
https://github.com/rancher/rke.git
synced 2025-09-19 18:30:38 +00:00
Merge pull request #3033 from kinarashah/addon
This commit is contained in:
@@ -186,18 +186,7 @@ func (c *Cluster) deployK8sAddOns(ctx context.Context, data map[string]interface
|
|||||||
func (c *Cluster) deployUserAddOns(ctx context.Context) error {
|
func (c *Cluster) deployUserAddOns(ctx context.Context) error {
|
||||||
log.Infof(ctx, "[addons] Setting up user addons")
|
log.Infof(ctx, "[addons] Setting up user addons")
|
||||||
if c.Addons != "" {
|
if c.Addons != "" {
|
||||||
addonJobExists, err := addons.AddonJobExists(UserAddonJobName, c.LocalKubeConfigPath, c.K8sWrapTransport)
|
// deletes existing job if resource name is rke-user-addon and redeploy user addons
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if addonJobExists {
|
|
||||||
log.Infof(ctx, "[addons] Removing old user addons")
|
|
||||||
if err := c.doAddonDelete(ctx, UserAddonResourceName, false); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Infof(ctx, "[addons] Old user addons removed successfully")
|
|
||||||
}
|
|
||||||
if err := c.doAddonDeploy(ctx, c.Addons, UserAddonResourceName, false); err != nil {
|
if err := c.doAddonDeploy(ctx, c.Addons, UserAddonResourceName, false); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -216,6 +205,7 @@ func (c *Cluster) deployUserAddOns(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(c.AddonsInclude) > 0 {
|
if len(c.AddonsInclude) > 0 {
|
||||||
|
// deletes existing job if resource name is rke-user-includes-addons and redeploy user addons
|
||||||
if err := c.deployAddonsInclude(ctx); err != nil {
|
if err := c.deployAddonsInclude(ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -512,7 +502,7 @@ func (c *Cluster) doAddonDeploy(ctx context.Context, addonYaml, resourceName str
|
|||||||
return &addonError{fmt.Sprintf("Failed to generate addon execute job: %v", err), isCritical}
|
return &addonError{fmt.Sprintf("Failed to generate addon execute job: %v", err), isCritical}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = c.ApplySystemAddonExecuteJob(addonJob, addonUpdated); err != nil {
|
if err = c.ApplySystemAddonExecuteJob(addonJob, resourceName, addonUpdated); err != nil {
|
||||||
return &addonError{fmt.Sprintf("%v", err), isCritical}
|
return &addonError{fmt.Sprintf("%v", err), isCritical}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -531,7 +521,7 @@ func (c *Cluster) doAddonDelete(ctx context.Context, resourceName string, isCrit
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &addonError{fmt.Sprintf("Failed to generate addon delete job: %v", err), isCritical}
|
return &addonError{fmt.Sprintf("Failed to generate addon delete job: %v", err), isCritical}
|
||||||
}
|
}
|
||||||
if err := k8s.ApplyK8sSystemJob(deleteJob, c.LocalKubeConfigPath, c.K8sWrapTransport, c.AddonJobTimeout*2, false); err != nil {
|
if err := k8s.ApplyK8sSystemJob(deleteJob, c.LocalKubeConfigPath, c.K8sWrapTransport, c.AddonJobTimeout*2, resourceName, false); err != nil {
|
||||||
return &addonError{fmt.Sprintf("%v", err), isCritical}
|
return &addonError{fmt.Sprintf("%v", err), isCritical}
|
||||||
}
|
}
|
||||||
// At this point, the addon should be deleted. We need to clean up by deleting the deploy and delete jobs.
|
// At this point, the addon should be deleted. We need to clean up by deleting the deploy and delete jobs.
|
||||||
@@ -575,8 +565,8 @@ func (c *Cluster) StoreAddonConfigMap(ctx context.Context, addonYaml string, add
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) ApplySystemAddonExecuteJob(addonJob string, addonUpdated bool) error {
|
func (c *Cluster) ApplySystemAddonExecuteJob(addonJob, resourceName string, addonUpdated bool) error {
|
||||||
return k8s.ApplyK8sSystemJob(addonJob, c.LocalKubeConfigPath, c.K8sWrapTransport, c.AddonJobTimeout, addonUpdated)
|
return k8s.ApplyK8sSystemJob(addonJob, c.LocalKubeConfigPath, c.K8sWrapTransport, c.AddonJobTimeout, resourceName, addonUpdated)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{}) error {
|
func (c *Cluster) deployIngress(ctx context.Context, data map[string]interface{}) error {
|
||||||
|
16
k8s/job.go
16
k8s/job.go
@@ -13,13 +13,18 @@ import (
|
|||||||
"k8s.io/client-go/transport"
|
"k8s.io/client-go/transport"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
UserAddonResourceName = "rke-user-addon"
|
||||||
|
UserAddonsIncludeResourceName = "rke-user-includes-addons"
|
||||||
|
)
|
||||||
|
|
||||||
type JobStatus struct {
|
type JobStatus struct {
|
||||||
Completed bool
|
Completed bool
|
||||||
Created bool
|
Created bool
|
||||||
Removing bool
|
Removing bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func ApplyK8sSystemJob(jobYaml, kubeConfigPath string, k8sWrapTransport transport.WrapperFunc, timeout int, addonUpdated bool) error {
|
func ApplyK8sSystemJob(jobYaml, kubeConfigPath string, k8sWrapTransport transport.WrapperFunc, timeout int, resourceName string, addonUpdated bool) error {
|
||||||
job := v1.Job{}
|
job := v1.Job{}
|
||||||
if err := DecodeYamlResource(&job, jobYaml); err != nil {
|
if err := DecodeYamlResource(&job, jobYaml); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -49,10 +54,11 @@ func ApplyK8sSystemJob(jobYaml, kubeConfigPath string, k8sWrapTransport transpor
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the addon configMap is updated, or the previous job is not completed,
|
// remove the existing job if addon config has changed or the job isn't completed
|
||||||
// I will remove the existing job first, if any
|
// always remove the existing job for user addons to rerun kubectl apply for user addons
|
||||||
if addonUpdated || (jobStatus.Created && !jobStatus.Completed) {
|
if addonUpdated || (jobStatus.Created && !jobStatus.Completed) ||
|
||||||
logrus.Debugf("[k8s] replacing job %s.. ", job.Name)
|
resourceName == UserAddonResourceName || resourceName == UserAddonsIncludeResourceName {
|
||||||
|
logrus.Debugf("[k8s] replacing job %s for %s", job.Name, resourceName)
|
||||||
if err := DeleteK8sSystemJob(jobYaml, k8sClient, timeout); err != nil {
|
if err := DeleteK8sSystemJob(jobYaml, k8sClient, timeout); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user