enstratus 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/NOTES.md +80 -0
- data/README.md +51 -0
- data/Rakefile +1 -0
- data/TODO.md +21 -0
- data/config-sample.yaml +5 -0
- data/enstratus.gemspec +24 -0
- data/examples/list-servers.rb +17 -0
- data/lib/enstratus.rb +49 -0
- data/lib/enstratus/admin.rb +13 -0
- data/lib/enstratus/admin/account.rb +30 -0
- data/lib/enstratus/admin/acl.rb +8 -0
- data/lib/enstratus/admin/api_key.rb +24 -0
- data/lib/enstratus/admin/billing_code.rb +21 -0
- data/lib/enstratus/admin/customer.rb +25 -0
- data/lib/enstratus/admin/group.rb +12 -0
- data/lib/enstratus/admin/job.rb +16 -0
- data/lib/enstratus/admin/role.rb +13 -0
- data/lib/enstratus/admin/user.rb +30 -0
- data/lib/enstratus/analytics.rb +6 -0
- data/lib/enstratus/analytics/server_analytics.rb +12 -0
- data/lib/enstratus/analytics/tier_analytics.rb +12 -0
- data/lib/enstratus/automation.rb +19 -0
- data/lib/enstratus/automation/configuration_management_account.rb +0 -0
- data/lib/enstratus/automation/configuration_management_server.rb +0 -0
- data/lib/enstratus/automation/configuration_management_service.rb +0 -0
- data/lib/enstratus/automation/configuration_management_system.rb +0 -0
- data/lib/enstratus/automation/data_source.rb +0 -0
- data/lib/enstratus/automation/data_source_backup.rb +0 -0
- data/lib/enstratus/automation/deployment.rb +30 -0
- data/lib/enstratus/automation/deployment_load_balancer.rb +14 -0
- data/lib/enstratus/automation/launch_configuration.rb +0 -0
- data/lib/enstratus/automation/personality.rb +0 -0
- data/lib/enstratus/automation/script.rb +0 -0
- data/lib/enstratus/automation/service.rb +0 -0
- data/lib/enstratus/automation/service_backup.rb +0 -0
- data/lib/enstratus/automation/ssl_certificate.rb +0 -0
- data/lib/enstratus/automation/tier.rb +28 -0
- data/lib/enstratus/automation/tier_backup.rb +0 -0
- data/lib/enstratus/configuration.rb +13 -0
- data/lib/enstratus/finance.rb +5 -0
- data/lib/enstratus/finance/server_prepayment.rb +29 -0
- data/lib/enstratus/geography.rb +8 -0
- data/lib/enstratus/geography/cloud.rb +16 -0
- data/lib/enstratus/geography/data_center.rb +14 -0
- data/lib/enstratus/geography/region.rb +14 -0
- data/lib/enstratus/geography/subscription.rb +51 -0
- data/lib/enstratus/infrastructure.rb +11 -0
- data/lib/enstratus/infrastructure/machine_image.rb +31 -0
- data/lib/enstratus/infrastructure/server.rb +50 -0
- data/lib/enstratus/infrastructure/server_product.rb +21 -0
- data/lib/enstratus/infrastructure/snapshot.rb +32 -0
- data/lib/enstratus/infrastructure/volume.rb +31 -0
- data/lib/enstratus/infrastructure/volume_product.rb +4 -0
- data/lib/enstratus/network.rb +10 -0
- data/lib/enstratus/network/dns_zone.rb +0 -0
- data/lib/enstratus/network/firewall.rb +0 -0
- data/lib/enstratus/network/firewall_rule.rb +0 -0
- data/lib/enstratus/network/load_balancer.rb +0 -0
- data/lib/enstratus/network/network.rb +0 -0
- data/lib/enstratus/network/subnet.rb +0 -0
- data/lib/enstratus/platform.rb +47 -0
- data/lib/enstratus/platform/account_status.rb +0 -0
- data/lib/enstratus/platform/action.rb +0 -0
- data/lib/enstratus/platform/alert_configuration.rb +0 -0
- data/lib/enstratus/platform/algorithm.rb +0 -0
- data/lib/enstratus/platform/architecture.rb +0 -0
- data/lib/enstratus/platform/backup_status.rb +0 -0
- data/lib/enstratus/platform/breach_state.rb +0 -0
- data/lib/enstratus/platform/budget_state.rb +0 -0
- data/lib/enstratus/platform/cloud_subscription.rb +0 -0
- data/lib/enstratus/platform/color.rb +0 -0
- data/lib/enstratus/platform/credit_card.rb +0 -0
- data/lib/enstratus/platform/database_engine.rb +0 -0
- data/lib/enstratus/platform/deployment_state.rb +0 -0
- data/lib/enstratus/platform/deployment_type.rb +0 -0
- data/lib/enstratus/platform/distribution.rb +0 -0
- data/lib/enstratus/platform/dns_automation.rb +0 -0
- data/lib/enstratus/platform/dns_record.rb +0 -0
- data/lib/enstratus/platform/dns_record_type.rb +0 -0
- data/lib/enstratus/platform/event_type.rb +0 -0
- data/lib/enstratus/platform/job_status.rb +0 -0
- data/lib/enstratus/platform/jrusdiction.rb +0 -0
- data/lib/enstratus/platform/jurisdiction.rb +0 -0
- data/lib/enstratus/platform/key_value_database.rb +0 -0
- data/lib/enstratus/platform/lb_protocol.rb +0 -0
- data/lib/enstratus/platform/listener.rb +0 -0
- data/lib/enstratus/platform/load_balancer_scope.rb +0 -0
- data/lib/enstratus/platform/load_balancer_type.rb +0 -0
- data/lib/enstratus/platform/management_state.rb +0 -0
- data/lib/enstratus/platform/managment_state.rb +0 -0
- data/lib/enstratus/platform/message_queue.rb +0 -0
- data/lib/enstratus/platform/money.rb +0 -0
- data/lib/enstratus/platform/notification_setting.rb +0 -0
- data/lib/enstratus/platform/notification_targets.rb +0 -0
- data/lib/enstratus/platform/physical_address.rb +0 -0
- data/lib/enstratus/platform/platform.rb +0 -0
- data/lib/enstratus/platform/properties.rb +0 -0
- data/lib/enstratus/platform/protocol.rb +0 -0
- data/lib/enstratus/platform/push_notification_topic.rb +0 -0
- data/lib/enstratus/platform/qualifier.rb +0 -0
- data/lib/enstratus/platform/relational_database.rb +0 -0
- data/lib/enstratus/platform/relational_database_product.rb +0 -0
- data/lib/enstratus/platform/resource_type.rb +0 -0
- data/lib/enstratus/platform/scaling_rules.rb +0 -0
- data/lib/enstratus/platform/server_state.rb +0 -0
- data/lib/enstratus/platform/storage_object.rb +0 -0
- data/lib/enstratus/presenter.rb +0 -0
- data/lib/enstratus/request.rb +36 -0
- data/lib/enstratus/request_signer.rb +26 -0
- data/lib/enstratus/resource.rb +92 -0
- data/lib/enstratus/util.rb +5 -0
- data/lib/enstratus/version.rb +3 -0
- metadata +175 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/NOTES.md
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
_This is currently just the contents of the previous README_
|
2
|
+
|
3
|
+
# Setup
|
4
|
+
|
5
|
+
- Copy config-sample.yaml to config.yaml
|
6
|
+
- Edit config.yaml with your API keys
|
7
|
+
- Try running `examples/list-servers.rb`
|
8
|
+
|
9
|
+
# Notes
|
10
|
+
The only part of the library that's fleshed out right now is the request signer.
|
11
|
+
The examples are mainly the way I'm testing each aspect of the API right now.
|
12
|
+
|
13
|
+
## Specific example notes
|
14
|
+
Other than `list-regions`,`list-servers` and `list-clouds`, all the examples require some additional configuration. Take `list-datacenters` for instance:
|
15
|
+
|
16
|
+
- The list datacenters call REQUIRES a regionID as a query param
|
17
|
+
- If you run `list-regions.rb`, you can get a list of regionIds that API key has access to
|
18
|
+
- replace `@region_id = "11111111"` in `list-datacenters` with the appropriate region
|
19
|
+
- run `list-datacenters` and you should get the details back for that.
|
20
|
+
|
21
|
+
|
22
|
+
# Creating/Deleting a server
|
23
|
+
Now to be able to create a server, you'll need three bits of information:
|
24
|
+
|
25
|
+
- datacenterId
|
26
|
+
- machineImageId
|
27
|
+
- productId
|
28
|
+
|
29
|
+
We have a way of getting the datacenterID as described above. Now we need to get the machineImageId.
|
30
|
+
|
31
|
+
To get a list of machineImageIds, we HAVE to provide a regionId. We have that from above. So we update `list-images` with the regionId and we get back a list of machine images for that region.
|
32
|
+
|
33
|
+
_Note there are bugs in the current release of the API that are fixed in the next release. If you get an auth failure, please retry your request_
|
34
|
+
|
35
|
+
To get the list of available product ids, you'll need to run `list-products` with the appropriate regionID (or alternately a machineImageId). Since there's currently a bug with listing by region (you must provide an architecture), we're going to pass in a machineImageId instead.
|
36
|
+
|
37
|
+
This will give us a list of valid products for the image we want to use.
|
38
|
+
|
39
|
+
Now that you have all that information (datacenterID,machineImageId and productID), you can update create-server and run it. Server creation is an async process. Your response will look something like this:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
{"jobs"=>[{"jobId"=>56681, "status"=>"RUNNING"}]}
|
43
|
+
```
|
44
|
+
|
45
|
+
To see the status of all jobs, there's a `list-jobs` script that returns:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
{"jobs"=>
|
49
|
+
[
|
50
|
+
{"startDate"=>"2012-04-18T17:11:34.613+0000",
|
51
|
+
"jobId"=>56681,
|
52
|
+
"status"=>"RUNNING",
|
53
|
+
"description"=>"Launch Server enstratus.rb"}]}
|
54
|
+
```
|
55
|
+
|
56
|
+
When it's finally done, you'll see this:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
{"jobs"=>
|
60
|
+
[{"message"=>"241542",
|
61
|
+
"startDate"=>"2012-04-18T17:11:34.613+0000",
|
62
|
+
"jobId"=>56681,
|
63
|
+
"status"=>"COMPLETE",
|
64
|
+
"description"=>"Launch Server enstratus.rb",
|
65
|
+
"endDate"=>"2012-04-18T17:13:16.658+0000"}]}
|
66
|
+
```
|
67
|
+
|
68
|
+
Obviously, we don't want to leave this running so we edit `delete-server` and put in the machine ID. Again, you can call list-servers to get that. Delete calls do not return any content so you'll have to list jobs to see what's up:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
{"jobs"=>
|
72
|
+
[
|
73
|
+
{"startDate"=>"2012-04-18T17:23:54.075+0000",
|
74
|
+
"jobId"=>56682,
|
75
|
+
"status"=>"RUNNING",
|
76
|
+
"description"=>"Terminate 241542"}]}
|
77
|
+
```
|
78
|
+
|
79
|
+
If you call list-servers after the job is finished, the server should be gone
|
80
|
+
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# enstratus-ruby
|
2
|
+
This will soon be the gem to use for interacting with the enStratus API.
|
3
|
+
|
4
|
+
## Currently Implemented GET operations (by resource group)
|
5
|
+
|
6
|
+
_testing against enStratus SaaS api version 2012-02-29_
|
7
|
+
|
8
|
+
- Admin (all)
|
9
|
+
- Anayltics (all)
|
10
|
+
- Finance (all)
|
11
|
+
- Geography (all)
|
12
|
+
- Infrastructure (all)
|
13
|
+
- Automation (deployment, tier)
|
14
|
+
|
15
|
+
## status - 2012/05/06
|
16
|
+
I'm currently adding read-only support for all resources. The actual structure of a resource class may change.
|
17
|
+
|
18
|
+
**HOWEVER**
|
19
|
+
|
20
|
+
If you'd like to test against, your account:
|
21
|
+
|
22
|
+
|
23
|
+
(in an irb/pry session)
|
24
|
+
```ruby
|
25
|
+
require 'enstratus'
|
26
|
+
require 'pp'
|
27
|
+
|
28
|
+
Enstratus.configure("/path/to/config.yaml")
|
29
|
+
|
30
|
+
Enstratus::Infrastructure::Server.all
|
31
|
+
|
32
|
+
# array of Enstratus::Infrastructure::Server objects returned
|
33
|
+
```
|
34
|
+
|
35
|
+
See `lib/enstratus/infrastructure/` or `lib/enstratus/geography` for other resources currently done.
|
36
|
+
|
37
|
+
There is currently no error handling in place for calls that require query params. If you get some wonky errors, try
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
Enstratus::Geography::Region.all
|
41
|
+
|
42
|
+
# list of known regions returned
|
43
|
+
|
44
|
+
Enstratus::Infrastructure::MachineImage.all :regionId => some_region_id_from_above
|
45
|
+
|
46
|
+
# list of Machine Images returned
|
47
|
+
```
|
48
|
+
|
49
|
+
Again, currently read-only operations (so any `GET` call documented is implemented but not against all resources.
|
50
|
+
|
51
|
+
There's a small sample program in `examples` that shows what the current API I'm using to validate reads is. Likely to change.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/TODO.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# Fix `to_underscore` helper
|
2
|
+
Currently borking on all caps strings i.e. `subscribedCDN` becomes `subscribed_cd_n` instead of `subscribed_cdn`
|
3
|
+
|
4
|
+
# move attributes to elements where appropriate
|
5
|
+
Need to create a dsl for `elements` similar to attributes with appropriate distinction
|
6
|
+
|
7
|
+
# finish wiring up attributes (and elements)
|
8
|
+
Placeholders exist for handling extended information (mutability, type) but this needs to be fleshed out fully.
|
9
|
+
Same goes for elements when they come in to play.
|
10
|
+
|
11
|
+
# flesh out collections
|
12
|
+
Shitty array of objects is shitty. Do it right.
|
13
|
+
|
14
|
+
# error/exception handling
|
15
|
+
yeah...could use some
|
16
|
+
|
17
|
+
# remainder of CRUD
|
18
|
+
need to wire up ALL The operations
|
19
|
+
|
20
|
+
# tests
|
21
|
+
I don't always test but when I do....
|
data/config-sample.yaml
ADDED
data/enstratus.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "enstratus/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "enstratus"
|
7
|
+
s.version = Enstratus::VERSION
|
8
|
+
s.authors = ["John E. Vincent"]
|
9
|
+
s.email = ["lusis.org+github.com@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{enStratus API gem}
|
12
|
+
s.description = %q{gem for interacting with the enStratus API}
|
13
|
+
|
14
|
+
s.rubyforge_project = "enstratus"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "excon"
|
24
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
|
2
|
+
require 'enstratus'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
Enstratus.configure("#{File.expand_path(File.join(File.dirname(__FILE__), ".."))}/config.yaml")
|
6
|
+
# uncomment and set to true for raw repsonses
|
7
|
+
# or set debug: true in config.yaml
|
8
|
+
|
9
|
+
#Enstratus.configuration.debug = false
|
10
|
+
|
11
|
+
all_servers = Enstratus::Infrastructure::Server.all
|
12
|
+
|
13
|
+
# Pick the first server from all servers
|
14
|
+
single_server = Enstratus::Infrastructure::Server[all_servers.first.server_id]
|
15
|
+
|
16
|
+
pp all_servers
|
17
|
+
pp single_server
|
data/lib/enstratus.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require "enstratus/version"
|
2
|
+
require 'base64'
|
3
|
+
require 'openssl'
|
4
|
+
require 'excon'
|
5
|
+
require 'yaml'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
module Enstratus
|
9
|
+
UA = "enstratus.rb"
|
10
|
+
|
11
|
+
class << self
|
12
|
+
attr_accessor :configuration
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.configure(config_file=nil)
|
16
|
+
self.configuration ||= Configuration.new
|
17
|
+
if config_file.nil?
|
18
|
+
yield(configuration)
|
19
|
+
else
|
20
|
+
begin
|
21
|
+
c = YAML.load(File.open(config_file, 'r'){|f| f.read})
|
22
|
+
c.each do |k,v|
|
23
|
+
self.configuration.instance_variable_set("@#{k}", v)
|
24
|
+
end
|
25
|
+
rescue Exception => e
|
26
|
+
puts e.message
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.debug?
|
32
|
+
Enstratus.configuration.debug || false
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
require 'enstratus/util'
|
38
|
+
require 'enstratus/configuration'
|
39
|
+
require 'enstratus/request_signer'
|
40
|
+
require 'enstratus/request'
|
41
|
+
require 'enstratus/resource'
|
42
|
+
require 'enstratus/platform'
|
43
|
+
require 'enstratus/infrastructure'
|
44
|
+
require 'enstratus/geography'
|
45
|
+
require 'enstratus/admin'
|
46
|
+
require 'enstratus/analytics'
|
47
|
+
require 'enstratus/automation'
|
48
|
+
require 'enstratus/finance'
|
49
|
+
require 'enstratus/network'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Enstratus
|
2
|
+
module Admin; end
|
3
|
+
end
|
4
|
+
|
5
|
+
require 'enstratus/admin/account'
|
6
|
+
require 'enstratus/admin/acl'
|
7
|
+
require 'enstratus/admin/api_key'
|
8
|
+
require 'enstratus/admin/billing_code'
|
9
|
+
require 'enstratus/admin/customer'
|
10
|
+
require 'enstratus/admin/group'
|
11
|
+
require 'enstratus/admin/job'
|
12
|
+
require 'enstratus/admin/role'
|
13
|
+
require 'enstratus/admin/user'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Enstratus::Admin
|
2
|
+
class Account < Enstratus::Resource
|
3
|
+
attribute :account_id
|
4
|
+
attribute :default_budget
|
5
|
+
attribute :status
|
6
|
+
|
7
|
+
# Convert to element
|
8
|
+
attribute :alert_configuration
|
9
|
+
attribute :billing_address
|
10
|
+
attribute :billing_credit_card
|
11
|
+
attribute :billing_email
|
12
|
+
attribute :billing_phone
|
13
|
+
attribute :billing_system_id
|
14
|
+
attribute :cloud_subscription
|
15
|
+
attribute :configured
|
16
|
+
attribute :customer
|
17
|
+
attribute :dns_automation
|
18
|
+
attribute :name
|
19
|
+
attribute :owner_id
|
20
|
+
attribute :plan_id
|
21
|
+
attribute :provisioned
|
22
|
+
attribute :storage
|
23
|
+
attribute :subscribed
|
24
|
+
|
25
|
+
# docerror :not_documented
|
26
|
+
attribute :cloud_subscription_id
|
27
|
+
attribute :owner
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Enstratus::Admin
|
2
|
+
class ApiKey < Enstratus::Resource
|
3
|
+
collects_as :apiKeys
|
4
|
+
|
5
|
+
attribute :api_key_id
|
6
|
+
attribute :status
|
7
|
+
|
8
|
+
# elements
|
9
|
+
attribute :access_key
|
10
|
+
attribute :account
|
11
|
+
attribute :activation_timestamp
|
12
|
+
attribute :cidr_list
|
13
|
+
attribute :description
|
14
|
+
attribute :expiration_timestamp
|
15
|
+
attribute :configured
|
16
|
+
attribute :name
|
17
|
+
attribute :secret_key
|
18
|
+
attribute :user
|
19
|
+
|
20
|
+
# (docerror :undocumented)
|
21
|
+
attribute :state
|
22
|
+
attribute :activation
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Enstratus::Admin
|
2
|
+
class BillingCode < Enstratus::Resource
|
3
|
+
collects_as :billingCodes
|
4
|
+
|
5
|
+
attribute :billing_code_id
|
6
|
+
attribute :status
|
7
|
+
|
8
|
+
# elements
|
9
|
+
attribute :budget_state
|
10
|
+
attribute :customer
|
11
|
+
attribute :current_usage
|
12
|
+
attribute :description
|
13
|
+
attribute :finance_code
|
14
|
+
attribute :hard_quota
|
15
|
+
attribute :name
|
16
|
+
attribute :projected_usage
|
17
|
+
attribute :soft_quota
|
18
|
+
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Enstratus::Admin
|
2
|
+
class Customer < Enstratus::Resource
|
3
|
+
|
4
|
+
attribute :customer_id
|
5
|
+
attribute :status
|
6
|
+
|
7
|
+
# elements
|
8
|
+
attribute :admin_email
|
9
|
+
attribute :admin_first_name
|
10
|
+
attribute :admin_last_name
|
11
|
+
attribute :admin_password
|
12
|
+
attribute :admin_time_zone
|
13
|
+
attribute :accounting_currency
|
14
|
+
attribute :accounts
|
15
|
+
attribute :automated_exchange_rates
|
16
|
+
attribute :created
|
17
|
+
attribute :name
|
18
|
+
attribute :time_zone
|
19
|
+
|
20
|
+
# (docerror :undocumented)
|
21
|
+
attribute :business_name
|
22
|
+
attribute :created_timestamp
|
23
|
+
attribute :web_site
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Enstratus::Admin
|
2
|
+
class Job < Enstratus::Resource
|
3
|
+
|
4
|
+
attribute :job_id
|
5
|
+
attribute :status
|
6
|
+
|
7
|
+
# elements
|
8
|
+
attribute :description
|
9
|
+
attribute :end_date
|
10
|
+
attribute :message
|
11
|
+
|
12
|
+
# (docerror :undocumented)
|
13
|
+
attribute :start_date
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|