github.com/kubernetes-incubator/kube-aws@v0.16.4/cmd/render.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/kubernetes-incubator/kube-aws/core/root" 8 "github.com/kubernetes-incubator/kube-aws/credential" 9 "github.com/kubernetes-incubator/kube-aws/logger" 10 "github.com/spf13/cobra" 11 ) 12 13 var ( 14 cmdRender = &cobra.Command{ 15 Use: "render", 16 Short: "Render deployment artifacts", 17 Long: ``, 18 RunE: runCmdRender, 19 SilenceUsage: true, 20 } 21 22 cmdRenderCredentials = &cobra.Command{ 23 Use: "credentials", 24 Short: "Render credentials", 25 Long: ``, 26 RunE: runCmdRenderCredentials, 27 SilenceUsage: true, 28 } 29 30 renderCredentialsOpts = credential.GeneratorOptions{} 31 32 cmdRenderStack = &cobra.Command{ 33 Use: "stack", 34 Short: "Render CloudFormation stack template and coreos-cloudinit userdata", 35 Long: ``, 36 RunE: runCmdRenderStack, 37 SilenceUsage: true, 38 } 39 ) 40 41 func init() { 42 RootCmd.AddCommand(cmdRender) 43 44 cmdRender.AddCommand(cmdRenderCredentials) 45 cmdRender.AddCommand(cmdRenderStack) 46 47 cmdRenderCredentials.Flags().BoolVar(&renderCredentialsOpts.GenerateCA, "generate-ca", false, "if generating credentials, generate root CA key and cert. NOT RECOMMENDED FOR PRODUCTION USE- use '-ca-key-path' and '-ca-cert-path' options to provide your own certificate authority assets") 48 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.CaKeyPath, "ca-key-path", "./credentials/ca-key.pem", "path to pem-encoded CA RSA key") 49 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.CommonName, "cn", "kube-ca", "FQDN for CN in the self-generate CA certificate") 50 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.CaCertPath, "ca-cert-path", "./credentials/ca.pem", "path to pem-encoded CA x509 certificate") 51 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.AdminKeyPath, "admin-key-path", "", "path to pem-encoded CA RSA key") 52 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.ApiServerAggregatorKeyPath, "apiserver-aggregator-key-path", "", "path to pem-encoded apiserver aggregator RSA key") 53 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.ApiServerKeyPath, "apiserver-key-path", "", "path to pem-encoded apiserver RSA key") 54 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.EtcdClientKeyPath, "etcd-client-key-path", "", "path to pem-encoded etcd client RSA key") 55 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.EtcdKeyPath, "etcd-key-path", "", "path to pem-encoded etcd RSA key") 56 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.KubeControllerManagerKeyPath, "kube-controller-manager-key-path", "", "path to pem-encoded kube controller manager RSA key") 57 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.KubeSchedulerKeyPath, "kube-scheduler-key-path", "", "path to pem-encoded kube scheduler RSA key") 58 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.ServiceAccountKeyPath, "service-account-key-path", "", "path to pem-encoded service account RSA key") 59 cmdRenderCredentials.Flags().StringVar(&renderCredentialsOpts.WorkerKeyPath, "worker-key-path", "", "path to pem-encoded worker RSA key") 60 cmdRenderCredentials.Flags().BoolVar(&renderCredentialsOpts.AwsDebug, "aws-debug", false, "Log debug information from aws-sdk-go library") 61 62 } 63 64 func runCmdRender(_ *cobra.Command, args []string) error { 65 if len(args) != 0 { 66 return fmt.Errorf("render takes no arguments\n") 67 } 68 69 if err := runCmdRenderStack(cmdRenderCredentials, args); err != nil { 70 return err 71 } 72 73 if _, err := os.Stat(renderCredentialsOpts.CaKeyPath); os.IsNotExist(err) { 74 renderCredentialsOpts.GenerateCA = true 75 } 76 if err := runCmdRenderCredentials(cmdRenderCredentials, args); err != nil { 77 return err 78 } 79 80 return nil 81 } 82 83 func runCmdRenderStack(_ *cobra.Command, _ []string) error { 84 if err := root.RenderStack(configPath); err != nil { 85 return err 86 } 87 88 successMsg := 89 `Success! Stack rendered to ./stack-templates. 90 91 Next steps: 92 1. (Optional) Validate your changes to %s with "kube-aws validate" 93 2. (Optional) Further customize the cluster by modifying templates in ./stack-templates or cloud-configs in ./userdata. 94 3. Start the cluster with "kube-aws apply". 95 ` 96 97 logger.Infof(successMsg, configPath) 98 return nil 99 } 100 101 func runCmdRenderCredentials(_ *cobra.Command, _ []string) error { 102 if _, err := os.Stat(renderCredentialsOpts.CaKeyPath); os.IsNotExist(err) { 103 renderCredentialsOpts.GenerateCA = true 104 } 105 return root.RenderCredentials(configPath, renderCredentialsOpts) 106 }