# Utility library for Red Hat Virtualization
def initialize(ems, handle = $evm)
@ems = ems_to_service_model(ems)
@connection = connection(@ems)
def vnic_profile(profile_name, network_name, dc_name)
vnic_profile = vnic_profiles_service.list.select { |profile|
(profile.name == profile_name) &&
(profile.network.id == network_by_name(network_name, dc_name).id)
def vnic_profiles(dc_name)
dc_networks = networks(dc_name).map {|network| network.id }
vnic_profiles_service.list.each do |vnic_profile|
next unless dc_networks.include?(vnic_profile.network.id)
network = network_by_id(vnic_profile.network.id, dc_name)
profiles << {:id => vnic_profile.id, :name => "#{vnic_profile.name} (#{network.name})"}
def ems_to_service_model(ems)
raise "Invalid EMS" if ems.nil?
# ems could be a numeric id or the ems object itself
unless ems.is_a?(DRb::DRbObject) && /Manager/.match(ems.type.demodulize)
if /^\d{1,13}$/.match(ems.to_s)
ems = @handle.vmdb(:ems, ems)
def network_by_name(name, dc_name)
networks(dc_name).detect { |n| n.name == name }
def network_by_id(id, dc_name)
networks(dc_name).detect { |n| n.id == id }
@connection.follow_link(dc(dc_name).networks)
dcs_service.list(search: "name=#{name}").first
def vnic_profiles_service
@connection.system_service.vnic_profiles_service
@connection.system_service.data_centers_service
connection = OvirtSDK4::Connection.new(
url: "https://#{ems.hostname}/ovirt-engine/api",
username: ems.authentication_userid,
password: ems.authentication_password,
connection if connection.test(true)