Skip to content

Commit

Permalink
Re-initialize dynamic client to drop CRD cache
Browse files Browse the repository at this point in the history
  • Loading branch information
kron4eg committed Mar 18, 2019
1 parent 8c59f67 commit b16bb45
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 10 deletions.
18 changes: 13 additions & 5 deletions pkg/templates/canal/canal.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ func Deploy(ctx *util.Context) error {
return errors.New("kubernetes dynamic client is not initialized")
}

var err error

// Populate Flannel network configuration
tpl, err := template.New("base").Parse(flannelNetworkConfig)
if err != nil {
Expand All @@ -77,27 +79,27 @@ func Deploy(ctx *util.Context) error {
}

buf := bytes.Buffer{}
if err := tpl.Execute(&buf, variables); err != nil {
if err = tpl.Execute(&buf, variables); err != nil {
return errors.Wrap(err, "failed to render canal config")
}

bgCtx := context.Background()
// ConfigMap
cm := configMap()
cm.Data["net-conf.json"] = buf.String()
if err := simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, cm); err != nil {
if err = simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, cm); err != nil {
return errors.Wrap(err, "failed to ensure canal ConfigMap")
}

// DaemonSet
ds := daemonSet()
if err := simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, ds); err != nil {
if err = simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, ds); err != nil {
return errors.Wrap(err, "failed to ensure canal DaemonSet")
}

// ServiceAccount
sa := serviceAccount()
if err := simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, sa); err != nil {
if err = simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, sa); err != nil {
return errors.Wrap(err, "failed to ensure canal ServiceAccount")
}

Expand All @@ -114,11 +116,17 @@ func Deploy(ctx *util.Context) error {
}

for _, crdGen := range crdGenerators {
if err := simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, crdGen()); err != nil {
if err = simpleCreateOrUpdate(bgCtx, ctx.DynamicClient, crdGen()); err != nil {
return errors.Wrap(err, "failed to ensure canal CustomResourceDefinition")
}
}

// HACK: re-init dynamic client in order to re-init RestMapper, to drop caches
err = util.HackIssue321InitDynamicClient(ctx)
if err != nil {
return errors.Wrap(err, "failed to re-init dynamic client")
}

// ClusterRoles
crGenerators := []func() *rbacv1.ClusterRole{
calicoClusterRole,
Expand Down
4 changes: 3 additions & 1 deletion pkg/templates/machinecontroller/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,9 @@ func Deploy(ctx *util.Context) error {
}
}

return nil
// HACK: re-init dynamic client in order to re-init RestMapper, to drop caches
err = util.HackIssue321InitDynamicClient(ctx)
return errors.Wrap(err, "failed to re-init dynamic client")
}

// WaitForMachineController waits for machine-controller-webhook to become running
Expand Down
16 changes: 12 additions & 4 deletions pkg/util/kubeconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,18 @@ func BuildKubernetesClientset(ctx *Context) error {
return errors.Wrap(err, "unable to build apiextension-apiserver clientset")
}

ctx.DynamicClient, err = client.New(ctx.RESTConfig, client.Options{})
if err != nil {
return errors.Wrap(err, "unable to build dynamic client")
err = HackIssue321InitDynamicClient(ctx)
return errors.Wrap(err, "unable to build dynamic client")
}

// HackIssue321InitDynamicClient initialize controller-runtime/client
// name comes from: https://github.com/kubernetes-sigs/controller-runtime/issues/321
func HackIssue321InitDynamicClient(ctx *Context) error {
if ctx.RESTConfig == nil {
return errors.New("rest config is not initialized")
}

return nil
var err error
ctx.DynamicClient, err = client.New(ctx.RESTConfig, client.Options{})
return errors.Wrap(err, "unable to build dynamic client")
}

0 comments on commit b16bb45

Please sign in to comment.