class OVH::Provisioner::APIObject::DedicatedServer
Represent a dedicated server
Constants
- IDLE
install_status
const- NO_OS
Attributes
boot[R]
dc[R]
flavor[R]
flavor_tag[R]
install_status[R]
ip[R]
location[R]
os[R]
reverse[R]
server_id[R]
state[R]
vrack[R]
vrack_id[R]
Public Instance Methods
define_reverse(domain, name = newname)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 79 def define_reverse(domain, name = newname) full_name = "#{name}.#{domain.id}" return "#{reverse}: no change" if reverse == full_name add_reverse(full_name) end
install()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 36 def install raise 'Please provide a valid template' if config['template'].nil? ok, reason = can_install if ok result = post('install/start', install_body) if result.is_a?(String) # Meaning an error message reason = result ok = false end end "#{id}: #{ok ? 'ok' : 'failed'}\n #{reason}" end
ipmi()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 86 def ipmi request_ipmi (1..10).each do |_| result = get('features/ipmi/access?type=kvmipJnlp') unless result.is_a?(String) launch_ipmi(result['value']) break end sleep(1) end end
newname()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 57 def newname name_scheme = Provisioner.config['name_scheme'] return reverse if name_scheme.nil? subst = attributes.map { |a| { a => send(a) } }.reduce(&:merge) name_scheme % subst end
rename(domain, name = newname)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 65 def rename(domain, name = newname) full_name = "#{name}.#{domain.id}" return "#{reverse}: no change" if reverse == full_name # check if name is already used records = domain.filter_records('subdomain' => newname) return "#{reverse}: name already used" unless records.list.empty? # remove old name (only if it belongs to the same domain) remove_old_names(domain) domain.add_record(name, 'A', ip) end
to_s()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 50 def to_s "#{reverse}[#{id}/#{server_id}]" \ "\n #{location} - #{flavor} - #{vrack}:#{ip} " \ "- #{boot}:#{os} - #{state}" \ "\n #{install_status}" end
Private Instance Methods
add_reverse(full_name)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 201 def add_reverse(full_name) ip_obj = Actor[Spawner::NAME].get('IP', id: "#{ip}/32") result = ip_obj.add_reverse(full_name) cant = "Cannot check if #{full_name}. resolves to #{ip}" if result == cant result = "#{reverse}: DNS propagation is not finished, try later_" end result end
can_install()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 101 def can_install if install_status != IDLE [false, "Installation ongoing: #{install_status}"] elsif !config['force'] && os != NO_OS [false, "An OS is already installed (#{os}) but option force is false"] else [true, "Installation of #{config['template']} launched"] end end
extract_status(status)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 187 def extract_status(status) cur = status['progress'].select { |step| step['status'] == 'doing' } cur << { 'comment' => 'Preparing installation' } if cur.empty? cur.first['comment'] end
get_boot(general)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 139 def get_boot(general) get("boot/#{general['bootId']}")['bootType'] end
get_flavors_from_config(hardware)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 156 def get_flavors_from_config(hardware) (config['flavors'].dup || {}).map do |flavor, desc| diff = HashDiff.diff(hardware, desc['hardware']) signs = diff.map(&:first).uniq - ['-'] signs.empty? ? flavor : nil end.compact end
get_reverse(general)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 135 def get_reverse(general) (general['reverse'] || id).chomp('.') end
install_body()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 111 def install_body details = { 'customHostname' => reverse.chomp('.') } %w[customHostname useDistribKernel sshKeyName].each do |opt| value = config[APIObject.underscore(opt)] details.merge!(opt => value) unless value.nil? end { 'templateName' => config['template'], 'details' => details } end
launch_ipmi(jnlp)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 217 def launch_ipmi(jnlp) filename = "/tmp/#{id}.jnlp" File.open(filename, 'w') { |file| file.write(jnlp) } system("javaws #{filename}") end
remove_old_names(domain)
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 193 def remove_old_names(domain) old_name = reverse.match(/^(.*)\.#{domain.id}$/).to_a.last return if old_name.nil? records = domain.filter_records('subdomain' => old_name) records.parallel_map(:rm_record, [], domain) end
request_ipmi()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 211 def request_ipmi body = { 'ttl' => '15', 'type' => 'kvmipJnlp' } result = post('features/ipmi/access', body) puts result if result.is_a?(String) end
set_flavor()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 143 def set_flavor hardware = get('specifications/hardware') flavors = get_flavors_from_config(hardware) raise "Too many flavor possible: #{flavors}" if flavors.size > 1 @flavor, @flavor_tag = if flavors.first.nil? %w[undefined undef] else [flavors.first, config['flavors'][flavors.first]['tag']] end end
set_general()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 123 def set_general general = get @reverse = get_reverse(general) @server_id = general['serverId'] @ip = general['ip'] @dc = general['datacenter'] @location = dc.gsub(/[0-9]*$/, '') @os = general['os'] @boot = get_boot(general) @state = general['state'] end
set_install_status()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 177 def set_install_status status = get('install/status') if status.is_a?(String) status = { 'progress' => ['status' => 'doing', 'comment' => status] } end @install_status = extract_status(status) end
set_vrack()
click to toggle source
# File lib/ovh/provisioner/api_object/dedicated_server.rb, line 164 def set_vrack vracks = get('vrack') raise "Too many vracks for #{server}: #{vracks}" if vracks.size > 1 if vracks.first.nil? @vrack_id = '-1' @vrack = 'none' else @vrack_id = vracks.first @vrack = Actor[Spawner::NAME].get('Vrack', id: @vrack_id).name end end