Skip to content
This repository has been archived by the owner on Jan 9, 2023. It is now read-only.

Commit

Permalink
Adds flag to use own key pair
Browse files Browse the repository at this point in the history
  • Loading branch information
JoshVanL committed Jun 18, 2018
1 parent 726f3d7 commit 145ec60
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 20 deletions.
7 changes: 7 additions & 0 deletions cmd/tarmak/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,13 @@ func init() {
"override the current cluster set in the config",
)

RootCmd.PersistentFlags().StringVar(
&globalFlags.KeyPairName,
"key-pair",
"",
"name of an existing key pair to use",
)

if version == "dev" {
RootCmd.PersistentFlags().BoolVar(
&globalFlags.WingDevMode,
Expand Down
2 changes: 2 additions & 0 deletions pkg/apis/tarmak/v1alpha1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ type Flags struct {
Version string // expose tarmak's build time version

WingDevMode bool // use a bundled wing version rather than a tagged release from GitHub

KeyPairName string // use an existing key pair
}

// This contains the cluster specifc operation flags
Expand Down
14 changes: 12 additions & 2 deletions pkg/tarmak/cluster/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,18 @@ func (c *Cluster) validateInstancePools() (result error) {
}

// Verify cluster
func (c *Cluster) Verify() (result error) {
return c.VerifyInstancePools()
func (c *Cluster) Verify() error {
var result *multierror.Error

if err := c.VerifyInstancePools(); err != nil {
result = multierror.Append(result, err)
}

if err := c.Environment().Verify(); err != nil {
result = multierror.Append(result, err)
}

return result.ErrorOrNil()
}

// Verify instance pools
Expand Down
4 changes: 4 additions & 0 deletions pkg/tarmak/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -327,3 +327,7 @@ func (c *Config) Project() string {
func (c *Config) WingDevMode() bool {
return c.flags.WingDevMode
}

func (c *Config) KeyName() string {
return c.flags.KeyPairName
}
9 changes: 7 additions & 2 deletions pkg/tarmak/environment/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,13 @@ func (e *Environment) ValidateAdminCIDRs() (result error) {
return result
}

func (e *Environment) Verify() (result error) {
return result
func (e *Environment) Verify() error {
var result *multierror.Error
if err := e.Provider().Verify(); err != nil {
result = multierror.Append(result, err)
}

return result.ErrorOrNil()
}

func (e *Environment) WingTunnel() interfaces.Tunnel {
Expand Down
1 change: 1 addition & 0 deletions pkg/tarmak/interfaces/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ type Config interface {
Project() string
WingDevMode() bool
SetCurrentCluster(string) error
KeyName() string
}

type Packer interface {
Expand Down
26 changes: 11 additions & 15 deletions pkg/tarmak/provider/amazon/amazon.go
Original file line number Diff line number Diff line change
Expand Up @@ -317,12 +317,11 @@ func (a *Amazon) readVaultToken() (string, error) {
}

func (a *Amazon) Validate() error {
var result error
var err error
var result *multierror.Error

// These checks only make sense with an environment given
if a.tarmak.Environment() != nil {
err = a.validateRemoteStateBucket()
err := a.validateRemoteStateBucket()
if err != nil {
result = multierror.Append(result, err)
}
Expand All @@ -337,26 +336,23 @@ func (a *Amazon) Validate() error {
result = multierror.Append(result, err)
}

err = a.validateAWSKeyPair()
if err != nil {
result = multierror.Append(result, err)
}

}

err = a.validatePublicZone()
err := a.validatePublicZone()
if err != nil {
result = multierror.Append(result, err)
}

if result != nil {
return result
}
return nil

return result.ErrorOrNil()
}

func (a *Amazon) Verify() (result error) {
func (a *Amazon) Verify() error {
var result *multierror.Error

if err := a.verifyAWSKeyPair(); err != nil {
result = multierror.Append(result, err)
}

return result
}

Expand Down
37 changes: 36 additions & 1 deletion pkg/tarmak/provider/amazon/key_pair.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,42 @@ func fingerprintAWSStyle(signer interface{}) (string, error) {
}
}

func (a *Amazon) validateAWSKeyPair() error {
func (a *Amazon) getExisitingKeyPair(name string) (*ec2.KeyPairInfo, error) {
svc, err := a.EC2()
if err != nil {
return nil, err
}

keypairs, err := svc.DescribeKeyPairs(&ec2.DescribeKeyPairsInput{
KeyNames: []*string{aws.String(name)},
})
if err != nil {
return nil, fmt.Errorf("failed to get exisiting key pair: %v", err)
}

if len(keypairs.KeyPairs) == 0 {
return nil, fmt.Errorf("key pair '%s' does not exist", name)
}
if len(keypairs.KeyPairs) != 1 {
return nil, fmt.Errorf("received an unexpected number of key pairs: %d", len(keypairs.KeyPairs))
}

return keypairs.KeyPairs[0], nil
}

func (a *Amazon) verifyAWSKeyPair() error {
// if key pair has been given
if name := a.tarmak.Config().KeyName(); name != "" {
_, err := a.getExisitingKeyPair(name)
if err != nil {
return err
}

a.conf.Amazon.KeyName = name

return nil
}

svc, err := a.EC2()
if err != nil {
return err
Expand Down

0 comments on commit 145ec60

Please sign in to comment.