Class: Fog::Compute::Clodo::Real

Inherits:
Object
  • Object
show all
Defined in:
lib/fog/clodo/compute.rb,
lib/fog/clodo/requests/compute/list_images.rb,
lib/fog/clodo/requests/compute/stop_server.rb,
lib/fog/clodo/requests/compute/list_servers.rb,
lib/fog/clodo/requests/compute/start_server.rb,
lib/fog/clodo/requests/compute/create_server.rb,
lib/fog/clodo/requests/compute/delete_server.rb,
lib/fog/clodo/requests/compute/reboot_server.rb,
lib/fog/clodo/requests/compute/server_action.rb,
lib/fog/clodo/requests/compute/add_ip_address.rb,
lib/fog/clodo/requests/compute/rebuild_server.rb,
lib/fog/clodo/requests/compute/move_ip_address.rb,
lib/fog/clodo/requests/compute/delete_ip_address.rb,
lib/fog/clodo/requests/compute/get_image_details.rb,
lib/fog/clodo/requests/compute/get_server_details.rb,
lib/fog/clodo/requests/compute/list_images_detail.rb,
lib/fog/clodo/requests/compute/list_servers_detail.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real.



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/fog/clodo/compute.rb', line 73

def initialize(options={})
  @clodo_api_key = options[:clodo_api_key]
  @clodo_username = options[:clodo_username]
  @clodo_auth_url = options[:clodo_auth_url]
  @clodo_servicenet = options[:clodo_servicenet]
  @clodo_auth_token = options[:clodo_auth_token]
  @clodo_management_url = options[:clodo_management_url]
  @clodo_must_reauthenticate = false
  authenticate
  Excon.ssl_verify_peer = false if options[:clodo_servicenet] == true
  @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent])
end

Instance Method Details

#add_ip_address(server_id) ⇒ Object

Bye new IP-address for specified server

Paramaters

  • server_id<~Integer> - Id of server to bye IP for

Returns

  • response<~Excon::Response>



13
14
15
16
17
18
19
# File 'lib/fog/clodo/requests/compute/add_ip_address.rb', line 13

def add_ip_address(server_id)
  request(
          :expects  => [204],
          :method   => 'PUT',
          :path     => "servers/#{server_id}/ips"
          )
end

#create_server(image_id, options = {}) ⇒ Object

Input: vps_title - VDS title to display in VDS list vps_type - VDS type (VirtualServer,ScaleServer) vps_memory - memory size in megabytes (for ScaleServer - low limit) vps_memory_max - maximum number of ScaleServer memory megabytes to scale up. vps_hdd - Virtual HDD size im gigabytes. vps_admin - support level (1 - usual&free, 2 - extended, 3 - VIP) vps_os - OS ID to install Output: id - VDS ID name - VDS title imageId - OS ID adminPass - root password



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fog/clodo/requests/compute/create_server.rb', line 19

def create_server(image_id, options = {})
  data = {
    'server' => {
      :vps_os   => image_id,
      :vps_hdd => options[:vps_hdd]?options[:vps_hdd]:5,
      :vps_memory => options[:vps_memory]?options[:vps_memory]:256,
      :vps_memory_max => options[:vps_memory_max]?options[:vps_memory_max]:1024,
      :vps_admin => options[:vps_admin]?options[:vps_admin]:1
    }
  }

  data['server'].merge! options if options

  request(
          :body     => Fog::JSON.encode(data),
          :expects  => [200, 202],
          :method   => 'POST',
          :path     => 'servers'
          )
end

#delete_ip_address(server_id, ip) ⇒ Object

Delete IP-address from specified server

Paramaters

  • server_id<~Integer> - Id of server to delete IP from

  • ip<~String> - IP-address to delete

Returns

  • response<~Excon::Response>



14
15
16
17
18
19
20
21
22
23
# File 'lib/fog/clodo/requests/compute/delete_ip_address.rb', line 14

def delete_ip_address(server_id, ip)
  data = {'ip' => ip}

  request(
          :expects  => [204],
          :method   => 'DELETE',
          :path     => "servers/#{server_id}/ips",
          :body     => Fog::JSON.encode(data)
          )
end

#delete_server(server_id) ⇒ Object

Delete an existing server

Parameters

  • id<~Integer> - Id of server to delete



10
11
12
13
14
15
16
# File 'lib/fog/clodo/requests/compute/delete_server.rb', line 10

def delete_server(server_id)
  request(
    :expects => 204,
    :method => 'DELETE',
    :path   => "servers/#{server_id}"
  )
end

#get_image_details(image_id) ⇒ Object



5
6
7
8
9
# File 'lib/fog/clodo/requests/compute/get_image_details.rb', line 5

def get_image_details(image_id)
  request(:expects => [200,203],
          :method => 'GET',
          :path => "images/#{image_id}")
end

#get_server_details(server_id) ⇒ Object

Get details about a server

Parameters

  • server_id<~Integer> - Id of server to get details for

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

    • ‘server’<~Hash>:

      • ‘addresses’<~Hash>:

        • ‘public’<~Array> - public address strings

        • ‘private’<~Array> - private address strings

      • ‘id’<~Integer> - Id of server

      • ‘imageId’<~Integer> - Id of image used to boot server

      • ‘name<~String> - Name of server

      • ‘status’<~String> - Current server status



21
22
23
24
25
26
27
# File 'lib/fog/clodo/requests/compute/get_server_details.rb', line 21

