mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
GH-690 Joyent Cloud Provider
Squashed from fog/joyent
This commit is contained in:
parent
9926b99a6f
commit
e403854446
54 changed files with 1464 additions and 1 deletions
|
@ -64,6 +64,7 @@ require 'fog/bin/ecloud'
|
|||
require 'fog/bin/glesys'
|
||||
require 'fog/bin/go_grid'
|
||||
require 'fog/bin/google'
|
||||
require 'fog/bin/joyent'
|
||||
require 'fog/bin/libvirt'
|
||||
require 'fog/bin/linode'
|
||||
require 'fog/bin/local'
|
||||
|
|
31
lib/fog/bin/joyent.rb
Normal file
31
lib/fog/bin/joyent.rb
Normal file
|
@ -0,0 +1,31 @@
|
|||
class Joyent < Fog::Bin
|
||||
class << self
|
||||
|
||||
def class_for(key)
|
||||
case key
|
||||
when :compute
|
||||
Fog::Compute::Joyent
|
||||
else
|
||||
raise ArgumentError, "Unrecognized service: #{key}"
|
||||
end
|
||||
end
|
||||
|
||||
def [](service)
|
||||
@@connections ||= Hash.new do |hash, key|
|
||||
hash[key] = case key
|
||||
when :compute
|
||||
Fog::Logger.warning("Joyent[:compute] is not recommended, use Compute[:joyent] for portability")
|
||||
Fog::Compute.new(:provider => 'Joyent')
|
||||
else
|
||||
raise ArgumentError, "Unrecognized service: #{key.inspect}"
|
||||
end
|
||||
end
|
||||
@@connections[service]
|
||||
end
|
||||
|
||||
def services
|
||||
Fog::Joyent.services
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -32,6 +32,9 @@ module Fog
|
|||
when :gogrid
|
||||
require 'fog/go_grid/compute'
|
||||
Fog::Compute::GoGrid.new(attributes)
|
||||
when :joyent
|
||||
require 'fog/joyent/compute'
|
||||
Fog::Compute::Joyent.new(attributes)
|
||||
when :libvirt
|
||||
require 'fog/libvirt/compute'
|
||||
Fog::Compute::Libvirt.new(attributes)
|
||||
|
|
8
lib/fog/joyent.rb
Normal file
8
lib/fog/joyent.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
module Fog
|
||||
module Joyent
|
||||
extend Fog::Provider
|
||||
|
||||
service(:compute, 'joyent/compute', 'Compute')
|
||||
|
||||
end
|
||||
end
|
177
lib/fog/joyent/compute.rb
Normal file
177
lib/fog/joyent/compute.rb
Normal file
|
@ -0,0 +1,177 @@
|
|||
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'brightbox'))
|
||||
require 'fog/compute'
|
||||
require 'multi_json'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Joyent < Fog::Service
|
||||
requires :cloudapi_username
|
||||
|
||||
recognizes :cloudapi_password
|
||||
recognizes :cloudapi_url
|
||||
recognizes :cloudapi_keyname
|
||||
recognizes :cloudapi_keyfile
|
||||
|
||||
model_path 'fog/joyent/models/compute'
|
||||
request_path 'fog/joyent/requests/compute'
|
||||
|
||||
# request :list_datacenters
|
||||
# request :get_datacenter
|
||||
|
||||
# Keys
|
||||
collection :keys
|
||||
model :key
|
||||
|
||||
request :list_keys
|
||||
request :get_key
|
||||
request :create_key
|
||||
request :delete_key
|
||||
|
||||
# Images
|
||||
collection :images
|
||||
model :image
|
||||
request :list_datasets
|
||||
request :get_dataset
|
||||
|
||||
# Flavors
|
||||
collection :flavors
|
||||
model :flavor
|
||||
request :list_packages
|
||||
request :get_package
|
||||
|
||||
# Servers
|
||||
collection :servers
|
||||
model :server
|
||||
request :list_machines
|
||||
request :get_machine
|
||||
request :create_machine
|
||||
request :start_machine
|
||||
request :stop_machine
|
||||
request :reboot_machine
|
||||
request :resize_machine
|
||||
request :delete_machine
|
||||
|
||||
# Snapshots
|
||||
collection :snapshots
|
||||
model :snapshot
|
||||
request :create_machine_snapshot
|
||||
request :start_machine_from_snapshot
|
||||
request :list_machine_snapshots
|
||||
request :get_machine_snapshot
|
||||
request :delete_machine_snapshot
|
||||
request :update_machine_metadata
|
||||
request :get_machine_metadata
|
||||
request :delete_machine_metadata
|
||||
request :delete_all_machine_metadata
|
||||
|
||||
# MachineTags
|
||||
request :add_machine_tags
|
||||
request :list_machine_tags
|
||||
request :get_machine_tag
|
||||
request :delete_machine_tag
|
||||
request :delete_all_machine_tags
|
||||
|
||||
class Mock
|
||||
def self.data
|
||||
@data ||= Hash.new do |hash, key|
|
||||
hash[key] = {}
|
||||
end
|
||||
end
|
||||
|
||||
def data
|
||||
self.class.data
|
||||
end
|
||||
|
||||
def initialize(options = {})
|
||||
@cloudapi_username = options[:cloudapi_username] || Fog.credentials[:cloudapi_username]
|
||||
@cloudapi_password = options[:cloudapi_password] || Fog.credentials[:cloudapi_password]
|
||||
end
|
||||
|
||||
def request(opts)
|
||||
raise "Not Implemented"
|
||||
end
|
||||
end # Mock
|
||||
|
||||
class Real
|
||||
def initialize(options = {})
|
||||
@connection_options = options[:connection_options] || {}
|
||||
@persistent = options[:persistent] || false
|
||||
|
||||
@cloudapi_url = options[:cloudapi_url] || 'https://us-sw-1.api.joyentcloud.com'
|
||||
@cloudapi_version = options[:cloudapi_version] || '~6.5'
|
||||
|
||||
@cloudapi_username = options[:cloudapi_username]
|
||||
|
||||
unless @cloudapi_username
|
||||
raise ArgumentError, "options[:cloudapi_username] required"
|
||||
end
|
||||
|
||||
if options[:cloudapi_keyname] && options[:cloudapi_keyfile]
|
||||
if File.exists?(options[:cloudapi_keyfile])
|
||||
@cloudapi_keyname = options[:cloudapi_keyname]
|
||||
@cloudapi_key = File.read(options[:cloudapi_keyfile])
|
||||
|
||||
@rsa = OpenSSL::PKey::RSA.new(@cloudapi_key)
|
||||
|
||||
@header_method = method(:header_for_signature)
|
||||
else
|
||||
raise ArgumentError, "options[:cloudapi_keyfile] provided does not exist."
|
||||
end
|
||||
elsif options[:cloudapi_password]
|
||||
@cloudapi_password = options[:cloudapi_password]
|
||||
|
||||
@header_method = method(:header_for_basic)
|
||||
else
|
||||
raise ArgumentError, "Must provide either a cloudapi_password or cloudapi_keyname and cloudapi_keyfile pair"
|
||||
end
|
||||
|
||||
@connection = Fog::Connection.new(
|
||||
@cloudapi_url,
|
||||
@persistent,
|
||||
@connection_options
|
||||
)
|
||||
end
|
||||
|
||||
def request(request_options = {})
|
||||
(request_options[:headers] ||= {}).merge!({
|
||||
"X-Api-Version" => @cloudapi_version,
|
||||
"Content-Type" => "application/json",
|
||||
"Accept" => "application/json"
|
||||
}).merge!(@header_method.call)
|
||||
|
||||
if request_options[:body]
|
||||
request_options[:body] = MultiJson.encode(request_options[:body])
|
||||
end
|
||||
|
||||
response = @connection.request(request_options)
|
||||
|
||||
if response.headers["Content-Type"] == "application/json"
|
||||
response.body = MultiJson.decode(response.body)
|
||||
end
|
||||
|
||||
response
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def header_for_basic
|
||||
{
|
||||
"Authorization" => "Basic #{Base64.encode64("#{@cloudapi_username}:#{@cloudapi_password}").delete("\r\n")}"
|
||||
}
|
||||
end
|
||||
|
||||
def header_for_signature
|
||||
date = Time.now.utc.httpdate
|
||||
signature = Base64.encode64(@rsa.sign("sha256", date)).delete("\r\n")
|
||||
key_id = "/#{@cloudapi_username}/keys/#{@cloudapi_keyname}"
|
||||
|
||||
{
|
||||
"Date" => date,
|
||||
"Authorization" => "Signature keyId=\"#{key_id}\",algorithm=\"rsa-sha256\" #{signature}"
|
||||
}
|
||||
end
|
||||
|
||||
end # Real
|
||||
end
|
||||
end
|
||||
end
|
17
lib/fog/joyent/models/compute/flavor.rb
Normal file
17
lib/fog/joyent/models/compute/flavor.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Flavor < Fog::Model
|
||||
|
||||
identity :name
|
||||
|
||||
attribute :name
|
||||
attribute :memory
|
||||
attribute :swap
|
||||
attribute :disk
|
||||
attribute :default
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
25
lib/fog/joyent/models/compute/flavors.rb
Normal file
25
lib/fog/joyent/models/compute/flavors.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
require 'fog/core/collection'
|
||||
require 'fog/joyent/models/compute/flavor'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
|
||||
class Joyent
|
||||
class Flavors < Fog::Collection
|
||||
|
||||
model Fog::Compute::Joyent::Flavor
|
||||
|
||||
def all
|
||||
load(connection.list_packages().body)
|
||||
end
|
||||
|
||||
def get(id)
|
||||
data = connection.get_package(id).body
|
||||
new(data)
|
||||
end
|
||||
|
||||
end
|
||||
end # Joyent
|
||||
|
||||
end # Compute
|
||||
end # Fog
|
18
lib/fog/joyent/models/compute/image.rb
Normal file
18
lib/fog/joyent/models/compute/image.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Image < Fog::Model
|
||||
|
||||
identity :id
|
||||
|
||||
attribute :name
|
||||
attribute :os
|
||||
attribute :type
|
||||
attribute :version
|
||||
attribute :created, :type => :time
|
||||
attribute :default
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
25
lib/fog/joyent/models/compute/images.rb
Normal file
25
lib/fog/joyent/models/compute/images.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
require 'fog/core/collection'
|
||||
require 'fog/joyent/models/compute/image'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
|
||||
class Joyent
|
||||
class Images < Fog::Collection
|
||||
|
||||
model Fog::Compute::Joyent::Image
|
||||
|
||||
def all
|
||||
load(connection.list_datasets().body)
|
||||
end
|
||||
|
||||
def get(id)
|
||||
data = connection.get_dataset(id).body
|
||||
new(data)
|
||||
end
|
||||
|
||||
end # Images
|
||||
end # Joyent
|
||||
|
||||
end # Compute
|
||||
end # Fog
|
19
lib/fog/joyent/models/compute/key.rb
Normal file
19
lib/fog/joyent/models/compute/key.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Key < Fog::Model
|
||||
identity :name
|
||||
|
||||
attribute :name
|
||||
attribute :key
|
||||
|
||||
attribute :created, :type => :time
|
||||
|
||||
def destroy
|
||||
requires :name
|
||||
self.connection.delete_key(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
34
lib/fog/joyent/models/compute/keys.rb
Normal file
34
lib/fog/joyent/models/compute/keys.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
require 'fog/joyent/models/compute/key'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Keys < Fog::Collection
|
||||
|
||||
model Fog::Compute::Joyent::Key
|
||||
|
||||
def all
|
||||
data = connection.list_keys.body
|
||||
load(data)
|
||||
end
|
||||
|
||||
def get(keyname)
|
||||
data = connection.get_key(keyname).body
|
||||
if data
|
||||
new(data)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def create(params = {})
|
||||
raise ArgumentError, "Key name required" unless params.key?(:name)
|
||||
raise ArgumentError, "Key body required" unless params.key?(:body)
|
||||
|
||||
self.connection.create_key(params)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
117
lib/fog/joyent/models/compute/server.rb
Normal file
117
lib/fog/joyent/models/compute/server.rb
Normal file
|
@ -0,0 +1,117 @@
|
|||
require 'fog/compute/models/server'
|
||||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Server < Fog::Compute::Server
|
||||
identity :id
|
||||
|
||||
attribute :name
|
||||
attribute :state
|
||||
attribute :type
|
||||
attribute :dataset
|
||||
attribute :ips
|
||||
attribute :memory
|
||||
attribute :ips
|
||||
attribute :disk
|
||||
attribute :metadata
|
||||
|
||||
attribute :created, :type => :time
|
||||
attribute :updated, :type => :time
|
||||
|
||||
def ready?
|
||||
self.state == 'running'
|
||||
end
|
||||
|
||||
def stopped?
|
||||
requires :id
|
||||
self.state == 'stopped'
|
||||
end
|
||||
|
||||
def destroy
|
||||
requires :id
|
||||
self.connection.delete_machine(id)
|
||||
true
|
||||
end
|
||||
|
||||
def start
|
||||
requires :id
|
||||
self.connection.start_machine(id)
|
||||
self.wait_for { ready? }
|
||||
true
|
||||
end
|
||||
|
||||
def stop
|
||||
requires :id
|
||||
self.connection.stop_machine(id)
|
||||
self.wait_for { stopped? }
|
||||
true
|
||||
end
|
||||
|
||||
def resize(flavor)
|
||||
requires :id
|
||||
self.connection.resize(id, flavor)
|
||||
true
|
||||
end
|
||||
|
||||
def reboot
|
||||
requires :id
|
||||
self.connection.reboot_machine(id)
|
||||
true
|
||||
end
|
||||
|
||||
def snapshots
|
||||
requires :id
|
||||
self.connection.snapshots.all(id)
|
||||
end
|
||||
|
||||
def update_metadata(data = {})
|
||||
requires :id
|
||||
self.connection.update_machine_metadata(self.id, data)
|
||||
self.reload
|
||||
true
|
||||
end
|
||||
|
||||
def delete_metadata(keyname)
|
||||
raise ArgumentError, "Must provide a key name to delete" if keyname.nil? || keyname.empty?
|
||||
requires :id
|
||||
|
||||
self.connection.delete_machine_metadata(self.id, keyname)
|
||||
true
|
||||
end
|
||||
|
||||
def delete_all_metadata
|
||||
requires :id
|
||||
self.connection.delete_all_machine_metadata(self.id)
|
||||
true
|
||||
end
|
||||
|
||||
def tags
|
||||
requires :id
|
||||
self.connection.list_machine_tags(id).body
|
||||
end
|
||||
|
||||
def add_tags(tags_hash = {})
|
||||
requires :id
|
||||
self.connection.add_machine_tags(self.id, tags_hash).body
|
||||
end
|
||||
|
||||
def delete_tag(tagname)
|
||||
requires :id
|
||||
|
||||
raise ArgumentError, "Must provide a tag name to delete" if tagname.nil? || tagname.empty?
|
||||
self.connection.delete_machine_tag(self.id, tagname)
|
||||
true
|
||||
end
|
||||
|
||||
def delete_all_tags
|
||||
requires :id
|
||||
|
||||
self.connection.delete_all_machine_tags(self.id)
|
||||
true
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
35
lib/fog/joyent/models/compute/servers.rb
Normal file
35
lib/fog/joyent/models/compute/servers.rb
Normal file
|
@ -0,0 +1,35 @@
|
|||
require 'fog/core/collection'
|
||||
require 'fog/joyent/models/compute/server'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
|
||||
class Joyent
|
||||
class Servers < Fog::Collection
|
||||
model Fog::Compute::Joyent::Server
|
||||
|
||||
def all
|
||||
load(self.connection.list_machines().body)
|
||||
end
|
||||
|
||||
def create(params = {})
|
||||
data = self.connection.create_machine(params).body
|
||||
server = new(data)
|
||||
server.wait_for { ready? }
|
||||
server
|
||||
end
|
||||
|
||||
def bootstrap
|
||||
# XXX TOXO
|
||||
end
|
||||
|
||||
def get(machine_id)
|
||||
data = self.connection.get_machine(machine_id).body
|
||||
new(data)
|
||||
end
|
||||
|
||||
end
|
||||
end # Joyent
|
||||
|
||||
end # Compute
|
||||
end # Fog
|
45
lib/fog/joyent/models/compute/snapshot.rb
Normal file
45
lib/fog/joyent/models/compute/snapshot.rb
Normal file
|
@ -0,0 +1,45 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Snapshot < Fog::Model
|
||||
identity :name
|
||||
|
||||
attribute :name
|
||||
attribute :state
|
||||
attribute :machine_id
|
||||
attribute :created, :type => :time
|
||||
attribute :updated, :type => :time
|
||||
|
||||
def reload
|
||||
requires :name
|
||||
requires :machine_id
|
||||
|
||||
self.connection.snapshots.get(self.machine_id, self.name)
|
||||
end
|
||||
|
||||
def start
|
||||
requires :name
|
||||
requires :machine_id
|
||||
|
||||
self.connection.start_machine_from_snapshot(self.machine_id, self.name)
|
||||
true
|
||||
end
|
||||
|
||||
def destroy
|
||||
requires :name
|
||||
requires :machine_id
|
||||
|
||||
self.connection.delete_machine_snapshot(self.machine_id, self.name)
|
||||
true
|
||||
end
|
||||
|
||||
def machine
|
||||
requires :machine_id
|
||||
|
||||
self.connection.servers.get(self.machine_id)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
37
lib/fog/joyent/models/compute/snapshots.rb
Normal file
37
lib/fog/joyent/models/compute/snapshots.rb
Normal file
|
@ -0,0 +1,37 @@
|
|||
require 'fog/joyent/models/compute/snapshot'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Snapshots < Fog::Collection
|
||||
|
||||
model Fog::Compute::Joyent::Snapshot
|
||||
|
||||
def create(machine_id, snapshot_name)
|
||||
data = self.connection.create_machine_snapshot(machine_id, snapshot_name).body
|
||||
data['machine_id'] = machine_id
|
||||
new(data)
|
||||
end
|
||||
|
||||
def all(machine_id)
|
||||
data = self.connection.list_machine_snapshots(machine_id).body.map do |m|
|
||||
m["machine_id"] = machine_id
|
||||
m
|
||||
end
|
||||
load(data)
|
||||
end
|
||||
|
||||
def get(machine_id, snapshot_name)
|
||||
data = self.connection.get_machine_snapshot(machine_id, snapshot_name).body
|
||||
if data
|
||||
data["machine_id"] = machine_id
|
||||
new(data)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
20
lib/fog/joyent/requests/compute/add_machine_tags.rb
Normal file
20
lib/fog/joyent/requests/compute/add_machine_tags.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Real
|
||||
# https://us-west-1.api.joyentcloud.com/docs#AddMachineTags
|
||||
def add_machine_tags(machine_id, tags={})
|
||||
raise ArgumentError, "tags must be a Hash of tags" unless tags.is_a?(Hash)
|
||||
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}/tags",
|
||||
:method => "POST",
|
||||
:body => tags,
|
||||
:expects => 200
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
54
lib/fog/joyent/requests/compute/create_key.rb
Normal file
54
lib/fog/joyent/requests/compute/create_key.rb
Normal file
|
@ -0,0 +1,54 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Mock
|
||||
#
|
||||
# https://us-west-1.api.joyentcloud.com/docs#CreateKey
|
||||
#
|
||||
def create_key(params)
|
||||
name = params[:name]
|
||||
key = params[:key]
|
||||
record = {
|
||||
"name" => name,
|
||||
"key" => key,
|
||||
"created" => Time.now.utc
|
||||
}
|
||||
|
||||
self.data[:keys][name] = record
|
||||
|
||||
response = Excon::Response.new
|
||||
response.status = 201
|
||||
response.body = record
|
||||
response
|
||||
end
|
||||
end # Mock
|
||||
|
||||
class Real
|
||||
|
||||
# Creates a new SSH Key
|
||||
# ==== Parameters
|
||||
# * name<~String> - Name to assign to this key
|
||||
# * key<~String> - OpenSSH formatted public key
|
||||
#
|
||||
# ==== Returns
|
||||
# * response<~Excon::Response>:
|
||||
# * body<~Hash>:
|
||||
# * 'name'<~String> - Name for this key
|
||||
# * 'key'<~String> - OpenSSH formatted public key
|
||||
#
|
||||
def create_key(params={})
|
||||
raise ArgumentError, "error creating key: [name] is required" unless params[:name]
|
||||
raise ArgumentError, "error creating key: [key] is required" unless params[:key]
|
||||
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/keys",
|
||||
:body => { "name" => params[:name], "body" => params[:body] },
|
||||
:expects => 201
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
16
lib/fog/joyent/requests/compute/create_machine.rb
Normal file
16
lib/fog/joyent/requests/compute/create_machine.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def create_machine(params = {})
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/machines",
|
||||
:body => params,
|
||||
:expects => [200, 201, 202]
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
18
lib/fog/joyent/requests/compute/create_machine_snapshot.rb
Normal file
18
lib/fog/joyent/requests/compute/create_machine_snapshot.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
|
||||
def create_machine_snapshot(machine_id, snapshot_name)
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/machines/#{machine_id}/snapshots",
|
||||
:body => {"name" => snapshot_name },
|
||||
:expects => [201]
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,16 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
# https://us-west-1.api.joyentcloud.com/docs#DeleteMachineMetadata
|
||||
def delete_all_machine_metadata(machine_id)
|
||||
request(
|
||||
:method => "DELETE",
|
||||
:path => "/my/machines/#{machine_id}/metadata",
|
||||
:expects => 204
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
15
lib/fog/joyent/requests/compute/delete_all_machine_tags.rb
Normal file
15
lib/fog/joyent/requests/compute/delete_all_machine_tags.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def delete_all_machine_tags(machine_id)
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}/tags",
|
||||
:method => "DELETE",
|
||||
:expects => 204
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
29
lib/fog/joyent/requests/compute/delete_key.rb
Normal file
29
lib/fog/joyent/requests/compute/delete_key.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Mock
|
||||
def delete_key(keyname)
|
||||
if self.data[:keys].delete(keyname)
|
||||
response = Excon::Response.new
|
||||
response.status = 200
|
||||
response
|
||||
else
|
||||
raise Excon::Errors::NotFound, "Not Found"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def delete_key(keyname)
|
||||
request(
|
||||
:method => "DELETE",
|
||||
:path => "/my/keys/#{name}",
|
||||
:expects => 200
|
||||
)
|
||||
end
|
||||
end # Real
|
||||
|
||||
end
|
||||
end
|
||||
end
|
15
lib/fog/joyent/requests/compute/delete_machine.rb
Normal file
15
lib/fog/joyent/requests/compute/delete_machine.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def delete_machine(machine_id)
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}",
|
||||
:method => "DELETE",
|
||||
:expects => [200, 204]
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
18
lib/fog/joyent/requests/compute/delete_machine_metadata.rb
Normal file
18
lib/fog/joyent/requests/compute/delete_machine_metadata.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
module Fog
|
||||
module Compute
|
||||
|
||||
class Joyent
|
||||
class Real
|
||||
|
||||
# https://us-west-1.api.joyentcloud.com/docs#DeleteAllMachineMetadata
|
||||
def delete_machine_metadata(machine_id, key)
|
||||
request(
|
||||
:method => "DELETE",
|
||||
:path => "/my/machines/#{machine_id}/metadata/#{key}",
|
||||
:expects => [200, 204]
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
21
lib/fog/joyent/requests/compute/delete_machine_snapshot.rb
Normal file
21
lib/fog/joyent/requests/compute/delete_machine_snapshot.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Real
|
||||
def delete_machine_snapshot(machine_id, snapshot)
|
||||
request(
|
||||
:method => "DELETE",
|
||||
:path => "/my/machines/#{machine_id}/snapshots/#{snapshot}",
|
||||
:expects => [200, 204]
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
15
lib/fog/joyent/requests/compute/delete_machine_tag.rb
Normal file
15
lib/fog/joyent/requests/compute/delete_machine_tag.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def delete_machine_tag(machine_id, tagname)
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}/tags/#{tagname}",
|
||||
:method => "DELETE",
|
||||
:expects => 204
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
28
lib/fog/joyent/requests/compute/get_dataset.rb
Normal file
28
lib/fog/joyent/requests/compute/get_dataset.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Mock
|
||||
def get_dataset(id)
|
||||
if ds = self.data[:datasets][id]
|
||||
res = Excon::Response.new
|
||||
res.status = 200
|
||||
res.body = ds
|
||||
else
|
||||
raise Excon::Errors::NotFound
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def get_dataset
|
||||
request(
|
||||
:method => "GET",
|
||||
:path => "/my/datasets"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
29
lib/fog/joyent/requests/compute/get_key.rb
Normal file
29
lib/fog/joyent/requests/compute/get_key.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Mock
|
||||
|
||||
def get_key(keyid)
|
||||
if key = self.data[:keys][keyid]
|
||||
response = Excon::Response.new
|
||||
response.status = 200
|
||||
response.body = key
|
||||
response
|
||||
else
|
||||
raise Excon::Errors::NotFound
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def get_key(keyid)
|
||||
request(
|
||||
:method => "GET",
|
||||
:path => "/my/keys/#{keyid}",
|
||||
:expects => 200
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
27
lib/fog/joyent/requests/compute/get_machine.rb
Normal file
27
lib/fog/joyent/requests/compute/get_machine.rb
Normal file
|
@ -0,0 +1,27 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Mock
|
||||
def get_machine(uuid)
|
||||
if machine = self.data[:machines][uuid]
|
||||
res = Excon::Response.new
|
||||
res.status = 200
|
||||
res.body = machine
|
||||
else
|
||||
raise Excon::Errors::NotFound, "Not Found"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def get_machine(uuid)
|
||||
request(
|
||||
:method => "GET",
|
||||
:path => "/my/machines/#{uuid}"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
25
lib/fog/joyent/requests/compute/get_machine_metadata.rb
Normal file
25
lib/fog/joyent/requests/compute/get_machine_metadata.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
|
||||
def get_machine_metadata(machine_id, options = {})
|
||||
query = {}
|
||||
if options[:credentials]
|
||||
if options[:credentials].is_a?(Boolean)
|
||||
query[:credentials] = options[:credentials]
|
||||
else
|
||||
raise ArgumentError, "options[:credentials] must be a Boolean or nil"
|
||||
end
|
||||
end
|
||||
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}/metadata",
|
||||
:query => query
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
14
lib/fog/joyent/requests/compute/get_machine_snapshot.rb
Normal file
14
lib/fog/joyent/requests/compute/get_machine_snapshot.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def get_machine_snapshot(machine_id, snapshot_name)
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}/snapshots/#{snapshot_name}",
|
||||
:method => "GET"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
19
lib/fog/joyent/requests/compute/get_machine_tag.rb
Normal file
19
lib/fog/joyent/requests/compute/get_machine_tag.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
|
||||
# https://us-west-1.api.joyentcloud.com/docs#GetMachineTag
|
||||
def get_machine_tag(machine_id, tagname)
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}/tags/#{tagname}",
|
||||
:method => "GET",
|
||||
:headers => {"Accept" => "text/plain"},
|
||||
:expects => 200
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
29
lib/fog/joyent/requests/compute/get_package.rb
Normal file
29
lib/fog/joyent/requests/compute/get_package.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Mock
|
||||
|
||||
def get_package(name)
|
||||
if pkg = self.data[:packages][name]
|
||||
response = Excon::Response.new
|
||||
response.body = pkg
|
||||
response.status = 200
|
||||
response
|
||||
else
|
||||
raise Excon::Errors::NotFound
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def get_package(name)
|
||||
request(
|
||||
:method => "GET",
|
||||
:path => "/my/packages/#{name}"
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
24
lib/fog/joyent/requests/compute/list_datasets.rb
Normal file
24
lib/fog/joyent/requests/compute/list_datasets.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Mock
|
||||
def list_datasets
|
||||
res = Excon::Response.new
|
||||
res.status = 200
|
||||
res.body = self.data[:datasets].values
|
||||
res
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def list_datasets
|
||||
request(
|
||||
:method => "GET",
|
||||
:path => "/my/datasets"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
25
lib/fog/joyent/requests/compute/list_keys.rb
Normal file
25
lib/fog/joyent/requests/compute/list_keys.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Mock
|
||||
def list_keys
|
||||
response = Excon::Response.new
|
||||
response.status = 200
|
||||
response.body = self.data[:keys].values
|
||||
response
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def list_keys
|
||||
request(
|
||||
:expects => 200,
|
||||
:method => :'GET',
|
||||
:path => '/my/keys'
|
||||
)
|
||||
end
|
||||
end # Real
|
||||
|
||||
end
|
||||
end
|
||||
end
|
14
lib/fog/joyent/requests/compute/list_machine_snapshots.rb
Normal file
14
lib/fog/joyent/requests/compute/list_machine_snapshots.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def list_machine_snapshots(machine_id)
|
||||
request(
|
||||
:method => "GET",
|
||||
:path => "/my/machines/#{machine_id}/snapshots"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
20
lib/fog/joyent/requests/compute/list_machine_tags.rb
Normal file
20
lib/fog/joyent/requests/compute/list_machine_tags.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
# https://us-west-1.api.joyentcloud.com/docs#ListMachineTags
|
||||
def list_machine_tags(machine_id)
|
||||
request(
|
||||
:path => "/my/machines/#{machine_id}/tags",
|
||||
:method => "GET",
|
||||
:expects => 200
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
25
lib/fog/joyent/requests/compute/list_machines.rb
Normal file
25
lib/fog/joyent/requests/compute/list_machines.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Mock
|
||||
def list_machines(options={})
|
||||
res = Excon::Response.new
|
||||
res.status = 200
|
||||
res.body = self.data[:machines].values
|
||||
res
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
def list_machines(options={})
|
||||
request(
|
||||
:path => "/my/machines",
|
||||
:method => "GET",
|
||||
:query => options
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
35
lib/fog/joyent/requests/compute/list_packages.rb
Normal file
35
lib/fog/joyent/requests/compute/list_packages.rb
Normal file
|
@ -0,0 +1,35 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
|
||||
class Mock
|
||||
def list_packages
|
||||
response = Excon::Response.new()
|
||||
response.status = 200
|
||||
response.body = self.data[:packages].values
|
||||
response
|
||||
end
|
||||
end
|
||||
|
||||
class Real
|
||||
# Lists all the packages available to the authenticated user
|
||||
# ==== Returns
|
||||
# Exon::Response<Array>
|
||||
# * name<~String> The "friendly name for this package
|
||||
# * memory<~Number> How much memory will by available (in Mb)
|
||||
# * disk<~Number> How much disk space will be available (in Gb)
|
||||
# * swap<~Number> How much swap memory will be available (in Mb)
|
||||
# * default<~Boolean> Whether this is the default package in this datacenter"
|
||||
#
|
||||
def list_packages
|
||||
request(
|
||||
:path => "/my/packages",
|
||||
:method => "GET"
|
||||
)
|
||||
end
|
||||
end # Real
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
15
lib/fog/joyent/requests/compute/reboot_machine.rb
Normal file
15
lib/fog/joyent/requests/compute/reboot_machine.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def reboot_machine(id)
|
||||
request(
|
||||
:method => "POST",
|
||||
:query => {"action" => "reboot"},
|
||||
:path => "/my/machines/#{id}"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
13
lib/fog/joyent/requests/compute/resize_machine.rb
Normal file
13
lib/fog/joyent/requests/compute/resize_machine.rb
Normal file
|
@ -0,0 +1,13 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
def resize_machine(id, package)
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/machines/#{id}",
|
||||
:query => {"action" => "resize", "package" => package}
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
16
lib/fog/joyent/requests/compute/start_machine.rb
Normal file
16
lib/fog/joyent/requests/compute/start_machine.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def start_machine(id)
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/machines/#{id}",
|
||||
:query => {"action" => "start"},
|
||||
:expects => 202
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def start_machine_from_snapshot(machine_id, snapshot_name)
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/machines/#{machine_id}/snapshots/#{snapshot_name}",
|
||||
:expects => 202
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
16
lib/fog/joyent/requests/compute/stop_machine.rb
Normal file
16
lib/fog/joyent/requests/compute/stop_machine.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def stop_machine(uuid)
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/machines/#{uuid}",
|
||||
:query => {"action" => "stop"},
|
||||
:expects => 202
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
15
lib/fog/joyent/requests/compute/update_machine_metadata.rb
Normal file
15
lib/fog/joyent/requests/compute/update_machine_metadata.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Joyent
|
||||
class Real
|
||||
def update_machine_metadata(machine_id, metadata)
|
||||
request(
|
||||
:method => "POST",
|
||||
:path => "/my/machines/#{machine_id}/metadata",
|
||||
:body => metadata
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -10,6 +10,7 @@ require 'fog/ecloud'
|
|||
require 'fog/glesys'
|
||||
require 'fog/go_grid'
|
||||
require 'fog/google'
|
||||
require 'fog/joyent'
|
||||
require 'fog/libvirt'
|
||||
require 'fog/linode'
|
||||
require 'fog/local'
|
||||
|
|
9
lib/test.rb
Normal file
9
lib/test.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
require './fog'
|
||||
c = Fog::Compute.new(:provider => "Joyent",
|
||||
:cloudapi_url => "https://10.99.99.26",
|
||||
:cloudapi_username => "admin",
|
||||
:cloudapi_password => "joypass123")
|
||||
puts c.servers.inspect
|
||||
puts c.keys.inspect
|
||||
puts c.images.inspect
|
||||
puts c.flavors.inspect
|
|
@ -22,6 +22,9 @@ def compute_providers
|
|||
:glesys => {
|
||||
:mocked => false
|
||||
},
|
||||
:joyent => {
|
||||
:mocked => false
|
||||
},
|
||||
:ninefold => {
|
||||
:mocked => false
|
||||
},
|
||||
|
|
|
@ -12,7 +12,7 @@ def array_differences(array_a, array_b)
|
|||
end
|
||||
|
||||
# check to see which credentials are available and add others to the skipped tags list
|
||||
all_providers = ['aws', 'bluebox', 'brightbox', 'dnsimple', 'dnsmadeeasy', 'dynect', 'ecloud', 'glesys', 'gogrid', 'google', 'linode', 'local', 'ninefold', 'newservers', 'openstack', 'ovirt', 'rackspace', 'slicehost', 'stormondemand', 'voxel', 'vsphere', 'zerigo']
|
||||
all_providers = ['aws', 'bluebox', 'brightbox', 'dnsimple', 'dnsmadeeasy', 'dynect', 'ecloud', 'glesys', 'gogrid', 'google', 'joyent', 'linode', 'local', 'ninefold', 'newservers', 'openstack', 'ovirt', 'rackspace', 'slicehost', 'stormondemand', 'voxel', 'vsphere', 'zerigo']
|
||||
available_providers = Fog.available_providers.map {|provider| provider.downcase}
|
||||
for provider in (all_providers - available_providers)
|
||||
Formatador.display_line("[yellow]Skipping tests for [bold]#{provider}[/] [yellow]due to lacking credentials (add some to '~/.fog' to run them)[/]")
|
||||
|
|
|
@ -17,6 +17,8 @@ if Fog.mock?
|
|||
:brightbox_secret => 'brightbox_secret',
|
||||
:clodo_api_key => 'clodo_api_key',
|
||||
:clodo_username => 'clodo_username',
|
||||
:cloudapi_username => "cloudapi_user",
|
||||
:cloudapi_password => "cloudapi_pass",
|
||||
:dnsimple_email => 'dnsimple_email',
|
||||
:dnsimple_password => 'dnsimple_password',
|
||||
:dnsmadeeasy_api_key => 'dnsmadeeasy_api_key',
|
||||
|
|
47
tests/joyent/requests/compute/datasets_test.rb
Normal file
47
tests/joyent/requests/compute/datasets_test.rb
Normal file
|
@ -0,0 +1,47 @@
|
|||
Shindo.tests("Fog::Compute[:joyent] | dataset requests", ["joyent"]) do
|
||||
@dataset_format = {
|
||||
"name" => String,
|
||||
"version" => String,
|
||||
"os" => String,
|
||||
"id" => String,
|
||||
"urn" => String,
|
||||
"default" => Fog::Boolean,
|
||||
"type" => String,
|
||||
"created" => Time
|
||||
}
|
||||
|
||||
if Fog.mock?
|
||||
Fog::Compute[:joyent].data[:datasets] = {
|
||||
"7456f2b0-67ac-11e0-b5ec-832e6cf079d5" => {
|
||||
"name" => "nodejs",
|
||||
"version" => "1.1.3",
|
||||
"os" => "smartos",
|
||||
"id" => "7456f2b0-67ac-11e0-b5ec-832e6cf079d5",
|
||||
"urn" => "sdc:sdc:nodejs:1.1.3",
|
||||
"default" => true,
|
||||
"type" => "smartmachine",
|
||||
"created" => Time.parse("2011-04-15T22:04:12+00:00")
|
||||
},
|
||||
"febaa412-6417-11e0-bc56-535d219f2590" => {
|
||||
"name" => "smartos",
|
||||
"version" => "1.3.12",
|
||||
"os" => "smartos",
|
||||
"id" => "febaa412-6417-11e0-bc56-535d219f2590",
|
||||
"urn" => "sdc:sdc:smartos:1.3.23",
|
||||
"default" => false,
|
||||
"type" => "smartmachine",
|
||||
"created" => Time.parse("2011-04-11T08:45:00+00:00")
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
tests("#list_datasets") do
|
||||
formats(@dataset_format) do
|
||||
Fog::Compute[:joyent].list_datasets.body.first
|
||||
end
|
||||
|
||||
returns(Fog::Compute[:joyent].data[:datasets].length) do
|
||||
Fog::Compute[:joyent].list_datasets.body.length
|
||||
end
|
||||
end
|
||||
end
|
48
tests/joyent/requests/compute/keys_test.rb
Normal file
48
tests/joyent/requests/compute/keys_test.rb
Normal file
|
@ -0,0 +1,48 @@
|
|||
Shindo.tests("Fog::Compute::Joyent | key requests", ['joyent']) do
|
||||
|
||||
@key_format = {
|
||||
"name" => String,
|
||||
"key" => String,
|
||||
"created" => Time
|
||||
}
|
||||
|
||||
before do
|
||||
Fog::Compute[:joyent].create_key(
|
||||
:name => "key1",
|
||||
:key => "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlau1...")
|
||||
|
||||
Fog::Compute[:joyent].create_key(
|
||||
:name => "key2",
|
||||
:key => "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlau1...")
|
||||
end
|
||||
|
||||
tests("#list_keys").formats([@key_format]) do
|
||||
Fog::Compute[:joyent].list_keys.body
|
||||
end
|
||||
|
||||
tests("#list_keys") do
|
||||
returns(2) do
|
||||
Fog::Compute[:joyent].list_keys.body.length
|
||||
end
|
||||
end
|
||||
|
||||
tests("#get_key").formats(@key_format) do
|
||||
Fog::Compute[:joyent].get_key('key1').body
|
||||
end
|
||||
|
||||
tests("#get_key").formats(@key_format) do
|
||||
Fog::Compute[:joyent].get_key('key2').body
|
||||
end
|
||||
|
||||
tests("#delete_key") do
|
||||
returns(200, "returns status code 200") do
|
||||
Fog::Compute[:joyent].delete_key("key1").status
|
||||
end
|
||||
|
||||
raises(Excon::Errors::NotFound, "when a key no longer exists") do
|
||||
Fog::Compute[:joyent].delete_key("key1")
|
||||
Fog::Compute[:joyent].delete_key("key1")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
60
tests/joyent/requests/compute/machines_test.rb
Normal file
60
tests/joyent/requests/compute/machines_test.rb
Normal file
|
@ -0,0 +1,60 @@
|
|||
Shindo.tests("Fog::Compute[:joyent] | machine requests", ["joyent"]) do
|
||||
|
||||
@machine_format = {
|
||||
"id" => String,
|
||||
"name" => String,
|
||||
"type" => String,
|
||||
"state" => String,
|
||||
"dataset" => String,
|
||||
"memory" => Integer,
|
||||
"disk" => Integer,
|
||||
"ips" => Array,
|
||||
"metadata" => Hash,
|
||||
"created" => Time,
|
||||
"updated" => Time
|
||||
}
|
||||
|
||||
@machines = Fog::Compute[:joyent].data[:machines] = {
|
||||
"15080eca-3786-4bb8-a4d0-f43e1981cd72" => {
|
||||
"id" => "15080eca-3786-4bb8-a4d0-f43e1981cd72",
|
||||
"name" => "getting-started",
|
||||
"type" => "smartmachine",
|
||||
"state" => "running",
|
||||
"dataset" => "sdc:sdc:smartos:1.3.15",
|
||||
"memory" => 256,
|
||||
"disk" => 5120,
|
||||
"ips" => ["10.88.88.50"],
|
||||
"metadata" => {},
|
||||
"created" => Time.parse("2011-06-03T00:02:31+00:00"),
|
||||
"updated" => Time.parse("2011-06-03T00:02:31+00:00")
|
||||
}
|
||||
}
|
||||
|
||||
@provider = Fog::Compute[:joyent]
|
||||
|
||||
|
||||
# https://us-west-1.api.joyentcloud.com/docs#ListMachines
|
||||
tests("#list_machines") do
|
||||
if Fog.mock?
|
||||
returns(@machines.length, "correct number of machines") do
|
||||
@provider.list_machines.body.length
|
||||
end
|
||||
end
|
||||
|
||||
returns(Array, "returns an Array of machines") do
|
||||
@provider.list_machines.body.class
|
||||
end
|
||||
|
||||
formats([@machine_format]) do
|
||||
@provider.list_machines.body
|
||||
end
|
||||
end
|
||||
|
||||
# https://us-west-1.api.joyentcloud.com/docs#GetMachine
|
||||
tests("#get_machine") do
|
||||
formats(@machine_format) do
|
||||
id = @provider.list_machines.body.first["id"]
|
||||
@provider.get_machine(id)
|
||||
end
|
||||
end
|
||||
end
|
60
tests/joyent/requests/compute/packages_test.rb
Normal file
60
tests/joyent/requests/compute/packages_test.rb
Normal file
|
@ -0,0 +1,60 @@
|
|||
Shindo.tests("Fog::Compute[:joyent] | package requests", ["joyent"]) do
|
||||
@data = Fog::Compute[:joyent].data
|
||||
|
||||
@package_format = {
|
||||
'name' => String,
|
||||
'vcpus' => Integer,
|
||||
'memory' => Integer,
|
||||
'disk' => Integer,
|
||||
'swap' => Integer,
|
||||
'default' => Fog::Boolean
|
||||
}
|
||||
|
||||
if Fog.mock?
|
||||
@data[:packages] = {
|
||||
"regular_128" => {
|
||||
"name" => "regular_128",
|
||||
"memory" => 128,
|
||||
"disk" => 5120,
|
||||
"vcpus" => 1,
|
||||
"swap" => 256,
|
||||
"default" => true
|
||||
},
|
||||
"regular_256" => {
|
||||
"name" => "regular_256",
|
||||
"memory" => 256,
|
||||
"disk" => 5120,
|
||||
"vcpus" => 1,
|
||||
"swap" => 512,
|
||||
"default" => false
|
||||
},
|
||||
"regular_512" => {
|
||||
"name" => "regular_512",
|
||||
"memory" => 512,
|
||||
"disk" => 10240,
|
||||
"vcpus" => 1,
|
||||
"swap" => 1024,
|
||||
"default" => false
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
tests("#list_packages") do
|
||||
formats([@package_format]) do
|
||||
Fog::Compute[:joyent].list_packages.body
|
||||
end
|
||||
|
||||
actual = @data[:packages].values.length
|
||||
returns(actual, "has correct number of packages") do
|
||||
Fog::Compute[:joyent].list_packages.body.length
|
||||
end
|
||||
end
|
||||
|
||||
tests("#get_package") do
|
||||
pkgid = @data[:packages].keys.first
|
||||
|
||||
formats(@package_format) do
|
||||
Fog::Compute[:joyent].get_package(pkgid).body
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue