Skip to content

Commit

Permalink
Set region via flag (#4)
Browse files Browse the repository at this point in the history
fixes #2
  • Loading branch information
ipmb committed Jan 26, 2021
1 parent b86fb1e commit 9fea0ac
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 35 deletions.
22 changes: 8 additions & 14 deletions .github/workflows/functional_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,13 @@ jobs:
run: go build
-
name: Account Setup
run: ./apppack account-setup --dockerhub-username $DOCKERHUB_USERNAME --dockerhub-access-token $DOCKERHUB_ACCESS_TOKEN | tee account_setup_output.txt
run: ./apppack account-setup --region us-east-1 --dockerhub-username $DOCKERHUB_USERNAME --dockerhub-access-token $DOCKERHUB_ACCESS_TOKEN | tee account_setup_output.txt
timeout-minutes: 6
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_ACCESS_TOKEN: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
-
name: Approve account
run: |
Expand All @@ -44,16 +43,16 @@ jobs:
AWS_DEFAULT_REGION: us-east-1
-
name: Create cluster
run: ./apppack create cluster --domain testclusters.apppack.io --hosted-zone-id Z05906472T84V7X7Q6UDY --instance-class t3.micro
run: ./apppack create cluster --region us-east-1 --domain testclusters.apppack.io --hosted-zone-id Z05906472T84V7X7Q6UDY --instance-class t3.micro
timeout-minutes: 8
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
-
name: Create app
run: |
./apppack create app --non-interactive \
./apppack create app --region us-east-1 \
--non-interactive \
--cluster apppack \
--repository https://github.com/apppackio/apppack-demo-python.git \
--branch main \
Expand All @@ -63,7 +62,6 @@ jobs:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
# TODO: authorize CLI
# -
# name: Deploy app
Expand All @@ -75,40 +73,36 @@ jobs:
# run: curl --fail https://app-test.testclusters.apppack.io
-
name: Destroy app
run: yes yes | ./apppack destroy app app-test
run: yes yes | ./apppack destroy app app-test --region us-east-1
if: always()
timeout-minutes: 5
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
-
name: Destroy cluster
run: yes yes | ./apppack destroy cluster apppack
run: yes yes | ./apppack destroy cluster apppack --region us-east-1
if: always()
timeout-minutes: 8
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
-
name: Destroy region
run: yes yes | ./apppack destroy region
run: yes yes | ./apppack destroy region --region us-east-1
if: always()
timeout-minutes: 3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
-
name: Destroy account
run: yes yes | ./apppack destroy account
run: yes yes | ./apppack destroy account --region us-east-1
if: always()
timeout-minutes: 3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
-
name: Disable account
if: always()
Expand Down
12 changes: 8 additions & 4 deletions cmd/access.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/cloudformation"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -75,7 +74,8 @@ var accessCmd = &cobra.Command{
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
cfnSvc := cloudformation.New(sess)
stackName := fmt.Sprintf(appStackName, AppName)
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
Expand Down Expand Up @@ -106,7 +106,8 @@ var accessAddCmd = &cobra.Command{
checkErr(fmt.Errorf("%s does not appear to be a valid email address", email))
}
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
cfnSvc := cloudformation.New(sess)
stackName := fmt.Sprintf(appStackName, AppName)
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
Expand Down Expand Up @@ -141,7 +142,8 @@ var accessRemoveCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
email := args[0]
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
cfnSvc := cloudformation.New(sess)
stackName := fmt.Sprintf(appStackName, AppName)
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
Expand Down Expand Up @@ -177,5 +179,7 @@ func init() {
accessCmd.MarkPersistentFlagRequired("app-name")

accessCmd.AddCommand(accessAddCmd)
accessAddCmd.PersistentFlags().StringVar(&region, "region", "", "AWS region of app")
accessCmd.AddCommand(accessRemoveCmd)
accessRemoveCmd.PersistentFlags().StringVar(&region, "region", "", "AWS region of app")
}
42 changes: 33 additions & 9 deletions cmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ const (

var createChangeSet bool
var nonInteractive bool
var region string

func createChangeSetAndWait(sess *session.Session, stackInput *cloudformation.CreateStackInput) (*cloudformation.DescribeChangeSetOutput, error) {
cfnSvc := cloudformation.New(sess)
Expand Down Expand Up @@ -98,6 +99,22 @@ func createStackAndWait(sess *session.Session, stackInput *cloudformation.Create
return waitForCloudformationStack(cfnSvc, *stackInput.StackName)
}

// awsSession starts a session, verifying a region has been provided
func awsSession() (*session.Session, error) {
if region != "" {
return session.NewSession(&aws.Config{Region: &region})
}
sess, err := session.NewSession()
if err != nil {
return nil, err
}
if *sess.Config.Region == "" {
return nil, fmt.Errorf("no region provided. Use the `--region` flag or set the AWS_REGION environment")
}
return sess, err

}

type stackItem struct {
PrimaryID string `json:"primary_id"`
SecondaryID string `json:"secondary_id"`
Expand Down Expand Up @@ -435,9 +452,10 @@ var accountCmd = &cobra.Command{
Long: "*Requires AWS credentials.*",
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
ssmSvc := ssm.New(sess)
_, err := ssmSvc.GetParameter(&ssm.GetParameterInput{
_, err = ssmSvc.GetParameter(&ssm.GetParameterInput{
Name: aws.String("/apppack/account"),
})

Expand Down Expand Up @@ -509,7 +527,8 @@ var createRegionCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
answers, err := askForMissingArgs(cmd, nil)
checkErr(err)
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
ssmSvc := ssm.New(sess)
if createChangeSet {
fmt.Println("Creating Cloudformation Change Set for region-level resources...")
Expand Down Expand Up @@ -590,7 +609,8 @@ var createClusterCmd = &cobra.Command{
clusterName = args[0]
}
checkErr(err)
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
_, err = stackFromDDBItem(sess, fmt.Sprintf("CLUSTER#%s", clusterName))
if err == nil {
checkErr(fmt.Errorf("cluster %s already exists", clusterName))
Expand Down Expand Up @@ -678,7 +698,8 @@ var createDatabaseCmd = &cobra.Command{
} else {
name = args[0]
}
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
answers := make(map[string]interface{})
if !nonInteractive {
questions := []*survey.Question{}
Expand All @@ -697,7 +718,7 @@ var createDatabaseCmd = &cobra.Command{
}
cluster := getArgValue(cmd, &answers, "cluster", true)
// check if a database already exists on the cluster
_, err := getDDBClusterItem(sess, cluster, "DATABASE", &name)
_, err = getDDBClusterItem(sess, cluster, "DATABASE", &name)
if err == nil {
checkErr(fmt.Errorf(fmt.Sprintf("a database named %s already exists on the cluster %s", name, *cluster)))
}
Expand Down Expand Up @@ -799,7 +820,8 @@ var createRedisCmd = &cobra.Command{
} else {
name = args[0]
}
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
answers := make(map[string]interface{})
if !nonInteractive {
questions := []*survey.Question{}
Expand All @@ -814,7 +836,7 @@ var createRedisCmd = &cobra.Command{
}
cluster := getArgValue(cmd, &answers, "cluster", true)
// check if a redis already exists on the cluster
_, err := getDDBClusterItem(sess, cluster, "REDIS", &name)
_, err = getDDBClusterItem(sess, cluster, "REDIS", &name)
if err == nil {
checkErr(fmt.Errorf(fmt.Sprintf("a Redis instance named %s already exists on the cluster %s", name, *cluster)))
}
Expand Down Expand Up @@ -968,7 +990,8 @@ var appCmd = &cobra.Command{
var databaseAddonEnabled bool
var redisAddonEnabled bool
name := args[0]
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
if !nonInteractive {
questions := []*survey.Question{}
clusterQuestion, err := makeClusterQuestion(sess, aws.String("AppPack Cluster to use for app"))
Expand Down Expand Up @@ -1213,6 +1236,7 @@ func init() {
rootCmd.AddCommand(createCmd)
createCmd.PersistentFlags().BoolVar(&createChangeSet, "check", false, "check stack in Cloudformation before creating")
createCmd.PersistentFlags().BoolVar(&nonInteractive, "non-interactive", false, "do not prompt for missing flags")
createCmd.PersistentFlags().StringVar(&region, "region", "", "AWS region to create resources in")

createCmd.AddCommand(accountCmd)
createCmd.AddCommand(createRegionCmd)
Expand Down
19 changes: 13 additions & 6 deletions cmd/destroy.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ var destroyAccountCmd = &cobra.Command{
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
ssmSvc := ssm.New(sess)
paramOutput, err := ssmSvc.GetParameter(&ssm.GetParameterInput{
Name: aws.String("/apppack/account"),
Expand Down Expand Up @@ -111,7 +112,8 @@ var destroyRegionCmd = &cobra.Command{
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
ssmSvc := ssm.New(sess)
cfnSvc := cloudformation.New(sess)
stackName := fmt.Sprintf("apppack-region-%s", *sess.Config.Region)
Expand Down Expand Up @@ -154,7 +156,8 @@ var destroyRedisCmd = &cobra.Command{
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
ssmSvc := ssm.New(sess)
cfnSvc := cloudformation.New(sess)
stackName := fmt.Sprintf(redisStackNameTmpl, args[0])
Expand Down Expand Up @@ -197,7 +200,8 @@ var destroyDatabaseCmd = &cobra.Command{
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
cfnSvc := cloudformation.New(sess)
stackName := fmt.Sprintf(databaseStackNameTmpl, args[0])
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
Expand Down Expand Up @@ -239,7 +243,8 @@ var destroyClusterCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
clusterName := args[0]
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
stackName := fmt.Sprintf("apppack-cluster-%s", clusterName)
cfnSvc := cloudformation.New(sess)
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
Expand Down Expand Up @@ -292,7 +297,8 @@ var destroyAppCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
appName := args[0]
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
stackName := fmt.Sprintf("apppack-app-%s", appName)
cfnSvc := cloudformation.New(sess)
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
Expand Down Expand Up @@ -324,6 +330,7 @@ var destroyAppCmd = &cobra.Command{

func init() {
rootCmd.AddCommand(destroyCmd)
destroyCmd.PersistentFlags().StringVar(&region, "region", "", "AWS region to destroy resources in")

destroyCmd.AddCommand(destroyAccountCmd)
destroyCmd.AddCommand(destroyRegionCmd)
Expand Down
7 changes: 5 additions & 2 deletions cmd/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ func updateStackAndWait(sess *session.Session, stackInput *cloudformation.Update

func upgradeStack(stackName string, templateURL string) error {
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
cfnSvc := cloudformation.New(sess)
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
StackName: &stackName,
Expand Down Expand Up @@ -153,7 +154,8 @@ var upgradeDatabaseCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
stackName := fmt.Sprintf("apppack-database-%s", args[0])
startSpinner()
sess := session.Must(session.NewSession())
sess, err := awsSession()
checkErr(err)
cfnSvc := cloudformation.New(sess)
stackOutput, err := cfnSvc.DescribeStacks(&cloudformation.DescribeStacksInput{
StackName: &stackName,
Expand Down Expand Up @@ -184,6 +186,7 @@ var upgradeDatabaseCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(upgradeCmd)
upgradeCmd.PersistentFlags().BoolVar(&createChangeSet, "check", false, "check stack in Cloudformation before creating")
upgradeCmd.PersistentFlags().StringVar(&region, "region", "", "AWS region to upgrade resources in")
upgradeCmd.AddCommand(upgradeClusterCmd)
upgradeCmd.AddCommand(upgradeDatabaseCmd)
upgradeCmd.AddCommand(upgradeRedisCmd)
Expand Down

0 comments on commit 9fea0ac

Please sign in to comment.