From 06a413bff9ba7547a39e985e33d146894b431dca Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Tue, 13 Sep 2016 16:59:09 -0400 Subject: [PATCH] Hotfix for clusters with InstanceGroupName not defined --- upup/pkg/api/kubeletconfig.go | 10 ++++------ upup/pkg/fi/nodeup/command.go | 10 ++++++---- upup/pkg/fi/nodeup/template_functions.go | 25 ++++++++++++++++++++---- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/upup/pkg/api/kubeletconfig.go b/upup/pkg/api/kubeletconfig.go index e3164bf831..eca5ee88ac 100644 --- a/upup/pkg/api/kubeletconfig.go +++ b/upup/pkg/api/kubeletconfig.go @@ -22,13 +22,11 @@ func BuildKubeletConfigSpec(cluster *Cluster, instanceGroup *InstanceGroup) (*Ku utils.JsonMergeStruct(c, cluster.Spec.Kubelet) } - if instanceGroup != nil { - for k, v := range instanceGroup.Spec.NodeLabels { - if c.NodeLabels == nil { - c.NodeLabels = make(map[string]string) - } - c.NodeLabels[k] = v + for k, v := range instanceGroup.Spec.NodeLabels { + if c.NodeLabels == nil { + c.NodeLabels = make(map[string]string) } + c.NodeLabels[k] = v } return c, nil diff --git a/upup/pkg/fi/nodeup/command.go b/upup/pkg/fi/nodeup/command.go index 5727ab36ad..2c91f3fc3d 100644 --- a/upup/pkg/fi/nodeup/command.go +++ b/upup/pkg/fi/nodeup/command.go @@ -21,7 +21,7 @@ const MaxAttemptsWithNoProgress = 100 type NodeUpCommand struct { config *NodeUpConfig cluster *api.Cluster - instancegroup *api.InstanceGroup + instanceGroup *api.InstanceGroup ConfigLocation string ModelDir vfs.Path CacheDir string @@ -109,16 +109,18 @@ func (c *NodeUpCommand) Run(out io.Writer) error { if c.config.InstanceGroupName != "" { instanceGroupLocation := configBase.Join("instancegroup", c.config.InstanceGroupName) - c.instancegroup = &api.InstanceGroup{} + c.instanceGroup = &api.InstanceGroup{} b, err := instanceGroupLocation.ReadFile() if err != nil { return fmt.Errorf("error loading InstanceGroup %q: %v", instanceGroupLocation, err) } - err = utils.YamlUnmarshal(b, c.instancegroup) + err = utils.YamlUnmarshal(b, c.instanceGroup) if err != nil { return fmt.Errorf("error parsing InstanceGroup %q: %v", instanceGroupLocation, err) } + } else { + glog.Warningf("No instance group defined in nodeup config") } err := evaluateSpec(c.cluster) @@ -164,7 +166,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error { loader := NewLoader(c.config, c.cluster, assets, tags) - tf, err := newTemplateFunctions(c.config, c.cluster, c.instancegroup, tags) + tf, err := newTemplateFunctions(c.config, c.cluster, c.instanceGroup, tags) if err != nil { return fmt.Errorf("error initializing: %v", err) } diff --git a/upup/pkg/fi/nodeup/template_functions.go b/upup/pkg/fi/nodeup/template_functions.go index 817ec8f7f7..c096b52d7b 100644 --- a/upup/pkg/fi/nodeup/template_functions.go +++ b/upup/pkg/fi/nodeup/template_functions.go @@ -67,11 +67,28 @@ func newTemplateFunctions(nodeupConfig *NodeUpConfig, cluster *api.Cluster, inst return nil, fmt.Errorf("KeyStore not set") } - kubeletConfigSpec, err := api.BuildKubeletConfigSpec(t.cluster, t.instanceGroup) - if err != nil { - return nil, fmt.Errorf("error building kubelet config: %v", err) + { + instanceGroup := t.instanceGroup + if instanceGroup == nil { + // Old clusters might not have exported instance groups + // in that case we build a synthetic instance group with the information that BuildKubeletConfigSpec needs + // TODO: Remove this once we have a stable release + glog.Warningf("Building a synthetic instance group") + instanceGroup = &api.InstanceGroup{} + instanceGroup.Name = "synthetic" + if t.IsMaster() { + instanceGroup.Spec.Role = api.InstanceGroupRoleMaster + } else { + instanceGroup.Spec.Role = api.InstanceGroupRoleNode + } + t.instanceGroup = instanceGroup + } + kubeletConfigSpec, err := api.BuildKubeletConfigSpec(cluster, instanceGroup) + if err != nil { + return nil, fmt.Errorf("error building kubelet config: %v", err) + } + t.kubeletConfig = kubeletConfigSpec } - t.kubeletConfig = kubeletConfigSpec return t, nil }