| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package commands
- import (
- "fmt"
- "os"
- "github.com/aws/aws-sdk-go/aws/awserr"
- "github.com/aws/aws-sdk-go/aws/credentials"
- "github.com/docker/cli/cli-plugins/plugin"
- contextStore "github.com/docker/ecs-plugin/pkg/docker"
- "github.com/spf13/cobra"
- "gopkg.in/ini.v1"
- )
- func SetupCommand() *cobra.Command {
- var opts contextStore.AwsContext
- var name string
- var accessKeyID string
- var secretAccessKey string
- cmd := &cobra.Command{
- Use: "setup",
- Short: "",
- PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
- //Override the root command PersistentPreRun
- //We just need to initialize the top parent command
- return plugin.PersistentPreRunE(cmd, args)
- },
- RunE: func(cmd *cobra.Command, args []string) error {
- if accessKeyID != "" && secretAccessKey != "" {
- if err := saveCredentials(opts.Profile, accessKeyID, secretAccessKey); err != nil {
- return err
- }
- }
- return contextStore.NewContext(name, &opts)
- },
- }
- cmd.Flags().StringVarP(&name, "name", "n", "aws", "Context Name")
- cmd.Flags().StringVarP(&opts.Profile, "profile", "p", "", "AWS Profile")
- cmd.Flags().StringVarP(&opts.Cluster, "cluster", "c", "", "ECS cluster")
- cmd.Flags().StringVarP(&opts.Region, "region", "r", "", "AWS region")
- cmd.Flags().StringVarP(&accessKeyID, "aws-key-id", "k", "", "AWS Access Key ID")
- cmd.Flags().StringVarP(&secretAccessKey, "aws-secret-key", "s", "", "AWS Secret Access Key")
- cmd.MarkFlagRequired("profile")
- cmd.MarkFlagRequired("cluster")
- cmd.MarkFlagRequired("region")
- return cmd
- }
- func saveCredentials(profile string, accessKeyID string, secretAccessKey string) error {
- p := credentials.SharedCredentialsProvider{Profile: profile}
- _, err := p.Retrieve()
- if err == nil {
- fmt.Println("credentials already exists!")
- return nil
- }
- if err.(awserr.Error).Code() == "SharedCredsLoad" {
- os.Create(p.Filename)
- }
- credIni, err := ini.Load(p.Filename)
- if err != nil {
- return err
- }
- section := credIni.Section(profile)
- section.Key("aws_access_key_id").SetValue(accessKeyID)
- section.Key("aws_secret_access_key").SetValue(secretAccessKey)
- credFile, err := os.OpenFile(p.Filename, os.O_WRONLY, 0600)
- if err != nil {
- return err
- }
- if _, err = credIni.WriteTo(credFile); err != nil {
- return err
- }
- return credFile.Close()
- }
|