fog-joyent 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rubocop.yml +20 -0
- data/.rubocop_todo.yml +436 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +26 -0
- data/CONTRIBUTING.md +18 -0
- data/CONTRIBUTORS.md +17 -0
- data/Gemfile +4 -0
- data/LICENSE.md +10 -0
- data/README.md +29 -0
- data/Rakefile +12 -0
- data/fog-joyent.gemspec +29 -0
- data/lib/fog/bin/joyent.rb +33 -0
- data/lib/fog/joyent.rb +16 -0
- data/lib/fog/joyent/analytics.rb +310 -0
- data/lib/fog/joyent/compute.rb +272 -0
- data/lib/fog/joyent/core.rb +10 -0
- data/lib/fog/joyent/errors.rb +91 -0
- data/lib/fog/joyent/models/analytics/field.rb +13 -0
- data/lib/fog/joyent/models/analytics/fields.rb +24 -0
- data/lib/fog/joyent/models/analytics/instrumentation.rb +82 -0
- data/lib/fog/joyent/models/analytics/instrumentations.rb +23 -0
- data/lib/fog/joyent/models/analytics/joyent_module.rb +13 -0
- data/lib/fog/joyent/models/analytics/joyent_modules.rb +24 -0
- data/lib/fog/joyent/models/analytics/metric.rb +17 -0
- data/lib/fog/joyent/models/analytics/metrics.rb +16 -0
- data/lib/fog/joyent/models/analytics/transformation.rb +13 -0
- data/lib/fog/joyent/models/analytics/transformations.rb +24 -0
- data/lib/fog/joyent/models/analytics/type.rb +16 -0
- data/lib/fog/joyent/models/analytics/types.rb +24 -0
- data/lib/fog/joyent/models/analytics/value.rb +20 -0
- data/lib/fog/joyent/models/compute/datacenter.rb +11 -0
- data/lib/fog/joyent/models/compute/datacenters.rb +21 -0
- data/lib/fog/joyent/models/compute/flavor.rb +19 -0
- data/lib/fog/joyent/models/compute/flavors.rb +21 -0
- data/lib/fog/joyent/models/compute/image.rb +26 -0
- data/lib/fog/joyent/models/compute/images.rb +30 -0
- data/lib/fog/joyent/models/compute/key.rb +19 -0
- data/lib/fog/joyent/models/compute/keys.rb +32 -0
- data/lib/fog/joyent/models/compute/network.rb +12 -0
- data/lib/fog/joyent/models/compute/networks.rb +14 -0
- data/lib/fog/joyent/models/compute/server.rb +124 -0
- data/lib/fog/joyent/models/compute/servers.rb +35 -0
- data/lib/fog/joyent/models/compute/snapshot.rb +44 -0
- data/lib/fog/joyent/models/compute/snapshots.rb +35 -0
- data/lib/fog/joyent/requests/analytics/create_instrumentation.rb +25 -0
- data/lib/fog/joyent/requests/analytics/delete_instrumentation.rb +23 -0
- data/lib/fog/joyent/requests/analytics/describe_analytics.rb +26 -0
- data/lib/fog/joyent/requests/analytics/get_instrumentation.rb +26 -0
- data/lib/fog/joyent/requests/analytics/get_instrumentation_value.rb +30 -0
- data/lib/fog/joyent/requests/analytics/list_instrumentations.rb +25 -0
- data/lib/fog/joyent/requests/compute/add_machine_tags.rb +19 -0
- data/lib/fog/joyent/requests/compute/create_key.rb +54 -0
- data/lib/fog/joyent/requests/compute/create_machine.rb +16 -0
- data/lib/fog/joyent/requests/compute/create_machine_snapshot.rb +16 -0
- data/lib/fog/joyent/requests/compute/delete_all_machine_metadata.rb +16 -0
- data/lib/fog/joyent/requests/compute/delete_all_machine_tags.rb +15 -0
- data/lib/fog/joyent/requests/compute/delete_key.rb +27 -0
- data/lib/fog/joyent/requests/compute/delete_machine.rb +15 -0
- data/lib/fog/joyent/requests/compute/delete_machine_metadata.rb +16 -0
- data/lib/fog/joyent/requests/compute/delete_machine_snapshot.rb +18 -0
- data/lib/fog/joyent/requests/compute/delete_machine_tag.rb +15 -0
- data/lib/fog/joyent/requests/compute/get_dataset.rb +27 -0
- data/lib/fog/joyent/requests/compute/get_image.rb +28 -0
- data/lib/fog/joyent/requests/compute/get_key.rb +29 -0
- data/lib/fog/joyent/requests/compute/get_machine.rb +29 -0
- data/lib/fog/joyent/requests/compute/get_machine_metadata.rb +24 -0
- data/lib/fog/joyent/requests/compute/get_machine_snapshot.rb +15 -0
- data/lib/fog/joyent/requests/compute/get_machine_tag.rb +18 -0
- data/lib/fog/joyent/requests/compute/get_package.rb +32 -0
- data/lib/fog/joyent/requests/compute/list_datacenters.rb +16 -0
- data/lib/fog/joyent/requests/compute/list_datasets.rb +24 -0
- data/lib/fog/joyent/requests/compute/list_images.rb +25 -0
- data/lib/fog/joyent/requests/compute/list_keys.rb +25 -0
- data/lib/fog/joyent/requests/compute/list_machine_snapshots.rb +15 -0
- data/lib/fog/joyent/requests/compute/list_machine_tags.rb +20 -0
- data/lib/fog/joyent/requests/compute/list_machines.rb +26 -0
- data/lib/fog/joyent/requests/compute/list_networks.rb +26 -0
- data/lib/fog/joyent/requests/compute/list_packages.rb +34 -0
- data/lib/fog/joyent/requests/compute/reboot_machine.rb +15 -0
- data/lib/fog/joyent/requests/compute/resize_machine.rb +16 -0
- data/lib/fog/joyent/requests/compute/start_machine.rb +16 -0
- data/lib/fog/joyent/requests/compute/start_machine_from_snapshot.rb +15 -0
- data/lib/fog/joyent/requests/compute/stop_machine.rb +16 -0
- data/lib/fog/joyent/requests/compute/update_machine_metadata.rb +15 -0
- data/lib/fog/joyent/version.rb +5 -0
- data/tests/helper.rb +18 -0
- data/tests/helpers/mock_helper.rb +16 -0
- data/tests/helpers/succeeds_helper.rb +9 -0
- data/tests/joyent/models/analytics/field_tests.rb +10 -0
- data/tests/joyent/models/analytics/fields_tests.rb +13 -0
- data/tests/joyent/models/analytics/instrumentation_tests.rb +13 -0
- data/tests/joyent/models/analytics/instrumentations_tests.rb +3 -0
- data/tests/joyent/models/analytics/joyent_module_tests.rb +10 -0
- data/tests/joyent/models/analytics/joyent_modules_tests.rb +13 -0
- data/tests/joyent/models/analytics/metric_tests.rb +10 -0
- data/tests/joyent/models/analytics/metrics_tests.rb +20 -0
- data/tests/joyent/models/analytics/transformation_tests.rb +10 -0
- data/tests/joyent/models/analytics/transformations_tests.rb +13 -0
- data/tests/joyent/models/analytics/type_tests.rb +10 -0
- data/tests/joyent/models/analytics/types_tests.rb +13 -0
- data/tests/joyent/requests/analytics/instrumentation_tests.rb +44 -0
- data/tests/joyent/requests/compute/datasets_tests.rb +58 -0
- data/tests/joyent/requests/compute/keys_tests.rb +47 -0
- data/tests/joyent/requests/compute/machines_tests.rb +66 -0
- data/tests/joyent/requests/compute/networks_tests.rb +39 -0
- data/tests/joyent/requests/compute/packages_tests.rb +68 -0
- metadata +235 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/joyent/models/compute/server'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Compute
|
6
|
+
class Joyent
|
7
|
+
class Servers < Fog::Collection
|
8
|
+
model Fog::Compute::Joyent::Server
|
9
|
+
|
10
|
+
def all
|
11
|
+
load(service.list_machines().body)
|
12
|
+
end
|
13
|
+
|
14
|
+
def create(params = {})
|
15
|
+
data = service.create_machine(params).body
|
16
|
+
server = new(data)
|
17
|
+
server
|
18
|
+
end
|
19
|
+
|
20
|
+
def bootstrap(new_attributes = {})
|
21
|
+
server = create(new_attributes)
|
22
|
+
server.wait_for { ready? }
|
23
|
+
server
|
24
|
+
end
|
25
|
+
|
26
|
+
def get(machine_id)
|
27
|
+
data = service.get_machine(machine_id).body
|
28
|
+
server = new(data)
|
29
|
+
server.tags = server.list_tags if server.tags.nil?
|
30
|
+
server
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end # Joyent
|
34
|
+
end # Compute
|
35
|
+
end # Fog
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Joyent
|
4
|
+
class Snapshot < Fog::Model
|
5
|
+
identity :name
|
6
|
+
|
7
|
+
attribute :name
|
8
|
+
attribute :state
|
9
|
+
attribute :machine_id
|
10
|
+
attribute :created, :type => :time
|
11
|
+
attribute :updated, :type => :time
|
12
|
+
|
13
|
+
def reload
|
14
|
+
requires :name
|
15
|
+
requires :machine_id
|
16
|
+
|
17
|
+
service.snapshots.get(self.machine_id, self.name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
requires :name
|
22
|
+
requires :machine_id
|
23
|
+
|
24
|
+
service.start_machine_from_snapshot(self.machine_id, self.name)
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def destroy
|
29
|
+
requires :name
|
30
|
+
requires :machine_id
|
31
|
+
|
32
|
+
service.delete_machine_snapshot(self.machine_id, self.name)
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
def machine
|
37
|
+
requires :machine_id
|
38
|
+
|
39
|
+
service.servers.get(self.machine_id)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'fog/joyent/models/compute/snapshot'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class Joyent
|
6
|
+
class Snapshots < Fog::Collection
|
7
|
+
model Fog::Compute::Joyent::Snapshot
|
8
|
+
|
9
|
+
def create(machine_id, snapshot_name)
|
10
|
+
data = self.service.create_machine_snapshot(machine_id, snapshot_name).body
|
11
|
+
data['machine_id'] = machine_id
|
12
|
+
new(data)
|
13
|
+
end
|
14
|
+
|
15
|
+
def all(machine_id)
|
16
|
+
data = service.list_machine_snapshots(machine_id).body.map do |m|
|
17
|
+
m["machine_id"] = machine_id
|
18
|
+
m
|
19
|
+
end
|
20
|
+
load(data)
|
21
|
+
end
|
22
|
+
|
23
|
+
def get(machine_id, snapshot_name)
|
24
|
+
data = service.get_machine_snapshot(machine_id, snapshot_name).body
|
25
|
+
if data
|
26
|
+
data["machine_id"] = machine_id
|
27
|
+
new(data)
|
28
|
+
else
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Fog
|
2
|
+
module Joyent
|
3
|
+
class Analytics
|
4
|
+
class Real
|
5
|
+
def create_instrumentation(values = {})
|
6
|
+
request(
|
7
|
+
:path => "#{@joyent_username}/analytics/instrumentations",
|
8
|
+
:method => "POST",
|
9
|
+
:body => values,
|
10
|
+
:expects => [200,201]
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def create_instrumentation(values = {})
|
17
|
+
response = Excon::Response.new
|
18
|
+
response.status = 201
|
19
|
+
response.body = self.data[:instrumentation]
|
20
|
+
response
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Fog
|
2
|
+
module Joyent
|
3
|
+
class Analytics
|
4
|
+
class Real
|
5
|
+
def delete_instrumentation(id)
|
6
|
+
request(
|
7
|
+
:path => "#{@joyent_username}/analytics/instrumentations/#{id}",
|
8
|
+
:method => "DELETE",
|
9
|
+
:expects => 204
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def delete_instrumentation(id)
|
16
|
+
response = Excon::Response.new
|
17
|
+
response.status = 204
|
18
|
+
response
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Fog
|
2
|
+
module Joyent
|
3
|
+
class Analytics
|
4
|
+
class Real
|
5
|
+
def describe_analytics(force = false)
|
6
|
+
@describe_analytics = nil if force
|
7
|
+
@describe_analytics ||= request(
|
8
|
+
:path => "#{@joyent_username}/analytics",
|
9
|
+
:method => "GET",
|
10
|
+
:expects => 200,
|
11
|
+
:idempotent => true
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def describe_analytics(force = false)
|
18
|
+
response = Excon::Response.new
|
19
|
+
response.status = 200
|
20
|
+
response.body = self.data[:describe_analytics]
|
21
|
+
response
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Fog
|
2
|
+
module Joyent
|
3
|
+
class Analytics
|
4
|
+
class Real
|
5
|
+
def get_instrumentation(id)
|
6
|
+
request(
|
7
|
+
:path => "#{@joyent_username}/analytics/instrumentations/#{id}",
|
8
|
+
:method => "GET",
|
9
|
+
:expects => 200,
|
10
|
+
:idempotent => true
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_instrumentation(id)
|
17
|
+
raise Fog::Compute::Joyent::Errors::NotFound.new('not found') unless id == self.data[:instrumentation]['id']
|
18
|
+
response = Excon::Response.new
|
19
|
+
response.status = 200
|
20
|
+
response.body = self.data[:instrumentation]
|
21
|
+
response
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Fog
|
2
|
+
module Joyent
|
3
|
+
class Analytics
|
4
|
+
class Real
|
5
|
+
def get_instrumentation_value(url, requested_start_time, ndatapoints, duration)
|
6
|
+
request(
|
7
|
+
:path => url,
|
8
|
+
:method => 'GET',
|
9
|
+
:expects => 200,
|
10
|
+
:idempotent => true,
|
11
|
+
:query => {
|
12
|
+
:ndatapoints => ndatapoints,
|
13
|
+
:start_time => requested_start_time.to_i,
|
14
|
+
:duration => duration
|
15
|
+
}
|
16
|
+
)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Mock
|
21
|
+
def get_instrumentation_value(url, requested_start_time, ndatapoints, duration)
|
22
|
+
response = Excon::Response.new
|
23
|
+
response.status = 200
|
24
|
+
response.body = [self.data[:values]]
|
25
|
+
response
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Fog
|
2
|
+
module Joyent
|
3
|
+
class Analytics
|
4
|
+
class Real
|
5
|
+
def list_instrumentations
|
6
|
+
request(
|
7
|
+
:path => "#{@joyent_username}/analytics/instrumentations",
|
8
|
+
:method => "GET",
|
9
|
+
:expects => 200,
|
10
|
+
:idempotent => true
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def list_instrumentations
|
17
|
+
response = Excon::Response.new
|
18
|
+
response.status = 200
|
19
|
+
response.body = [self.data[:instrumentation]]
|
20
|
+
response
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Joyent
|
4
|
+
class Real
|
5
|
+
# https://us-west-1.api.joyentcloud.com/docs#AddMachineTags
|
6
|
+
def add_machine_tags(machine_id, tags={})
|
7
|
+
raise ArgumentError, "tags must be a Hash of tags" unless tags.is_a?(Hash)
|
8
|
+
|
9
|
+
request(
|
10
|
+
:path => "/my/machines/#{machine_id}/tags",
|
11
|
+
:method => "POST",
|
12
|
+
:body => tags,
|
13
|
+
:expects => 200
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Joyent
|
4
|
+
class Mock
|
5
|
+
#
|
6
|
+
# https://us-west-1.api.joyentcloud.com/docs#CreateKey
|
7
|
+
#
|
8
|
+
def create_key(params)
|
9
|
+
name = params[:name]
|
10
|
+
key = params[:key]
|
11
|
+
|
12
|
+
record = {
|
13
|
+
"name" => name,
|
14
|
+
"key" => key,
|
15
|
+
"created" => Time.now.utc,
|
16
|
+
"updated" => Time.now.utc
|
17
|
+
}
|
18
|
+
|
19
|
+
self.data[:keys][name] = record
|
20
|
+
|
21
|
+
response = Excon::Response.new
|
22
|
+
response.status = 201
|
23
|
+
response.body = record
|
24
|
+
response
|
25
|
+
end
|
26
|
+
end # Mock
|
27
|
+
|
28
|
+
class Real
|
29
|
+
# Creates a new SSH Key
|
30
|
+
# ==== Parameters
|
31
|
+
# * name<~String> - Name to assign to this key
|
32
|
+
# * key<~String> - OpenSSH formatted public key
|
33
|
+
#
|
34
|
+
# ==== Returns
|
35
|
+
# * response<~Excon::Response>:
|
36
|
+
# * body<~Hash>:
|
37
|
+
# * 'name'<~String> - Name for this key
|
38
|
+
# * 'key'<~String> - OpenSSH formatted public key
|
39
|
+
#
|
40
|
+
def create_key(params={})
|
41
|
+
raise ArgumentError, "error creating key: [name] is required" unless params[:name]
|
42
|
+
raise ArgumentError, "error creating key: [key] is required" unless params[:key]
|
43
|
+
|
44
|
+
request(
|
45
|
+
:method => "POST",
|
46
|
+
:path => "/my/keys",
|
47
|
+
:body => { "name" => params[:name], "key" => params[:key] },
|
48
|
+
:expects => 201
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Joyent
|
4
|
+
class Real
|
5
|
+
def create_machine_snapshot(machine_id, snapshot_name)
|
6
|
+
request(
|
7
|
+
:method => "POST",
|
8
|
+
:path => "/my/machines/#{machine_id}/snapshots",
|
9
|
+
:body => {"name" => snapshot_name },
|
10
|
+
:expects => [201]
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Joyent
|
4
|
+
class Real
|
5
|
+
# https://us-west-1.api.joyentcloud.com/docs#DeleteMachineMetadata
|
6
|
+
def delete_all_machine_metadata(machine_id)
|
7
|
+
request(
|
8
|
+
:method => "DELETE",
|
9
|
+
:path => "/my/machines/#{machine_id}/metadata",
|
10
|
+
:expects => 204
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Joyent
|
4
|
+
class Mock
|
5
|
+
def delete_key(keyname)
|
6
|
+
if self.data[:keys].delete(keyname)
|
7
|
+
response = Excon::Response.new
|
8
|
+
response.status = 204
|
9
|
+
response
|
10
|
+
else
|
11
|
+
raise Excon::Errors::NotFound, "Not Found"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Real
|
17
|
+
def delete_key(name)
|
18
|
+
request(
|
19
|
+
:method => "DELETE",
|
20
|
+
:path => "/my/keys/#{name}",
|
21
|
+
:expects => 204
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end # Real
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|