@@ -19,6 +19,7 @@ import (
1919 "github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1"
2020 "github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster"
2121 k0sversion "github.com/k0sproject/version"
22+ embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-operator/api/v1beta1"
2223 "github.com/sirupsen/logrus"
2324 yamlv2 "gopkg.in/yaml.v2"
2425 "sigs.k8s.io/yaml"
@@ -51,23 +52,25 @@ func ReadConfigFile(cfgPath string) (*v1beta1.Cluster, error) {
5152
5253// RenderClusterConfig renders a cluster configuration interactively.
5354func RenderClusterConfig (ctx context.Context , multi bool ) (* v1beta1.Cluster , error ) {
54- embconfig , err := customization.AdminConsole {}.EmbeddedClusterConfig ()
55+ clusterConfig , err := customization.AdminConsole {}.EmbeddedClusterConfig ()
5556 if err != nil {
5657 return nil , fmt .Errorf ("unable to get embedded cluster config: %w" , err )
58+ } else if clusterConfig == nil {
59+ clusterConfig = & embeddedclusterv1beta1.Config {}
5760 }
5861 if multi {
5962 cfg , err := renderMultiNodeConfig (ctx )
6063 if err != nil {
6164 return nil , fmt .Errorf ("unable to render multi-node config: %w" , err )
6265 }
63- ApplyEmbeddedUnsupportedOverrides (cfg , embconfig )
66+ ApplyEmbeddedUnsupportedOverrides (cfg , clusterConfig . Spec . UnsupportedOverrides . K0s )
6467 return cfg , nil
6568 }
6669 cfg , err := renderSingleNodeConfig (ctx )
6770 if err != nil {
6871 return nil , fmt .Errorf ("unable to render single-node config: %w" , err )
6972 }
70- ApplyEmbeddedUnsupportedOverrides (cfg , embconfig )
73+ ApplyEmbeddedUnsupportedOverrides (cfg , clusterConfig . Spec . UnsupportedOverrides . K0s )
7174 return renderSingleNodeConfig (ctx )
7275}
7376
@@ -251,16 +254,18 @@ func renderSingleNodeConfig(ctx context.Context) (*v1beta1.Cluster, error) {
251254 if err != nil {
252255 return nil , fmt .Errorf ("unable to get preferred node IP address: %w" , err )
253256 }
257+
258+ labels := additionalControllerLabels ()
259+ labels ["kots.io/embedded-cluster-role-0" ] = getControllerRoleName ()
260+ labels ["kots.io/embedded-cluster-role" ] = "total-1"
261+
254262 host := & hostcfg {
255263 Address : ipaddr ,
256264 Role : "controller+worker" ,
257265 Port : 22 ,
258266 User : usr .Username ,
259267 KeyPath : defaults .SSHKeyPath (),
260- Labels : map [string ]string {
261- "kots.io/embedded-cluster-role-0" : "controller" ,
262- "kots.io/embedded-cluster-role" : "total-1" ,
263- },
268+ Labels : labels ,
264269 }
265270 if err := host .testConnection (); err != nil {
266271 return nil , fmt .Errorf ("unable to connect to %s: %w" , ipaddr , err )
@@ -309,32 +314,11 @@ func UpdateHelmConfigs(cfg *v1beta1.Cluster, opts ...addons.Option) error {
309314 return nil
310315}
311316
312- // UnsupportedConfigOverrides is a auxiliary struct for parsing the unsupported overrides
313- // as provided in the Kots release. XXX This should eventually become a CRD.
314- type UnsupportedConfigOverrides struct {
315- Spec struct {
316- UnsupportedOverrides struct {
317- K0s * cluster.K0s `yaml:"k0s"`
318- } `yaml:"unsupportedOverrides"`
319- } `yaml:"spec"`
320- }
321-
322317// ApplyEmbeddedUnsupportedOverrides applies the custom configuration to the cluster config.
323- func ApplyEmbeddedUnsupportedOverrides (config * v1beta1.Cluster , embconfig [] byte ) error {
324- if embconfig == nil {
318+ func ApplyEmbeddedUnsupportedOverrides (config * v1beta1.Cluster , embconfig string ) error {
319+ if embconfig == "" {
325320 return nil
326321 }
327- var overrides UnsupportedConfigOverrides
328- if err := yaml .Unmarshal (embconfig , & overrides ); err != nil {
329- return fmt .Errorf ("unable to parse cluster config overrides: %w" , err )
330- }
331- if overrides .Spec .UnsupportedOverrides .K0s == nil {
332- return nil
333- }
334- origConfigBytes , err := yaml .Marshal (overrides .Spec .UnsupportedOverrides .K0s .Config )
335- if err != nil {
336- return fmt .Errorf ("unable to marshal cluster config overrides: %w" , err )
337- }
338322 newConfigBytes , err := yaml .Marshal (config .Spec .K0s .Config )
339323 if err != nil {
340324 return fmt .Errorf ("unable to marshal original cluster config: %w" , err )
@@ -343,7 +327,7 @@ func ApplyEmbeddedUnsupportedOverrides(config *v1beta1.Cluster, embconfig []byte
343327 if err != nil {
344328 return fmt .Errorf ("unable to convert cluster config overrides to json: %w" , err )
345329 }
346- target , err := fmtconvert .YAMLToJSON (origConfigBytes )
330+ target , err := fmtconvert .YAMLToJSON ([] byte ( embconfig ) )
347331 if err != nil {
348332 return fmt .Errorf ("unable to convert original cluster config to json: %w" , err )
349333 }
@@ -362,3 +346,30 @@ func ApplyEmbeddedUnsupportedOverrides(config *v1beta1.Cluster, embconfig []byte
362346 config .Spec .K0s .Config = newK0sConfig
363347 return nil
364348}
349+
350+ func getControllerRoleName () string {
351+ clusterConfig , err := customization.AdminConsole {}.EmbeddedClusterConfig ()
352+
353+ controllerRoleName := "controller"
354+ if err == nil {
355+ if clusterConfig != nil {
356+ if clusterConfig .Spec .Controller .Name != "" {
357+ controllerRoleName = clusterConfig .Spec .Controller .Name
358+ }
359+ }
360+ }
361+ return controllerRoleName
362+ }
363+
364+ func additionalControllerLabels () map [string ]string {
365+ clusterConfig , err := customization.AdminConsole {}.EmbeddedClusterConfig ()
366+
367+ if err == nil {
368+ if clusterConfig != nil {
369+ if clusterConfig .Spec .Controller .Labels != nil {
370+ return clusterConfig .Spec .Controller .Labels
371+ }
372+ }
373+ }
374+ return map [string ]string {}
375+ }
0 commit comments