Hotfix for clusters with InstanceGroupName not defined

This commit is contained in:
Justin Santa Barbara 2016-09-13 16:59:09 -04:00
parent fb27039f84
commit 06a413bff9
3 changed files with 31 additions and 14 deletions

View File

@ -22,13 +22,11 @@ func BuildKubeletConfigSpec(cluster *Cluster, instanceGroup *InstanceGroup) (*Ku
utils.JsonMergeStruct(c, cluster.Spec.Kubelet) utils.JsonMergeStruct(c, cluster.Spec.Kubelet)
} }
if instanceGroup != nil { for k, v := range instanceGroup.Spec.NodeLabels {
for k, v := range instanceGroup.Spec.NodeLabels { if c.NodeLabels == nil {
if c.NodeLabels == nil { c.NodeLabels = make(map[string]string)
c.NodeLabels = make(map[string]string)
}
c.NodeLabels[k] = v
} }
c.NodeLabels[k] = v
} }
return c, nil return c, nil

View File

@ -21,7 +21,7 @@ const MaxAttemptsWithNoProgress = 100
type NodeUpCommand struct { type NodeUpCommand struct {
config *NodeUpConfig config *NodeUpConfig
cluster *api.Cluster cluster *api.Cluster
instancegroup *api.InstanceGroup instanceGroup *api.InstanceGroup
ConfigLocation string ConfigLocation string
ModelDir vfs.Path ModelDir vfs.Path
CacheDir string CacheDir string
@ -109,16 +109,18 @@ func (c *NodeUpCommand) Run(out io.Writer) error {
if c.config.InstanceGroupName != "" { if c.config.InstanceGroupName != "" {
instanceGroupLocation := configBase.Join("instancegroup", c.config.InstanceGroupName) instanceGroupLocation := configBase.Join("instancegroup", c.config.InstanceGroupName)
c.instancegroup = &api.InstanceGroup{} c.instanceGroup = &api.InstanceGroup{}
b, err := instanceGroupLocation.ReadFile() b, err := instanceGroupLocation.ReadFile()
if err != nil { if err != nil {
return fmt.Errorf("error loading InstanceGroup %q: %v", instanceGroupLocation, err) 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 { if err != nil {
return fmt.Errorf("error parsing InstanceGroup %q: %v", instanceGroupLocation, err) return fmt.Errorf("error parsing InstanceGroup %q: %v", instanceGroupLocation, err)
} }
} else {
glog.Warningf("No instance group defined in nodeup config")
} }
err := evaluateSpec(c.cluster) err := evaluateSpec(c.cluster)
@ -164,7 +166,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error {
loader := NewLoader(c.config, c.cluster, assets, tags) 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 { if err != nil {
return fmt.Errorf("error initializing: %v", err) return fmt.Errorf("error initializing: %v", err)
} }

View File

@ -67,11 +67,28 @@ func newTemplateFunctions(nodeupConfig *NodeUpConfig, cluster *api.Cluster, inst
return nil, fmt.Errorf("KeyStore not set") return nil, fmt.Errorf("KeyStore not set")
} }
kubeletConfigSpec, err := api.BuildKubeletConfigSpec(t.cluster, t.instanceGroup) {
if err != nil { instanceGroup := t.instanceGroup
return nil, fmt.Errorf("error building kubelet config: %v", err) 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 return t, nil
} }