| package main |
| |
| import ( |
| "log" |
| "path/filepath" |
| "strings" |
| |
| "github.com/spf13/cobra" |
| |
| "code.hackerspace.pl/hscloud/cluster/clustercfg/certs" |
| "code.hackerspace.pl/hscloud/go/workspace" |
| ) |
| |
| var flagFQDNs []string |
| |
| var gencertsCmd = &cobra.Command{ |
| Use: "gencerts", |
| Short: "(re)generate keys/certs for k0 cluster", |
| Long: ` |
| If you're adding a new cluster node, run this. It will populate //cluster/secrets |
| and //cluster/certificates with new certs/keys. |
| |
| By default, the nodes to generate certificates for are automatically discovered |
| by querying the local Nix machines defined in //ops, looking for anything that |
| has hscloud.kube.controller.enabled. That can be slow and/or incorrect. To override |
| node names, set --fqdn (either comma-separate them or repeat flags). |
| `, |
| Run: func(cmd *cobra.Command, args []string) { |
| ws, err := workspace.Get() |
| if err != nil { |
| log.Fatalf("Could not figure out workspace: %v", err) |
| } |
| path := filepath.Join(ws, "cluster") |
| |
| fqdns := flagFQDNs |
| if len(fqdns) == 0 { |
| log.Printf("--fqdn not set, figuring out machines from Nix...") |
| err = workspace.EvalHscloudNix(cmd.Context(), &fqdns, "ops.exports.kubeMachineNames") |
| if err != nil { |
| log.Fatalf("Could not figure out Kubernetes machine FQDNs: %v", err) |
| } |
| } |
| |
| for _, fqdn := range fqdns { |
| parts := strings.Split(fqdn, ".") |
| if len(parts) != 3 || parts[1] != "hswaw" || parts[2] != "net" { |
| log.Fatalf("Invalid FQDN %q: must be xxx.hswaw.net.", fqdn) |
| } |
| } |
| |
| log.Printf("Machines: --fqdn %s", strings.Join(fqdns, ",")) |
| c := certs.Prepare(path, fqdns) |
| if err := c.Ensure(); err != nil { |
| log.Fatalf("Failed: %v", err) |
| } |
| log.Printf("Done.") |
| }, |
| } |
| |
| func init() { |
| gencertsCmd.Flags().StringSliceVar(&flagFQDNs, "fqdn", nil, "List of machine FQDNs to generate certs for. If not set, will be automatically figured out from Nix modules in local checkout (slow).") |
| rootCmd.AddCommand(gencertsCmd) |
| } |