mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-18 21:21:10 +02:00
To be used in interactive installer to output the node client configuration to a file. Signed-off-by: Artem Chernyshev <artem.0xD2@gmail.com>
121 lines
3.0 KiB
Go
121 lines
3.0 KiB
Go
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
package configuration
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
"github.com/talos-systems/talos/pkg/machinery/api/machine"
|
|
"github.com/talos-systems/talos/pkg/machinery/config"
|
|
"github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1"
|
|
"github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/generate"
|
|
v1alpha1machine "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/machine"
|
|
)
|
|
|
|
// Generate config for GenerateConfiguration grpc.
|
|
//
|
|
// nolint:gocyclo
|
|
func Generate(ctx context.Context, in *machine.GenerateConfigurationRequest) (reply *machine.GenerateConfigurationResponse, err error) {
|
|
var config config.Provider
|
|
|
|
if in.MachineConfig == nil || in.ClusterConfig == nil || in.ClusterConfig.ControlPlane == nil {
|
|
return nil, fmt.Errorf("invalid generate request")
|
|
}
|
|
|
|
switch in.ConfigVersion {
|
|
case "v1alpha1":
|
|
machineType := v1alpha1machine.Type(in.MachineConfig.Type)
|
|
|
|
options := []generate.GenOption{}
|
|
|
|
if in.MachineConfig.NetworkConfig != nil {
|
|
options = append(options, generate.WithNetworkConfig(
|
|
&v1alpha1.NetworkConfig{
|
|
NetworkHostname: in.MachineConfig.NetworkConfig.Hostname,
|
|
},
|
|
))
|
|
}
|
|
|
|
if in.MachineConfig.InstallConfig != nil {
|
|
if in.MachineConfig.InstallConfig.InstallDisk != "" {
|
|
options = append(options, generate.WithInstallDisk(in.MachineConfig.InstallConfig.InstallDisk))
|
|
}
|
|
|
|
if in.MachineConfig.InstallConfig.InstallImage != "" {
|
|
options = append(options, generate.WithInstallImage(in.MachineConfig.InstallConfig.InstallImage))
|
|
}
|
|
}
|
|
|
|
if in.ClusterConfig.ClusterNetwork != nil {
|
|
if in.ClusterConfig.ClusterNetwork.DnsDomain != "" {
|
|
options = append(options, generate.WithDNSDomain(in.ClusterConfig.ClusterNetwork.DnsDomain))
|
|
}
|
|
}
|
|
|
|
var (
|
|
input *generate.Input
|
|
cfgBytes []byte
|
|
taloscfgBytes []byte
|
|
)
|
|
|
|
input, err = generate.NewInput(
|
|
in.ClusterConfig.Name,
|
|
in.ClusterConfig.ControlPlane.Endpoint,
|
|
in.MachineConfig.KubernetesVersion,
|
|
options...,
|
|
)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
config, err = generate.Config(
|
|
machineType,
|
|
input,
|
|
)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cfgBytes, err = config.Bytes()
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
talosconfig, err := generate.Talosconfig(input, options...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
endpoint, err := url.Parse(in.ClusterConfig.ControlPlane.Endpoint)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
talosconfig.Contexts[talosconfig.Context].Endpoints = []string{
|
|
endpoint.Hostname(),
|
|
}
|
|
|
|
taloscfgBytes, err = talosconfig.Bytes()
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
reply = &machine.GenerateConfigurationResponse{
|
|
Data: [][]byte{cfgBytes},
|
|
Talosconfig: taloscfgBytes,
|
|
}
|
|
default:
|
|
return nil, fmt.Errorf("unsupported config version %s", in.ConfigVersion)
|
|
}
|
|
|
|
return reply, nil
|
|
}
|