// scaleCluster executes the 'scale' command. func scaleCluster(context *cli.Context, rdwr config.ReadWriter, ecsClient ecsclient.ECSClient, cfnClient cloudformation.CloudformationClient) error { // Validate cli flags if !isIAMAcknowledged(context) { return fmt.Errorf("Please acknowledge that this command may create IAM resources with the '--%s' flag", capabilityIAMFlag) } size, err := getClusterSize(context) if err != nil { return err } if size == "" { return fmt.Errorf("Missing required flag '--%s'", asgMaxSizeFlag) } ecsParams, err := newCliParams(context, rdwr) if err != nil { return err } // Validate that cluster exists in ECS ecsClient.Initialize(ecsParams) if err := validateCluster(ecsParams.Cluster, ecsClient); err != nil { return err } // Validate that we have a cfn stack for the cluster cfnClient.Initialize(ecsParams) stackName := ecsParams.GetCfnStackName() if err := cfnClient.ValidateStackExists(stackName); err != nil { return fmt.Errorf("CloudFormation stack not found for cluster '%s'", ecsParams.Cluster) } // Populate update params for the cfn stack cfnParams := cloudformation.NewCfnStackParamsForUpdate() cfnParams.Add(cloudformation.ParameterKeyAsgMaxSize, size) // Update the stack. if _, err := cfnClient.UpdateStack(stackName, cfnParams); err != nil { return err } logrus.Info("Waiting for your cluster resources to be updated...") return cfnClient.WaitUntilUpdateComplete(stackName) }