diff --git a/instances/templates/add_instance_network_block.html b/instances/templates/add_instance_network_block.html
index b990eec..990c524 100644
--- a/instances/templates/add_instance_network_block.html
+++ b/instances/templates/add_instance_network_block.html
@@ -25,7 +25,10 @@
diff --git a/instances/templates/instance.html b/instances/templates/instance.html
index f569297..f103115 100644
--- a/instances/templates/instance.html
+++ b/instances/templates/instance.html
@@ -846,9 +846,12 @@
diff --git a/instances/views.py b/instances/views.py
index 4159c7d..ac188ed 100644
--- a/instances/views.py
+++ b/instances/views.py
@@ -321,6 +321,13 @@ def instance(request, compute_id, vname):
if dev not in existing_devs:
return dev
raise Exception(_('None available device name'))
+
+ def get_network_tuple(network_source_str):
+ network_source_pack = network_source_str.split(":", 1)
+ if len(network_source_pack) > 1:
+ return (network_source_pack[1], network_source_pack[0])
+ else:
+ return (network_source_pack[0], 'net')
try:
conn = wvmInstance(compute.hostname,
@@ -329,6 +336,7 @@ def instance(request, compute_id, vname):
compute.type,
vname)
compute_networks = sorted(conn.get_networks())
+ compute_interfaces = sorted(conn.get_ifaces())
status = conn.get_status()
autostart = conn.get_autostart()
vcpu = conn.get_vcpu()
@@ -686,7 +694,11 @@ def instance(request, compute_id, vname):
network_data = {}
for post in request.POST:
- if post.startswith('net-'):
+ if post.startswith('net-source-'):
+ (source, source_type) = get_network_tuple(request.POST.get(post))
+ network_data[post] = source
+ network_data[post + '-type'] = source_type
+ elif post.startswith('net-'):
network_data[post] = request.POST.get(post, '')
conn.change_network(network_data)
@@ -698,9 +710,9 @@ def instance(request, compute_id, vname):
if 'add_network' in request.POST:
mac = request.POST.get('add-net-mac')
- network = request.POST.get('add-net-network')
+ (source, source_type) = get_network_tuple(request.POST.get('add-net-network'))
- conn.add_network(mac, network)
+ conn.add_network(mac, source, source_type)
msg = _("Edit network")
addlogmsg(request.user.username, instance.name, msg)
msg = _("Network Devices are changed. Please reboot instance to activate.")
diff --git a/vrtManager/instance.py b/vrtManager/instance.py
index 42bf19f..ae04b4a 100644
--- a/vrtManager/instance.py
+++ b/vrtManager/instance.py
@@ -742,16 +742,25 @@ class wvmInstance(wvmConnect):
return self.get_instance(clone_data['name']).UUIDString()
- def add_network(self, mac_address, network, interface_type='bridge', model='virtio'):
+ def get_bridge_name(self, source, source_type='net'):
+ if source_type == 'iface':
+ iface = self.get_iface(source)
+ bridge_name = iface.name()
+ else:
+ net = self.get_network(source)
+ bridge_name = net.bridgeName()
+ return bridge_name
+
+ def add_network(self, mac_address, source, source_type='net', interface_type='bridge', model='virtio'):
tree = ElementTree.fromstring(self._XMLDesc(0))
- net = self.get_network(network)
+ bridge_name = self.get_bridge_name(source, source_type)
xml_interface = """
- """ % (interface_type, mac_address, net.bridgeName(), model)
+ """ % (interface_type, mac_address, bridge_name, model)
if self.get_status() == 5:
devices = tree.find('devices')
elm_interface = ElementTree.fromstring(xml_interface)
@@ -764,13 +773,15 @@ class wvmInstance(wvmConnect):
tree = ElementTree.fromstring(xml)
for num, interface in enumerate(tree.findall('devices/interface')):
- net = self.get_network(network_data['net-source-' + str(num)])
+ net_source = network_data['net-source-' + str(num)]
+ net_source_type = network_data['net-source-' + str(num) + '-type']
+ net_mac = network_data['net-mac-' + str(num)]
+ bridge_name = self.get_bridge_name(net_source, net_source_type)
if interface.get('type') == 'bridge':
source = interface.find('mac')
- source.set('address', network_data['net-mac-' + str(num)])
+ source.set('address', net_mac)
source = interface.find('source')
- source.set('bridge', net.bridgeName())
- source.set('network', net.name())
+ source.set('bridge', bridge_name)
new_xml = ElementTree.tostring(tree)
self._defineXML(new_xml)