def get_server_details(server_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "servers/#{server_id}"
  )
end

#list_imagesObject

List all images (IDs and names only)

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘id’<~Integer> - Id of the image

      • ‘name’<~String> - Name of the image

      • ‘status’<~String> - Status of the image

      • ‘vps_type’<~String> - VirtualServer or ScaleServer



14
15
16
17
18
19
20
# File 'lib/fog/clodo/requests/compute/list_images.rb', line 14

def list_images
  request(
          :expects  => [200, 203],
          :method   => 'GET',
          :path     => 'images'
          )
end

#list_images_detailObject

  • ‘id’<~Integer> - Id of the image

    * 'name'<~String> - Name of the image
    * 'status'<~String> - Status of the image
    * 'vps_type'<~String> - VirtualServer or ScaleServer
    


19
20
21
22
23
24
25
# File 'lib/fog/clodo/requests/compute/list_images_detail.rb', line 19

def list_images_detail
  request(
          :expects  => [200, 203],
          :method   => 'GET',
          :path     => 'images/detail'
          )
end

#list_serversObject

List all servers (IDs and names only)

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

    • ‘servers’<~Array>:

      • ‘id’<~String> - Id of server

      • ‘name’<~String> - Name of server

      • ‘addresses’<~Hash>:

        • ‘public’<~Array>:

          • ‘dosprotect’<~Bool> - DDoS protection enabled

          • ‘primary_ip’<~Bool> - Is a primary IP-address

          • ‘isp’<~Bool> - ISPManager license enabled

          • ‘ip’<~String> - IP-address

      • ‘imageId’<~String> - ID of OS image installed

      • ‘type’<~String> - Type (ScaleServer or Virtual Server)

      • ‘status’<~String> - Server’s status



22
23
24
25
26
27
28
# File 'lib/fog/clodo/requests/compute/list_servers.rb', line 22

def list_servers
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'servers'
  )
end

#list_servers_detailObject

List all servers details

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

    • ‘servers’<~Array>:

      • ‘id’<~Integer> - Id of server

      • ‘name<~String> - Name of server

      • ‘imageId’<~Integer> - Id of image used to boot server

      • ‘status’<~String> - Current server status

      • ‘addresses’<~Hash>:

        • ‘public’<~Array> - public address strings



17
18
19
20
21
22
23
# File 'lib/fog/clodo/requests/compute/list_servers_detail.rb', line 17

def list_servers_detail
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'servers/detail'
  )
end

#move_ip_address(server_id, ip) ⇒ Object

Move IP-address to specified server.

Paramaters

  • server_id<~Integer> - Id of server to move IP to

  • ip<~String> - IP-address to move

Returns

  • response<~Excon::Response>



14
15
16
17
18
19
20
21
# File 'lib/fog/clodo/requests/compute/move_ip_address.rb', line 14

def move_ip_address(server_id, ip)
  request(
          :expects  => [204],
          :method   => 'GET',
          :path     => "servers/#{server_id}/ips/moveip",
          :body     => Fog::JSON.encode({'ip'=>"#{ip}"})
          )
end

#reboot_server(id, type) ⇒ Object



5
6
7
8
# File 'lib/fog/clodo/requests/compute/reboot_server.rb', line 5

def reboot_server(id, type)
  body = {'reboot' => {}}
  server_action(id, body)
end

#rebuild_server(id, image_id, vps_isp = nil) ⇒ Object



5
6
7
8
9
# File 'lib/fog/clodo/requests/compute/rebuild_server.rb', line 5

def rebuild_server(id, image_id, vps_isp = nil)
  body = {'rebuild' => {'imageId' => image_id}}
  body['rebuild']['vps_isp'] = vps_isp if vps_isp
  server_action(id, body)
end

#reloadObject



86
87
88
# File 'lib/fog/clodo/compute.rb', line 86

def reload
  @connection.reset
end

#request(params) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/fog/clodo/compute.rb', line 90

def request(params)
  begin
    response = @connection.request(params.merge({
      :headers  => {
        'Content-Type' => 'application/json',
        'Accept' => 'application/json',
        'X-Auth-Token' => @auth_token
      }.merge!(params[:headers] || {}),
      :host     => @host,
      :path     => "#{@path}/#{params[:path]}"
    }))
  rescue Excon::Errors::Unauthorized => error
    if error.response.body != 'Bad username or password' # token expiration
      @clodo_must_reauthenticate = true
      authenticate
      retry
    else # bad credentials
      raise error
    end
  rescue Excon::Errors::HTTPStatusError => error
    raise case error
    when Excon::Errors::NotFound
      Fog::Compute::Clodo::NotFound.slurp(error)
    else
      error
    end
  end
  unless response.body.empty?
    response.body = Fog::JSON.decode(response.body)
  end
  response
end

#server_action(id, action) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/clodo/requests/compute/server_action.rb', line 5

def server_action(id, action)
  request(
          :body    => Fog::JSON.encode(action),
          :expects => [204],
          :method  => 'POST',
          :path    => "servers/#{id}/action")
end

#start_server(id) ⇒ Object



5
6
7
8
# File 'lib/fog/clodo/requests/compute/start_server.rb', line 5

def start_server(id)
  body = {'start' => {}}
  server_action(id, body)
end

#stop_server(id) ⇒ Object



5
6
7
8
# File 'lib/fog/clodo/requests/compute/stop_server.rb', line 5

def stop_server(id)
  body = {'stop' => {}}
  server_action(id, body)
end