1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-16 22:50:10 +03:00

B #-: Error attaching NIC_ALIAS in VM with elastic (#1361)

Signed-off-by: Ricardo Diaz <rdiaz@opennebula.io>
This commit is contained in:
Ricardo Diaz 2021-07-22 11:18:08 +02:00 committed by GitHub
parent 3d15223760
commit 431fce0c99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -29,6 +29,9 @@ class ElasticDriver < VNMMAD::VNMDriver
# Filter to look for NICs managed by this diver
XPATH_FILTER = "TEMPLATE/NIC[VN_MAD='elastic']"
XPATH_FILTER_ATTACH_NIC = 'TEMPLATE/NIC[ATTACH="YES"]/NIC_ID'
XPATH_FILTER_ATTACH_NIC_ALIAS = 'TEMPLATE/NIC_ALIAS[ATTACH="YES"]/NIC_ID'
def initialize(vm, hostname, deploy_id = nil)
super(vm, XPATH_FILTER, deploy_id)
@ -54,6 +57,9 @@ class ElasticDriver < VNMMAD::VNMDriver
provision.info
@provider = provision.provider
@assigned = []
@unassigned = []
end
def self.from_base64(vm64, hostname, deploy_id = nil)
@ -62,16 +68,19 @@ class ElasticDriver < VNMMAD::VNMDriver
new(vm_xml, hostname, deploy_id)
end
def hot_attach?
@vm[XPATH_FILTER_ATTACH_NIC] || @vm[XPATH_FILTER_ATTACH_NIC_ALIAS]
end
# Create route and arp proxy
def activate
cmds = VNMMAD::VNMNetwork::Commands.new
provider = ElasticDriver.provider(@provider, @host)
attach_nic_id = @vm['TEMPLATE/NIC[ATTACH="YES"]/NIC_ID']
attach_nic_id ||= @vm['TEMPLATE/NIC_ALIAS[ATTACH="YES"]/NIC_ID']
return 0 unless @assigned.any?
process_all do |nic|
next if attach_nic_id && attach_nic_id != nic[:nic_id]
next unless @assigned.include?([nic[:ip], nic[:external_ip]])
cmds.add :ip, "route add #{nic[:ip]}/32 dev #{nic[:bridge]} ||:"
cmds.add :ip,
@ -90,11 +99,10 @@ class ElasticDriver < VNMMAD::VNMDriver
cmds = VNMMAD::VNMNetwork::Commands.new
provider = ElasticDriver.provider(@provider, @host)
attach_nic_id = @vm['TEMPLATE/NIC[ATTACH="YES"]/NIC_ID']
attach_nic_id ||= @vm['TEMPLATE/NIC_ALIAS[ATTACH="YES"]/NIC_ID']
return 0 unless @unassigned.any?
process_all do |nic|
next if attach_nic_id && attach_nic_id != nic[:nic_id]
next unless @unassigned.include?([nic[:ip], nic[:external_ip]])
cmds.add :ip,
"route del #{nic[:ip]}/32 dev #{nic[:bridge]} | true"
@ -121,13 +129,11 @@ class ElasticDriver < VNMMAD::VNMDriver
return true if provider.nil?
assigned = []
attach_nic_id = @vm['TEMPLATE/NIC[ATTACH="YES"]/NIC_ID']
attach_nic_id ||= @vm['TEMPLATE/NIC_ALIAS[ATTACH="YES"]/NIC_ID']
rc = @vm.each_nic_all do |nic|
next if attach_nic_id && attach_nic_id != nic[:nic_id]
next if nic[:vn_mad] != DRIVER
next if hot_attach? &&
(nic[:attach].nil? || nic[:attach].upcase != 'YES')
# pass aws_allocation_id if present
# pass vultr_ip_id if present
@ -137,13 +143,17 @@ class ElasticDriver < VNMMAD::VNMDriver
break false \
unless provider.assign(nic[:ip], nic[:external_ip], opts) == 0
assigned << [nic[:ip], nic[:external_ip]]
@assigned << [nic[:ip], nic[:external_ip]]
end
# rollback
assigned.each do |ip, ext|
provider.unassign(ip, ext)
end unless rc
unless rc
# rollback
@assigned.each do |ip, ext|
provider.unassign(ip, ext)
end
@assigned = []
end
!rc
end
@ -154,16 +164,18 @@ class ElasticDriver < VNMMAD::VNMDriver
return if provider.nil?
attach_nic_id = @vm['TEMPLATE/NIC[ATTACH="YES"]/NIC_ID']
attach_nic_id ||= @vm['TEMPLATE/NIC_ALIAS[ATTACH="YES"]/NIC_ID']
@vm.each_nic_all do |nic|
next if attach_nic_id && attach_nic_id != nic[:nic_id]
next if nic[:vn_mad] != DRIVER
next if hot_attach? &&
(nic[:attach].nil? || nic[:attach].upcase != 'YES')
# pass vultr_ip_id if present
opts = { :vultr_id => nic[:vultr_ip_id] }
provider.unassign(nic[:ip], nic[:external_ip], opts)
@unassigned << [nic[:ip], nic[:external_ip]]
end
end