github.com/kubernetes-incubator/kube-aws@v0.16.4/cmd/init.go (about) 1 package cmd 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/kubernetes-incubator/kube-aws/builtin" 8 "github.com/kubernetes-incubator/kube-aws/core/root/config" 9 "github.com/kubernetes-incubator/kube-aws/filegen" 10 "github.com/kubernetes-incubator/kube-aws/flatcar/amiregistry" 11 "github.com/kubernetes-incubator/kube-aws/logger" 12 "github.com/spf13/cobra" 13 ) 14 15 var ( 16 cmdInit = &cobra.Command{ 17 Use: "init", 18 Short: "Initialize default node pool configuration", 19 Long: ``, 20 RunE: runCmdInit, 21 SilenceUsage: true, 22 } 23 24 initOpts = config.InitialConfig{} 25 ) 26 27 const ( 28 defaultReleaseChannel = "stable" 29 ) 30 31 func init() { 32 RootCmd.AddCommand(cmdInit) 33 cmdInit.Flags().StringVar(&initOpts.S3URI, "s3-uri", "", "The URI of the S3 bucket") 34 cmdInit.Flags().StringVar(&initOpts.ClusterName, "cluster-name", "", "The name of this cluster. This will be the name of the cloudformation stack") 35 cmdInit.Flags().StringVar(&initOpts.ExternalDNSName, "external-dns-name", "", "The hostname that will route to the api server") 36 cmdInit.Flags().StringVar(&initOpts.HostedZoneID, "hosted-zone-id", "", "The hosted zone in which a Route53 record set for a k8s API endpoint is created") 37 cmdInit.Flags().StringVar(&initOpts.Region.Name, "region", "", "The AWS region to deploy to") 38 cmdInit.Flags().StringVar(&initOpts.AvailabilityZone, "availability-zone", "", "The AWS availability-zone to deploy to") 39 cmdInit.Flags().StringVar(&initOpts.KeyName, "key-name", "", "The AWS key-pair for ssh access to nodes") 40 cmdInit.Flags().StringVar(&initOpts.KMSKeyARN, "kms-key-arn", "", "The ARN of the AWS KMS key for encrypting TLS assets") 41 cmdInit.Flags().StringVar(&initOpts.AmiId, "ami-id", "", "The AMI ID of CoreOS. Last CoreOS Stable Channel selected by default if empty") 42 cmdInit.Flags().BoolVar(&initOpts.NoRecordSet, "no-record-set", false, "Instruct kube-aws to not manage Route53 record sets for your K8S API endpoints") 43 } 44 45 func runCmdInit(_ *cobra.Command, _ []string) error { 46 // Validate flags. 47 if err := validateRequired( 48 flag{"--s3-uri", initOpts.S3URI}, 49 flag{"--cluster-name", initOpts.ClusterName}, 50 flag{"--external-dns-name", initOpts.ExternalDNSName}, 51 flag{"--region", initOpts.Region.Name}, 52 flag{"--availability-zone", initOpts.AvailabilityZone}, 53 ); err != nil { 54 return err 55 } 56 57 if initOpts.AmiId == "" { 58 amiID, err := amiregistry.GetAMI(initOpts.Region.Name, defaultReleaseChannel) 59 initOpts.AmiId = amiID 60 if err != nil { 61 return fmt.Errorf("cannot retrieve CoreOS AMI for region %s, channel %s", initOpts.Region.Name, defaultReleaseChannel) 62 } 63 } 64 65 if !initOpts.NoRecordSet && initOpts.HostedZoneID == "" { 66 return errors.New("missing required flags: either --hosted-zone-id or --no-record-set is required") 67 } 68 69 if err := filegen.CreateFileFromTemplate(configPath, initOpts, builtin.Bytes("cluster.yaml.tmpl")); err != nil { 70 return fmt.Errorf("error exec-ing default config template: %v", err) 71 } 72 73 successMsg := 74 `Success! Created %s 75 76 Next steps: 77 1. (Optional) Edit %s to parameterize the cluster. 78 2. Use the "kube-aws render" command to render the CloudFormation stack template and coreos-cloudinit userdata. 79 ` 80 logger.Infof(successMsg, configPath, configPath) 81 return nil 82 }