mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-19 13:41:13 +02:00
In order to perform upgrades the way we would like, it is important that we avoid any bind mounts into containers. This change ensures that all system services get their config via stdin. Signed-off-by: Andrew Rynhard <andrew@rynhard.io>
123 lines
2.8 KiB
Go
123 lines
2.8 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 main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/kubernetes-sigs/bootkube/pkg/bootkube"
|
|
"github.com/kubernetes-sigs/bootkube/pkg/util"
|
|
|
|
"github.com/talos-systems/talos/pkg/machinery/config/configloader"
|
|
"github.com/talos-systems/talos/pkg/machinery/constants"
|
|
)
|
|
|
|
var (
|
|
strict *bool
|
|
recover *bool
|
|
recoverSource *string
|
|
)
|
|
|
|
func init() {
|
|
log.SetFlags(log.Lshortfile | log.Ldate | log.Lmicroseconds | log.Ltime)
|
|
|
|
strict = flag.Bool("strict", true, "require all manifests to cleanly apply")
|
|
recover = flag.Bool("recover", false, "run recovery instead of generate")
|
|
recoverSource = flag.String("recover-source", "ETCD", "recovery source to use")
|
|
|
|
flag.Parse()
|
|
}
|
|
|
|
func run() error {
|
|
if err := os.MkdirAll(constants.ManifestsDirectory, 0o644); err != nil {
|
|
return err
|
|
}
|
|
|
|
defaultRequiredPods := []string{
|
|
"kube-system/pod-checkpointer",
|
|
"kube-system/kube-apiserver",
|
|
"kube-system/kube-scheduler",
|
|
"kube-system/kube-controller-manager",
|
|
}
|
|
|
|
cfg := bootkube.Config{
|
|
AssetDir: constants.AssetsDirectory,
|
|
PodManifestPath: constants.ManifestsDirectory,
|
|
Strict: *strict,
|
|
RequiredPods: defaultRequiredPods,
|
|
}
|
|
|
|
bk, err := bootkube.NewBootkube(cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
failed := true
|
|
|
|
defer func() {
|
|
// We want to cleanup the manifests directory only if bootkube fails.
|
|
if failed {
|
|
if err = os.RemoveAll(constants.ManifestsDirectory); err != nil {
|
|
log.Printf("failed to cleanup manifests dir %s", constants.ManifestsDirectory)
|
|
}
|
|
}
|
|
|
|
if err = os.RemoveAll(constants.AssetsDirectory); err != nil {
|
|
log.Printf("failed to cleanup bootkube assets dir %s", constants.AssetsDirectory)
|
|
}
|
|
|
|
bootstrapWildcard := filepath.Join(constants.ManifestsDirectory, "bootstrap-*")
|
|
|
|
var bootstrapFiles []string
|
|
|
|
bootstrapFiles, err = filepath.Glob(bootstrapWildcard)
|
|
if err != nil {
|
|
log.Printf("error finding bootstrap files in manifests dir %s", constants.ManifestsDirectory)
|
|
}
|
|
|
|
for _, bootstrapFile := range bootstrapFiles {
|
|
if err = os.Remove(bootstrapFile); err != nil {
|
|
log.Printf("error deleting bootstrap file in manifests dir : %s", err)
|
|
}
|
|
}
|
|
}()
|
|
|
|
if err = bk.Run(); err != nil {
|
|
return err
|
|
}
|
|
|
|
failed = false
|
|
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
util.InitLogs()
|
|
|
|
defer util.FlushLogs()
|
|
|
|
config, err := configloader.NewFromStdin()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if *recover {
|
|
if err := recoverAssets(config); err != nil {
|
|
log.Fatalf("error recovering assets: %s", err)
|
|
}
|
|
} else {
|
|
if err := generateAssets(config); err != nil {
|
|
log.Fatalf("error generating assets: %s", err)
|
|
}
|
|
}
|
|
|
|
if err := run(); err != nil {
|
|
log.Fatalf("bootkube failed: %s", err)
|
|
}
|
|
}
|