outliers 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +6 -66
  4. data/lib/outliers/cli/process.rb +12 -3
  5. data/lib/outliers/cli.rb +0 -24
  6. data/lib/outliers/collection.rb +15 -15
  7. data/lib/outliers/filters/aws/ec2/tags.rb +1 -1
  8. data/lib/outliers/info.rb +12 -0
  9. data/lib/outliers/provider.rb +0 -4
  10. data/lib/outliers/providers/aws/cloud_formation.rb +1 -5
  11. data/lib/outliers/providers/aws/ec2.rb +1 -5
  12. data/lib/outliers/providers/aws/elb.rb +1 -5
  13. data/lib/outliers/providers/aws/iam.rb +1 -5
  14. data/lib/outliers/providers/aws/rds.rb +1 -5
  15. data/lib/outliers/providers/aws/s3.rb +1 -5
  16. data/lib/outliers/providers/aws/{base.rb → shared.rb} +0 -10
  17. data/lib/outliers/providers/aws/sqs.rb +1 -5
  18. data/lib/outliers/providers/aws.rb +1 -1
  19. data/lib/outliers/resources/aws/ec2/instance.rb +0 -16
  20. data/lib/outliers/resources/aws/ec2/security_group.rb +0 -7
  21. data/lib/outliers/resources/aws/elb/load_balancer.rb +0 -7
  22. data/lib/outliers/resources/aws/iam/user.rb +0 -10
  23. data/lib/outliers/resources/aws/rds/db_instance.rb +0 -10
  24. data/lib/outliers/resources/aws/s3/bucket.rb +0 -13
  25. data/lib/outliers/resources.rb +4 -0
  26. data/lib/outliers/run.rb +24 -8
  27. data/lib/outliers/verifications/shared.rb +4 -16
  28. data/lib/outliers/version.rb +1 -1
  29. data/lib/outliers.rb +1 -0
  30. data/reference.yaml +128 -0
  31. data/spec/collection_spec.rb +3 -3
  32. data/spec/filters/aws/ec2/tags_spec.rb +1 -1
  33. data/spec/info_spec.rb +41 -0
  34. data/spec/run_spec.rb +57 -10
  35. data/spec/verifications/shared_spec.rb +6 -6
  36. metadata +7 -6
  37. data/lib/outliers/cli/evaluate.rb +0 -136
  38. data/lib/outliers/cli/providers.rb +0 -29
  39. data/lib/outliers/cli/resources.rb +0 -60
@@ -3,25 +3,13 @@ module Outliers
3
3
  module Shared
4
4
 
5
5
  def none_exist?
6
- all
6
+ list
7
7
  end
8
8
 
9
9
  def equals?(args)
10
- list = Array(args[:keys])
11
- logger.debug "Verifying '#{list.join(',')}' equals '#{all.empty? ? 'no resources' : all_by_key.join(',')}'."
12
- all.reject {|r| list.include? r.id}
13
- end
14
-
15
- module_function
16
-
17
- def verifications
18
- [
19
- { name: 'none_exist',
20
- description: 'Verify no resources exist.' },
21
- { name: 'equals',
22
- description: 'Verify resources match the given list of keys.',
23
- args: 'keys: [KEY1,KEY2]' }
24
- ]
10
+ keys = Array(args[:keys])
11
+ logger.debug "Verifying '#{list.join(',')}' equals '#{list.empty? ? 'no resources' : list_by_key.join(',')}'."
12
+ list.reject {|r| keys.include? r.id}
25
13
  end
26
14
 
27
15
  end
@@ -1,3 +1,3 @@
1
1
  module Outliers
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/outliers.rb CHANGED
@@ -3,6 +3,7 @@ require "outliers/verifications"
3
3
 
4
4
  require "outliers/collection"
5
5
  require "outliers/credentials"
6
+ require "outliers/info"
6
7
  require "outliers/exceptions"
7
8
  require "outliers/evaluation"
