Class: Pooler

Inherits:
Object
  • Object
show all
Defined in:
lib/vmfloaty/pooler.rb

Class Method Summary collapse

Class Method Details

.delete(verbose, url, hosts, token) ⇒ Object

Raises:



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/vmfloaty/pooler.rb', line 97

def self.delete(verbose, url, hosts, token)
  raise TokenError, 'Token provided was nil. Request cannot be made to delete vm' if token.nil?

  conn = Http.get_conn(verbose, url)

  conn.headers['X-AUTH-TOKEN'] = token if token

  response_body = {}

  hosts.each do |host|
    response = conn.delete "vm/#{host}"
    res_body = JSON.parse(response.body)
    response_body[host] = res_body
  end

  response_body
end

.disk(verbose, url, hostname, token, disk) ⇒ Object

Raises:



85
86
87
88
89
90
91
92
93
94
95
# File 'lib/vmfloaty/pooler.rb', line 85

def self.disk(verbose, url, hostname, token, disk)
  raise TokenError, 'Token provided was nil. Request cannot be made to modify vm' if token.nil?

  conn = Http.get_conn(verbose, url)
  conn.headers['X-AUTH-TOKEN'] = token

  response = conn.post "vm/#{hostname}/disk/#{disk}"

  res_body = JSON.parse(response.body)
  res_body
end

.list(verbose, url, os_filter = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/vmfloaty/pooler.rb', line 9

def self.list(verbose, url, os_filter = nil)
  conn = Http.get_conn(verbose, url)

  response = conn.get 'vm'
  response_body = JSON.parse(response.body)

  hosts = if os_filter
            response_body.select { |i| i[/#{os_filter}/] }
          else
            response_body
          end

  hosts
end

.list_active(verbose, url, token, _user) ⇒ Object



24
25
26
27
28
29
# File 'lib/vmfloaty/pooler.rb', line 24

def self.list_active(verbose, url, token, _user)
  status = Auth.token_status(verbose, url, token)
  vms = []
  vms = status[token]['vms']['running'] if status[token] && status[token]['vms']
  vms
end

.modify(verbose, url, hostname, token, modify_hash) ⇒ Object

Raises:



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/vmfloaty/pooler.rb', line 54

def self.modify(verbose, url, hostname, token, modify_hash)
  raise TokenError, 'Token provided was nil. Request cannot be made to modify vm' if token.nil?

  modify_hash.keys.each do |key|
    raise ModifyError, "Configured service type does not support modification of #{key}." unless %i[tags lifetime disk].include? key
  end

  conn = Http.get_conn(verbose, url)
  conn.headers['X-AUTH-TOKEN'] = token

  if modify_hash['disk']
    disk(verbose, url, hostname, token, modify_hash['disk'])
    modify_hash.delete 'disk'
  end

  response = conn.put do |req|
    req.url "vm/#{hostname}"
    req.body = modify_hash.to_json
  end

  res_body = JSON.parse(response.body)

  if res_body['ok']
    res_body
  elsif response.status == 401
    raise AuthError, "HTTP #{response.status}: The token provided could not authenticate to the pooler.\n#{res_body}"
  else
    raise ModifyError, "HTTP #{response.status}: Failed to modify VMs from the pooler vm/#{hostname}. #{res_body}"
  end
end

.query(verbose, url, hostname) ⇒ Object



131
132
133
134
135
136
137
138
# File 'lib/vmfloaty/pooler.rb', line 131

def self.query(verbose, url, hostname)
  conn = Http.get_conn(verbose, url)

  response = conn.get "vm/#{hostname}"
  res_body = JSON.parse(response.body)

  res_body
end

.retrieve(verbose, os_type, token, url, _user, _options) ⇒ Object

Raises:



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/vmfloaty/pooler.rb', line 31

def self.retrieve(verbose, os_type, token, url, _user, _options)
  # NOTE:
  #   Developers can use `Utils.generate_os_hash` to
  #   generate the os_type param.
  conn = Http.get_conn(verbose, url)
  conn.headers['X-AUTH-TOKEN'] = token if token

  os_string = os_type.map { |os, num| Array(os) * num }.flatten.join('+')
  raise MissingParamError, 'No operating systems provided to obtain.' if os_string.empty?

  response = conn.post "vm/#{os_string}"

  res_body = JSON.parse(response.body)

  if res_body['ok']
    res_body
  elsif response.status == 401
    raise AuthError, "HTTP #{response.status}: The token provided could not authenticate to the pooler.\n#{res_body}"
  else
    raise "HTTP #{response.status}: Failed to obtain VMs from the pooler at #{url}/vm/#{os_string}. #{res_body}"
  end
end

.revert(verbose, url, hostname, token, snapshot_sha) ⇒ Object

Raises:



151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/vmfloaty/pooler.rb', line 151

def self.revert(verbose, url, hostname, token, snapshot_sha)
  raise TokenError, 'Token provided was nil. Request cannot be made to revert vm' if token.nil?

  conn = Http.get_conn(verbose, url)
  conn.headers['X-AUTH-TOKEN'] = token

  raise "Snapshot SHA provided was nil, could not revert #{hostname}" if snapshot_sha.nil?

  response = conn.post "vm/#{hostname}/snapshot/#{snapshot_sha}"
  res_body = JSON.parse(response.body)
  res_body
end

.snapshot(verbose, url, hostname, token) ⇒ Object

Raises:



140
141
142
143
144
145
146
147
148
149
# File 'lib/vmfloaty/pooler.rb', line 140

def self.snapshot(verbose, url, hostname, token)
  raise TokenError, 'Token provided was nil. Request cannot be made to snapshot vm' if token.nil?

  conn = Http.get_conn(verbose, url)
  conn.headers['X-AUTH-TOKEN'] = token

  response = conn.post "vm/#{hostname}/snapshot"
  res_body = JSON.parse(response.body)
  res_body
end

.status(verbose, url) ⇒ Object



115
116
117
118
119
120
121
# File 'lib/vmfloaty/pooler.rb', line 115

def self.status(verbose, url)
  conn = Http.get_conn(verbose, url)

  response = conn.get '/status'
  res_body = JSON.parse(response.body)
  res_body
end

.summary(verbose, url) ⇒ Object



123
124
125
126
127
128
129
# File 'lib/vmfloaty/pooler.rb', line 123

def self.summary(verbose, url)
  conn = Http.get_conn(verbose, url)

  response = conn.get '/summary'
  res_body = JSON.parse(response.body)
  res_body
end