func createCluster(context *cli.Context, rdwr config.ReadWriter, ecsClient ecsclient.ECSClient, cfnClient cloudformation.CloudformationClient, amiIds ami.ECSAmiIds) error { // Validate cli flags if !isIAMAcknowledged(context) { return fmt.Errorf("Please acknowledge that this command may create IAM resources with the '--%s' flag", capabilityIAMFlag) } ecsParams, err := config.NewCliParams(context, rdwr) if err != nil { return err } // Check if cfn stack already exists cfnClient.Initialize(ecsParams) stackName := ecsParams.GetCfnStackName() if err := cfnClient.ValidateStackExists(stackName); err == nil { return fmt.Errorf("A CloudFormation stack already exists for the cluster '%s'", ecsParams.Cluster) } // Populate cfn params cfnParams := cliFlagsToCfnStackParams(context) cfnParams.Add(cloudformation.ParameterKeyCluster, ecsParams.Cluster) // Check if key pair exists _, err = cfnParams.GetParameter(cloudformation.ParameterKeyKeyPairName) if err == cloudformation.ParameterNotFoundError { return fmt.Errorf("Please specify the keypair name with '--%s' flag", keypairNameFlag) } else if err != nil { return err } // Check if image id was supplied, else populate _, err = cfnParams.GetParameter(cloudformation.ParameterKeyAmiId) if err == cloudformation.ParameterNotFoundError { amiId, err := amiIds.Get(aws.StringValue(ecsParams.Config.Region)) if err != nil { return err } cfnParams.Add(cloudformation.ParameterKeyAmiId, amiId) } else if err != nil { return err } if err := cfnParams.Validate(); err != nil { return err } // Create ECS cluster ecsClient.Initialize(ecsParams) if _, err := ecsClient.CreateCluster(ecsParams.Cluster); err != nil { return err } // Create cfn stack template := cloudformation.GetTemplate() if _, err := cfnClient.CreateStack(template, stackName, cfnParams); err != nil { return err } logrus.Info("Waiting for your cluster resources to be created") // Wait for stack creation return cfnClient.WaitUntilCreateComplete(stackName) }
// populateContext sets the required CLI arguments to the context func (projectFactory projectFactory) populateContext(ecsContext *ecscompose.Context, cliContext *cli.Context) error { // populate CLI context populate(ecsContext, cliContext) ecsContext.CLIContext = cliContext // reads and sets the parameters (required to create ECS Service Client) from the cli context to ecs context rdwr, err := config.NewReadWriter() if err != nil { utils.LogError(err, "Error loading config") return err } params, err := config.NewCliParams(cliContext, rdwr) if err != nil { utils.LogError(err, "Unable to create an instance of ECSParams given the cli context") return err } ecsContext.ECSParams = params // populate libcompose context if err = projectFactory.populateLibcomposeContext(ecsContext); err != nil { return err } return nil }
func TestNewECSClientWithRegion(t *testing.T) { // TODO: Re-enable by making an integ test target in Makefile. t.Skip("Integ test, Re-enable Me!") globalSet := flag.NewFlagSet("ecs-cli", 0) globalContext := cli.NewContext(nil, globalSet, nil) context := cli.NewContext(nil, nil, globalContext) rdwr := &mockReadWriter{} _, err := config.NewCliParams(context, rdwr) if err == nil { t.Errorf("Expected error when region not specified") } globalSet.String("region", "us-east-1", "") globalContext = cli.NewContext(nil, globalSet, nil) context = cli.NewContext(nil, nil, globalContext) params, err := config.NewCliParams(context, rdwr) if err != nil { t.Errorf("Unexpected error creating opts: ", err) } client := NewECSClient() client.Initialize(params) // test for UserAgent realClient, ok := client.(*ecsClient).client.(*ecs.ECS) if !ok { t.Fatal("Could not cast client to ecs.ECS") } buildHandlerList := realClient.Handlers.Build request := &request.Request{ HTTPRequest: &http.Request{ Header: http.Header{}, }, } buildHandlerList.Run(request) expectedUserAgentString := fmt.Sprintf("%s %s %s/%s", version.AppName, version.Version, aws.SDKName, aws.SDKVersion) userAgent := request.HTTPRequest.Header.Get(clients.UserAgentHeader) if userAgent != expectedUserAgentString { t.Errorf("Wrong User-Agent string, expected \"%s\" but was \"%s\"", expectedUserAgentString, userAgent) } }
} } // Create cfn stack template := cloudformation.GetTemplate() if _, err := cfnClient.CreateStack(template, stackName, cfnParams); err != nil { return err } logrus.Info("Waiting for your cluster resources to be created...") // Wait for stack creation return cfnClient.WaitUntilCreateComplete(stackName) } var newCliParams = func(context *cli.Context, rdwr config.ReadWriter) (*config.CliParams, error) { return config.NewCliParams(context, rdwr) } func deleteCluster(context *cli.Context, rdwr config.ReadWriter, ecsClient ecsclient.ECSClient, cfnClient cloudformation.CloudformationClient) error { // Validate cli flags if !isForceSet(context) { return fmt.Errorf("Missing required flag '--%s'", forceFlag) // TODO prompt override for force } ecsParams, err := newCliParams(context, rdwr) if err != nil { return err } // Validate that cluster exists in ECS ecsClient.Initialize(ecsParams)