8
9
  require "outliers/filters"
data/reference.yaml ADDED
@@ -0,0 +1,128 @@
1
+ all:
2
+ credentials:
3
+ access_key_id: AWS Account Access Key
4
+ secret_access_key: AWS Account Secret Key
5
+ region: AWS Region (Default us-east-1)
6
+ resources:
7
+ shared:
8
+ description: Verifications which are available to all resources.
9
+ verifications:
10
+ none_exist:
11
+ description: Verify no resources exist in list.
12
+ equals:
13
+ description: Verify no resources match the given list of keys.
14
+ args: 'keys: [KEY1,KEY2]'
15
+
16
+ aws_cloud_formation:
17
+ credentials:
18
+ access_key_id: AWS Account Access Key
19
+ secret_access_key: AWS Account Secret Key
20
+ region: AWS Region (Default us-east-1)
21
+ resources:
22
+ stack:
23
+ description: AWS Cloud Formation Stack
24
+ verifications: {}
25
+
26
+ aws_ec2:
27
+ credentials:
28
+ access_key_id: AWS Account Access Key
29
+ secret_access_key: AWS Account Secret Key
30
+ region: AWS Region (Default us-east-1)
31
+ resources:
32
+ instance:
33
+ description: AWS EC2 Instance
34
+ verifications:
35
+ classic:
36
+ description: Instance is in AWS Classic (No VPC).
37
+ source_dest_check:
38
+ description: Instance source dest check set to true.
39
+ running:
40
+ description: Instance status is running.
41
+ valid_image_id:
42
+ description: ami_ids=ami_id1,ami_id2 - Instances Image ID (AMI) is in given list.
43
+ args: 'image_ids: [IMAGE_ID1, IMAGEID2]'
44
+ vpc:
45
+ description: Instance is in a VPC.
46
+ security_group:
47
+ description: AWS EC2 Security Group
48
+ verifications:
49
+ no_public_internet_ingress:
50
+ description: Security Group has no rules open to 0.0.0.0/0.
51
+ image:
52
+ description: AWS EC2 AMI
53
+ verifications: {}
54
+
55
+ aws_elb:
56
+ credentials:
57
+ access_key_id: AWS Account Access Key
58
+ secret_access_key: AWS Account Secret Key
59
+ region: AWS Region (Default us-east-1)
60
+ resources:
61
+ load_balancer:
62
+ description: AWS ELB (Elastic Load Balancer)
63
+ verifications:
64
+ ssl_certificates_valid:
65
+ description: Validates all SSL certificates associated with an ELB are valid for given number of days.
66
+ args: 'days: DAYS'
67
+
68
+ aws_iam:
69
+ credentials:
70
+ access_key_id: AWS Account Access Key
71
+ secret_access_key: AWS Account Secret Key
72
+ region: AWS Region (Default us-east-1)
73
+ resources:
74
+ user:
75
+ description: AWS IAM User
76
+ verifications:
77
+ mfa_enabled:
78
+ description: Verify MFA enabled for user.
79
+ no_access_keys:
80
+ description: Verify user has no access keys.
81
+ no_password_set:
82
+ description: Verify password not set for user.
83
+
84
+ aws_rds:
85
+ credentials:
86
+ access_key_id: AWS Account Access Key
87
+ secret_access_key: AWS Account Secret Key
88
+ region: AWS Region (Default us-east-1)
89
+ resources:
90
+ db_instance:
91
+ description: AWS RDS Database Instance
92
+ verifications:
93
+ backup_retention_period:
94
+ description: Validate the backup retention period equals given days for the db_instance.
95
+ args: 'days: DAYS'
96
+ multi_az:
97
+ description: RDS Multi AZ set to yes.
98
+ db_snapshot:
99
+ description: AWS RDS Database Snapshot
100
+ verifications: {}
101
+
102
+ aws_s3:
103
+ credentials:
104
+ access_key_id: AWS Account Access Key
105
+ secret_access_key: AWS Account Secret Key
106
+ region: AWS Region (Default us-east-1)
107
+ resources:
108
+ bucket:
109
+ description: AWS S3 Bucket
110
+ verifications:
111
+ empty:
112
+ description: Bucket has no objects.
113
+ no_public_objects:
114
+ description: Bucket has no public accessible objects.
115
+ configured_as_website:
116
+ description: Bucket is configured as a website.
117
+ not_configured_as_website:
118
+ description: Bucket is not configured as a website.
119
+
120
+ aws_sqs:
121
+ credentials:
122
+ access_key_id: AWS Account Access Key
123
+ secret_access_key: AWS Account Secret Key
124
+ region: AWS Region (Default us-east-1)
125
+ resources:
126
+ queue:
127
+ description: AWS SQS Queue
128
+ verifications: {}
@@ -31,7 +31,7 @@ describe Outliers::Collection do
31
31
  context "#exclude" do
