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  }