Class: VagrantPlugins::Openstack::NovaClient

Inherits:
Object
  • Object
show all
Includes:
Singleton, Utils
Defined in:
lib/vagrant-openstack-provider/client/nova.rb

Instance Method Summary collapse

Methods included from Utils

#authenticated, #handle_response

Constructor Details

#initializeNovaClient

Returns a new instance of NovaClient.



13
14
15
16
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 13

def initialize
  @logger = Log4r::Logger.new('vagrant_openstack::nova')
  @session = VagrantPlugins::Openstack.session
end

Instance Method Details

#add_floating_ip(env, server_id, floating_ip) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 124

def add_floating_ip(env, server_id, floating_ip)
  authenticated(env) do
    check_floating_ip(env, floating_ip)
    RestClient.post(
      "#{@session.endpoints[:compute]}/servers/#{server_id}/action",
      {
        addFloatingIp:
        {
          address: floating_ip
        }
      }.to_json,
      'X-Auth-Token' => @session.token,
      :accept => :json,
      :content_type => :json) { |res| handle_response(res) }
  end
end

#create_server(env, name, image_ref, flavor_ref, networks, keypair) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 38

def create_server(env, name, image_ref, flavor_ref, networks, keypair)
  authenticated(env) do
    server = {}.tap do |s|
      s['name'] = name
      s['imageRef'] = image_ref
      s['flavorRef'] = flavor_ref
      s['key_name'] = keypair
      unless networks.nil? || networks.empty?
        s['networks'] = []
        networks.each do |uuid|
          s['networks'] << { uuid: uuid }
        end
      end
    end

    server = RestClient.post(
      "#{@session.endpoints[:compute]}/servers", { server: server }.to_json,
      'X-Auth-Token' => @session.token,
      :accept => :json,
      :content_type => :json) { |res| handle_response(res) }

    JSON.parse(server)['server']['id']
  end
end

#delete_server(env, server_id) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 63

def delete_server(env, server_id)
  authenticated(env) do
    RestClient.delete(
      "#{@session.endpoints[:compute]}/servers/#{server_id}",
      'X-Auth-Token' => @session.token,
      :accept => :json) { |res| handle_response(res) }
  end
end

#get_all_flavors(env) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 18

def get_all_flavors(env)
  authenticated(env) do
    flavors_json = RestClient.get("#{@session.endpoints[:compute]}/flavors",
                                  'X-Auth-Token' => @session.token,
                                  :accept => :json) { |res| handle_response(res) }

    return JSON.parse(flavors_json)['flavors'].map { |fl| Item.new(fl['id'], fl['name']) }
  end
end

#get_all_images(env) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 28

def get_all_images(env)
  authenticated(env) do
    images_json = RestClient.get(
      "#{@session.endpoints[:compute]}/images",
      'X-Auth-Token' => @session.token, :accept => :json) { |res| handle_response(res) }

    JSON.parse(images_json)['images'].map { |im| Item.new(im['id'], im['name']) }
  end
end

#get_server_details(env, server_id) ⇒ Object



113
114
115
116
117
118
119
120
121
122
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 113

def get_server_details(env, server_id)
  authenticated(env) do
    server_details = RestClient.get(
      "#{@session.endpoints[:compute]}/servers/#{server_id}",
      'X-Auth-Token' => @session.token,
      :accept => :json) { |res| handle_response(res) }

    return JSON.parse(server_details)['server']
  end
end

#resume_server(env, server_id) ⇒ Object



82
83
84
85
86
87
88
89
90
91
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 82

def resume_server(env, server_id)
  # TODO(julienvey) check status before (if pause->unpause, if suspend->resume...)
  authenticated(env) do
    RestClient.post(
      "#{@session.endpoints[:compute]}/servers/#{server_id}/action", '{ "resume": null }',
      'X-Auth-Token' => @session.token,
      :accept => :json,
      :content_type => :json) { |res| handle_response(res) }
  end
end

#start_server(env, server_id) ⇒ Object



103
104
105
106
107
108
109
110
111
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 103

def start_server(env, server_id)
  authenticated(env) do
    RestClient.post(
      "#{@session.endpoints[:compute]}/servers/#{server_id}/action", '{ "os-start": null }',
      'X-Auth-Token' => @session.token,
      :accept => :json,
      :content_type => :json) { |res| handle_response(res) }
  end
end

#stop_server(env, server_id) ⇒ Object



93
94
95
96
97
98
99
100
101
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 93

def stop_server(env, server_id)
  authenticated(env) do
    RestClient.post(
      "#{@session.endpoints[:compute]}/servers/#{server_id}/action", '{ "os-stop": null }',
      'X-Auth-Token' => @session.token,
      :accept => :json,
      :content_type => :json) { |res| handle_response(res) }
  end
end

#suspend_server(env, server_id) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/vagrant-openstack-provider/client/nova.rb', line 72

def suspend_server(env, server_id)
  authenticated(env) do
    RestClient.post(
      "#{@session.endpoints[:compute]}/servers/#{server_id}/action", '{ "suspend": null }',
      'X-Auth-Token' => @session.token,
      :accept => :json,
      :content_type => :json) { |res| handle_response(res) }
  end
end