32
32
  it "should exclude the given array of resources" do
33
33
  subject.exclude_by_key ['resource1']
34
- expect(subject.all).to eq([resource2])
34
+ expect(subject.list).to eq([resource2])
35
35
  end
36
36
  end
37
37
 
@@ -39,7 +39,7 @@ describe Outliers::Collection do
39
39
  it "should apply the given filter to resources" do
40
40
  subject.should_receive('filter_tag').with('Name:test123').and_return [resource1]
41
41
  subject.filter 'tag' => 'Name:test123'
42
- expect(subject.all).to eq([resource1])
42
+ expect(subject.list).to eq([resource1])
43
43
  end
44
44
 
45
45
  it "should raise an exception if the filter does not exist" do
@@ -120,7 +120,7 @@ describe Outliers::Collection do
120
120
  to raise_error(Outliers::Exceptions::NoArgumentRequired)
121
121
  end
122
122
 
123
- it "should return empty passing and failing arrays if no resources exist in all" do
123
+ it "should return empty passing and failing arrays if no resources exist in list" do
124
124
  subject.stub :load_all => []
125
125
  expect(subject.verify 'valid_resource?', {}).to eq( { failing_resources: [], passing_resources: [] } )
126
126
  end
@@ -15,7 +15,7 @@ describe Outliers::Filters::Aws::Ec2::Tags do
15
15
 
16
16
  before do
17
17
  subject.stub :logger => logger
18
- subject.stub :all => [resource1, resource2]
18
+ subject.stub :list => [resource1, resource2]
19
19
  end
20
20
 
21
21
  it "should return the list of instances filtered by the given tag name and value" do
data/spec/info_spec.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Outliers::Info do
4
+ context "#reference" do
5
+ before do
6
+ @resources = []
7
+ subject.reference.each_pair do |name,data|
8
+ data['resources'].keys.each do |key|
9
+ @resources << "#{name}_#{key}"
10
+ end
11
+ end
12
+ end
13
+
14
+ it "should be able to load reference.yaml" do
15
+ expect(subject.reference.keys.include?('all')).to be_true
16
+ end
17
+
18
+ it "should verify each provider class has a entry in reference.yaml" do
19
+ expect(subject.reference.keys - ['all']).to eq(Outliers::Providers.name_map.keys)
20
+ end
21
+
22
+ it "should verify each resource method has a entry in reference.yaml" do
23
+ expect((@resources - ['all_shared']).sort).to eq(Outliers::Resources.list.map {|r| r.to_human}.sort)
24
+ end
25
+
26
+ it "should validate each resource has a verification list and description" do
27
+ subject.reference.each_value do |provider_data|
28
+ provider_data['resources'].each_value do |resource_data|
29
+ expect(resource_data['verifications'].class).to eq(Hash)
30
+ expect(resource_data['description'].class).to eq(String)
31
+ end
32
+ end
33
+ end
34
+
35
+ it "should validate each resource has a list of credentials" do
36
+ subject.reference.each_value do |provider_data|
37
+ expect(provider_data['credentials'].class).to eq(Hash)
38
+ end
39
+ end
40
+ end
41
+ end
data/spec/run_spec.rb CHANGED
@@ -9,8 +9,8 @@ describe Outliers::Run do
9
9
  Outliers.config_path '/test'
10
10
  end
11
11
 
12
- describe "#process_evaluations_in_config_folder" do
13
- it "should process all .rb files in config folder and sub folders" do
12
+ describe "#process_evaluations_in_dir" do
13
+ before do
14
14
  files = ['/test/test1.rb', '/test/dir', '/test/dir/test2.rb', '/test/dir/test_other_file']
15
15
  Dir.should_receive(:glob).with('/test/**/*').and_return files
16
16
 
@@ -21,24 +21,71 @@ describe Outliers::Run do
21
21
 
22
22
  File.should_receive(:read).with('/test/test1.rb').and_return evaluation1
23
23
  File.should_receive(:read).with('/test/dir/test2.rb').and_return evaluation2
24
-
24
+ end
25
+
26
+ it "should process all .rb files in config folder and sub folders" do
27
+ subject.should_receive(:instance_eval).with(evaluation1)
28
+ subject.should_receive(:instance_eval).with(evaluation2)
29
+ subject.process_evaluations_in_dir
30
+ end
31
+
32
+ it "each thread created for an evaluation should be re-joined" do
33
+ thread_mock = mock 'thread'
34
+ subject.threaded = true
35
+ subject.threads = [thread_mock]
25
36
  subject.should_receive(:instance_eval).with(evaluation1)
26
37
  subject.should_receive(:instance_eval).with(evaluation2)
27
- subject.process_evaluations_in_config_folder
38
+ thread_mock.should_receive(:join)
39
+ subject.process_evaluations_in_dir
28
40
  end
29
41
  end
30
42
 
31
43
  describe "#evaluate" do
32
- it "should kick off a new evaluation and pass the block for execuation" do
33
- Outliers::Evaluation.should_receive(:new).with(:name => 'my evaluation', :run => subject).and_return evaluation1
34
- evaluation1.should_receive(:connect).with('test')
35
- subject.evaluate 'my evaluation' do
36
- connect 'test'
44
+ context "with name" do
45
+ before do
46
+ Outliers::Evaluation.should_receive(:new).with(:name => 'my evaluation', :run => subject).
47
+ and_return evaluation1
48
+ evaluation1.should_receive(:connect).with('test')
49
+ end
50
+
51
+ it "should kick off a new evaluation and pass the block for execuation" do
52
+ subject.evaluate 'my evaluation' do
53
+ connect 'test'
54
+ end
55
+ end
56
+
57
+ it "should sleep if more than thread_count threads running" do
58
+ list_stub = stub "list"
59
+ list_stub.stub(:count).and_return(6,1)
60
+ Thread.stub :list => list_stub
61
+ subject.should_receive(:sleep).with(2)
62
+ subject.evaluate 'my evaluation' do
63
+ connect 'test'
64
+ end
65
+ end
66
+
67
+ describe "testing threads" do
68
+ it "should kick off a new thread if threaded is set to true" do
69
+ subject.threaded = true
70
+ Thread.should_receive(:new).and_yield { 'a thread' }
71
+ subject.evaluate 'my evaluation' do
72
+ connect 'test'
73
+ end
74
+ subject.threads.count == 1
75
+ end
76
+
77
+ it "should not kick off a new thread if threaded is set to false" do
78
+ subject.evaluate 'my evaluation' do
79
+ connect 'test'
80
+ end
81
+ subject.threads.count == 0
82
+ end
37
83
  end
38
84
  end
39
85
 
40
86
  it "should kick off a new evaluation with unspecified name" do
41
- Outliers::Evaluation.should_receive(:new).with(:name => 'unspecified', :run => subject).and_return evaluation1
87
+ Outliers::Evaluation.should_receive(:new).with(:name => 'unspecified', :run => subject).
88
+ and_return evaluation1
42
89
  evaluation1.should_receive(:connect).with('test')
43
90
  subject.evaluate do
44
91
  connect 'test'
@@ -12,30 +12,30 @@ describe Outliers::Verifications::Shared do
12
12
 
13
13
  context "#none_exist?" do
14
14
  it "should be true if no resources returned" do
15
- subject.stub :all => []
15
+ subject.stub :list => []
16
16
  expect(subject.none_exist?).to eq([])
17
17
  end
18
18
 
19
19
  it "should be false if resources returned" do
20
- subject.stub :all_by_key => ['resource1']
21
- subject.stub :all => ['resource1']
20
+ subject.stub :list_by_key => ['resource1']
21
+ subject.stub :list => ['resource1']
22
22
  expect(subject.none_exist?).to eq(['resource1'])
23
23
  end
24
24
  end
25
25
 
26
26
  context "#equals?" do
27
27
  it "should verify the list of resources equals the list of keys and return no failing reosurces" do
28
- subject.stub :all_by_key => ['resource1'], :all => [resource1]
28
+ subject.stub :list_by_key => ['resource1'], :list => [resource1]
29
29
  expect(subject.equals?(:keys => ['resource1'])).to eq([])
30
30
  end
31
31
 
32
32
  it "should verify the list of resources equals the single key and return no failing resources" do
33
- subject.stub :all_by_key => ['resource1'], :all => [resource1]
33
+ subject.stub :list_by_key => ['resource1'], :list => [resource1]
34
34
  expect(subject.equals?(:keys => 'resource1')).to eq([])
35
35
  end
36
36
 
37
37
  it "should return resources which do not match the given list" do
38
- subject.stub :all_by_key => ['resource1', 'resource2'], :all => [resource1, resource2]
38
+ subject.stub :list_by_key => ['resource1', 'resource2'], :list => [resource1, resource2]
39
39
  expect(subject.equals?(:keys => 'resource1')).to eq([resource2])
40
40
  end
41
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: outliers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Weaver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-19 00:00:00.000000000 Z
11
+ date: 2013-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,10 +86,7 @@ files:
86
86
  - bin/outliers
87
87
  - lib/outliers.rb
88
88
  - lib/outliers/cli.rb
89
- - lib/outliers/cli/evaluate.rb
90
89
  - lib/outliers/cli/process.rb
91
- - lib/outliers/cli/providers.rb
92
- - lib/outliers/cli/resources.rb
93
90
  - lib/outliers/collection.rb
94
91
  - lib/outliers/credentials.rb
95
92
  - lib/outliers/evaluation.rb
@@ -98,17 +95,18 @@ files:
98
95
  - lib/outliers/filters/aws.rb
99
96
  - lib/outliers/filters/aws/ec2.rb
100
97
  - lib/outliers/filters/aws/ec2/tags.rb
98
+ - lib/outliers/info.rb
101
99
  - lib/outliers/mixins.rb
102
100
  - lib/outliers/provider.rb
103
101
  - lib/outliers/providers.rb
104
102
  - lib/outliers/providers/aws.rb
105
- - lib/outliers/providers/aws/base.rb
106
103
  - lib/outliers/providers/aws/cloud_formation.rb
107
104
  - lib/outliers/providers/aws/ec2.rb
108
105
  - lib/outliers/providers/aws/elb.rb
109
106
  - lib/outliers/providers/aws/iam.rb
110
107
  - lib/outliers/providers/aws/rds.rb
111
108
  - lib/outliers/providers/aws/s3.rb
109
+ - lib/outliers/providers/aws/shared.rb
112
110
  - lib/outliers/providers/aws/sqs.rb
113
111
  - lib/outliers/resource.rb
114
112
  - lib/outliers/resources.rb
@@ -139,6 +137,7 @@ files:
139
137
  - lib/outliers/verifications/shared.rb
140
138
  - lib/outliers/version.rb
141
139
  - outliers.gemspec
140
+ - reference.yaml
142
141
  - spec/collection_spec.rb
143
142
  - spec/credentials_spec.rb
144
143
  - spec/evaluation_spec.rb
@@ -146,6 +145,7 @@ files:
146
145
  - spec/fixtures/credentials1.yml
147
146
  - spec/fixtures/credentials2.yml
148
147
  - spec/helpers/fixtures.rb
148
+ - spec/info_spec.rb
149
149
  - spec/mixins_spec.rb
150
150
  - spec/provider_spec.rb
151
151
  - spec/providers_spec.rb
@@ -187,6 +187,7 @@ test_files:
187
187
  - spec/fixtures/credentials1.yml
188
188
  - spec/fixtures/credentials2.yml
189
189
  - spec/helpers/fixtures.rb
190
+ - spec/info_spec.rb
190
191
  - spec/mixins_spec.rb
191
192
  - spec/provider_spec.rb
192
193
  - spec/providers_spec.rb
@@ -1,136 +0,0 @@
1
- module Outliers
2
- module CLI
3
- class Evaluate
4
- def evaluate
5
- @options = { arguments: [], exclude: [], filter: [], credentials: [], target_resources: [] }
6
- @credentials = {}
7
-
8
- option_parser.parse!
9
-
10
- Outliers.config_path @options[:config]
11
-
12
- @logger = Outliers.logger
13
- @run = Run.new
14
-
15
- load_credentials
16
-
17
- @options[:parsed_arguments] = parse_arguments
18
- @options[:parsed_filters] = parse_filters
19
-
20
- # Make options available global
21
- # Required to read by instance_eval in @run.evaluate
22
- @@options = @options
23
-
24
- begin
25
- @run.evaluate "Running verification provided via CLI." do
26
- connect 'cli'
27
- resources @@options[:resource], @@options[:target_resources]
28
- exclude @@options[:exclude] if @@options[:exclude].any?
29
- filter @@options[:parsed_filters] if @@options[:filter].any?
30
- verify @@options[:verification], @@options[:parsed_arguments]
31
- end
32
- rescue Outliers::Exceptions::Base => e
33
- @logger.error e.message
34
- exit 1
35
- end
36
-
37
- exit 1 if @run.results.first.failed?
38
- end
39
-
40
- def command_name
41
- 'evaluate'
42
- end
43
-
44
- def command_summary
45
- 'Evaluate the given verification.'
46
- end
47
-
48
- private
49
-
50
- def load_credentials
51
- credentials_name = @options[:credential_name]
52
- credentials = Credentials.load_from_file("#{ENV['HOME']}/.outliers.yml").fetch credentials_name
53
- credentials.merge! 'provider' => @options[:provider]
54
-
55
- if @options[:credentials].any?
56
- @options[:credentials].each do |c|
57
- key = c.split('=').first
58
- value = c.split('=').last
59
- credentials.merge! key => value
60
- end
61
- end
62
-
63
- @run.credentials = { 'cli' => credentials }
64
- end
65
-
66
- def parse_filters
67
- filters = {}
68
-
69
- @options[:filter].each do |a|
70
- key = a.split('=').first
71
- value = a.split('=').last
72
- filters.merge! key => value
73
- end
74
-
75
- filters
76
- end
77
-
78
-
79
- def parse_arguments
80
- arguments = {}
81
-
82
- @options[:arguments].each do |a|
83
- key = a.split('=').first
84
- value = a.split('=').last
85
- value = value.split(',') if value.include?(',')
86
- arguments.merge! key => value
87
- end
88
-
89
- arguments
90
- end
91
-
92
- def option_parser
93
- OptionParser.new do |opts|
94
- opts.banner = "Usage: outliers evaluate [options]"
95
-
96
- opts.on("-a", "--argument [NAME]", "Equals seperated key and value to pass as argument to verification (can be specified multiple times).") do |o|
97
- @options[:arguments] << o
98
- end
99
-
100
- opts.on("-c", "--credential_name [CREDENTIAL_NAME]", "Name to load from credentials file.") do |o|
101
- @options[:credential_name] = o
102
- end
103
-
104
- opts.on("-e", "--exclude [EXCLUDE]", "Exclude resources in collection with the given key (can be specified multiple times).") do |o|
105
- @options[:exclude] << o
106
- end
107
-
108
- opts.on("-f", "--fitler [FILTER]", "Equals seperated filter name and value (can be specified multiple times).") do |o|
109
- @options[:filter] << o
110
- end
111
-
112
- opts.on("-p", "--provider [PROVIDER]", "Provider of target resources.") do |o|
113
- @options[:provider] = o
114
- end
115
-
116
- opts.on("-r", "--resources [RESOURCES]", "Name of resource collection to evaluate.") do |o|
117
- @options[:resource] = o
118
- end
119
-
120
- opts.on("-t", "--target_resources [TARGET_RESOURCES]", "Target resources with key name (can be specified more than once).") do |o|
121
- @options[:target_resources] << o
122
- end
123
-
124
- opts.on("-v", "--verification [VERIFICATION]", "Verification to perform against collection of resources.") do |o|
125
- @options[:verification] = o
126
- end
127
-
128
- opts.on("--credentials [CREDENTIALS]", "Equals seperated key and value to include as credentials (can be specified multiple times).") do |o|
129
- @options[:credentials] << o
130
- end
131
- end
132
- end
133
-
134
- end
135
- end
136
- end
@@ -1,29 +0,0 @@
1
- module Outliers
2
- module CLI
3
- class Providers
4
- def providers
5
- option_parser.parse!
6
- list = Outliers::Providers.name_map
7
- list.each_pair do |k,v|
8
- puts k
9
- v.credential_arguments.each_pair { |k,v| puts " #{k}: #{v}" }
10
- end
11
- end
12
-
13
- def command_name
14
- 'providers'
15
- end
16
-
17
- def command_summary
18
- 'List available providers.'
19
- end
20
-
21
- def option_parser
22
- OptionParser.new do |opts|
23
- opts.banner = "Usage: outliers providers"
24
- end
25
- end
26
-
27
- end
28
- end
29
- end
@@ -1,60 +0,0 @@
1
- module Outliers
2
- module CLI
3
- class Resources
4
- def resources
5
- @options = {}
6
-
7
- option_parser.parse!
8
-
9
- provider = @options[:provider]
10
-
11
- @logger = Outliers.logger
12
-
13
- unless provider
14
- @logger.error "Required parameter 'provider' not specified."
15
- exit 1
16
- end
17
-
18
- all = Outliers::Resources.collections
19
-
20
- list = all.select { |r| r.to_human =~ /^#{provider}_.*$/ }
21
-
22
- if list.any?
23
- list.each do |r|
24
- name = r.to_human
25
- name.slice! provider
26
- name[0] = ''
27
- puts name
28
- puts " Verifications:"
29
- r.verifications.each { |v| puts " #{v[:name]}(#{v[:args]}) #{v[:description]}" }
30
- puts " Filters:"
31
- r.filters.each { |v| puts " #{v[:name]}(#{v[:args]}) #{v[:description]}" }
32
- end
33
- else
34
- puts "No resources found for '#{provider}'."
35
- end
36
- end
37
-
38
- def command_name
39
- 'resources'
40
- end
41
-
42
- def command_summary
43
- 'List available resources for a provider.'
44
- end
45
-
46
- private
47
-
48
- def option_parser
49
- OptionParser.new do |opts|
50
- opts.banner = "Usage: outliers resources [options]"
51
-
52
- opts.on("-p", "--provider [PROVIDER]", "Provider to list resources.") do |o|
53
- @options[:provider] = o
54
- end
55
- end
56
- end
57
-
58
- end
59
- end
60
- end