pkg/userdata/input.go (70 lines of code) (raw):
package userdata
import (
"fmt"
"strings"
bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"
"sigs.k8s.io/cluster-api/util/secret"
)
// EtcdPlaneInput defines the context to generate etcd instance user data for initializing etcd cluster.
type EtcdPlaneInput struct {
BaseUserData
secret.Certificates
EtcdadmArgs
EtcdadmInitCommand string
}
// EtcdPlaneJoinInput defines context to generate etcd instance user data for etcd plane node join.
type EtcdPlaneJoinInput struct {
BaseUserData
secret.Certificates
EtcdadmArgs
EtcdadmJoinCommand string
JoinAddress string
}
// BaseUserData is shared across all the various types of files written to disk.
type BaseUserData struct {
Header string
PreEtcdadmCommands []string
PostEtcdadmCommands []string
AdditionalFiles []bootstrapv1.File
WriteFiles []bootstrapv1.File
Users []bootstrapv1.User
NTP *bootstrapv1.NTP
DiskSetup *bootstrapv1.DiskSetup
Mounts []bootstrapv1.MountPoints
ControlPlane bool
SentinelFileCommand string
Hostname string
RegistryMirrorCredentials
}
type EtcdadmArgs struct {
Version string
ImageRepository string
EtcdReleaseURL string
InstallDir string
CipherSuites string
}
type RegistryMirrorCredentials struct {
Username string
Password string
}
func (args *EtcdadmArgs) SystemdFlags() []string {
flags := make([]string, 0, 3)
flags = append(flags, "--init-system systemd")
if args.Version != "" {
flags = append(flags, fmt.Sprintf("--version %s", args.Version))
}
if args.EtcdReleaseURL != "" {
flags = append(flags, fmt.Sprintf("--release-url %s", args.EtcdReleaseURL))
}
if args.InstallDir != "" {
flags = append(flags, fmt.Sprintf("--install-dir %s", args.InstallDir))
}
if args.CipherSuites != "" {
flags = append(flags, fmt.Sprintf("--cipher-suites %s", args.CipherSuites))
}
return flags
}
func AddSystemdArgsToCommand(cmd string, args *EtcdadmArgs) string {
flags := args.SystemdFlags()
fullCommand := make([]string, len(flags)+1)
fullCommand = append(fullCommand, cmd)
fullCommand = append(fullCommand, flags...)
return strings.Join(fullCommand, " ")
}