aws_config 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +52 -22
- data/lib/aws_config/parser.rb +9 -3
- data/lib/aws_config/profile.rb +32 -3
- data/lib/aws_config/profile_resolver.rb +43 -0
- data/lib/aws_config/store.rb +14 -1
- data/lib/aws_config/version.rb +1 -1
- data/spec/lib/aws_config/parser_spec.rb +46 -6
- data/spec/lib/aws_config/profile_resolver_spec.rb +90 -0
- data/spec/lib/aws_config/profile_spec.rb +80 -35
- data/spec/lib/aws_config_spec.rb +5 -1
- data/spec/samples/config.txt +2 -4
- data/spec/samples/credentials.txt +7 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50d2a27d4fa0613f456f1b3da9fa72c8ea6bc9e7
|
4
|
+
data.tar.gz: 5e755930909eae2434eda5290724278d4e6a82bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ad003aa7df45d64bfd53c66a7df78aeaa8332596290432b30b28280ff215f63bc9dfa1a731b685dabd61661798d3aba277ce2b0aededcd66d96e18ee2d29cfc
|
7
|
+
data.tar.gz: 17824affad770dbe373da8528a7648b947278dea200224cff19b1b1fd2a2864f783d05556f3d0e74a8b1dae8c4ccd49f9f3536f71a3231d7f8d113227d8a3585
|
data/README.md
CHANGED
@@ -18,36 +18,66 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
It parses `~/.aws/config` by default.
|
22
|
-
|
23
|
-
If
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
21
|
+
It parses `~/.aws/config` and `~/.aws/credentials` by default.
|
22
|
+
|
23
|
+
If your aws config files look like this:
|
24
|
+
|
25
|
+
**Credentials file**
|
26
|
+
```
|
27
|
+
[default]
|
28
|
+
aws_access_key_id=DefaultAccessKey01
|
29
|
+
aws_secret_access_key=Default/Secret/Access/Key/02
|
30
|
+
|
31
|
+
[testing]
|
32
|
+
aws_access_key_id=TestingAccessKey03
|
33
|
+
aws_secret_access_key=Testing/Secret/Access/Key/04
|
34
|
+
```
|
35
|
+
|
36
|
+
**Config file**
|
37
|
+
```
|
38
|
+
[default]
|
39
|
+
# Optional, to define default region for this profile.
|
40
|
+
region=us-west-1
|
41
|
+
source_profile=default
|
42
|
+
|
43
|
+
[profile testing]
|
44
|
+
role_arn=arn:example:283671836
|
45
|
+
region=us-west-2
|
46
|
+
source_profile=testing
|
47
|
+
|
48
|
+
[profile with_mfa]
|
49
|
+
source_profile=testing
|
50
|
+
region=ap-southeast-2
|
51
|
+
mfa_serial=arn:mfa_device:151235152134
|
52
|
+
```
|
35
53
|
|
36
54
|
you can access it like:
|
55
|
+
```ruby
|
56
|
+
require "aws_config"
|
37
57
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
puts AWSConfig.default.region #=> Default/Secret/Access/Key/02
|
58
|
+
puts AWSConfig.default.aws_access_key_id #=> DefaultAccessKey01
|
59
|
+
puts AWSConfig.default.region #=> Default/Secret/Access/Key/02
|
60
|
+
```
|
42
61
|
|
43
62
|
also you can do like hashes:
|
63
|
+
```ruby
|
64
|
+
puts AWSConfig["default"]["aws_access_key_id"] #=> DefaultAccessKey01
|
65
|
+
puts AWSConfig["default"]["region"] #=> Default/Secret/Access/Key/02
|
66
|
+
```
|
44
67
|
|
45
|
-
|
46
|
-
|
68
|
+
If your config contains chained profiles using the `source_profile` property,
|
69
|
+
you can still access the source profiles properties from the top i.e
|
70
|
+
```ruby
|
71
|
+
require "aws_config"
|
47
72
|
|
48
|
-
|
73
|
+
puts AWSConfig.with_mfa.role_arn #=> arn:example:283671836
|
74
|
+
puts AWSConfig.with_mfa.region #=> ap-southeast-2
|
75
|
+
```
|
49
76
|
|
50
|
-
|
77
|
+
If you want to use with aws-sdk-ruby, you can configure like:
|
78
|
+
```ruby
|
79
|
+
AWS.config(AWSConfig.default.config_hash)
|
80
|
+
```
|
51
81
|
|
52
82
|
## Contributing
|
53
83
|
|
data/lib/aws_config/parser.rb
CHANGED
@@ -3,8 +3,12 @@ require "aws_config/profile"
|
|
3
3
|
|
4
4
|
module AWSConfig
|
5
5
|
class Parser
|
6
|
-
|
7
|
-
|
6
|
+
attr_accessor :credential_file_mode
|
7
|
+
|
8
|
+
def self.parse(string, credential_file_mode = false)
|
9
|
+
parser = new
|
10
|
+
parser.credential_file_mode = credential_file_mode
|
11
|
+
parser.parse(string)
|
8
12
|
end
|
9
13
|
|
10
14
|
def parse(string)
|
@@ -12,7 +16,7 @@ module AWSConfig
|
|
12
16
|
end
|
13
17
|
|
14
18
|
private
|
15
|
-
|
19
|
+
|
16
20
|
def tokenize(string)
|
17
21
|
s = StringScanner.new(string)
|
18
22
|
tokens = []
|
@@ -23,6 +27,8 @@ module AWSConfig
|
|
23
27
|
tokens << [:profile, "default"]
|
24
28
|
elsif m = s[1].match(/profile\s+([^\s]+)$/)
|
25
29
|
tokens << [:profile, m[1]]
|
30
|
+
elsif credential_file_mode
|
31
|
+
tokens << [:profile, s[1]]
|
26
32
|
end
|
27
33
|
elsif s.scan(/([^\s=#]+)\s*=\s*([^\s#]+)/)
|
28
34
|
tokens << [:key_value, s[1], s[2]]
|
data/lib/aws_config/profile.rb
CHANGED
@@ -11,16 +11,27 @@ module AWSConfig
|
|
11
11
|
key = key.to_s
|
12
12
|
if entries.has_key?(key)
|
13
13
|
entries[key]
|
14
|
+
elsif source_profile?
|
15
|
+
entries["source_profile"][key]
|
14
16
|
else
|
15
17
|
nil
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
21
|
+
def []=(key, value)
|
22
|
+
key = key.to_s
|
23
|
+
entries[key] = value
|
24
|
+
end
|
25
|
+
|
19
26
|
def has_key?(key)
|
20
27
|
key = key.to_s
|
21
28
|
entries.has_key?(key)
|
22
29
|
end
|
23
30
|
|
31
|
+
def source_profile?
|
32
|
+
entries.key?("source_profile") && entries["source_profile"].is_a?(Profile)
|
33
|
+
end
|
34
|
+
|
24
35
|
def respond_to?(id, include_all = false)
|
25
36
|
has_key?(id) || super
|
26
37
|
end
|
@@ -28,6 +39,12 @@ module AWSConfig
|
|
28
39
|
def method_missing(id, *args)
|
29
40
|
if has_key?(id)
|
30
41
|
self[id]
|
42
|
+
elsif source_profile?
|
43
|
+
if entries["source_profile"].respond_to?(id)
|
44
|
+
entries["source_profile"].send(id, args)
|
45
|
+
else
|
46
|
+
super
|
47
|
+
end
|
31
48
|
else
|
32
49
|
super
|
33
50
|
end
|
@@ -35,10 +52,22 @@ module AWSConfig
|
|
35
52
|
|
36
53
|
def config_hash
|
37
54
|
{
|
38
|
-
access_key_id:
|
39
|
-
secret_access_key:
|
40
|
-
region:
|
55
|
+
access_key_id: self["aws_access_key_id"],
|
56
|
+
secret_access_key: self["aws_secret_access_key"],
|
57
|
+
region: self["region"]
|
41
58
|
}
|
42
59
|
end
|
60
|
+
|
61
|
+
# Returns a new profile from the two merged profiles
|
62
|
+
def merge(profile)
|
63
|
+
merged = entries.dup
|
64
|
+
merged.merge! profile.entries
|
65
|
+
new name, merged
|
66
|
+
end
|
67
|
+
|
68
|
+
def merge!(profile)
|
69
|
+
entries.merge! profile.entries
|
70
|
+
self
|
71
|
+
end
|
43
72
|
end
|
44
73
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "aws_config/profile"
|
2
|
+
|
3
|
+
module AWSConfig
|
4
|
+
class ProfileResolver
|
5
|
+
attr_reader :profiles, :wanted_profiles
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@profiles = {}
|
9
|
+
@wanted_profiles = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def add(profs)
|
13
|
+
profs.each do |name, profile|
|
14
|
+
if profiles.key? name
|
15
|
+
profiles[name].merge! profile
|
16
|
+
else
|
17
|
+
profiles[name] = profile
|
18
|
+
end
|
19
|
+
resolve_source_profile(name, profile) if profile.has_key? "source_profile"
|
20
|
+
provides_source_profile(name, profile)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def resolve_source_profile(name, profile)
|
27
|
+
source_profile = profile.source_profile
|
28
|
+
if profiles.key? source_profile
|
29
|
+
profile["source_profile"] = profiles[source_profile]
|
30
|
+
else
|
31
|
+
(wanted_profiles[source_profile] ||= []) << name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def provides_source_profile(name, profile)
|
36
|
+
return unless wanted_profiles.key? name
|
37
|
+
wanted_profiles[name].each do |wanted_by|
|
38
|
+
profiles[wanted_by]["source_profile"] = profile
|
39
|
+
end
|
40
|
+
wanted_profiles.delete name
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/aws_config/store.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
+
require "aws_config/profile_resolver"
|
1
2
|
module AWSConfig
|
2
3
|
module Store
|
3
4
|
def profiles
|
4
5
|
@profiles ||= begin
|
5
6
|
if File.exists?(config_file)
|
6
|
-
|
7
|
+
profile_resolver = ProfileResolver.new
|
8
|
+
profile_resolver.add Parser.parse(File.read(credentials_file), true)
|
9
|
+
profile_resolver.add Parser.parse(File.read(config_file))
|
10
|
+
profile_resolver.profiles
|
7
11
|
else
|
8
12
|
Hash.new
|
9
13
|
end
|
@@ -19,6 +23,15 @@ module AWSConfig
|
|
19
23
|
@profiles = nil
|
20
24
|
end
|
21
25
|
|
26
|
+
def credentials_file
|
27
|
+
@credentials_file || ENV["AWS_SHARED_CREDENTIALS_FILE"] || File.join(ENV["HOME"], ".aws/credentials")
|
28
|
+
end
|
29
|
+
|
30
|
+
def credentials_file=(path)
|
31
|
+
@credentials_file = path
|
32
|
+
@profiles = nil
|
33
|
+
end
|
34
|
+
|
22
35
|
def [](profile)
|
23
36
|
profiles[profile.to_s]
|
24
37
|
end
|
data/lib/aws_config/version.rb
CHANGED
@@ -59,6 +59,46 @@ aws_access_key_id=DefaultAccessKey01
|
|
59
59
|
] }
|
60
60
|
end
|
61
61
|
end
|
62
|
+
|
63
|
+
context "in credential file mode" do
|
64
|
+
subject do
|
65
|
+
sut = described_class.new
|
66
|
+
sut.credential_file_mode = true
|
67
|
+
sut.send(:tokenize, string)
|
68
|
+
end
|
69
|
+
context "with only the default profile" do
|
70
|
+
let(:string) do
|
71
|
+
<<-EOC
|
72
|
+
[default]
|
73
|
+
aws_access_key_id=DefaultAccessKey01
|
74
|
+
aws_secret_access_key=Default/Secret/Access/Key/02
|
75
|
+
EOC
|
76
|
+
end
|
77
|
+
it { should eq [
|
78
|
+
[:profile, "default"],
|
79
|
+
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
80
|
+
[:key_value, "aws_secret_access_key", "Default/Secret/Access/Key/02"],
|
81
|
+
] }
|
82
|
+
end
|
83
|
+
|
84
|
+
context "with the default and named profiles" do
|
85
|
+
let(:string) do
|
86
|
+
<<-EOC
|
87
|
+
[default]
|
88
|
+
aws_access_key_id=DefaultAccessKey01
|
89
|
+
|
90
|
+
[testing]
|
91
|
+
aws_access_key_id=TestingAccessKey03
|
92
|
+
EOC
|
93
|
+
end
|
94
|
+
it { should eq [
|
95
|
+
[:profile, "default"],
|
96
|
+
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
97
|
+
[:profile, "testing"],
|
98
|
+
[:key_value, "aws_access_key_id", "TestingAccessKey03"],
|
99
|
+
] }
|
100
|
+
end
|
101
|
+
end
|
62
102
|
end
|
63
103
|
|
64
104
|
describe "#build" do
|
@@ -67,7 +107,7 @@ aws_access_key_id=DefaultAccessKey01
|
|
67
107
|
context "Single profile" do
|
68
108
|
let(:tokens) { [
|
69
109
|
[:profile, "default"],
|
70
|
-
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
110
|
+
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
71
111
|
[:key_value, "aws_secret_access_key", "Default/Secret/Access/Key/02"],
|
72
112
|
[:key_value, "region", "us-west-1"]
|
73
113
|
] }
|
@@ -83,9 +123,9 @@ aws_access_key_id=DefaultAccessKey01
|
|
83
123
|
context "Multi profiles" do
|
84
124
|
let(:tokens) { [
|
85
125
|
[:profile, "default"],
|
86
|
-
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
126
|
+
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
87
127
|
[:profile, "testing"],
|
88
|
-
[:key_value, "aws_access_key_id", "TestingAccessKey02"],
|
128
|
+
[:key_value, "aws_access_key_id", "TestingAccessKey02"],
|
89
129
|
] }
|
90
130
|
it { should eq({
|
91
131
|
"default" => { "aws_access_key_id" => "DefaultAccessKey01" },
|
@@ -96,11 +136,11 @@ aws_access_key_id=DefaultAccessKey01
|
|
96
136
|
context "Twice-defined single profile" do
|
97
137
|
let(:tokens) { [
|
98
138
|
[:profile, "default"],
|
99
|
-
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
139
|
+
[:key_value, "aws_access_key_id", "DefaultAccessKey01"],
|
100
140
|
[:key_value, "region", "us-west-1"],
|
101
141
|
[:profile, "default"],
|
102
|
-
[:key_value, "aws_access_key_id", "DefaultAccessKey01_ANOTHER"],
|
103
|
-
[:key_value, "aws_secret_access_key", "Default/Secret/Access/Key/01"],
|
142
|
+
[:key_value, "aws_access_key_id", "DefaultAccessKey01_ANOTHER"],
|
143
|
+
[:key_value, "aws_secret_access_key", "Default/Secret/Access/Key/01"],
|
104
144
|
] }
|
105
145
|
it { should eq({
|
106
146
|
"default" => {
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe AWSConfig::ProfileResolver do
|
4
|
+
subject { described_class.new }
|
5
|
+
|
6
|
+
let(:default_profile) do
|
7
|
+
AWSConfig::Profile.new(
|
8
|
+
"default",
|
9
|
+
"aws_access_key_id" => "DefaultAccessId01",
|
10
|
+
"aws_secret_access_key" => "DefaultSecretKey01",
|
11
|
+
"region" => "us-west-1"
|
12
|
+
)
|
13
|
+
end
|
14
|
+
let(:testing_profile) do
|
15
|
+
AWSConfig::Profile.new(
|
16
|
+
"testing",
|
17
|
+
"aws_access_key_id" => "TestingAccessId01",
|
18
|
+
"aws_secret_access_key" => "TestingSecretKey01",
|
19
|
+
"region" => "us-west-1"
|
20
|
+
)
|
21
|
+
end
|
22
|
+
let(:profile_with_source) do
|
23
|
+
AWSConfig::Profile.new(
|
24
|
+
"with_source",
|
25
|
+
"region" => "ap-southeast-2",
|
26
|
+
"source_profile" => "testing"
|
27
|
+
)
|
28
|
+
end
|
29
|
+
describe "#add" do
|
30
|
+
context "when all profiles resolve" do
|
31
|
+
let(:profiles) do
|
32
|
+
{
|
33
|
+
default_profile.name => default_profile,
|
34
|
+
testing_profile.name => testing_profile,
|
35
|
+
profile_with_source.name => profile_with_source
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
it "resolves the sources" do
|
40
|
+
subject.add profiles
|
41
|
+
expect(profiles["with_source"].source_profile).to be testing_profile
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when some profles do not resolve" do
|
46
|
+
let(:unresolving) do
|
47
|
+
AWSConfig::Profile.new(
|
48
|
+
"unresolving",
|
49
|
+
"aws_access_key_id" => "UnresolvingAccessId01",
|
50
|
+
"aws_secret_access_key" => "UnresolvingSecretKey01",
|
51
|
+
"region" => "us-west-1",
|
52
|
+
"source_profile" => "doesnt_exist"
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
let(:missing_profile) do
|
57
|
+
AWSConfig::Profile.new(
|
58
|
+
"doesnt_exist",
|
59
|
+
"aws_session_token" => "uk-west-2"
|
60
|
+
)
|
61
|
+
end
|
62
|
+
let(:profiles) do
|
63
|
+
{
|
64
|
+
default_profile.name => default_profile,
|
65
|
+
testing_profile.name => testing_profile,
|
66
|
+
profile_with_source.name => profile_with_source,
|
67
|
+
unresolving.name => unresolving
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
it "resolves the sources it can" do
|
72
|
+
subject.add profiles
|
73
|
+
expect(profiles["with_source"].source_profile).to be testing_profile
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should remember the unresolved source profile" do
|
77
|
+
subject.add profiles
|
78
|
+
expect(subject.wanted_profiles).to eq("doesnt_exist" => ["unresolving"])
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should resolve the missing profile if it is added later" do
|
82
|
+
subject.add profiles
|
83
|
+
expect(subject.wanted_profiles).to eq("doesnt_exist" => ["unresolving"])
|
84
|
+
subject.add missing_profile.name => missing_profile
|
85
|
+
expect(subject.wanted_profiles).to eq({})
|
86
|
+
expect(subject.profiles["unresolving"].source_profile).to be missing_profile
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -1,46 +1,91 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe AWSConfig::Profile do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
it "should return given name via method" do
|
14
|
-
expect(subject.name).to eq "default"
|
15
|
-
end
|
4
|
+
context "regardless of source_profile" do
|
5
|
+
subject {
|
6
|
+
AWSConfig::Profile.new(
|
7
|
+
"default",
|
8
|
+
"aws_access_key_id" => "DefaultAccessKey01",
|
9
|
+
"aws_secret_access_key" => "Default/Secret/Access/Key/02",
|
10
|
+
"region" => "us-west-1"
|
11
|
+
)
|
12
|
+
}
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
expect(subject).to respond_to :region
|
21
|
-
end
|
14
|
+
it "should return given name via method" do
|
15
|
+
expect(subject.name).to eq "default"
|
16
|
+
end
|
22
17
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
18
|
+
it "should respond to methods whose names are same as given entries" do
|
19
|
+
expect(subject).to respond_to :aws_access_key_id
|
20
|
+
expect(subject).to respond_to :aws_secret_access_key
|
21
|
+
expect(subject).to respond_to :region
|
22
|
+
end
|
28
23
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
24
|
+
it "should return given entries via methods" do
|
25
|
+
expect(subject.aws_access_key_id).to eq "DefaultAccessKey01"
|
26
|
+
expect(subject.aws_secret_access_key).to eq "Default/Secret/Access/Key/02"
|
27
|
+
expect(subject.region).to eq "us-west-1"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return given entries via hash-like methods" do
|
31
|
+
expect(subject[:aws_access_key_id]).to eq "DefaultAccessKey01"
|
32
|
+
expect(subject[:aws_secret_access_key]).to eq "Default/Secret/Access/Key/02"
|
33
|
+
expect(subject[:region]).to eq "us-west-1"
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
-
|
36
|
+
it "should raise exceptions if unknown entry is called via methods" do
|
37
|
+
expect { subject.unknown_method }.to raise_error NoMethodError
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return a hash for aws-sdk-ruby's configuration format" do
|
41
|
+
expect(subject.config_hash).to eq({
|
42
|
+
access_key_id: "DefaultAccessKey01",
|
43
|
+
secret_access_key: "Default/Secret/Access/Key/02",
|
44
|
+
region: "us-west-1"
|
45
|
+
})
|
46
|
+
end
|
37
47
|
end
|
38
48
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
49
|
+
context "with source_profile" do
|
50
|
+
let(:source_profile) do
|
51
|
+
AWSConfig::Profile.new(
|
52
|
+
"default",
|
53
|
+
"region" => "ap-southeast-2",
|
54
|
+
"aws_access_key_id" => "DefaultAccessKey01",
|
55
|
+
"aws_secret_access_key" => "Default/Secret/Access/Key/02"
|
56
|
+
)
|
57
|
+
end
|
58
|
+
subject do
|
59
|
+
AWSConfig::Profile.new(
|
60
|
+
"testing",
|
61
|
+
"region" => "us-west-1",
|
62
|
+
"source_profile" => source_profile
|
63
|
+
)
|
64
|
+
end
|
65
|
+
context "when called like a method" do
|
66
|
+
let(:region) { "us-west-1" }
|
67
|
+
let(:access_key_id) { "DefaultAccesskey01" }
|
68
|
+
it "should return values directly on the profile" do
|
69
|
+
expect(subject.region).to eq region
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should check the source profile if the desired key is missing" do
|
73
|
+
expect(source_profile).to receive(:aws_access_key_id).and_return(access_key_id)
|
74
|
+
expect(subject.aws_access_key_id).to eq access_key_id
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when called like a hash" do
|
79
|
+
let(:region) { "us-west-1" }
|
80
|
+
let(:access_key_id) { "DefaultAccesskey01" }
|
81
|
+
it "should return values directly on the profile" do
|
82
|
+
expect(subject["region"]).to eq region
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should check the source profile if the desired key is missing" do
|
86
|
+
expect(source_profile).to receive(:[]).with("aws_access_key_id").and_return(access_key_id)
|
87
|
+
expect(subject["aws_access_key_id"]).to eq access_key_id
|
88
|
+
end
|
89
|
+
end
|
45
90
|
end
|
46
91
|
end
|
data/spec/lib/aws_config_spec.rb
CHANGED
@@ -2,7 +2,11 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe AWSConfig do
|
4
4
|
let(:sample_config_file) { File.expand_path("../../samples/config.txt", __FILE__) }
|
5
|
-
|
5
|
+
let(:sample_creds_file) { File.expand_path("../../samples/credentials.txt", __FILE__) }
|
6
|
+
before do
|
7
|
+
AWSConfig.config_file = sample_config_file
|
8
|
+
AWSConfig.credentials_file = sample_creds_file
|
9
|
+
end
|
6
10
|
|
7
11
|
it "should return an entry in a profile via method" do
|
8
12
|
expect(described_class.default.aws_access_key_id).to eq "DefaultAccessKey01"
|
data/spec/samples/config.txt
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
[default]
|
2
|
-
aws_access_key_id=DefaultAccessKey01
|
3
|
-
aws_secret_access_key=Default/Secret/Access/Key/02
|
4
2
|
# Optional, to define default region for this profile.
|
5
3
|
region=us-west-1
|
4
|
+
source_profile=default
|
6
5
|
|
7
6
|
[profile testing]
|
8
|
-
aws_access_key_id=TestingAccessKey03
|
9
|
-
aws_secret_access_key=Testing/Secret/Access/Key/04
|
10
7
|
region=us-west-2
|
8
|
+
source_profile=testing
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masato Ikeda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -70,12 +70,15 @@ files:
|
|
70
70
|
- lib/aws_config.rb
|
71
71
|
- lib/aws_config/parser.rb
|
72
72
|
- lib/aws_config/profile.rb
|
73
|
+
- lib/aws_config/profile_resolver.rb
|
73
74
|
- lib/aws_config/store.rb
|
74
75
|
- lib/aws_config/version.rb
|
75
76
|
- spec/lib/aws_config/parser_spec.rb
|
77
|
+
- spec/lib/aws_config/profile_resolver_spec.rb
|
76
78
|
- spec/lib/aws_config/profile_spec.rb
|
77
79
|
- spec/lib/aws_config_spec.rb
|
78
80
|
- spec/samples/config.txt
|
81
|
+
- spec/samples/credentials.txt
|
79
82
|
- spec/spec_helper.rb
|
80
83
|
homepage: https://github.com/a2ikm/aws_config
|
81
84
|
licenses:
|
@@ -103,7 +106,9 @@ specification_version: 4
|
|
103
106
|
summary: AWSConfig is a parser for AWS_CONFIG_FILE used in aws-cli.
|
104
107
|
test_files:
|
105
108
|
- spec/lib/aws_config/parser_spec.rb
|
109
|
+
- spec/lib/aws_config/profile_resolver_spec.rb
|
106
110
|
- spec/lib/aws_config/profile_spec.rb
|
107
111
|
- spec/lib/aws_config_spec.rb
|
108
112
|
- spec/samples/config.txt
|
113
|
+
- spec/samples/credentials.txt
|
109
114
|
- spec/spec_helper.rb
|