cloudcheckr 0.0.1 → 0.5.0
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/.gitignore +1 -0
- data/README.md +136 -3
- data/cloudcheckr.gemspec +4 -0
- data/lib/cloud_checkr.rb +4 -0
- data/lib/cloud_checkr/api.rb +43 -0
- data/lib/cloud_checkr/api/client.rb +107 -0
- data/lib/cloud_checkr/api/controller.rb +13 -0
- data/lib/cloud_checkr/api/controllers.rb +55 -0
- data/lib/cloud_checkr/api/endpoints.json +289 -0
- data/lib/cloud_checkr/api/endpoints.yml +628 -0
- data/lib/cloud_checkr/api/response_error.rb +16 -0
- data/lib/cloudcheckr.rb +2 -5
- data/lib/cloudcheckr/version.rb +1 -1
- metadata +52 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dec582152815019c9671a80a39292bb06e20a3aa
|
4
|
+
data.tar.gz: 91019358515155970f75a17af21282dd3f0a2743
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d23ddc22acb2a9a37ec7e0aa5de661abe3b16416e9e1bb69c032126d06316b7abdb5b22ab514f7dcf0ffdc7a2e8078fcc13a4510cdfcebd8ecda3282849b0902
|
7
|
+
data.tar.gz: 7f817f70d6d89f74321cfb83d53b9ad2d1380b889a033efa09c66fc7f76c08ca2fd3c5e2e59efbabba23d04cdfb10410d666240bd4793057a1dc8583790af134
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# CloudCheckr
|
2
2
|
|
3
|
-
|
3
|
+
This is the Ruby client for the CloudCheckr API.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,7 +18,133 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
The API client uses JSON by default. Here's how to instantiate an API client.
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
# The only thing you need is an API key
|
25
|
+
client = CloudCheckr::API::Client.new(access_key: "146D0Y8R...W6U0463K")
|
26
|
+
|
27
|
+
# Another option is to set the API key globally
|
28
|
+
CloudCheckr::API.access_key("146D0Y8R...W6U0463K")
|
29
|
+
client = CloudCheckr::API::Client.new
|
30
|
+
|
31
|
+
# Alternatively, keep the API key in an environment variable
|
32
|
+
ENV['CLOUDCHECKR_ACCESS_KEY'] = "146D0Y8R...W6U0463K"
|
33
|
+
client = CloudCheckr::API::Client.new
|
34
|
+
|
35
|
+
# Use XML instead (not fully implemented)
|
36
|
+
client = CloudCheckr::API::Client.new(format: :xml)
|
37
|
+
```
|
38
|
+
|
39
|
+
Each endpoint (or "API call") is grouped into a "controller". The API client has a method representing each controller, and each controller has a method for each API call.
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
client = CloudCheckr::API::Client.new
|
43
|
+
|
44
|
+
# The API client is pre-configured with a list of controllers, for which you can get a listing
|
45
|
+
# Call any of these as a method on the `client`
|
46
|
+
controller_names = client.controller_names
|
47
|
+
# => [:account, :alert, :best_practice, :billing, :change_monitoring, :cloudwatch, :cloudwatchevent, :help, :inventory, :security]
|
48
|
+
|
49
|
+
# Each controller is pre-configured with a list of API calls, for which you can also get a listing
|
50
|
+
# Call any of these as a method on a controller
|
51
|
+
api_calls = client.help.api_calls
|
52
|
+
# => [:get_all_api_endpoints]
|
53
|
+
|
54
|
+
# Let's get a list of all endpoints available to you based on your API access key
|
55
|
+
# NOTE: The API client is pre-configured with a cached list of endpoints
|
56
|
+
# and does not use the results of this call, specific to your API access key
|
57
|
+
# https://api.cloudcheckr.com/api/help.json/get_all_api_endpoints?access_key=[access_key]
|
58
|
+
endpoints = client.help.get_all_api_endpoints
|
59
|
+
# => [{"controller_name"=>"account", "api_calls"=>[{"method_name"=>"get_users"...
|
60
|
+
|
61
|
+
# As an example, we'll call the first endpoint listed in the above response
|
62
|
+
# https://api.cloudcheckr.com/api/account.json/get_users?access_key=[access_key]
|
63
|
+
users = client.account.get_users
|
64
|
+
# => {"users_and_accounts"=>[{"username"=>"user@example.com", "account_names"=>["Example"]}]}
|
65
|
+
|
66
|
+
# Pass parameters to an API call
|
67
|
+
client.account.remove_user(email: "user@example.com")
|
68
|
+
|
69
|
+
# Pass headers to an API call
|
70
|
+
client.account.remove_user({email: "user@example.com"}, {'Content-Type': 'application/json'})
|
71
|
+
```
|
72
|
+
|
73
|
+
_NOTE: The controllers and API calls are defined in [endpoints.yml](./lib/cloud_checkr/api/endpoints.yml) (which is a cached listing retrieved from [get_all_api_endpoints](http://support.cloudcheckr.com/cloudcheckr-api-userguide/cloudcheckr-api-reference-guide/#get_all_api_endpoints))._
|
74
|
+
|
75
|
+
Here's more information about the [API Reference](http://support.cloudcheckr.com/cloudcheckr-api-userguide/cloudcheckr-api-reference-guide/).
|
76
|
+
|
77
|
+
### Admin API
|
78
|
+
|
79
|
+
Some endpoints are admin-level and require an account name.
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
access_key = "146D0Y8R...W6U0463K"
|
83
|
+
account = "Account Name"
|
84
|
+
|
85
|
+
# Create an API client for with a default account specified
|
86
|
+
client = CloudCheckr::API::Client.new(access_key: access_key, use_account: account)
|
87
|
+
|
88
|
+
# Another option is to set the default account globally
|
89
|
+
CloudCheckr::API.use_account(account)
|
90
|
+
client = CloudCheckr::API::Client.new
|
91
|
+
|
92
|
+
# Alternatively, keep the API key in an environment variable
|
93
|
+
ENV['CLOUDCHECKR_USE_ACCOUNT'] = account
|
94
|
+
client = CloudCheckr::API::Client.new
|
95
|
+
```
|
96
|
+
|
97
|
+
Here's more information about the [Admin API](http://support.cloudcheckr.com/cloudcheckr-api-userguide/cloudcheckr-admin-api-reference-guide/).
|
98
|
+
|
99
|
+
Here's the [Admin API User Guide](http://support.cloudcheckr.com/cloudcheckr-api-userguide/).
|
100
|
+
|
101
|
+
### Faraday
|
102
|
+
|
103
|
+
The API client uses [Faraday](https://github.com/lostisland/faraday) under the hood. [Faraday Middleware](https://github.com/lostisland/faraday_middleware) is utilized to parse JSON and XML responses. JSON responses are wrapped in [Hashie::Mash](https://github.com/intridea/hashie) for easy access to data.
|
104
|
+
|
105
|
+
It's easy to customize Faraday to your liking.
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
# Globally apply Faraday settings
|
109
|
+
CloudCheckr::API.connection_builder do |faraday|
|
110
|
+
faraday.request :url_encoded
|
111
|
+
|
112
|
+
faraday.response :xml, content_type: /\bxml$/
|
113
|
+
faraday.response :json, content_type: /\bjson$/
|
114
|
+
faraday.response :mashify, content_type: /\bjson$/
|
115
|
+
faraday.response :logger, nil, bodies: true
|
116
|
+
|
117
|
+
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
118
|
+
end
|
119
|
+
|
120
|
+
# Alternatively, apply Faraday settings per client
|
121
|
+
client = CloudCheckr::API::Client.new do
|
122
|
+
faraday.request :url_encoded
|
123
|
+
|
124
|
+
faraday.response :xml, content_type: /\bxml$/
|
125
|
+
faraday.response :json, content_type: /\bjson$/
|
126
|
+
faraday.response :mashify, content_type: /\bjson$/
|
127
|
+
faraday.response :logger, nil, bodies: true
|
128
|
+
|
129
|
+
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
130
|
+
end
|
131
|
+
```
|
132
|
+
|
133
|
+
You may also want to configure individual Faraday requests. This can be accomplished with any API call (see [Faraday examples](https://github.com/lostisland/faraday) for specifics).
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
client = CloudCheckr::API::Client.new
|
137
|
+
|
138
|
+
# Let's get a list of all endpoints available to you based on your API access key
|
139
|
+
endpoints = client.help.get_all_api_endpoints do |request|
|
140
|
+
req.url '/search', page: 2
|
141
|
+
req.params['limit'] = 100
|
142
|
+
req.headers['Content-Type'] = 'application/json'
|
143
|
+
req.body = '{ "name": "value" }'
|
144
|
+
req.options.timeout = 5 # open/read timeout in seconds
|
145
|
+
req.options.open_timeout = 2 # connection open timeout in seconds
|
146
|
+
end
|
147
|
+
```
|
22
148
|
|
23
149
|
## Contributing
|
24
150
|
|
@@ -27,3 +153,10 @@ TODO: Write usage instructions here
|
|
27
153
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
154
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
155
|
5. Create a new Pull Request
|
156
|
+
|
157
|
+
### TODO
|
158
|
+
|
159
|
+
* Determine if there is a use case for XML format
|
160
|
+
* RSpec tests
|
161
|
+
|
162
|
+
|
data/cloudcheckr.gemspec
CHANGED
@@ -18,7 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency "faraday"
|
22
|
+
spec.add_dependency "faraday_middleware"
|
23
|
+
|
21
24
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
25
|
spec.add_development_dependency "rake"
|
23
26
|
spec.add_development_dependency "rspec"
|
27
|
+
spec.add_development_dependency "faraday-detailed_logger"
|
24
28
|
end
|
data/lib/cloud_checkr.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative "./api/controller"
|
2
|
+
require_relative "./api/controllers"
|
3
|
+
require_relative "./api/client"
|
4
|
+
require_relative "./api/response_error"
|
5
|
+
|
6
|
+
module CloudCheckr
|
7
|
+
module API
|
8
|
+
CONTROLLERS = CloudCheckr::API::Controllers.build_controller_classes!
|
9
|
+
|
10
|
+
def self.access_key(new_access_key = nil)
|
11
|
+
if new_access_key.nil?
|
12
|
+
@@access_key ||= ENV['CLOUDCHECKR_ACCESS_KEY']
|
13
|
+
else
|
14
|
+
@@access_key = new_access_key
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.use_account(new_use_account = nil)
|
19
|
+
if new_use_account.nil?
|
20
|
+
@@use_account ||= ENV['CLOUDCHECKR_USE_ACCOUNT']
|
21
|
+
else
|
22
|
+
@@use_account = new_use_account
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.connection_builder(&builder)
|
27
|
+
@@connection_builder = builder || @@connection_builder
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Dynamically create methods on the Client class for each controller
|
33
|
+
|
34
|
+
CloudCheckr::API::CONTROLLERS.each do |controller_name, controller_class|
|
35
|
+
CloudCheckr::API::Client.send(:define_method, controller_name) do
|
36
|
+
instance_variable_get(:"@#{controller_name}") || instance_variable_set(:"@#{controller_name}", controller_class.new(self))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Dynamically expose list of controllers available
|
41
|
+
|
42
|
+
controller_names = CloudCheckr::API::CONTROLLERS.keys
|
43
|
+
CloudCheckr::API::Client.send(:define_method, :controller_names){ controller_names }
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'ostruct'
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday_middleware'
|
5
|
+
# require 'faraday/detailed_logger'
|
6
|
+
|
7
|
+
module CloudCheckr
|
8
|
+
module API
|
9
|
+
class Client
|
10
|
+
DEFAULT_URL = "https://api2.cloudcheckr.com".freeze
|
11
|
+
DEFAULT_FORMAT = :json
|
12
|
+
|
13
|
+
attr_reader :access_key, :url, :format
|
14
|
+
|
15
|
+
def initialize(options = {}, &connection_builder)
|
16
|
+
super()
|
17
|
+
|
18
|
+
@access_key = options.fetch(:access_key, API.access_key)
|
19
|
+
@use_account = options.fetch(:use_account, API.use_account)
|
20
|
+
@url = options.fetch(:url, DEFAULT_URL)
|
21
|
+
@format = options.fetch(:format, :json)
|
22
|
+
@connection_builder = connection_builder
|
23
|
+
end
|
24
|
+
|
25
|
+
# API
|
26
|
+
|
27
|
+
def get(controller_name, api_call, params = nil, headers = nil, &request_builder)
|
28
|
+
handle_response api.get(prepare_path(controller_name, api_call), prepare_params(params), headers, &request_builder)
|
29
|
+
end
|
30
|
+
|
31
|
+
def post(controller_name, api_call, params = nil, headers = nil, &request_builder)
|
32
|
+
handle_response api.post(prepare_path(controller_name, api_call), prepare_params(params), headers, &request_builder)
|
33
|
+
end
|
34
|
+
|
35
|
+
def api
|
36
|
+
@api ||= build_connection
|
37
|
+
end
|
38
|
+
|
39
|
+
def default_params
|
40
|
+
{access_key: @access_key}
|
41
|
+
end
|
42
|
+
|
43
|
+
def require_params!(required_params, params)
|
44
|
+
missing_required_params = required_params.map(&:to_sym) - prepare_params(params).keys.map(&:to_sym)
|
45
|
+
|
46
|
+
if missing_required_params.any?
|
47
|
+
raise "Missing required parameters: #{missing_required_params.join(', ')}"
|
48
|
+
else
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def prepare_path(controller_name, api_call)
|
56
|
+
"/api/#{controller_name}.#{@format}/#{api_call}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def prepare_params(params)
|
60
|
+
if params.nil?
|
61
|
+
default_params
|
62
|
+
else
|
63
|
+
default_params.merge(params)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def handle_response(response)
|
68
|
+
data = response.body
|
69
|
+
|
70
|
+
if response.status != 200
|
71
|
+
# TODO: Currently assumes JSON response
|
72
|
+
raise ::CloudCheckr::API::ResponseError.new(data)
|
73
|
+
else
|
74
|
+
data
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def build_connection
|
79
|
+
Faraday.new(url: @url) do |faraday|
|
80
|
+
apply_connection_settings(faraday)
|
81
|
+
|
82
|
+
# Apply global settings, then instance settings
|
83
|
+
[::CloudCheckr::API.connection_builder, @connection_builder].each do |builder|
|
84
|
+
builder.call(faraday) if builder
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def apply_connection_settings(faraday)
|
90
|
+
faraday.request @format
|
91
|
+
# form-encode POST params
|
92
|
+
faraday.request :url_encoded
|
93
|
+
|
94
|
+
faraday.response :xml, content_type: /\bxml$/
|
95
|
+
faraday.response :json, content_type: /\bjson$/
|
96
|
+
faraday.response :mashify, content_type: /\bjson$/
|
97
|
+
# faraday.response @format
|
98
|
+
# faraday.response :mashify if @format == :json
|
99
|
+
|
100
|
+
# faraday.response :logger, nil, bodies: true
|
101
|
+
# faraday.response :detailed_logger
|
102
|
+
|
103
|
+
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module CloudCheckr
|
4
|
+
module API
|
5
|
+
module Controllers
|
6
|
+
|
7
|
+
# Returns a [Hash] with controller name and class
|
8
|
+
def self.build_controller_classes!
|
9
|
+
endpoints_path = File.join(File.dirname(__FILE__), 'endpoints.yml')
|
10
|
+
endpoints_schemas = YAML.load_file(endpoints_path)
|
11
|
+
controllers = {}
|
12
|
+
|
13
|
+
# Define a controller class for each controller name
|
14
|
+
endpoints_schemas.each do |schema|
|
15
|
+
controller_name = schema['controller_name'].to_sym
|
16
|
+
controller_class_name = schema['controller_name'].split('_').collect(&:capitalize).join + 'Controller'
|
17
|
+
|
18
|
+
controller_class = Class.new(::CloudCheckr::API::Controller) do
|
19
|
+
method_names = []
|
20
|
+
|
21
|
+
# Define a method for each API call
|
22
|
+
schema['api_calls'].each do |api_call|
|
23
|
+
method_name = api_call['method_name'].to_sym
|
24
|
+
required_params = api_call['param_names'].lazy.select{|name| name.include?('(required)')}.map{|name| name.gsub(/\([^\)]+\)/, '').to_sym}.to_a
|
25
|
+
|
26
|
+
if api_call['method_name'].start_with?('get_')
|
27
|
+
define_method(method_name) do |params = {}, headers = nil, &request_builder|
|
28
|
+
@client.require_params!(required_params, params)
|
29
|
+
@client.get(controller_name, method_name, params, headers, &request_builder)
|
30
|
+
end
|
31
|
+
else
|
32
|
+
define_method(method_name) do |params = {}, headers = nil, &request_builder|
|
33
|
+
@client.require_params!(required_params, params)
|
34
|
+
@client.post(controller_name, method_name, params, headers, &request_builder)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
method_names << method_name
|
39
|
+
end
|
40
|
+
|
41
|
+
define_method(:api_calls){ method_names }
|
42
|
+
end
|
43
|
+
|
44
|
+
# Register the class within the Controllers module
|
45
|
+
self.const_set(controller_class_name, controller_class)
|
46
|
+
|
47
|
+
controllers[controller_name] = controller_class
|
48
|
+
end
|
49
|
+
|
50
|
+
controllers
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,289 @@
|
|
1
|
+
[{
|
2
|
+
"controller_name": "account",
|
3
|
+
"api_calls": [{
|
4
|
+
"method_name": "get_users",
|
5
|
+
"param_names": ["(required)(admin level)access_key", "use_account"]
|
6
|
+
}, {
|
7
|
+
"method_name": "remove_user",
|
8
|
+
"param_names": ["(required)(admin level)access_key", "(required)email", "use_account"]
|
9
|
+
}, {
|
10
|
+
"method_name": "get_accounts",
|
11
|
+
"param_names": ["(required)(admin level)access_key", "use_account"]
|
12
|
+
}, {
|
13
|
+
"method_name": "revoke_account",
|
14
|
+
"param_names": ["(required)(admin level)access_key", "(required)email", "(required)accounts", "use_account"]
|
15
|
+
}, {
|
16
|
+
"method_name": "grant_account",
|
17
|
+
"param_names": ["(required)(admin level)access_key", "(required)email", "(required)accounts", "cost_report", "blended_cost", "unblended_cost", "list_cost", "resource_utilization_reports", "trending_reports", "change_monitoring", "best_practices", "all_access", "use_account"]
|
18
|
+
}, {
|
19
|
+
"method_name": "add_account",
|
20
|
+
"param_names": ["(required)access_key", "(required)account_name", "user_name", "aws_access_key", "aws_secret_key", "account_tag", "emails"]
|
21
|
+
}, {
|
22
|
+
"method_name": "delete_account",
|
23
|
+
"param_names": ["(required)access_key", "(required)account_name"]
|
24
|
+
}, {
|
25
|
+
"method_name": "tag_account",
|
26
|
+
"param_names": ["(required)access_key", "(required)account_name", "(required)account_tag"]
|
27
|
+
}, {
|
28
|
+
"method_name": "untag_account",
|
29
|
+
"param_names": ["(required)access_key", "(required)account_name", "(required)account_tag"]
|
30
|
+
}, {
|
31
|
+
"method_name": "edit_credential",
|
32
|
+
"param_names": ["(required)(admin level)access_key", "(required)aws_access_key", "(required)aws_secret_key", "(required)use_account"]
|
33
|
+
}, {
|
34
|
+
"method_name": "edit_account",
|
35
|
+
"param_names": ["(required)(admin level)access_key", "(required)emails", "(required)use_account", "alert_daily_billing", "alert_health_affected", "alert_health_all", "change_monitoring", "best_practices", "daily_bill_summary", "monthly_bill_summary", "daily_consolidated_bill_summary", "monthly_consolidated_bill_summary", "inventory_summary_report", "ec2_trending_report", "s3_summary_report", "ec2_resource_utilization_report"]
|
36
|
+
}, {
|
37
|
+
"method_name": "add_user",
|
38
|
+
"param_names": ["(required)access_key", "(required)email", "(required)account_access", "(required)user_role", "cost_report", "blended_cost", "unblended_cost", "list_cost", "resource_utilization_reports", "trending_reports", "change_monitoring", "best_practices", "all_access", "auth_types"]
|
39
|
+
}, {
|
40
|
+
"method_name": "add_users",
|
41
|
+
"param_names": ["(required)access_key", "(required)emails", "(required)account_access", "(required)user_role", "cost_report", "blended_cost", "unblended_cost", "list_cost", "resource_utilization_reports", "trending_reports", "change_monitoring", "best_practices", "all_access"]
|
42
|
+
}, {
|
43
|
+
"method_name": "copy_user",
|
44
|
+
"param_names": ["(required)(admin level)access_key", "(required)email_to_copy", "(required)emails", "use_account"]
|
45
|
+
}, {
|
46
|
+
"method_name": "get_account_level_tags",
|
47
|
+
"param_names": ["(required)(admin level)access_key", "account", "use_account"]
|
48
|
+
}, {
|
49
|
+
"method_name": "test_key",
|
50
|
+
"param_names": ["(required)access_key"]
|
51
|
+
}, {
|
52
|
+
"method_name": "get_improperly_tagged_resources",
|
53
|
+
"param_names": ["(required)access_key", "date_from", "date_to", "aws_account_id", "rule_name", "resource_type", "resource_state"]
|
54
|
+
}]
|
55
|
+
}, {
|
56
|
+
"controller_name": "alert",
|
57
|
+
"api_calls": [{
|
58
|
+
"method_name": "add_cost_alert",
|
59
|
+
"param_names": ["(required)(admin level)access_key", "(required)alert_name", "emails", "sns_topics", "pagerduty_service_key", "budget", "percent_of_budget", "send_every_days", "only_send_once", "budget_period", "budget_custom_start_date", "budget_custom_end_date", "saved_filter", "account_to_filter", "use_account"]
|
60
|
+
}, {
|
61
|
+
"method_name": "delete_cost_alert",
|
62
|
+
"param_names": ["(required)(admin level)access_key", "(required)alert_name", "use_account"]
|
63
|
+
}, {
|
64
|
+
"method_name": "add_cost_alert_threshold",
|
65
|
+
"param_names": ["(required)(admin level)access_key", "(required)alert_name", "emails", "sns_topics", "pagerduty_service_key", "budget", "percent_of_budget", "send_every_days", "only_send_once", "budget_period", "budget_custom_start_date", "budget_custom_end_date", "saved_filter", "account_to_filter", "use_account"]
|
66
|
+
}]
|
67
|
+
}, {
|
68
|
+
"controller_name": "best_practice",
|
69
|
+
"api_calls": [{
|
70
|
+
"method_name": "get_best_practices",
|
71
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "all_result", "importance", "category", "use_account"]
|
72
|
+
}]
|
73
|
+
}, {
|
74
|
+
"controller_name": "billing",
|
75
|
+
"api_calls": [{
|
76
|
+
"method_name": "get_invoice",
|
77
|
+
"param_names": ["(required)access_key", "(required)customer_names", "(required)start_date", "(required)end_date", "(required)format", "(required)cost_type", "regions", "currency_denomination", "currency_conversion", "show_credits", "tag_key", "tag_value", "product_names", "use_account"]
|
78
|
+
}, {
|
79
|
+
"method_name": "get_invoice_customers",
|
80
|
+
"param_names": ["(required)access_key", "use_account"]
|
81
|
+
}, {
|
82
|
+
"method_name": "create_customer",
|
83
|
+
"param_names": ["(required)access_key", "(required)name", "(required)email", "(required)address", "(required)aws_accounts"]
|
84
|
+
}, {
|
85
|
+
"method_name": "get_detailed_billing_analysis",
|
86
|
+
"param_names": ["(required)(admin level)access_key", "(required)saved_filter_name", "start", "end", "use_account"]
|
87
|
+
}, {
|
88
|
+
"method_name": "get_detailed_billing_with_grouping",
|
89
|
+
"param_names": ["(required)(admin level)access_key", "(required)saved_filter_name", "start", "end", "use_account"]
|
90
|
+
}, {
|
91
|
+
"method_name": "get_ri_upfront_cost_amortization",
|
92
|
+
"param_names": ["(required)access_key", "(required)start", "(required)end", "(required)service"]
|
93
|
+
}, {
|
94
|
+
"method_name": "get_detailed_billing_file",
|
95
|
+
"param_names": ["(required)access_key", "(required)start", "(required)end", "(required)cost_type"]
|
96
|
+
}]
|
97
|
+
}, {
|
98
|
+
"controller_name": "change_monitoring",
|
99
|
+
"api_calls": [{
|
100
|
+
"method_name": "get_changes",
|
101
|
+
"param_names": ["(required)(admin level)access_key", "start", "end", "resource_id", "use_account"]
|
102
|
+
}]
|
103
|
+
}, {
|
104
|
+
"controller_name": "cloudwatch",
|
105
|
+
"api_calls": [{
|
106
|
+
"method_name": "get_history",
|
107
|
+
"param_names": ["(required)(admin level)access_key", "start", "end", "service", "use_account"]
|
108
|
+
}]
|
109
|
+
}, {
|
110
|
+
"controller_name": "cloudwatchevent",
|
111
|
+
"api_calls": [{
|
112
|
+
"method_name": "get_detail",
|
113
|
+
"param_names": ["(required)access_key", "start", "end", "max_results", "use_account"]
|
114
|
+
}]
|
115
|
+
}, {
|
116
|
+
"controller_name": "help",
|
117
|
+
"api_calls": [{
|
118
|
+
"method_name": "get_all_api_endpoints",
|
119
|
+
"param_names": ["(required)access_key"]
|
120
|
+
}]
|
121
|
+
}, {
|
122
|
+
"controller_name": "inventory",
|
123
|
+
"api_calls": [{
|
124
|
+
"method_name": "get_resources_rds_snapshot_details",
|
125
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
126
|
+
}, {
|
127
|
+
"method_name": "get_resources_cloudformation_details",
|
128
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
129
|
+
}, {
|
130
|
+
"method_name": "get_resources_cloudsearch_details",
|
131
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
132
|
+
}, {
|
133
|
+
"method_name": "get_resources_dynamodb_details",
|
134
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
135
|
+
}, {
|
136
|
+
"method_name": "get_resources_elasticache_clusters_details",
|
137
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
138
|
+
}, {
|
139
|
+
"method_name": "get_resources_elasticache_nodes_details",
|
140
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
141
|
+
}, {
|
142
|
+
"method_name": "get_resources_elasticbeanstalk_details",
|
143
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
144
|
+
}, {
|
145
|
+
"method_name": "get_resources_elasticmapreduce_details",
|
146
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
147
|
+
}, {
|
148
|
+
"method_name": "get_resources_glacier_details",
|
149
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
150
|
+
}, {
|
151
|
+
"method_name": "get_resources_swf_details",
|
152
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
153
|
+
}, {
|
154
|
+
"method_name": "get_resources_vpc_details",
|
155
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
156
|
+
}, {
|
157
|
+
"method_name": "get_resources_iam_users",
|
158
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
159
|
+
}, {
|
160
|
+
"method_name": "get_resources_iam_groups",
|
161
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
162
|
+
}, {
|
163
|
+
"method_name": "get_resources_iam_roles",
|
164
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
165
|
+
}, {
|
166
|
+
"method_name": "get_resources_iam_Policies",
|
167
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
168
|
+
}, {
|
169
|
+
"method_name": "get_resources_workspaces_directories",
|
170
|
+
"param_names": ["(required)access_key", "custom_security_group", "directory_id", "directory_name", "iam_role_id", "region", "registration_code", "state", "type", "internet_access_enabled", "workdocs_enabled", "workspace_id", "user_name", "bundle_id", "error_code", "ip_address", "security_group_id", "subnet_id", "vpc_id", "date", "aws_account_ids", "max_results", "use_account"]
|
171
|
+
}, {
|
172
|
+
"method_name": "get_resources_workspaces_details",
|
173
|
+
"param_names": ["(required)access_key", "custom_security_group", "directory_id", "directory_name", "iam_role_id", "region", "registration_code", "state", "type", "internet_access_enabled", "workdocs_enabled", "workspace_id", "user_name", "bundle_id", "error_code", "ip_address", "security_group_id", "subnet_id", "vpc_id", "date", "aws_account_ids", "max_results", "use_account"]
|
174
|
+
}, {
|
175
|
+
"method_name": "get_tagged_resources",
|
176
|
+
"param_names": ["(required)(admin level)access_key", "date", "tag_key", "resource_type", "use_account"]
|
177
|
+
}, {
|
178
|
+
"method_name": "get_resources",
|
179
|
+
"param_names": ["(required)(admin level)access_key", "date", "use_account"]
|
180
|
+
}, {
|
181
|
+
"method_name": "get_resources_ec2_address_summary",
|
182
|
+
"param_names": ["(required)access_key", "date"]
|
183
|
+
}, {
|
184
|
+
"method_name": "get_resources_ec2_summary",
|
185
|
+
"param_names": ["(required)access_key", "date"]
|
186
|
+
}, {
|
187
|
+
"method_name": "get_resources_ebs_summary",
|
188
|
+
"param_names": ["(required)access_key", "date"]
|
189
|
+
}, {
|
190
|
+
"method_name": "get_resources_ami_summary",
|
191
|
+
"param_names": ["(required)access_key", "date"]
|
192
|
+
}, {
|
193
|
+
"method_name": "get_resources_ec2_security_group_summary",
|
194
|
+
"param_names": ["(required)access_key", "date"]
|
195
|
+
}, {
|
196
|
+
"method_name": "get_resources_ec2_load_balancer_summary",
|
197
|
+
"param_names": ["(required)access_key", "date"]
|
198
|
+
}, {
|
199
|
+
"method_name": "get_resources_s3_summary",
|
200
|
+
"param_names": ["(required)access_key", "date"]
|
201
|
+
}, {
|
202
|
+
"method_name": "get_resources_rds_summary",
|
203
|
+
"param_names": ["(required)access_key", "date"]
|
204
|
+
}, {
|
205
|
+
"method_name": "get_resources_rds_backup_summary",
|
206
|
+
"param_names": ["(required)access_key", "date"]
|
207
|
+
}, {
|
208
|
+
"method_name": "get_resources_rds_security_group_summary",
|
209
|
+
"param_names": ["(required)access_key", "date"]
|
210
|
+
}, {
|
211
|
+
"method_name": "get_resources_rds_parameter_group_summary",
|
212
|
+
"param_names": ["(required)access_key", "date"]
|
213
|
+
}, {
|
214
|
+
"method_name": "get_resources_rds_snapshot_summary",
|
215
|
+
"param_names": ["(required)access_key", "date"]
|
216
|
+
}, {
|
217
|
+
"method_name": "get_resources_cloudformation_summary",
|
218
|
+
"param_names": ["(required)access_key", "date"]
|
219
|
+
}, {
|
220
|
+
"method_name": "get_resources_cloudsearch_summary",
|
221
|
+
"param_names": ["(required)access_key", "date"]
|
222
|
+
}, {
|
223
|
+
"method_name": "get_resources_dynamodb_summary",
|
224
|
+
"param_names": ["(required)access_key", "date"]
|
225
|
+
}, {
|
226
|
+
"method_name": "get_resources_elasticache_summary",
|
227
|
+
"param_names": ["(required)access_key", "date"]
|
228
|
+
}, {
|
229
|
+
"method_name": "get_resources_elasticbeanstalk_summary",
|
230
|
+
"param_names": ["(required)access_key", "date"]
|
231
|
+
}, {
|
232
|
+
"method_name": "get_resources_elasticmapreduce_summary",
|
233
|
+
"param_names": ["(required)access_key", "date"]
|
234
|
+
}, {
|
235
|
+
"method_name": "get_resources_glacier_summary",
|
236
|
+
"param_names": ["(required)access_key", "date"]
|
237
|
+
}, {
|
238
|
+
"method_name": "get_resources_swf_summary",
|
239
|
+
"param_names": ["(required)access_key", "date"]
|
240
|
+
}, {
|
241
|
+
"method_name": "get_resources_vpc_summary",
|
242
|
+
"param_names": ["(required)access_key", "date"]
|
243
|
+
}, {
|
244
|
+
"method_name": "get_resources_workspaces_summary",
|
245
|
+
"param_names": ["(required)access_key", "date"]
|
246
|
+
}, {
|
247
|
+
"method_name": "get_resources_ec2_details",
|
248
|
+
"param_names": ["(required)access_key", "instance_ids", "resource_tags", "date", "aws_account_ids", "max_results", "use_account"]
|
249
|
+
}, {
|
250
|
+
"method_name": "get_resources_ec2_address_details",
|
251
|
+
"param_names": ["(required)access_key", "instance_ids", "resource_tags", "date", "aws_account_ids", "max_results", "use_account"]
|
252
|
+
}, {
|
253
|
+
"method_name": "get_resources_ebs_details",
|
254
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
255
|
+
}, {
|
256
|
+
"method_name": "get_resources_ebs_snapshots",
|
257
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
258
|
+
}, {
|
259
|
+
"method_name": "get_resources_ami_details",
|
260
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
261
|
+
}, {
|
262
|
+
"method_name": "get_resources_ec2_security_group_details",
|
263
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
264
|
+
}, {
|
265
|
+
"method_name": "get_resources_ec2_load_balancer_details",
|
266
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
267
|
+
}, {
|
268
|
+
"method_name": "get_resources_s3_details",
|
269
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
270
|
+
}, {
|
271
|
+
"method_name": "get_resources_rds_details",
|
272
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
273
|
+
}, {
|
274
|
+
"method_name": "get_resources_rds_backup_details",
|
275
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
276
|
+
}, {
|
277
|
+
"method_name": "get_resources_rds_security_group_details",
|
278
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
279
|
+
}, {
|
280
|
+
"method_name": "get_resources_rds_parameter_group_details",
|
281
|
+
"param_names": ["(required)access_key", "date", "aws_account_ids", "max_results", "use_account"]
|
282
|
+
}]
|
283
|
+
}, {
|
284
|
+
"controller_name": "security",
|
285
|
+
"api_calls": [{
|
286
|
+
"method_name": "get_publicly_accessible_resources",
|
287
|
+
"param_names": ["(required)access_key", "date"]
|
288
|
+
}]
|
289
|
+
}]
|