Skip to content
This repository has been archived by the owner on Feb 11, 2022. It is now read-only.

config.rb:574:in read_aws_files': undefined method []' #521

Open
iam-decoder opened this issue Aug 17, 2017 · 4 comments
Open

config.rb:574:in read_aws_files': undefined method []' #521

iam-decoder opened this issue Aug 17, 2017 · 4 comments

Comments

@iam-decoder
Copy link

looks like the problem is when using aws_profile in the Vagrantfile. when setting up aws configure, mine did not come out as profile nonprod but rather just nonprod so I'm forced to put my Access Key & Access Key ID instead which I can't do for security reasons.

rather than making new aws configs just so this plugin works, I think this section should be changed

# determine section in config ini file
if profile == 'default'
  ini_profile = profile
else
  ini_profile = 'profile ' + profile
end
# get info from config ini file for selected profile
data = File.read(aws_config)
doc_cfg = IniParse.parse(data)

possibly to:

# get info from config ini file for selected profile
data = File.read(aws_config)
doc_cfg = IniParse.parse(data)

# determine section in config ini file
if profile == 'default'  || !doc_cfg[profile].nil?
  ini_profile = profile
else
  ini_profile = 'profile ' + profile
end

OR

# determine section in config ini file
if profile == 'default'
  ini_profile = profile
else
  ini_profile = 'profile ' + profile
end
# get info from config ini file for selected profile
data = File.read(aws_config)
doc_cfg = IniParse.parse(data)
aws_region = doc_cfg[ini_profile]['region']

# determine section in credentials ini file
ini_profile = profile
# get info from credentials ini file for selected profile
data = File.read(aws_creds)
doc_cfg = IniParse.parse(data)
aws_id = doc_cfg[ini_profile]['aws_access_key_id']
aws_secret = doc_cfg[ini_profile]['aws_secret_access_key']
aws_token = doc_cfg[ini_profile]['aws_session_token']

to:

# determine section in credentials ini file
ini_profile = profile
# get info from credentials ini file for selected profile
data = File.read(aws_creds)
doc_cfg = IniParse.parse(data)
aws_region = doc_cfg[ini_profile]['region']
aws_id = doc_cfg[ini_profile]['aws_access_key_id']
aws_secret = doc_cfg[ini_profile]['aws_secret_access_key']
aws_token = doc_cfg[ini_profile]['aws_session_token']

not sure which would work better, but both fix my issue.

@poflynn
Copy link

poflynn commented Jan 25, 2019

How come more people aren't hitting this? it's (almost) a show-stopper in my org. :-(

@iam-decoder
Copy link
Author

I don't know. I even supplied the fixes. What I ended up having to do was download and compile my own :/

@iam-decoder
Copy link
Author

It looks like some changes were made to my PR but nothing has happened with it yet: #523

@VRanga000
Copy link

I hit on this issue as well. The code in question is reading the aws config file (~/.aws/config), not the credentials file, to read the default region. In that file, each profile is indeed prefixed with the string "profile" except for the "default" profile. e.g.

[default]
region = us-east-1

[profile prod]  
region = us-west-1

If the code does not find such a section, it barfs.

To fix this, add a config section in ~/.aws/config with a region for the profile being used.
So this should not be a blocker for anyone in production or test.

Not sure what the code "fix" would be for this - hardcode a default aws region I suppose? Or perhaps don't set a default region and let aws assume the default?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants