Module: OvirtProvisionPlugin::HostExtensions

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/ovirt_provision_plugin/host_extensions.rb

Instance Method Summary collapse

Instance Method Details

#host_for_installing(client) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 51

def host_for_installing(client)
  begin
    ovirt_host = host_service(client).get
    unless status_installing?(ovirt_host)
      return nil
    end
  rescue OvirtSDK4::Error
    logger.warn "OvirtProvisionPlugin:: Host #{ovirt_host_id} does not exists on ovirt"
    return nil
  end
  ovirt_host
end

#host_service(client) ⇒ Object



64
65
66
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 64

def host_service(client)
  client.system_service.hosts_service.host_service(ovirt_host_id)
end

#ovirt_clientObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 75

def ovirt_client
  cr_id = parameters.find_by(:name => "compute_resource_id").value
  cr = ComputeResource.find(cr_id)
  connection_opts = {
    :url      => cr.url,
    :username => cr.user,
    :password => cr.password
  }
  if cr.public_key.blank?
    connection_opts[:insecure] = true
  else
    connection_opts[:ca_certs] = [cr.public_key]
  end
  OvirtSDK4::Connection.new(connection_opts)
rescue NoMethodError
  logger.error "OvirtProvisionPlugin:: fail to read compute_rescource_id on host #{name}, id #{cr_id}"
  nil
rescue StandardError
  logger.error "OvirtProvisionPlugin:: error occured during ovirt_client #{e}"
  nil
end

#ovirt_host?Boolean

Returns:

  • (Boolean)


97
98
99
100
101
102
103
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 97

def ovirt_host?
  host_id = ovirt_host_id
  return false if host_id.nil?

  logger.info "OvirtProvisionPlugin:: host #{host_id} is related to oVirt"
  true
end

#ovirt_host_callbackObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 7

def ovirt_host_callback
  logger.info "OvirtProvisionPlugin:: Running provision callback.."
  return unless ovirt_host?

  return if ovirt_node?

  max_tries = 10
  while max_tries.positive?
    client = ovirt_client
    if client.nil?
      logger.warn "OvirtProvisionPlugin:: Failed to connect to ovirt-engine"
      max_tries -= 1
      next
    end

    ovirt_host = host_for_installing(client)
    unless ovirt_host
      client.close
      return
    end

    unless errors.empty?
      client.close
      logger.warn "OvirtProvisionPlugin:: Failed to run classes. Trying again (#{max_tries})"
      puppetrun!
      max_tries -= 1
      next
    end

    begin
      logger.info "OvirtProvisionPlugin:: Running ovirt_host_callback on \"#{ovirt_host.name}\""
      host_service(client).install(:ssh => { authentication_method: OvirtSDK4::SshAuthenticationMethod::PUBLICKEY })
      logger.info "OvirtProvisionPlugin:: Sent reinstall command successfully"
      return
    rescue OvirtSDK4::Error
      logger.warn "OvirtProvisionPlugin:: Failed to reinstall host. Trying again (#{max_tries})"
      puppetrun!
      max_tries -= 1
    ensure
      client.close
    end
  end
end

#ovirt_host_idObject



105
106
107
108
109
110
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 105

def ovirt_host_id
  parameters.find_by(:name => "host_ovirt_id").value
rescue StandardError
  logger.error "OvirtProvisionPlugin:: error occured during ovirt_host_id for #{name}"
  nil
end

#ovirt_node?Boolean

Returns:

  • (Boolean)


112
113
114
115
116
117
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 112

def ovirt_node?
  return false unless ["oVirt-Node", "RHEV-H"].include?(operatingsystem.name)

  logger.info "OvirtProvisionPlugin:: Provisioned ovirt node host #{name}"
  true
end

#status_installing?(host) ⇒ Boolean

Returns:

  • (Boolean)


68
69
70
71
72
73
# File 'app/models/concerns/ovirt_provision_plugin/host_extensions.rb', line 68

def status_installing?(host)
  return false if host.status.strip != "installing_os"

  logger.info "OvirtProvisionPlugin:: host in status '#{host.status}'"
  true
end