mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-06 12:58:18 +03:00
Feature #1722: Implement locks for concurrent driver actions
This commit is contained in:
parent
2288a38f54
commit
e05e0e725b
src/vnm_mad/remotes
@ -17,14 +17,20 @@
|
|||||||
require 'OpenNebulaNetwork'
|
require 'OpenNebulaNetwork'
|
||||||
|
|
||||||
class OpenNebulaHM < OpenNebulaNetwork
|
class OpenNebulaHM < OpenNebulaNetwork
|
||||||
|
DRIVER = "802.1Q"
|
||||||
|
|
||||||
XPATH_FILTER = "TEMPLATE/NIC[VLAN='YES']"
|
XPATH_FILTER = "TEMPLATE/NIC[VLAN='YES']"
|
||||||
|
|
||||||
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
||||||
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
||||||
|
@locking = false
|
||||||
|
|
||||||
@bridges = get_interfaces
|
@bridges = get_interfaces
|
||||||
end
|
end
|
||||||
|
|
||||||
def activate
|
def activate
|
||||||
|
lock
|
||||||
|
|
||||||
vm_id = @vm['ID']
|
vm_id = @vm['ID']
|
||||||
process do |nic|
|
process do |nic|
|
||||||
bridge = nic[:bridge]
|
bridge = nic[:bridge]
|
||||||
@ -53,6 +59,8 @@ class OpenNebulaHM < OpenNebulaNetwork
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -15,14 +15,19 @@
|
|||||||
#--------------------------------------------------------------------------- #
|
#--------------------------------------------------------------------------- #
|
||||||
|
|
||||||
class OpenNebulaFirewall < OpenNebulaNetwork
|
class OpenNebulaFirewall < OpenNebulaNetwork
|
||||||
|
DRIVER = "fw"
|
||||||
|
|
||||||
XPATH_FILTER = "TEMPLATE/NIC[ICMP|WHITE_PORTS_TCP|WHITE_PORTS_UDP|" <<
|
XPATH_FILTER = "TEMPLATE/NIC[ICMP|WHITE_PORTS_TCP|WHITE_PORTS_UDP|" <<
|
||||||
"BLACK_PORTS_TCP|BLACK_PORTS_UDP]"
|
"BLACK_PORTS_TCP|BLACK_PORTS_UDP]"
|
||||||
|
|
||||||
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
||||||
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
||||||
|
@locking = true
|
||||||
end
|
end
|
||||||
|
|
||||||
def activate
|
def activate
|
||||||
|
lock
|
||||||
|
|
||||||
vm_id = @vm['ID']
|
vm_id = @vm['ID']
|
||||||
process do |nic|
|
process do |nic|
|
||||||
#:white_ports_tcp => iptables_range
|
#:white_ports_tcp => iptables_range
|
||||||
@ -66,9 +71,13 @@ class OpenNebulaFirewall < OpenNebulaNetwork
|
|||||||
process_chain(chain, tap, nic_rules)
|
process_chain(chain, tap, nic_rules)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
end
|
end
|
||||||
|
|
||||||
def deactivate
|
def deactivate
|
||||||
|
lock
|
||||||
|
|
||||||
vm_id = @vm['ID']
|
vm_id = @vm['ID']
|
||||||
process do |nic|
|
process do |nic|
|
||||||
chain = "one-#{vm_id}-#{nic[:network_id]}"
|
chain = "one-#{vm_id}-#{nic[:network_id]}"
|
||||||
@ -78,6 +87,8 @@ class OpenNebulaFirewall < OpenNebulaNetwork
|
|||||||
purge_chain(chain, rule_num)
|
purge_chain(chain, rule_num)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
end
|
end
|
||||||
|
|
||||||
def purge_chain(chain, rule_num)
|
def purge_chain(chain, rule_num)
|
||||||
|
@ -101,6 +101,8 @@ class OpenNebulaNetwork
|
|||||||
end
|
end
|
||||||
|
|
||||||
def initialize(vm_tpl, xpath_filter, deploy_id = nil, hypervisor = nil)
|
def initialize(vm_tpl, xpath_filter, deploy_id = nil, hypervisor = nil)
|
||||||
|
@locking = false
|
||||||
|
|
||||||
if !hypervisor
|
if !hypervisor
|
||||||
@hypervisor = detect_hypervisor
|
@hypervisor = detect_hypervisor
|
||||||
else
|
else
|
||||||
@ -110,6 +112,20 @@ class OpenNebulaNetwork
|
|||||||
@vm = VM.new(REXML::Document.new(vm_tpl).root, xpath_filter, deploy_id, @hypervisor)
|
@vm = VM.new(REXML::Document.new(vm_tpl).root, xpath_filter, deploy_id, @hypervisor)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def lock
|
||||||
|
if @locking
|
||||||
|
driver_name = self.class.name.downcase
|
||||||
|
@locking_file = File.open("/tmp/onevnm-#{driver_name}-lock","w")
|
||||||
|
@locking_file.flock(File::LOCK_EX)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def unlock
|
||||||
|
if @locking
|
||||||
|
@locking_file.close
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def process(&block)
|
def process(&block)
|
||||||
@vm.each_nic(block)
|
@vm.each_nic(block)
|
||||||
end
|
end
|
||||||
|
@ -17,10 +17,13 @@
|
|||||||
require 'OpenNebulaNetwork'
|
require 'OpenNebulaNetwork'
|
||||||
|
|
||||||
class EbtablesVLAN < OpenNebulaNetwork
|
class EbtablesVLAN < OpenNebulaNetwork
|
||||||
|
DRIVER = "ebtables"
|
||||||
|
|
||||||
XPATH_FILTER = "TEMPLATE/NIC[VLAN='YES']"
|
XPATH_FILTER = "TEMPLATE/NIC[VLAN='YES']"
|
||||||
|
|
||||||
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
||||||
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
||||||
|
@locking = true
|
||||||
end
|
end
|
||||||
|
|
||||||
def ebtables(rule)
|
def ebtables(rule)
|
||||||
@ -30,6 +33,8 @@ class EbtablesVLAN < OpenNebulaNetwork
|
|||||||
# Activates ebtables rules
|
# Activates ebtables rules
|
||||||
#
|
#
|
||||||
def activate
|
def activate
|
||||||
|
lock
|
||||||
|
|
||||||
process do |nic|
|
process do |nic|
|
||||||
tap = nic[:tap]
|
tap = nic[:tap]
|
||||||
if tap
|
if tap
|
||||||
@ -49,10 +54,14 @@ class EbtablesVLAN < OpenNebulaNetwork
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def deactivate
|
def deactivate
|
||||||
|
lock
|
||||||
|
|
||||||
process do |nic|
|
process do |nic|
|
||||||
mac = nic[:mac]
|
mac = nic[:mac]
|
||||||
# remove 0-padding
|
# remove 0-padding
|
||||||
@ -68,6 +77,8 @@ class EbtablesVLAN < OpenNebulaNetwork
|
|||||||
remove_rules(tap)
|
remove_rules(tap)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
require 'OpenNebulaNetwork'
|
require 'OpenNebulaNetwork'
|
||||||
|
|
||||||
class OpenvSwitchVLAN < OpenNebulaNetwork
|
class OpenvSwitchVLAN < OpenNebulaNetwork
|
||||||
|
DRIVER = "ovswitch"
|
||||||
|
|
||||||
FIREWALL_PARAMS = [:black_ports_tcp,
|
FIREWALL_PARAMS = [:black_ports_tcp,
|
||||||
:black_ports_udp,
|
:black_ports_udp,
|
||||||
:icmp]
|
:icmp]
|
||||||
@ -25,9 +27,12 @@ class OpenvSwitchVLAN < OpenNebulaNetwork
|
|||||||
|
|
||||||
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
||||||
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
||||||
|
@locking = false
|
||||||
end
|
end
|
||||||
|
|
||||||
def activate
|
def activate
|
||||||
|
lock
|
||||||
|
|
||||||
process do |nic|
|
process do |nic|
|
||||||
@nic = nic
|
@nic = nic
|
||||||
|
|
||||||
@ -40,16 +45,23 @@ class OpenvSwitchVLAN < OpenNebulaNetwork
|
|||||||
# Apply Firewall
|
# Apply Firewall
|
||||||
configure_fw if FIREWALL_PARAMS & @nic.keys != []
|
configure_fw if FIREWALL_PARAMS & @nic.keys != []
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def deactivate
|
def deactivate
|
||||||
|
lock
|
||||||
|
|
||||||
process do |nic|
|
process do |nic|
|
||||||
@nic = nic
|
@nic = nic
|
||||||
|
|
||||||
# Remove flows
|
# Remove flows
|
||||||
del_flows
|
del_flows
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_vlan
|
def tag_vlan
|
||||||
|
@ -37,11 +37,14 @@ require 'CommandManager'
|
|||||||
require 'OpenNebulaNetwork'
|
require 'OpenNebulaNetwork'
|
||||||
|
|
||||||
class OpenNebulaVMware < OpenNebulaNetwork
|
class OpenNebulaVMware < OpenNebulaNetwork
|
||||||
|
DRIVER = "vmware"
|
||||||
|
|
||||||
XPATH_FILTER = "TEMPLATE/NIC"
|
XPATH_FILTER = "TEMPLATE/NIC"
|
||||||
VCLI_PREFIX = "/usr/bin/vicfg"
|
VCLI_PREFIX = "/usr/bin/vicfg"
|
||||||
|
|
||||||
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
def initialize(vm, deploy_id = nil, hypervisor = nil)
|
||||||
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
super(vm,XPATH_FILTER,deploy_id,hypervisor)
|
||||||
|
@locking = false
|
||||||
|
|
||||||
@config = YAML::load(File.read(CONF_FILE))
|
@config = YAML::load(File.read(CONF_FILE))
|
||||||
|
|
||||||
@ -59,6 +62,8 @@ class OpenNebulaVMware < OpenNebulaNetwork
|
|||||||
end
|
end
|
||||||
|
|
||||||
def activate
|
def activate
|
||||||
|
lock
|
||||||
|
|
||||||
vm_id = @vm['ID']
|
vm_id = @vm['ID']
|
||||||
hostname = @vm['HISTORY_RECORDS/HISTORY/HOSTNAME']
|
hostname = @vm['HISTORY_RECORDS/HISTORY/HOSTNAME']
|
||||||
process do |nic|
|
process do |nic|
|
||||||
@ -79,6 +84,8 @@ class OpenNebulaVMware < OpenNebulaNetwork
|
|||||||
add_pg(pg, switch, vlan) if !check_pg(pg, switch)
|
add_pg(pg, switch, vlan) if !check_pg(pg, switch)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unlock
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user