Compare commits

...

1 Commits

Author SHA1 Message Date
Wilken Rivera
a2b7a516a8 builder/amazon: Update logic for session credentials
When failing back to Session credentials the build should not error if
creds were returned successfully.

* Switching to %v verb of %w in cases where error is nil.

Closes #1000
2020-09-28 12:21:08 -04:00

View File

@ -312,7 +312,7 @@ func (c *AccessConfig) GetCredentials(config *aws.Config) (*awsCredentials.Crede
sharedCredentialsFilename, err := homedir.Expand(c.CredsFilename) sharedCredentialsFilename, err := homedir.Expand(c.CredsFilename)
if err != nil { if err != nil {
return nil, fmt.Errorf("error expanding shared credentials filename: %w", err) return nil, fmt.Errorf("error expanding shared credentials filename: %v", err)
} }
// Create a credentials chain that tries to load credentials from various // Create a credentials chain that tries to load credentials from various
@ -346,14 +346,16 @@ func (c *AccessConfig) GetCredentials(config *aws.Config) (*awsCredentials.Crede
// Validate the credentials before returning them // Validate the credentials before returning them
creds := awsCredentials.NewChainCredentials(providers) creds := awsCredentials.NewChainCredentials(providers)
cp, err := creds.Get() cp, err := creds.Get()
if err != nil {
if IsAWSErr(err, "NoCredentialProviders", "") { if IsAWSErr(err, "NoCredentialProviders", "") {
creds, err = c.GetCredentialsFromSession() creds, err = c.GetCredentialsFromSession()
if err != nil { if err != nil {
return nil, err return nil, err
}
} }
return nil, fmt.Errorf("Error loading credentials for AWS Provider: %w", err) }
if err != nil {
return nil, fmt.Errorf("Error loading credentials for AWS Provider: %v", err)
} }
log.Printf("[INFO] AWS Auth provider used: %q", cp.ProviderName) log.Printf("[INFO] AWS Auth provider used: %q", cp.ProviderName)
@ -371,7 +373,7 @@ func (c *AccessConfig) GetCredentials(config *aws.Config) (*awsCredentials.Crede
assumeRoleSession, err := session.NewSession(assumeRoleAWSConfig) assumeRoleSession, err := session.NewSession(assumeRoleAWSConfig)
if err != nil { if err != nil {
return nil, fmt.Errorf("error creating assume role session: %w", err) return nil, fmt.Errorf("error creating assume role session: %v", err)
} }
stsclient := sts.New(assumeRoleSession) stsclient := sts.New(assumeRoleSession)
@ -441,7 +443,7 @@ func (c *AccessConfig) GetCredentials(config *aws.Config) (*awsCredentials.Crede
// GetCredentialsFromSession returns credentials derived from a session. A // GetCredentialsFromSession returns credentials derived from a session. A
// session uses the AWS SDK Go chain of providers so may use a provider (e.g., // session uses the AWS SDK Go chain of providers so may use a provider (e.g.,
// ProcessProvider) that is not part of the Terraform provider chain. // ProcessProvider) that is not part of the Packer provider chain.
func (c *AccessConfig) GetCredentialsFromSession() (*awsCredentials.Credentials, error) { func (c *AccessConfig) GetCredentialsFromSession() (*awsCredentials.Credentials, error) {
log.Printf("[INFO] Attempting to use session-derived credentials") log.Printf("[INFO] Attempting to use session-derived credentials")
// Avoid setting HTTPClient here as it will prevent the ec2metadata // Avoid setting HTTPClient here as it will prevent the ec2metadata
@ -460,7 +462,7 @@ func (c *AccessConfig) GetCredentialsFromSession() (*awsCredentials.Credentials,
if IsAWSErr(err, "NoCredentialProviders", "") { if IsAWSErr(err, "NoCredentialProviders", "") {
return nil, c.NewNoValidCredentialSourcesError(err) return nil, c.NewNoValidCredentialSourcesError(err)
} }
return nil, fmt.Errorf("Error creating AWS session: %w", err) return nil, fmt.Errorf("Error creating AWS session: %v", err)
} }
creds := sess.Config.Credentials creds := sess.Config.Credentials
@ -547,7 +549,7 @@ func (c *AccessConfig) NewNoValidCredentialSourcesError(err error) error {
return fmt.Errorf("No valid credential sources found for AWS Builder. "+ return fmt.Errorf("No valid credential sources found for AWS Builder. "+
"Please see https://www.packer.io/docs/builders/amazon#authentication "+ "Please see https://www.packer.io/docs/builders/amazon#authentication "+
"for more information on providing credentials for the AWS Builder. "+ "for more information on providing credentials for the AWS Builder. "+
"Error: %w", err) "Error: %v", err)
} }
func (c *AccessConfig) NewEC2Connection() (ec2iface.EC2API, error) { func (c *AccessConfig) NewEC2Connection() (ec2iface.EC2API, error) {