aws_config 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|