[compute|glesys] added glesys as provider
This commit is contained in:
parent
729a62fb1e
commit
0c63450e90
|
@ -59,6 +59,7 @@ require 'fog/bin/dnsimple'
|
|||
require 'fog/bin/dnsmadeeasy'
|
||||
require 'fog/bin/dynect'
|
||||
require 'fog/bin/ecloud'
|
||||
require 'fog/bin/glesys'
|
||||
require 'fog/bin/go_grid'
|
||||
require 'fog/bin/google'
|
||||
require 'fog/bin/libvirt'
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
class Glesys < Fog::Bin
|
||||
class << self
|
||||
|
||||
def class_for(key)
|
||||
case key
|
||||
when :compute
|
||||
Fog::Compute::Glesys
|
||||
when :storage
|
||||
Fog::Storage::Glesys
|
||||
else
|
||||
raise ArgumentError, "Unsupported #{self} service: #{key}"
|
||||
end
|
||||
end
|
||||
|
||||
def [](service)
|
||||
@@connections ||= Hash.new do |hash, key|
|
||||
hash[key] = case key
|
||||
when :compute
|
||||
Formatador.display_line("[yellow][WARN] Glesys[:compute] is deprecated, use Compute[:Glesys] instead[/]")
|
||||
Fog::Compute.new(:provider => 'Glesys')
|
||||
when :storage
|
||||
Formatador.display_line("[yellow][WARN] Glesys[:storage] is deprecated, use Storage[:Glesys] instead[/]")
|
||||
Fog::Storage.new(:provider => 'Glesys')
|
||||
else
|
||||
raise ArgumentError, "Unrecognized service: #{service}"
|
||||
end
|
||||
end
|
||||
@@connections[service]
|
||||
end
|
||||
|
||||
def services
|
||||
Fog::Glesys.services
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -20,6 +20,9 @@ module Fog
|
|||
when :ecloud
|
||||
require 'fog/ecloud/compute'
|
||||
Fog::Compute::Ecloud.new(attributes)
|
||||
when :glesys
|
||||
require 'fog/compute/glesys'
|
||||
Fog::Compute::Glesys.new(attributes)
|
||||
when :gogrid
|
||||
require 'fog/go_grid/compute'
|
||||
Fog::Compute::GoGrid.new(attributes)
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys < Fog::Service
|
||||
|
||||
requires :glesys_username, :glesys_api_key
|
||||
|
||||
API_URL = "https://api.glesys.com"
|
||||
|
||||
model_path 'fog/compute/models/glesys'
|
||||
collection :servers
|
||||
model :server
|
||||
collection :templates
|
||||
model :template
|
||||
collection :ips
|
||||
model :ip
|
||||
|
||||
request_path 'fog/compute/requests/glesys'
|
||||
request :create
|
||||
request :destroy
|
||||
request :list_servers
|
||||
request :server_details
|
||||
request :server_status
|
||||
request :start
|
||||
request :stop
|
||||
# Templates
|
||||
request :template_list
|
||||
# IP operations
|
||||
request :ip_list_free
|
||||
request :ip_list_own
|
||||
request :ip_details
|
||||
request :ip_take
|
||||
request :ip_release
|
||||
request :ip_add
|
||||
request :ip_remove
|
||||
|
||||
|
||||
class Mock
|
||||
include Collections
|
||||
|
||||
def request(method_name, options = {})
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Real
|
||||
include Collections
|
||||
|
||||
def initialize(options)
|
||||
require 'multi_json'
|
||||
require 'base64'
|
||||
|
||||
@api_url = options[:glesys_api_url] || Fog.credentials[:glesys_api_url] || API_URL
|
||||
@glesys_username = options[:glesys_username] || Fog.credentials[:glesys_api_key]
|
||||
@glesys_api_key = options[:glesys_api_key] || Fog.credentials[:glesys_api_key]
|
||||
@connection = Fog::Connection.new(@api_url)
|
||||
end
|
||||
|
||||
def request(method_name, options = {})
|
||||
|
||||
options.merge!( {:format => 'json'})
|
||||
|
||||
begin
|
||||
parser = options.delete(:parser)
|
||||
data = @connection.request(
|
||||
:expects => 200,
|
||||
:method => "POST",
|
||||
:body => urlencode(options),
|
||||
:parser => parser,
|
||||
:path => method_name,
|
||||
:headers => {
|
||||
'Authorization' => "Basic #{encoded_api_auth}",
|
||||
'Content-Type' => 'application/x-www-form-urlencoded'
|
||||
}
|
||||
)
|
||||
|
||||
data.body = MultiJson.decode(data.body)
|
||||
|
||||
unless data.body['response']['status']['code'] == '200'
|
||||
raise Fog::Compute::Glesys::Error, "#{data.body['response']['status']['text']}"
|
||||
end
|
||||
data
|
||||
rescue Excon::Errors::HTTPStatusError => error
|
||||
raise case error
|
||||
when Excon::Errors::NotFound
|
||||
Fog::Compute::Glesys::NotFound.slurp(error)
|
||||
else
|
||||
error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def encoded_api_auth
|
||||
token = [@glesys_username, @glesys_api_key].join(':')
|
||||
Base64.encode64(token).delete("\r\n")
|
||||
end
|
||||
|
||||
def urlencode(hash)
|
||||
hash.to_a.collect! { |k, v| "#{k}=#{v.to_s}" }.join("&")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,75 @@
|
|||
require 'fog/core/model'
|
||||
|
||||
module Fog
|
||||
module Glesys
|
||||
class Compute
|
||||
|
||||
class Ip < Fog::Model
|
||||
extend Fog::Deprecation
|
||||
|
||||
identity :serverid
|
||||
|
||||
attribute :datacenter
|
||||
attribute :version
|
||||
attribute :platform
|
||||
attribute :ip
|
||||
|
||||
def list_own
|
||||
connection.list_own
|
||||
end
|
||||
|
||||
def list_free
|
||||
requires :version, :datacenter, :platform
|
||||
connection.ip_list_free(
|
||||
:ipversion => version,
|
||||
:platform => platform,
|
||||
:datacenter => datacenter
|
||||
).body['response']['iplist']
|
||||
end
|
||||
|
||||
def details
|
||||
requires :version, :ip
|
||||
connection.ip_details(
|
||||
:ipversion => version,
|
||||
:ipaddress => ip
|
||||
)
|
||||
end
|
||||
|
||||
def take
|
||||
requires :version, :ip
|
||||
connection.ip_take(
|
||||
:ipversion => version,
|
||||
:ipaddress => ip
|
||||
)
|
||||
end
|
||||
|
||||
def release
|
||||
requires :version, :ip
|
||||
connection.ip_release(
|
||||
:ipversion => version,
|
||||
:ipaddress => ip
|
||||
)
|
||||
end
|
||||
|
||||
def add
|
||||
requires :serverid, :version, :ip
|
||||
connection.ip_add(
|
||||
:serverid => serverid,
|
||||
:ipversion => version,
|
||||
:ipaddress => ip
|
||||
)
|
||||
end
|
||||
|
||||
def remove
|
||||
requires :serverid, :version, :ip
|
||||
connection.ip_remove(
|
||||
:serverid => serverid,
|
||||
:ipversion => version,
|
||||
:ipaddress => ip
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,39 @@
|
|||
require 'fog/core/collection'
|
||||
require 'fog/compute/models/glesys/ip'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
|
||||
class Ips < Fog::Collection
|
||||
|
||||
model Fog::Glesys::Compute::Ip
|
||||
|
||||
attribute :serverid
|
||||
|
||||
def all
|
||||
data = connection.ip_list_own.body['response']['iplist']
|
||||
load(data)
|
||||
end
|
||||
|
||||
def get(identifier)
|
||||
return nil if identifier.nil? || identifier == ""
|
||||
|
||||
self.new( :serverid => identifier )
|
||||
|
||||
data = connection.ip_list_own(:serverid => identifier).body['response']
|
||||
if data['iplist'].empty?
|
||||
nil
|
||||
else
|
||||
new(data['iplist'].first)
|
||||
end
|
||||
end
|
||||
|
||||
def new(attributes = {})
|
||||
super({ :serverid => serverid }.merge!(attributes))
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,71 @@
|
|||
require 'fog/compute/models/server'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
|
||||
class Server < Fog::Compute::Server
|
||||
extend Fog::Deprecation
|
||||
|
||||
identity :serverid
|
||||
|
||||
attribute :hostname
|
||||
attribute :datacenter
|
||||
attribute :cpucores
|
||||
attribute :memorysize
|
||||
attribute :disksize
|
||||
attribute :transfer
|
||||
attribute :template
|
||||
attribute :managedhosting
|
||||
attribute :platform
|
||||
attribute :cost
|
||||
attribute :rootpw
|
||||
attribute :keepip
|
||||
attribute :state
|
||||
attribute :iplist
|
||||
attribute :ipversion
|
||||
attribute :ip
|
||||
|
||||
def ready?
|
||||
state == 'running'
|
||||
end
|
||||
|
||||
def start
|
||||
requires :identity
|
||||
connection.start(:serverid => identity)
|
||||
end
|
||||
|
||||
def stop
|
||||
requires :identity
|
||||
connection.stop(:serverid => identity)
|
||||
end
|
||||
|
||||
def destroy
|
||||
requires :identity
|
||||
connection.destroy(:serverid => identity, :keepip => keepip)
|
||||
end
|
||||
|
||||
def save
|
||||
raise "Operation not supported" if self.identity
|
||||
requires :hostname, :rootpw
|
||||
|
||||
options = {
|
||||
:datacenter => "Falkenberg" || datacenter,
|
||||
:platform => "Xen" || platform,
|
||||
:hostname => hostname,
|
||||
:template => "Debian-6 x64" || template,
|
||||
:disksize => "10" || disksize,
|
||||
:memorysize => "512" || memorysize,
|
||||
:cpucores => "1" || cpucores,
|
||||
:rootpw => rootpw,
|
||||
:transfer => "500" || transfer,
|
||||
}
|
||||
data = connection.create(options)
|
||||
merge_attributes(data.body['response']['server'])
|
||||
data.status == 200 ? true : false
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,34 @@
|
|||
require 'fog/core/collection'
|
||||
require 'fog/compute/models/glesys/server'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
|
||||
class Servers < Fog::Collection
|
||||
|
||||
model Fog::Compute::Glesys::Server
|
||||
|
||||
def all
|
||||
data = connection.list_servers.body['response']['servers']
|
||||
load(data)
|
||||
end
|
||||
|
||||
def get(identifier)
|
||||
return nil if identifier.nil? || identifier == ""
|
||||
details = connection.server_details(identifier).body['response']
|
||||
status = connection.server_status(identifier).body['response']
|
||||
if details.empty? || status.empty?
|
||||
nil
|
||||
else
|
||||
status['server'].merge!({ :serverid => identifier})
|
||||
details['server'].merge!(status['server'])
|
||||
new(details['server'])
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,25 @@
|
|||
require 'fog/core/model'
|
||||
|
||||
module Fog
|
||||
module Glesys
|
||||
class Compute
|
||||
|
||||
class Template < Fog::Model
|
||||
extend Fog::Deprecation
|
||||
|
||||
identity :templateid
|
||||
|
||||
attribute :platform
|
||||
attribute :name
|
||||
attribute :os
|
||||
attribute :min_mem_size
|
||||
attribute :min_disk_size
|
||||
|
||||
def list
|
||||
connection.template_list
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,28 @@
|
|||
require 'fog/core/collection'
|
||||
require 'fog/compute/models/glesys/template'
|
||||
|
||||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
|
||||
class Templates < Fog::Collection
|
||||
|
||||
model Fog::Glesys::Compute::Template
|
||||
|
||||
#attribute :platform
|
||||
#attribute :name
|
||||
#attribute :os
|
||||
#attribute :min_mem_size
|
||||
#attribute :min_disk_size
|
||||
|
||||
def all
|
||||
openvz = connection.template_list.body['response']['templates']['OpenVZ']
|
||||
xen = connection.template_list.body['response']['templates']['Xen']
|
||||
|
||||
load(xen+openvz)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def create(options = {})
|
||||
request('server/create/',options)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def destroy(options)
|
||||
|
||||
if options[:keepip].nil?
|
||||
options[:keepip] = 0
|
||||
end
|
||||
|
||||
request("/server/destroy", options)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def ip_add(params)
|
||||
request("/ip/add", params)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def ip_list_free(params)
|
||||
request("/ip/listfree", params)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def ip_list_free(options = {})
|
||||
request("/ip/listfree", options)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def ip_list_own(options = {})
|
||||
request("/ip/listown", options)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def ip_release(params)
|
||||
request("/ip/release", params)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def ip_remove(params)
|
||||
request("/ip/remove", params)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def ip_take(params)
|
||||
request("/ip/take", params)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def list_servers(serverid = nil, options = {})
|
||||
|
||||
unless serverid.nil?
|
||||
options[:serverid] = serverid
|
||||
end
|
||||
|
||||
request("/server/list", options)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def server_details(serverid)
|
||||
request("/server/details", { :serverid => serverid })
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def server_status(serverid)
|
||||
request("/server/status", { :serverid => serverid } )
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def start(param)
|
||||
request("/server/start", param)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def stop(param)
|
||||
request("/server/stop", param)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
module Fog
|
||||
module Compute
|
||||
class Glesys
|
||||
class Real
|
||||
|
||||
def template_list(options = {})
|
||||
request("/server/templates", options)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -5,6 +5,7 @@ require 'fog/dnsimple'
|
|||
require 'fog/dnsmadeeasy'
|
||||
require 'fog/dynect'
|
||||
require 'fog/ecloud'
|
||||
require 'fog/providers/glesys'
|
||||
require 'fog/go_grid'
|
||||
require 'fog/google'
|
||||
require 'fog/libvirt'
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
require 'fog/core'
|
||||
|
||||
module Fog
|
||||
module Glesys
|
||||
|
||||
extend Fog::Provider
|
||||
|
||||
service(:compute, 'compute/glesys')
|
||||
|
||||
end
|
||||
end
|
|
@ -17,6 +17,9 @@ def compute_providers
|
|||
},
|
||||
:mocked => false
|
||||
},
|
||||
:glesys => {
|
||||
:mocked => false
|
||||
},
|
||||
:ninefold => {
|
||||
:mocked => false
|
||||
},
|
||||
|
|
|
@ -8,7 +8,7 @@ def lorem_file
|
|||
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', 'gogrid', 'google', 'linode', 'local', 'ninefold', 'newservers', 'rackspace', 'slicehost', 'stormondemand', 'voxel', 'zerigo']
|
||||
all_providers = ['aws', 'bluebox', 'brightbox', 'dnsimple', 'dnsmadeeasy', 'dynect', 'ecloud', 'glesys', 'gogrid', 'google', 'linode', 'local', 'ninefold', 'newservers', 'rackspace', 'slicehost', 'stormondemand', 'voxel', '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)[/]")
|
||||
|
|
Loading…
Reference in New Issue