Change in vdsm[master]: Make connections path depend on path definitions
by shuming@linux.vnet.ibm.com
Shu Ming has uploaded a new change for review.
Change subject: Make connections path depend on path definitions
......................................................................
Make connections path depend on path definitions
The connections path should be relative to the path definition
in constants.py
Change-Id: I142d707c5e27914835a4054bf4966b7f5dc70e75
Signed-off-by: Shu Ming <shuming(a)linux.vnet.ibm.com>
---
M vdsm/storage/hsm.py
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/44/7944/1
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index 1e9311b..1996020 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -83,7 +83,7 @@
# FIXME: moved from spm.py but this should be somewhere else
SECTOR_SIZE = 512
-STORAGE_CONNECTION_DIR = "/var/run/vdsm/connections/"
+STORAGE_CONNECTION_DIR = os.path.join(constants.P_VDSM_RUN, "connections/")
def public(f=None, **kwargs):
if f is None:
--
To view, visit http://gerrit.ovirt.org/7944
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I142d707c5e27914835a4054bf4966b7f5dc70e75
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Shu Ming <shuming(a)linux.vnet.ibm.com>
11 years, 8 months
Change in vdsm[master]: Replace 'ovirt Engine' string with @ENGINENAME@
by Ryan Harper
Ryan Harper has uploaded a new change for review.
Change subject: Replace 'ovirt Engine' string with @ENGINENAME@
......................................................................
Replace 'ovirt Engine' string with @ENGINENAME@
Commit fd1c00c6fdbd8207a631001eab106e6f78c0cca2 introduced some new
messages but didn't use the @ENGINENAME@ eyecatcher.
Change-Id: I23f0b6346a14f94268180db46855920e8e355f17
Signed-off-by: Ryan Harper <ryanh(a)us.ibm.com>
---
M vdsm_reg/engine.py.in
1 file changed, 3 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/41/7941/1
diff --git a/vdsm_reg/engine.py.in b/vdsm_reg/engine.py.in
index 74fe07a..8d52155 100644
--- a/vdsm_reg/engine.py.in
+++ b/vdsm_reg/engine.py.in
@@ -237,14 +237,14 @@
# Try one more time with SSL=False
if not isHostReachable(host=self.engine_server.value(),
port=enginePort, ssl=False, timeout=TIMEOUT_FIND_HOST_SEC):
- msgConn = "Can't connect to oVirt Engine in the specific" \
+ msgConn = "Can't connect to @ENGINENAME@ in the specific" \
" port %s" % enginePort
ButtonChoiceWindow(self.ncs.screen, "@ENGINENAME@",
msgConn, buttons = ['Ok'])
return False
else:
- msgConn = "Can't connect to oVirt Engine port %s," \
+ msgConn = "Can't connect to @ENGINENAME@ port %s," \
" trying compatible port %s" % \
(enginePort, compatPort)
@@ -253,7 +253,7 @@
if not isHostReachable(host=self.engine_server.value(),
port=compatPort, ssl=sslPort, timeout=TIMEOUT_FIND_HOST_SEC):
- msgConn = "Can't connect to oVirt Engine using" \
+ msgConn = "Can't connect to @ENGINENAME@ using" \
" compatible port %s" % compatPort
ButtonChoiceWindow(self.ncs.screen, "@ENGINENAME@",
msgConn, buttons = ['Ok'])
--
To view, visit http://gerrit.ovirt.org/7941
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I23f0b6346a14f94268180db46855920e8e355f17
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Ryan Harper <ryanh(a)us.ibm.com>
11 years, 8 months
Change in vdsm[master]: Fix the check to convert block domains V0 to tag metadata
by Federico Simoncelli
Federico Simoncelli has uploaded a new change for review.
Change subject: Fix the check to convert block domains V0 to tag metadata
......................................................................
Fix the check to convert block domains V0 to tag metadata
In this patch:
* fix the check to decide if we should upgrade to tag metadata
* make __convertDomainMetadataToTags safer
Change-Id: Ic034c0bf90ce3ecd82dad2f5879838bb1445e7e2
Signed-off-by: Federico Simoncelli <fsimonce(a)redhat.com>
---
M vdsm/storage/imageRepository/formatConverter.py
1 file changed, 13 insertions(+), 5 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/54/7654/1
diff --git a/vdsm/storage/imageRepository/formatConverter.py b/vdsm/storage/imageRepository/formatConverter.py
index 081f9a0..4b431bc 100644
--- a/vdsm/storage/imageRepository/formatConverter.py
+++ b/vdsm/storage/imageRepository/formatConverter.py
@@ -38,17 +38,25 @@
# We use _dict to bypass the validators in order to copy all metadata
metadata = oldMetadata._dict.copy()
metadata[sd.DMDK_VERSION] = targetVersion
- newMetadata._dict.update(metadata)
+
+ log.debug("Converting to tag based metadata the domain %s", domain.sdUUID)
try:
- domain._metadata = newMetadata
- oldMetadata._dict.clear()
+ newMetadata._dict.update(metadata)
+
except:
log.error("Cannot covert the domain %s metadata to tags for "
"version %s", domain.sdUUID, targetVersion, exc_info=True)
- newMetadata._dict.clear()
domain._metadata = oldMetadata
+ newMetadata._dict.clear()
raise
+
+ else:
+ domain._metadata = newMetadata
+ oldMetadata._dict.clear()
+
+ log.debug("Conversion to tag based metadata completed for domain %s",
+ domain.sdUUID)
def v2DomainConverter(repoPath, hostId, domain, isMsd):
@@ -164,7 +172,7 @@
"version %s for domain %s", currentVersion, targetVersion,
domain.sdUUID)
- if (currentVersion == "0"
+ if (currentVersion not in blockSD.VERS_METADATA_TAG
and domain.getStorageType() in sd.BLOCK_DOMAIN_TYPES):
__convertDomainMetadataToTags(domain, targetVersion)
else:
--
To view, visit http://gerrit.ovirt.org/7654
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic034c0bf90ce3ecd82dad2f5879838bb1445e7e2
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimonce(a)redhat.com>
11 years, 8 months
Change in vdsm[master]: Bump sanlock required version for EL6
by Federico Simoncelli
Federico Simoncelli has uploaded a new change for review.
Change subject: Bump sanlock required version for EL6
......................................................................
Bump sanlock required version for EL6
The new sanlock version (2.3-4) resolves: rhbz#849181 rhbz#849183
rhbz#849184 rhbz#849186.
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=854748
Signed-off-by: Federico Simoncelli <fsimonce(a)redhat.com>
Change-Id: I296cd569021b7aad754b7998513d012719b7c8b4
---
M vdsm.spec.in
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/76/7776/1
diff --git a/vdsm.spec.in b/vdsm.spec.in
index acbccf6..d6a6daf 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -61,7 +61,7 @@
Requires: device-mapper-multipath >= 0.4.9-52
Requires: e2fsprogs >= 1.41.12-11
Requires: kernel >= 2.6.32-265
-Requires: sanlock >= 2.3-3, sanlock-python
+Requires: sanlock >= 2.3-4, sanlock-python
%else
# Subprocess and thread bug was found on python 2.7.2
Requires: python >= 2.7.3
--
To view, visit http://gerrit.ovirt.org/7776
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I296cd569021b7aad754b7998513d012719b7c8b4
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimonce(a)redhat.com>
11 years, 8 months
Change in vdsm[master]: vdsm: replace rpm commandline with rpm-python api in caps.py
by Jarod.w
Jarod.w has uploaded a new change for review.
Change subject: vdsm: replace rpm commandline with rpm-python api in caps.py
......................................................................
vdsm: replace rpm commandline with rpm-python api in caps.py
In rpm-python library, it provides the way to get rpm information by
rpm name and specified files. I think it's better and more effective
to use the library than our Popen.
Change-Id: I7745028553d7af54fab19fa0ef4402357f36ebb9
Signed-off-by: jarod.w <work.iec23801(a)gmail.com>
---
M vdsm.spec.in
M vdsm/caps.py
M vdsm/constants.py.in
3 files changed, 10 insertions(+), 17 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/56/7856/1
diff --git a/vdsm.spec.in b/vdsm.spec.in
index bb6730e..9d74b83 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -47,6 +47,7 @@
Requires: ntp
Requires: iproute
Requires: python-ethtool
+Requires: rpm-python
Requires: nfs-utils dmidecode
Requires: lvm2 >= 2.02.95
diff --git a/vdsm/caps.py b/vdsm/caps.py
index f1641ff..7b644f0 100644
--- a/vdsm/caps.py
+++ b/vdsm/caps.py
@@ -22,7 +22,6 @@
import os
from xml.dom import minidom
-import subprocess
import logging
import time
import struct
@@ -32,6 +31,7 @@
import glob
import libvirt
+import rpm
from vdsm.config import config
from vdsm import libvirtconnection
@@ -39,7 +39,6 @@
from vdsm import netinfo
import hooks
from vdsm import utils
-from vdsm import constants
import storage.hba
# For debian systems we can use python-apt if available
@@ -195,6 +194,7 @@
__osversion = None
+ts = rpm.TransactionSet()
def osversion():
@@ -214,13 +214,9 @@
version = linecache.getline('/etc/debian_version', 1).strip("\n")
release = "" # Debian just has a version entry
else:
- p = subprocess.Popen([constants.EXT_RPM, '-qf', '--qf',
- '%{VERSION} %{RELEASE}\n', '/etc/redhat-release'],
- stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, close_fds=True)
- out, err = p.communicate()
- if p.returncode == 0:
- version, release = out.splitlines()[-1].split()
+ for rpm in ts.dbMatch('basenames', '/etc/redhat-release'):
+ version = rpm['version']
+ release = rpm['release']
except:
logging.error('failed to find version/release', exc_info=True)
@@ -317,13 +313,10 @@
try:
for pkg in KEY_PACKAGES:
- rc, out, err = utils.execCmd([constants.EXT_RPM, '-q', '--qf',
- '%{NAME}\t%{VERSION}\t%{RELEASE}\t%{BUILDTIME}\n', pkg],
- sudo=False)
- if rc:
- continue
- line = out[-1]
- n, v, r, t = line.split()
+ for rpm in ts.dbMatch('name', pkg):
+ v = rpm['version']
+ r = rpm['release']
+ t = rpm['buildtime']
pkgs[pkg] = dict(version=v, release=r, buildtime=t)
except:
logging.error('', exc_info=True)
diff --git a/vdsm/constants.py.in b/vdsm/constants.py.in
index a1d3ad1..60a999d 100644
--- a/vdsm/constants.py.in
+++ b/vdsm/constants.py.in
@@ -120,7 +120,6 @@
EXT_QEMUIMG = '@QEMUIMG_PATH@'
EXT_REBOOT = '@REBOOT_PATH@'
-EXT_RPM = '@RPM_PATH@'
EXT_RSYNC = '@RSYNC_PATH@'
EXT_SCSI_ID = '@SCSI_ID_PATH@' # TBD !
--
To view, visit http://gerrit.ovirt.org/7856
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7745028553d7af54fab19fa0ef4402357f36ebb9
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Jarod.w <work.iec23801(a)gmail.com>
11 years, 8 months
Change in vdsm[master]: add simple VM creation functional test
by zhshzhou@linux.vnet.ibm.com
Zhou Zheng Sheng has uploaded a new change for review.
Change subject: add simple VM creation functional test
......................................................................
add simple VM creation functional test
Create a VM using existing host kernel and initramfs, then destroy it.
Change-Id: Icb0d86ce20a547ef809d5407fe12d6ade474c4d2
Signed-off-by: Zhou Zheng Sheng <zhshzhou(a)linux.vnet.ibm.com>
---
M tests/functional/Makefile.am
A tests/functional/vmTests.py
2 files changed, 91 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/96/7396/1
diff --git a/tests/functional/Makefile.am b/tests/functional/Makefile.am
index 4c3792c..2b34677 100644
--- a/tests/functional/Makefile.am
+++ b/tests/functional/Makefile.am
@@ -23,5 +23,6 @@
dist_vdsmfunctests_PYTHON = \
momTests.py \
restTests.py \
- sosPluginTests.py
+ sosPluginTests.py \
+ vmTests.py
diff --git a/tests/functional/vmTests.py b/tests/functional/vmTests.py
new file mode 100644
index 0000000..145ba60
--- /dev/null
+++ b/tests/functional/vmTests.py
@@ -0,0 +1,89 @@
+#
+# Copyright 2012 Zhou Zheng Sheng, IBM Corporation
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+import os
+import time
+import uuid
+from testrunner import VdsmTestCase as TestCaseBase
+import testValidation
+
+from vdsm import vdscli
+
+
+def assertVdsOK(vdsResult):
+ if vdsResult['status']['code']:
+ raise Exception(vdsResult['status']['message'])
+ return vdsResult
+
+
+class vmTests(TestCaseBase):
+ @testValidation.ValidateRunningAsRoot
+ def testCreateSimpleVM(self):
+ kernelVer = os.uname()[2]
+ kernelPath = "/boot/vmlinuz-" + kernelVer
+ initramfsPath = "/boot/initramfs-%s.img" % kernelVer
+ vmid = str(uuid.uuid4())
+ conf = {'acpiEnable': 'True',
+ 'display': 'vnc',
+ 'initrd': initramfsPath,
+ 'kernel': kernelPath,
+ # Fedora uses dracut to create initramfs. The following
+ # arguments will be interpreted by init scripts created by
+ # dracut.
+ 'kernelArgs': 'rd.break=cmdline rd.shell rd.skipfsck',
+ 'kvmEnable': 'true',
+ 'memSize': '256',
+ 'vmId': vmid,
+ 'vmName': 'vdsm_testVM',
+ 'vmType': 'kvm'}
+
+ self.s = vdscli.connect()
+
+ try:
+ assertVdsOK(self.s.create(conf))
+
+ timeout = 60 # seconds
+ # wait for VM to come up until timeout
+ start = time.time()
+ while True:
+ if self.isVMUp(vmid):
+ break
+ now = time.time()
+ if now - start > timeout:
+ raise Exception("Creating VM timeout, configuration %r" %
+ conf)
+ time.sleep(1)
+ except Exception:
+ raise
+ finally:
+ assertVdsOK(self.s.destroy(vmid))
+
+ def isVMUp(self, vmid):
+ vmList = assertVdsOK(self.s.list())['vmList']
+ for vm in vmList:
+ if vm['vmId'] == vmid and vm['status'] == 'Up':
+ break
+ else:
+ return False
+ statsList = assertVdsOK(self.s.getVmStats(vmid))['statsList']
+ vm = statsList[0]
+ if vm['status'] == 'Up':
+ return True
+ return False
--
To view, visit http://gerrit.ovirt.org/7396
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icb0d86ce20a547ef809d5407fe12d6ade474c4d2
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Zhou Zheng Sheng <zhshzhou(a)linux.vnet.ibm.com>
11 years, 8 months
Change in vdsm[master]: converting some more RH strings to oVirt
by michal.skrivanek@redhat.com
Michal Skrivanek has uploaded a new change for review.
Change subject: converting some more RH strings to oVirt
......................................................................
converting some more RH strings to oVirt
Change-Id: I2fe916e591e2d998f30c997e0af907db776dad62
Signed-off-by: Michal Skrivanek <michal.skrivanek(a)redhat.com>
---
M vdsm/libvirtvm.py
M vdsm_hooks/smbios/README
M vdsm_hooks/smbios/before_vm_start.py
3 files changed, 9 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/20/7920/1
diff --git a/vdsm/libvirtvm.py b/vdsm/libvirtvm.py
index cdd0e4e..b9def61 100644
--- a/vdsm/libvirtvm.py
+++ b/vdsm/libvirtvm.py
@@ -42,6 +42,8 @@
# service/daemon and in libvirtd (to be used with the quiesce flag).
_QEMU_GA_DEVICE_NAME = 'org.qemu.guest_agent.0'
+_SMBIOS_MANUFACTURER = 'oVirt'
+
class MERGESTATUS:
NOT_STARTED = "Not Started"
@@ -663,7 +665,10 @@
m.appendChild(self.doc.createTextNode(v))
syselem.appendChild(m)
- appendEntry('manufacturer', 'oVirt')
+ if osname == caps.OSName.RHEL
+ osname = caps.OSName.RHEVH
+
+ appendEntry('manufacturer', _SMBIOS_MANUFACTURER)
appendEntry('product', osname)
appendEntry('version', osversion)
appendEntry('serial', hostUUID)
@@ -1219,7 +1224,7 @@
osd = caps.osversion()
domxml.appendSysinfo(
- osname=caps.getos(),
+ osname=osd.get('name', ''),
osversion=osd.get('version', '') + '-' + osd.get('release', ''),
hostUUID=utils.getHostUUID())
diff --git a/vdsm_hooks/smbios/README b/vdsm_hooks/smbios/README
index 9f1aac8..caba65d 100644
--- a/vdsm_hooks/smbios/README
+++ b/vdsm_hooks/smbios/README
@@ -3,5 +3,5 @@
adding/changing entries to smbios domain entry:
syntax:
-smbios: smbios={'serial': '1234'}^{'vendor': 'redhat'}
+smbios: smbios={'serial': '1234'}^{'vendor': 'oVirt'}
add/edit 2 attributes to smbios: serial and vendor
diff --git a/vdsm_hooks/smbios/before_vm_start.py b/vdsm_hooks/smbios/before_vm_start.py
index cbd5949..d89a8f5 100755
--- a/vdsm_hooks/smbios/before_vm_start.py
+++ b/vdsm_hooks/smbios/before_vm_start.py
@@ -13,7 +13,7 @@
syntax:
-smbios={'serial': '1234'}^{'vendor': 'redhat'}
+smbios={'serial': '1234'}^{'vendor': 'oVirt'}
'''
bios_entries = ["vendor", "version", "date", "release"]
--
To view, visit http://gerrit.ovirt.org/7920
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2fe916e591e2d998f30c997e0af907db776dad62
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Michal Skrivanek <michal.skrivanek(a)redhat.com>
11 years, 8 months
Change in vdsm[master]: Get VMList with oop if necessary
by smizrahi@redhat.com
Saggi Mizrahi has uploaded a new change for review.
Change subject: Get VMList with oop if necessary
......................................................................
Get VMList with oop if necessary
Change-Id: I021e9d03b29dfc9cf1c3b7fa5ec8a302e7912cf7
Signed-off-by: Saggi Mizrahi <smizrahi(a)redhat.com>
---
M vdsm/storage/sd.py
1 file changed, 5 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/67/6867/1
--
To view, visit http://gerrit.ovirt.org/6867
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I021e9d03b29dfc9cf1c3b7fa5ec8a302e7912cf7
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Saggi Mizrahi <smizrahi(a)redhat.com>
11 years, 8 months
Change in vdsm[master]: trigger reboot automatically after upgrade
by mburns@redhat.com
Michael Burns has uploaded a new change for review.
Change subject: trigger reboot automatically after upgrade
......................................................................
trigger reboot automatically after upgrade
Depends on related change http://gerrit.ovirt.org/7777
This patch will trigger an reboot after the upgrade steps are complete
Change-Id: I46fccf8c7c60f51b32a17cedeb6f365ac45d14a0
Signed-off-by: Mike Burns <mburns(a)redhat.com>
---
M vdsm_reg/vdsm-upgrade
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/78/7778/1
diff --git a/vdsm_reg/vdsm-upgrade b/vdsm_reg/vdsm-upgrade
index fdcad26..a2a924e 100755
--- a/vdsm_reg/vdsm-upgrade
+++ b/vdsm_reg/vdsm-upgrade
@@ -89,7 +89,7 @@
fReturn = True
install = Install()
- if install.ovirt_boot_setup():
+ if install.ovirt_boot_setup("Y"):
msg = "<BSTRAP component='doUpgrade' status='OK' message='Upgrade Succeeded. Rebooting'/>"
print (msg)
logging.debug(msg)
--
To view, visit http://gerrit.ovirt.org/7778
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I46fccf8c7c60f51b32a17cedeb6f365ac45d14a0
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Michael Burns <mburns(a)redhat.com>
11 years, 8 months
Change in vdsm[master]: WIP: refactor configNetwork
by wudxw@linux.vnet.ibm.com
Mark Wu has uploaded a new change for review.
Change subject: WIP: refactor configNetwork
......................................................................
WIP: refactor configNetwork
Change-Id: I66710fdf8fd73beb06124f72ef9857df7393a602
Signed-off-by: Mark Wu <wudxw(a)linux.vnet.ibm.com>
---
M vdsm/configNetwork.py
1 file changed, 324 insertions(+), 288 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/14/7714/1
diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
index 74d19c7..a4675db 100755
--- a/vdsm/configNetwork.py
+++ b/vdsm/configNetwork.py
@@ -817,120 +817,6 @@
else:
_validateInterNetworkCompatibility(_netinfo, vlan, nic, bridged)
-def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None,
- netmask=None, mtu=None, gateway=None, force=False,
- configWriter=None, bondingOptions=None, bridged=True, **options):
- nics = nics or ()
- _netinfo = netinfo.NetInfo()
- bridged = utils.tobool(bridged)
-
- if mtu:
- mtu = int(mtu)
-
- # Validation
- if not utils.tobool(force):
- logging.debug('validating network...')
- _addNetworkValidation(_netinfo, network=network,
- vlan=vlan, bonding=bonding, nics=nics, ipaddr=ipaddr,
- netmask=netmask, gateway=gateway, bondingOptions=bondingOptions,
- bridged=bridged, **options)
-
- logging.info("Adding network %s with vlan=%s, bonding=%s, nics=%s,"
- " bondingOptions=%s, mtu=%s, bridged=%s, options=%s",
- network, vlan, bonding, nics, bondingOptions,
- mtu, bridged, options)
-
- if configWriter is None:
- configWriter = ConfigWriter()
-
- prevmtu = None
- if mtu:
- prevmtu = configWriter.getMaxMtu(nics, mtu)
-
- nic = nics[0] if nics else None
- iface = bonding or nic
-
- # take down nics that need to be changed
- vlanedIfaces = [v['iface'] for v in _netinfo.vlans.values()]
- if bonding not in vlanedIfaces:
- for nic in nics:
- if nic not in vlanedIfaces:
- ifdown(nic)
-
- if bridged:
- configWriter.addBridge(network, ipaddr=ipaddr, netmask=netmask,
- mtu=mtu, gateway=gateway, **options)
- ifdown(network)
- # We need to define (if requested) ip, mask & gateway on ifcfg-*
- # only on most top device according to following order:
- # bridge -> vlan -> bond -> nic
- # For lower level devices we should ignore it.
- # reset ip, netmask, gateway for lower level devices
- ipaddr = netmask = gateway = None
-
- # For VLAN we should attach bridge only to the VLAN device
- # rather than to underlying NICs or bond
- brName = network if bridged else None
- bridgeForNic = None if vlan else brName
-
- # We want to create config files (ifcfg-*) in top-down order
- # (bridge->vlan->bond->nic) to be able to handle IP/NETMASK
- # correctly for bridgeless networks
- if vlan:
- # don't ifup VLAN interface here, it should be done last,
- # after the bond and nic up
- configWriter.addVlan(vlan, iface, network=brName,
- mtu=mtu, bridged=bridged,
- ipaddr=ipaddr, netmask=netmask,
- gateway=gateway, **options)
- iface += '.' + vlan
- # reset ip, netmask, gateway for lower level devices
- ipaddr = netmask = gateway = None
-
- # First we need to prepare all conf files
- if bonding:
- configWriter.addBonding(bonding, bridge=bridgeForNic,
- bondingOptions=bondingOptions,
- mtu=max(prevmtu, mtu),
- ipaddr=ipaddr, netmask=netmask,
- gateway=gateway, **options)
- # reset ip, netmask, gateway for lower level devices
- ipaddr = netmask = gateway = None
-
- for nic in nics:
- configWriter.addNic(nic, bonding=bonding,
- bridge=bridgeForNic if not bonding else None,
- mtu=max(prevmtu, mtu),
- ipaddr=ipaddr, netmask=netmask,
- gateway=gateway, **options)
-
- # Now we can run ifup for all interfaces
- if bonding:
- ifup(bonding)
-
- # NICs must be activated in the same order of boot time
- # to expose the correct MAC address.
- for nic in nicSort(nics):
- ifup(nic)
-
- # Now we can ifup VLAN interface, because bond and nic already up
- if vlan:
- ifup(iface)
-
- if bridged:
- if options.get('bootproto') == 'dhcp' and \
- not utils.tobool(options.get('blockingdhcp')):
- # wait for dhcp in another thread,
- # so vdsm won't get stuck (BZ#498940)
- t = threading.Thread(target=ifup, name='ifup-waiting-on-dhcp',
- args=(network,))
- t.daemon = True
- t.start()
- else:
- ifup(network)
-
- # add libvirt network
- configWriter.createLibvirtNetwork(network, bridged, iface)
def assertBridgeClean(bridge, vlan, bonding, nics):
brifs = os.listdir('/sys/class/net/%s/brif/' % bridge)
@@ -950,6 +836,324 @@
if brifs:
raise ConfigNetworkError(ne.ERR_USED_BRIDGE, 'bridge %s has interfaces %s connected' % (bridge, brifs))
+
+
+class Configurator(object):
+
+ def addNetwork(self, network, vlan=None, bonding=None, nics=None,
+ ipaddr=None, netmask=None, mtu=None, gateway=None,
+ force=False, bondingOptions=None, bridged=True, **options):
+ pass
+
+ def delNetwork(self, network, vlan=None, bonding=None, nics=None,
+ force=False, implicitBonding=True, **options):
+ pass
+
+ def editNetwork(self, oldBridge, newBridge, vlan=None, bonding=None,
+ nics=None, **options):
+ pass
+
+class NativeConfigurator(Configurator):
+
+ def __init__(self):
+ self.confiWriter = ConfigWriter()
+
+ def addNetwork(self, network, vlan=None, bonding=None, nics=None,
+ ipaddr=None, netmask=None, mtu=None, gateway=None,
+ force=False, bondingOptions=None, bridged=True, **options):
+ nics = nics or ()
+ _netinfo = netinfo.NetInfo()
+ bridged = utils.tobool(bridged)
+
+ if mtu:
+ mtu = int(mtu)
+
+ # Validation
+ if not utils.tobool(force):
+ logging.debug('validating network...')
+ _addNetworkValidation(_netinfo, network=network,
+ vlan=vlan, bonding=bonding, nics=nics, ipaddr=ipaddr,
+ netmask=netmask, gateway=gateway, bondingOptions=bondingOptions,
+ bridged=bridged, **options)
+
+ logging.info("Adding network %s with vlan=%s, bonding=%s, nics=%s,"
+ " bondingOptions=%s, mtu=%s, bridged=%s, options=%s",
+ network, vlan, bonding, nics, bondingOptions,
+ mtu, bridged, options)
+
+
+ prevmtu = None
+ if mtu:
+ prevmtu = self.configWriter.getMaxMtu(nics, mtu)
+
+ nic = nics[0] if nics else None
+ iface = bonding or nic
+
+ # take down nics that need to be changed
+ vlanedIfaces = [v['iface'] for v in _netinfo.vlans.values()]
+ if bonding not in vlanedIfaces:
+ for nic in nics:
+ if nic not in vlanedIfaces:
+ ifdown(nic)
+
+ if bridged:
+ self.configWriter.addBridge(network, ipaddr=ipaddr, netmask=netmask,
+ mtu=mtu, gateway=gateway, **options)
+ ifdown(network)
+ # We need to define (if requested) ip, mask & gateway on ifcfg-*
+ # only on most top device according to following order:
+ # bridge -> vlan -> bond -> nic
+ # For lower level devices we should ignore it.
+ # reset ip, netmask, gateway for lower level devices
+ ipaddr = netmask = gateway = None
+
+ # For VLAN we should attach bridge only to the VLAN device
+ # rather than to underlying NICs or bond
+ brName = network if bridged else None
+ bridgeForNic = None if vlan else brName
+
+ # We want to create config files (ifcfg-*) in top-down order
+ # (bridge->vlan->bond->nic) to be able to handle IP/NETMASK
+ # correctly for bridgeless networks
+ if vlan:
+ # don't ifup VLAN interface here, it should be done last,
+ # after the bond and nic up
+ self.configWriter.addVlan(vlan, iface, network=brName,
+ mtu=mtu, bridged=bridged,
+ ipaddr=ipaddr, netmask=netmask,
+ gateway=gateway, **options)
+ iface += '.' + vlan
+ # reset ip, netmask, gateway for lower level devices
+ ipaddr = netmask = gateway = None
+
+ # First we need to prepare all conf files
+ if bonding:
+ self.configWriter.addBonding(bonding, bridge=bridgeForNic,
+ bondingOptions=bondingOptions,
+ mtu=max(prevmtu, mtu),
+ ipaddr=ipaddr, netmask=netmask,
+ gateway=gateway, **options)
+ # reset ip, netmask, gateway for lower level devices
+ ipaddr = netmask = gateway = None
+
+ for nic in nics:
+ self.configWriter.addNic(nic, bonding=bonding,
+ bridge=bridgeForNic if not bonding else None,
+ mtu=max(prevmtu, mtu),
+ ipaddr=ipaddr, netmask=netmask,
+ gateway=gateway, **options)
+
+ # Now we can run ifup for all interfaces
+ if bonding:
+ ifup(bonding)
+
+ # NICs must be activated in the same order of boot time
+ # to expose the correct MAC address.
+ for nic in nicSort(nics):
+ ifup(nic)
+
+ # Now we can ifup VLAN interface, because bond and nic already up
+ if vlan:
+ ifup(iface)
+
+ if bridged:
+ if options.get('bootproto') == 'dhcp' and \
+ not utils.tobool(options.get('blockingdhcp')):
+ # wait for dhcp in another thread,
+ # so vdsm won't get stuck (BZ#498940)
+ t = threading.Thread(target=ifup, name='ifup-waiting-on-dhcp',
+ args=(network,))
+ t.daemon = True
+ t.start()
+ else:
+ ifup(network)
+
+ # add libvirt network
+ self.configWriter.createLibvirtNetwork(network, bridged, iface)
+
+ def delNetwork(self, network, vlan=None, bonding=None, nics=None, force=False,
+ implicitBonding=True, **options):
+ _netinfo = netinfo.NetInfo()
+
+ if network not in _netinfo.networks:
+ logging.info("Network %r: doesn't exist in libvirt database", network)
+ if network in netinfo.bridges():
+ self.configWriter.removeBridge(network)
+ else:
+ raise ConfigNetworkError(ne.ERR_BAD_BRIDGE,
+ "Cannot delete network %r: It doesn't exist "
+ "in the system" % network)
+
+ if vlan:
+ self.configWriter.removeVlan(vlan, bonding or nics[0])
+
+ return
+
+ nics, vlan, bonding = _netinfo.getNicsVlanAndBondingForNetwork(network)
+ bridged = _netinfo.networks[network]['bridged']
+
+ logging.info("Removing network %s with vlan=%s, bonding=%s, nics=%s,"
+ "options=%s" % (network, vlan, bonding, nics, options))
+
+ if not utils.tobool(force):
+ if bonding:
+ validateBondingName(bonding)
+ if set(nics) != set(_netinfo.bondings[bonding]["slaves"]):
+ raise ConfigNetworkError(ne.ERR_BAD_NIC,
+ "delNetwork: %s are not all nics enslaved to %s" % \
+ (nics, bonding))
+ if vlan:
+ validateVlanId(vlan)
+ if bridged:
+ assertBridgeClean(network, vlan, bonding, nics)
+
+ if bridged:
+ self.configWriter.setNewMtu(network)
+
+ self.configWriter.removeLibvirtNetwork(network)
+ # We need to gather NetInfo again to refresh networks info from libvirt.
+ # The deleted bridge should never be up at this stage.
+ if network in netinfo.NetInfo().networks:
+ raise ConfigNetworkError(ne.ERR_USED_BRIDGE,
+ "delNetwork: bridge %s still exists" % network)
+
+ if network and bridged:
+ self.configWriter.removeBridge(network)
+
+ if vlan:
+ self.configWriter.removeVlan(vlan, bonding or nics[0])
+
+ # When removing bridgeless non-VLANed network
+ # we need to remove IP/NETMASK from the cfg file
+ name = None
+ if not bridged and not vlan:
+ name = bonding if bonding else nics[0]
+ # Just edit the bond/nic cfg file
+ cf = self.configWriter.NET_CONF_PREF + name
+ for key in ('IPADDR', 'NETMASK', 'GATEWAY', 'BOOTPROTO'):
+ self.configWriter._updateConfigValue(cf, key, '', True)
+
+ # The (relatively) new setupNetwork verb allows to remove a network
+ # defined on top of an bonding device without break the bond itself.
+ if implicitBonding:
+ if bonding and not bondingOtherUsers(network, vlan, bonding):
+ ifdown(bonding)
+ self.configWriter.removeBonding(bonding)
+ name = None if bonding == name else name
+
+ for nic in nics:
+ if not nicOtherUsers(network, vlan, bonding, nic):
+ ifdown(nic)
+ self.configWriter.removeNic(nic)
+ name = None if nic == name else name
+
+ # Now we can restart changed interface
+ if name:
+ ifdown(name)
+ ifup(name)
+
+ def editNetwork(self, oldBridge, newBridge, vlan=None, bonding=None,
+ nics=None, **options):
+ try:
+ self.delNetwork(oldBridge, **options)
+ self.addNetwork(newBridge, vlan=vlan, bonding=bonding, nics=nics,
+ **options)
+ except:
+ self.configWriter.restoreBackups()
+ raise
+ if utils.tobool(options.get('connectivityCheck', False)):
+ if not clientSeen(int(options.get('connectivityTimeout', CONNECTIVITY_TIMEOUT_DEFAULT))):
+ delNetwork(newBridge, force=True)
+ self.configWriter.restoreBackups()
+ return define.errCode['noConPeer']['status']['code']
+
+ def editBondings(self, bondings):
+ """ Add/Edit bond interface """
+ logger = logging.getLogger("editBondings")
+
+ _netinfo = netinfo.NetInfo()
+
+ for bond, bondAttrs in bondings.iteritems():
+ logger.debug("Creating/Editing bond %s with attributes %s",
+ bond, bondAttrs)
+
+ brNets = list(_netinfo.getBridgedNetworksForIface(bond))
+ # Only one bridged-non-VLANed network allowed on same nic/bond
+ bridge = brNets[0] if brNets else None
+
+ mtu = None
+ if bond in _netinfo.bondings:
+ # Save MTU for future set on NICs
+ confParams = netinfo.getIfaceCfg(bond)
+ mtu = confParams.get('MTU', None)
+ if mtu:
+ mtu = int(mtu)
+
+ ifdown(bond)
+ # Take down all bond's NICs.
+ for nic in _netinfo.getNicsForBonding(bond):
+ ifdown(nic)
+ self.configWriter.removeNic(nic)
+
+ # Note! In case we have bridge up and connected to the bond
+ # we will get error in log:
+ # (ifdown) bridge XXX is still up; can't delete it
+ # But, we prefer this behaviour instead of taking bridge down
+ # Anyway, we will not be able to take it down with connected VMs
+
+ # First we need to prepare all conf files
+ self.configWriter.addBonding(bond, bridge=bridge, mtu=mtu,
+ bondingOptions=bondAttrs.get('options', None))
+
+ for nic in bondAttrs['nics']:
+ self.configWriter.addNic(nic, bonding=bond, mtu=mtu)
+
+ # Now we can run ifup for all interfaces
+ ifup(bond)
+ # NICs must be activated in the same order of boot time
+ # to expose the correct MAC address.
+ for nic in nicSort(bondAttrs['nics']):
+ ifup(nic)
+
+ def removeBondings(self, bondings):
+ """ Remove bond interface """
+ logger = logging.getLogger("removeBondings")
+
+ _netinfo = netinfo.NetInfo()
+
+ for bond, bondAttrs in bondings.items():
+ if 'remove' in bondAttrs:
+ nics = _netinfo.getNicsForBonding(bond)
+ logger.debug("Removing bond %r with nics = %s", bond, nics)
+ ifdown(bond)
+ self.configWriter.removeBonding(bond)
+
+ for nic in nics:
+ ifdown(nic)
+ self.configWriter.removeNic(nic)
+
+ del bondings[bond]
+
+
+configurator = NativeConfigurator()
+
+
+def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None,
+ netmask=None, mtu=None, gateway=None, force=False,
+ bondingOptions=None, bridged=True, **options):
+ configurator.addNetwork(network, vlan, bonding, nics, ipaddr, netmask, mtu, gateway,
+ force, bondingOptions, bridged, **options)
+
+
+def delNetwork(network, vlan=None, bonding=None, nics=None, force=False,
+ implicitBonding=True, **options):
+ configurator.delNetwork(network, vlan, bonding, nics, force,
+ implicitBonding, **options)
+
+
+def editNetwork(oldBridge, newBridge, vlan=None, bonding=None, nics=None, **options):
+ configurator.editNetwork(oldBridge, newBridge, vlan, bonding, nics, **options)
+
def showNetwork(network):
_netinfo = netinfo.NetInfo()
@@ -975,6 +1179,7 @@
print "vlan=%s, bonding=%s, nics=%s" % (vlan, bonding, nics)
+
def listNetworks():
_netinfo = netinfo.NetInfo()
print "Networks:", _netinfo.networks.keys()
@@ -982,92 +1187,6 @@
print "Nics:", _netinfo.nics.keys()
print "Bondings:", _netinfo.bondings.keys()
-def delNetwork(network, vlan=None, bonding=None, nics=None, force=False,
- configWriter=None, implicitBonding=True, **options):
- _netinfo = netinfo.NetInfo()
-
- if configWriter is None:
- configWriter = ConfigWriter()
-
- if network not in _netinfo.networks:
- logging.info("Network %r: doesn't exist in libvirt database", network)
- if network in netinfo.bridges():
- configWriter.removeBridge(network)
- else:
- raise ConfigNetworkError(ne.ERR_BAD_BRIDGE,
- "Cannot delete network %r: It doesn't exist "
- "in the system" % network)
-
- if vlan:
- configWriter.removeVlan(vlan, bonding or nics[0])
-
- return
-
- nics, vlan, bonding = _netinfo.getNicsVlanAndBondingForNetwork(network)
- bridged = _netinfo.networks[network]['bridged']
-
- logging.info("Removing network %s with vlan=%s, bonding=%s, nics=%s,"
- "options=%s" % (network, vlan, bonding, nics, options))
-
- if not utils.tobool(force):
- if bonding:
- validateBondingName(bonding)
- if set(nics) != set(_netinfo.bondings[bonding]["slaves"]):
- raise ConfigNetworkError(ne.ERR_BAD_NIC,
- "delNetwork: %s are not all nics enslaved to %s" % \
- (nics, bonding))
- if vlan:
- validateVlanId(vlan)
- if bridged:
- assertBridgeClean(network, vlan, bonding, nics)
-
- if bridged:
- configWriter.setNewMtu(network)
-
- configWriter.removeLibvirtNetwork(network)
- # We need to gather NetInfo again to refresh networks info from libvirt.
- # The deleted bridge should never be up at this stage.
- if network in netinfo.NetInfo().networks:
- raise ConfigNetworkError(ne.ERR_USED_BRIDGE,
- "delNetwork: bridge %s still exists" % network)
-
- if network and bridged:
- configWriter.removeBridge(network)
-
- name = None
- if vlan:
- configWriter.removeVlan(vlan, bonding or nics[0])
- else:
- name = bonding if bonding else nics[0]
- cf = configWriter.NET_CONF_PREF + name
- if not bridged:
- # When removing bridgeless non-VLANed network
- # we need to remove IP/NETMASK from the cfg file
- for key in ('IPADDR', 'NETMASK', 'GATEWAY', 'BOOTPROTO'):
- configWriter._updateConfigValue(cf, key, '', True)
- else:
- # When removing bridged non-VLANed network
- # we need to remove BRIDGE from the cfg file
- configWriter._updateConfigValue(cf, 'BRIDGE', '', True)
-
- # The (relatively) new setupNetwork verb allows to remove a network
- # defined on top of an bonding device without break the bond itself.
- if implicitBonding:
- if bonding and not bondingOtherUsers(network, vlan, bonding):
- ifdown(bonding)
- configWriter.removeBonding(bonding)
- name = None if bonding == name else name
-
- for nic in nics:
- if not nicOtherUsers(network, vlan, bonding, nic):
- ifdown(nic)
- configWriter.removeNic(nic)
- name = None if nic == name else name
-
- # Now we can restart changed interface
- if name:
- ifdown(name)
- ifup(name)
def clientSeen(timeout):
start = time.time()
@@ -1078,20 +1197,6 @@
timeout -= 1
return False
-
-def editNetwork(oldBridge, newBridge, vlan=None, bonding=None, nics=None, **options):
- configWriter = ConfigWriter()
- try:
- delNetwork(oldBridge, configWriter=configWriter, **options)
- addNetwork(newBridge, vlan=vlan, bonding=bonding, nics=nics, configWriter=configWriter, **options)
- except:
- configWriter.restoreBackups()
- raise
- if utils.tobool(options.get('connectivityCheck', False)):
- if not clientSeen(int(options.get('connectivityTimeout', CONNECTIVITY_TIMEOUT_DEFAULT))):
- delNetwork(newBridge, force=True)
- configWriter.restoreBackups()
- return define.errCode['noConPeer']['status']['code']
def _validateNetworkSetup(networks={}, bondings={}):
_netinfo = netinfo.NetInfo()
@@ -1117,73 +1222,6 @@
if not set(nics).issubset(set(_netinfo.nics)):
raise ConfigNetworkError(ne.ERR_BAD_NIC, "Unknown nics in: %r"%list(nics))
-
-def _editBondings(bondings, configWriter):
- """ Add/Edit bond interface """
- logger = logging.getLogger("_editBondings")
-
- _netinfo = netinfo.NetInfo()
-
- for bond, bondAttrs in bondings.iteritems():
- logger.debug("Creating/Editing bond %s with attributes %s",
- bond, bondAttrs)
-
- brNets = list(_netinfo.getBridgedNetworksForIface(bond))
- # Only one bridged-non-VLANed network allowed on same nic/bond
- bridge = brNets[0] if brNets else None
-
- mtu = None
- if bond in _netinfo.bondings:
- # Save MTU for future set on NICs
- confParams = netinfo.getIfaceCfg(bond)
- mtu = confParams.get('MTU', None)
- if mtu:
- mtu = int(mtu)
-
- ifdown(bond)
- # Take down all bond's NICs.
- for nic in _netinfo.getNicsForBonding(bond):
- ifdown(nic)
- configWriter.removeNic(nic)
-
- # Note! In case we have bridge up and connected to the bond
- # we will get error in log:
- # (ifdown) bridge XXX is still up; can't delete it
- # But, we prefer this behaviour instead of taking bridge down
- # Anyway, we will not be able to take it down with connected VMs
-
- # First we need to prepare all conf files
- configWriter.addBonding(bond, bridge=bridge, mtu=mtu,
- bondingOptions=bondAttrs.get('options', None))
-
- for nic in bondAttrs['nics']:
- configWriter.addNic(nic, bonding=bond, mtu=mtu)
-
- # Now we can run ifup for all interfaces
- ifup(bond)
- # NICs must be activated in the same order of boot time
- # to expose the correct MAC address.
- for nic in nicSort(bondAttrs['nics']):
- ifup(nic)
-
-def _removeBondings(bondings, configWriter):
- """ Remove bond interface """
- logger = logging.getLogger("_removeBondings")
-
- _netinfo = netinfo.NetInfo()
-
- for bond, bondAttrs in bondings.items():
- if 'remove' in bondAttrs:
- nics = _netinfo.getNicsForBonding(bond)
- logger.debug("Removing bond %r with nics = %s", bond, nics)
- ifdown(bond)
- configWriter.removeBonding(bond)
-
- for nic in nics:
- ifdown(nic)
- configWriter.removeNic(nic)
-
- del bondings[bond]
def setupNetworks(networks={}, bondings={}, **options):
@@ -1227,7 +1265,6 @@
try:
_netinfo = netinfo.NetInfo()
- configWriter = ConfigWriter()
networksAdded = set()
# keep set netsWithNewBonds to be able remove
# a new added network if connectivity check fail.
@@ -1251,7 +1288,7 @@
for network, networkAttrs in networks.items():
if network in _netinfo.networks:
logger.debug("Removing network %r" % network)
- delNetwork(network, configWriter=configWriter, force=force,
+ delNetwork(network, force=force,
implicitBonding=False)
if 'remove' in networkAttrs:
del networks[network]
@@ -1259,10 +1296,10 @@
networksAdded.add(network)
# Remove bonds with 'remove' attribute
- _removeBondings(bondings, configWriter)
+ configurator.removeBondings(bondings)
# Check whether bonds should be resized
- _editBondings(bondings, configWriter)
+ configurator.editBondings(bondings)
# We need to use the newest host info
_ni = netinfo.NetInfo()
@@ -1291,8 +1328,7 @@
d['force'] = force
logger.debug("Adding network %r" % network)
- addNetwork(network, configWriter=configWriter,
- implicitBonding=True, **d)
+ addNetwork(network, implicitBonding=True, **d)
if utils.tobool(options.get('connectivityCheck', True)):
logger.debug('Checking connectivity...')
@@ -1305,7 +1341,7 @@
raise ConfigNetworkError(ne.ERR_LOST_CONNECTION,
'connectivity check failed')
except:
- configWriter.restoreBackups()
+ configurator.configWriter.restoreBackups()
raise
except Exception, e:
--
To view, visit http://gerrit.ovirt.org/7714
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I66710fdf8fd73beb06124f72ef9857df7393a602
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Mark Wu <wudxw(a)linux.vnet.ibm.com>
11 years, 8 months