mirror of
https://github.com/holos-run/holos.git
synced 2026-03-19 16:54:58 +00:00
This patch adds a holos create secret command that behaves like kubectl create secret, but for the specific use case of provisioning holos clusters. ``` ❯ holos create secret k2-talos --cluster-name=k2 --from-file=secrets.yaml 4:48PM INF secret.go:104 created: k2-talos-49546d9fd7 version=0.45.0 secret=k2-talos-49546d9fd7 name=k2-talos namespace=secrets ``` Once the corresponding `holos get secret` subcommands are implemented the kv subcommand may be removed.
57 lines
1.9 KiB
Go
57 lines
1.9 KiB
Go
package render
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/holos-run/holos/pkg/cli/command"
|
|
"github.com/holos-run/holos/pkg/holos"
|
|
"github.com/holos-run/holos/pkg/internal/builder"
|
|
"github.com/holos-run/holos/pkg/logger"
|
|
"github.com/holos-run/holos/pkg/wrapper"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func makeRenderRunFunc(cfg *holos.Config) command.RunFunc {
|
|
return func(cmd *cobra.Command, args []string) error {
|
|
if cfg.ClusterName() == "" {
|
|
return wrapper.Wrap(fmt.Errorf("missing cluster name"))
|
|
}
|
|
|
|
ctx := cmd.Context()
|
|
log := logger.FromContext(ctx)
|
|
build := builder.New(builder.Entrypoints(args), builder.Cluster(cfg.ClusterName()))
|
|
results, err := build.Run(cmd.Context())
|
|
if err != nil {
|
|
return wrapper.Wrap(err)
|
|
}
|
|
// TODO: Avoid accidental over-writes if to holos component instances result in
|
|
// the same file path. Write files into a blank temporary directory, error if a
|
|
// file exists, then move the directory into place.
|
|
for _, result := range results {
|
|
// API Objects
|
|
path := result.Filename(cfg.WriteTo(), cfg.ClusterName())
|
|
if err := result.Save(ctx, path, result.Content); err != nil {
|
|
return wrapper.Wrap(err)
|
|
}
|
|
// Kustomization
|
|
path = result.KustomizationFilename(cfg.WriteTo(), cfg.ClusterName())
|
|
if err := result.Save(ctx, path, result.KsContent); err != nil {
|
|
return wrapper.Wrap(err)
|
|
}
|
|
log.InfoContext(ctx, "rendered "+result.Name(), "status", "ok", "action", "rendered", "name", result.Name())
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// New returns the render subcommand for the root command
|
|
func New(cfg *holos.Config) *cobra.Command {
|
|
cmd := command.New("render [directory...]")
|
|
cmd.Args = cobra.MinimumNArgs(1)
|
|
cmd.Short = "write kubernetes api objects to the filesystem"
|
|
cmd.Flags().SortFlags = false
|
|
cmd.Flags().AddGoFlagSet(cfg.WriteFlagSet())
|
|
cmd.Flags().AddGoFlagSet(cfg.ClusterFlagSet())
|
|
cmd.RunE = makeRenderRunFunc(cfg)
|
|
return cmd
|
|
}
|