Update ctl init to support env file
This commit is contained in:
@@ -1,26 +1,13 @@
|
||||
package templates
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
types "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
|
||||
buildinfo "undecided.project/monok8s/pkg/buildinfo"
|
||||
)
|
||||
|
||||
var ValAPIServerEndPoint string = "10.0.0.10:6443"
|
||||
var ValHostname string = "monoks-master-1"
|
||||
var ValBootstrapToken string = "abcd12.ef3456789abcdef0"
|
||||
var ValDiscoveryTokenCACertHash string = "sha256:9f1c2b3a4d5e6f7890abc1234567890abcdef1234567890abcdef1234567890ab"
|
||||
|
||||
func init() {
|
||||
ValBootstrapToken = os.Getenv("HOSTNAME")
|
||||
ValBootstrapToken = os.Getenv("BOOTSTRAP_TOKEN")
|
||||
ValDiscoveryTokenCACertHash = os.Getenv("TOKEN_CACERT_HASH")
|
||||
ValAPIServerEndPoint = os.Getenv("API_SERVER_ENDPOINT")
|
||||
}
|
||||
|
||||
func DefaultMonoKSConfig() types.MonoKSConfig {
|
||||
func DefaultMonoKSConfig(v TemplateValues) types.MonoKSConfig {
|
||||
return types.MonoKSConfig{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
APIVersion: "monok8s.io/v1alpha1",
|
||||
@@ -31,66 +18,51 @@ func DefaultMonoKSConfig() types.MonoKSConfig {
|
||||
Namespace: "kube-system",
|
||||
},
|
||||
Spec: types.MonoKSConfigSpec{
|
||||
KubernetesVersion: buildinfo.Version,
|
||||
NodeName: ValHostname,
|
||||
KubernetesVersion: v.KubernetesVersion,
|
||||
NodeName: firstNonEmpty(v.NodeName, v.Hostname),
|
||||
|
||||
ClusterRole: "control-plane",
|
||||
InitControlPlane: true,
|
||||
ClusterRole: clusterRoleFromTemplateValues(v),
|
||||
InitControlPlane: initControlPlaneFromTemplateValues(v),
|
||||
|
||||
ClusterName: "monok8s",
|
||||
ClusterDomain: "cluster.local",
|
||||
ClusterName: v.ClusterName,
|
||||
ClusterDomain: v.ClusterDomain,
|
||||
|
||||
PodSubnet: "10.244.0.0/16",
|
||||
ServiceSubnet: "10.96.0.0/12",
|
||||
PodSubnet: v.PodSubnet,
|
||||
ServiceSubnet: v.ServiceSubnet,
|
||||
|
||||
APIServerAdvertiseAddress: "10.0.0.10",
|
||||
APIServerEndpoint: ValAPIServerEndPoint,
|
||||
APIServerAdvertiseAddress: v.APIServerAdvertiseAddress,
|
||||
APIServerEndpoint: v.APIServerEndpoint,
|
||||
|
||||
// Fake token and hash for placeholder purpose
|
||||
BootstrapToken: ValBootstrapToken,
|
||||
DiscoveryTokenCACertHash: ValDiscoveryTokenCACertHash,
|
||||
BootstrapToken: v.BootstrapToken,
|
||||
DiscoveryTokenCACertHash: v.DiscoveryTokenCACertHash,
|
||||
|
||||
ContainerRuntimeEndpoint: "unix:///var/run/crio/crio.sock",
|
||||
ContainerRuntimeEndpoint: v.ContainerRuntimeEndpoint,
|
||||
CNIPlugin: v.CNIPlugin,
|
||||
|
||||
CNIPlugin: "default",
|
||||
|
||||
AllowSchedulingOnControlPlane: true,
|
||||
SkipImageCheck: false,
|
||||
AllowSchedulingOnControlPlane: v.AllowSchedulingOnControlPlane,
|
||||
SkipImageCheck: v.SkipImageCheck,
|
||||
|
||||
KubeProxyNodePortAddresses: []string{
|
||||
"primary",
|
||||
},
|
||||
|
||||
SubjectAltNames: []string{
|
||||
"10.0.0.10", "localhost", ValHostname,
|
||||
},
|
||||
|
||||
NodeLabels: map[string]string{
|
||||
"monok8s.io/label": "value",
|
||||
},
|
||||
|
||||
NodeAnnotations: map[string]string{
|
||||
"monok8s.io/annotation": "value",
|
||||
},
|
||||
SubjectAltNames: copyStringSlice(v.SubjectAltNames),
|
||||
NodeLabels: copyStringMap(v.NodeLabels),
|
||||
NodeAnnotations: copyStringMap(v.NodeAnnotations),
|
||||
|
||||
Network: types.NetworkSpec{
|
||||
Hostname: "monok8s-worker-1",
|
||||
ManagementIface: "eth1",
|
||||
ManagementCIDR: "10.0.0.10/24",
|
||||
ManagementGW: "10.0.0.1",
|
||||
DNSNameservers: []string{
|
||||
"1.1.1.1",
|
||||
"8.8.8.8",
|
||||
},
|
||||
DNSSearchDomains: []string{
|
||||
"lan",
|
||||
},
|
||||
Hostname: firstNonEmpty(v.Hostname, v.NodeName),
|
||||
ManagementIface: v.MgmtIface,
|
||||
ManagementCIDR: v.MgmtAddress,
|
||||
ManagementGW: v.MgmtGateway,
|
||||
DNSNameservers: copyStringSlice(v.DNSNameservers),
|
||||
DNSSearchDomains: copyStringSlice(v.DNSSearchDomains),
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func DefaultOSUpgrade() types.OSUpgrade {
|
||||
func DefaultOSUpgrade(v TemplateValues) types.OSUpgrade {
|
||||
return types.OSUpgrade{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
APIVersion: "monok8s.io/v1alpha1",
|
||||
@@ -105,9 +77,56 @@ func DefaultOSUpgrade() types.OSUpgrade {
|
||||
ImageURL: "https://example.invalid/images/monok8s-v0.0.1.img.zst",
|
||||
TargetPartition: "B",
|
||||
NodeSelector: []string{
|
||||
ValHostname,
|
||||
firstNonEmpty(v.NodeName, v.Hostname),
|
||||
},
|
||||
Force: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func clusterRoleFromTemplateValues(v TemplateValues) string {
|
||||
switch strings.ToLower(strings.TrimSpace(v.BootstrapMode)) {
|
||||
case "init":
|
||||
return "control-plane"
|
||||
case "join":
|
||||
if strings.EqualFold(strings.TrimSpace(v.JoinKind), "control-plane") {
|
||||
return "control-plane"
|
||||
}
|
||||
return "worker"
|
||||
default:
|
||||
return "control-plane"
|
||||
}
|
||||
}
|
||||
|
||||
func initControlPlaneFromTemplateValues(v TemplateValues) bool {
|
||||
return strings.EqualFold(strings.TrimSpace(v.BootstrapMode), "init")
|
||||
}
|
||||
|
||||
func firstNonEmpty(xs ...string) string {
|
||||
for _, x := range xs {
|
||||
if strings.TrimSpace(x) != "" {
|
||||
return strings.TrimSpace(x)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func copyStringSlice(in []string) []string {
|
||||
if len(in) == 0 {
|
||||
return nil
|
||||
}
|
||||
out := make([]string, len(in))
|
||||
copy(out, in)
|
||||
return out
|
||||
}
|
||||
|
||||
func copyStringMap(in map[string]string) map[string]string {
|
||||
if len(in) == 0 {
|
||||
return nil
|
||||
}
|
||||
out := make(map[string]string, len(in))
|
||||
for k, v := range in {
|
||||
out[k] = v
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user