Hello community, here is the log from the commit of package openstack-nova for openSUSE:Factory checked in at 2013-01-29 06:46:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openstack-nova (Old) and /work/SRC/openSUSE:Factory/.openstack-nova.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openstack-nova", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/openstack-nova/openstack-nova-doc.changes 2013-01-17 15:16:27.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.openstack-nova.new/openstack-nova-doc.changes 2013-01-29 06:46:19.000000000 +0100 @@ -0,0 +1,24 @@ +------------------------------------------------------------------- +Fri Jan 18 13:42:51 UTC 2013 - [email protected] + +- Update to version 2012.2.3+git.1358515929.3545a7d: + + Add NFS to the libvirt volume driver list + + Call plug_vifs() for all instances in init_host + + Fix addition of CPU features when running against legacy libvirt + + Fix typo in resource tracker audit message +- Move back to "git_tarballs" source service. + +-------------------------------------------------------------------- +Thu Jan 17 15:22:36 UTC 2013 - [email protected] + +- Start using obs-service-github_tarballs + +-------------------------------------------------------------------- +Thu Jan 17 14:52:08 UTC 2013 - [email protected] + +- Update to version 2012.2.3+git.1358434328.a41b913: + + Provide better error message for aggregate-create + + Fix errors in used_limits extension + + Add an iptables mangle rule per-bridge for DHCP. + + Limit formatting routes when adding resources + --- /work/SRC/openSUSE:Factory/openstack-nova/openstack-nova.changes 2013-01-17 15:16:27.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.openstack-nova.new/openstack-nova.changes 2013-01-29 06:46:19.000000000 +0100 @@ -1,0 +2,24 @@ +Fri Jan 18 13:42:51 UTC 2013 - [email protected] + +- Update to version 2012.2.3+git.1358515929.3545a7d: + + Add NFS to the libvirt volume driver list + + Call plug_vifs() for all instances in init_host + + Fix addition of CPU features when running against legacy libvirt + + Fix typo in resource tracker audit message +- Move back to "git_tarballs" source service. + +-------------------------------------------------------------------- +Thu Jan 17 15:22:36 UTC 2013 - [email protected] + +- Start using obs-service-github_tarballs + +-------------------------------------------------------------------- +Thu Jan 17 14:52:08 UTC 2013 - [email protected] + +- Update to version 2012.2.3+git.1358434328.a41b913: + + Provide better error message for aggregate-create + + Fix errors in used_limits extension + + Add an iptables mangle rule per-bridge for DHCP. + + Limit formatting routes when adding resources + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openstack-nova-doc.spec ++++++ --- /var/tmp/diff_new_pack.gyqtiv/_old 2013-01-29 06:46:21.000000000 +0100 +++ /var/tmp/diff_new_pack.gyqtiv/_new 2013-01-29 06:46:21.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package openstack-nova-doc # -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -20,8 +20,8 @@ %define majorversion 2012.2.3 Name: openstack-%{component}-doc -Version: 2012.2.3+git.1357215468.451003e -Release: 0 +Version: 2012.2.3+git.1358515929.3545a7d +Release: 1 License: Apache-2.0 Summary: OpenStack Compute (Nova) - Documentation Url: http://openstack.org/projects/compute/ ++++++ openstack-nova.spec ++++++ --- /var/tmp/diff_new_pack.gyqtiv/_old 2013-01-29 06:46:21.000000000 +0100 +++ /var/tmp/diff_new_pack.gyqtiv/_new 2013-01-29 06:46:21.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package openstack-nova # -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2011 B1 Systems GmbH, Vohburg, Germany. # # All modifications and additions to the file contributed by third parties @@ -17,20 +17,13 @@ # -#TODO/FIXME: -# - need to package websockify: https://github.com/kanaka/websockify -# - need to install novnc files in /usr/share/novnc -# - probably need to kill openstack-novncproxy (add -# provides/obsoletes?) and package https://github.com/kanaka/noVNC -# in a different way - %define component nova %define groupname openstack-%{component} %define username openstack-%{component} Name: openstack-%{component} -Version: 2012.2.3+git.1357215468.451003e -Release: 0 +Version: 2012.2.3+git.1358515929.3545a7d +Release: 1 License: Apache-2.0 Summary: OpenStack Compute (Nova) Url: https://launchpad.net/nova @@ -307,7 +300,6 @@ cp -a %{SOURCE9} %{buildroot}%{_localstatedir}/lib/polkit-1/localauthority/10-vendor.d/ %endif - %pre getent group %{groupname} >/dev/null || groupadd -r %{groupname} getent passwd %{username} >/dev/null || \ ++++++ _service ++++++ --- /var/tmp/diff_new_pack.gyqtiv/_old 2013-01-29 06:46:21.000000000 +0100 +++ /var/tmp/diff_new_pack.gyqtiv/_new 2013-01-29 06:46:21.000000000 +0100 @@ -1,9 +1,6 @@ <services> - <service name="github_tarballs" mode="disabled"> + <service name="git_tarballs" mode="disabled"> <param name="url">http://tarballs.openstack.org/nova/nova-stable-folsom.tar.gz</param> <param name="email">[email protected]</param> - <param name="repo_owner">openstack</param> - <param name="repo_name">nova</param> - <param name="target">stable/folsom</param> </service> </services> ++++++ nova-stable-folsom.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/AUTHORS new/nova-2012.2.3/AUTHORS --- old/nova-2012.2.3/AUTHORS 2012-12-19 13:20:23.000000000 +0100 +++ new/nova-2012.2.3/AUTHORS 2013-01-18 00:55:37.000000000 +0100 @@ -47,6 +47,7 @@ Brian Lamar <[email protected]> Brian Schott <[email protected]> Brian Waldon <[email protected]> +Carlos Goncalves <[email protected]> Chiradeep Vittal <[email protected]> Chmouel Boudjnah <[email protected]> Chris Behrens <[email protected]> @@ -111,6 +112,7 @@ Gaurav Gupta <[email protected]> Ghe Rivero <[email protected]> Greg Althaus <[email protected]> +Hans Lindgren <[email protected]> Hengqing Hu <[email protected]> Hisaharu Ishii <[email protected]> Hisaki Ohara <[email protected]> @@ -208,6 +210,7 @@ Mohammed Naser <[email protected]> Monsyne Dragon <[email protected]> Monty Taylor <[email protected]> +Morgan Fainberg <[email protected]> MotoKen <[email protected]> Muneyuki Noguchi <[email protected]> NTT PF Lab. <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/ChangeLog new/nova-2012.2.3/ChangeLog --- old/nova-2012.2.3/ChangeLog 2012-12-19 13:20:23.000000000 +0100 +++ new/nova-2012.2.3/ChangeLog 2013-01-18 00:55:36.000000000 +0100 @@ -1,3 +1,194 @@ +commit 3545a7d77d4d9abbb193d6bc35ec0a10fb8f5ce0 +Merge: 02ff13b fcaab43 +Author: Jenkins <[email protected]> +Date: Thu Jan 17 23:31:43 2013 +0000 + + Merge "Add NFS to the libvirt volume driver list" into stable/folsom + +commit 02ff13bf91f9e968f10d53ddd8bc45d6b349b5f1 +Merge: 0489db9 796216e +Author: Jenkins <[email protected]> +Date: Thu Jan 17 23:27:46 2013 +0000 + + Merge "Call plug_vifs() for all instances in init_host" into stable/folsom + +commit 0489db9a4ced453e0a32cca31ab1a15cd7514fa3 +Merge: d4064eb b3c2f61 +Author: Jenkins <[email protected]> +Date: Thu Jan 17 23:25:39 2013 +0000 + + Merge "Fix typo in resource tracker audit message" into stable/folsom + +commit d4064eb6b449308d1b7ebac1b11a30e997ecadca +Merge: a41b913 1789d26 +Author: Jenkins <[email protected]> +Date: Thu Jan 17 23:17:59 2013 +0000 + + Merge "Fix addition of CPU features when running against legacy libvirt" into stable/folsom + +commit fcaab435d966a4ab97e5e375d6c8b3e2367d56b9 +Author: Carlos Goncalves <[email protected]> +Date: Thu Dec 6 13:15:24 2012 +0000 + + Add NFS to the libvirt volume driver list + + Fixes bug 1087252 + + Change-Id: I01511d4ef7763cbe622b10ee340342eb692afcdd + (cherry picked from commit f6c394cce473f58da704bc1c5230c57ca80f299d) + + nova/virt/libvirt/driver.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit a41b9132f445220d3435a28eac40ef2ced25d3ff +Merge: 6003350 eff17b4 +Author: Jenkins <[email protected]> +Date: Wed Jan 16 23:16:54 2013 +0000 + + Merge "Provide better error message for aggregate-create" into stable/folsom + +commit 60033507695c45488ff8abb3f69e1385f391e29c +Merge: 9bcda4a 63fd557 +Author: Jenkins <[email protected]> +Date: Wed Jan 16 23:04:32 2013 +0000 + + Merge "Limit formatting routes when adding resources" into stable/folsom + +commit 796216e935781809e049c6a084962f73c7e0a23c +Author: Morgan Fainberg <[email protected]> +Date: Tue Nov 27 13:00:48 2012 -0800 + + Call plug_vifs() for all instances in init_host + + Remove the assumption that we are using the "flat" networking model + and there is a single bridge interface for all instances on a given + compute node. Instead simply call plug_vifs() for each instance in + init_host. + + Fixes bug 1083784 + + Change-Id: I4b367deb6851c06c80a4bdf0bd806cf5e867bb0a + (cherry picked from commit 77e38b7cfc2206ef4ac528d3c9faaa09adbf7f58) + + nova/compute/manager.py | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit 9bcda4a40678461628fd52ca4c1916333fed4111 +Merge: 4bfc8f1 f864a4e +Author: Jenkins <[email protected]> +Date: Wed Jan 16 17:40:42 2013 +0000 + + Merge "Fix errors in used_limits extension" into stable/folsom + +commit 1789d2604312e0e9f8c25918d0d0029586829797 +Author: Daniel P. Berrange <[email protected]> +Date: Mon Dec 17 15:35:06 2012 +0000 + + Fix addition of CPU features when running against legacy libvirt + + When running against an libvirt < 0.9.10 which lacks support for the + 'host-model' CPU type, we must fake it by copying the host CPU + model and features. Unfortunately the code was forgetting to + append the new features to the CPU object feature list + + Bug: 1099527 + Signed-off-by: Daniel P. Berrange <[email protected]> + (cherry picked from commit 82b55c97d10a55e6a825261397816f6a7ad00fd7) + + Change-Id: Ib5e6a173f1ae7d421435af45bf327f5b36c94dd0 + + nova/tests/test_libvirt.py | 6 ++++++ + nova/virt/libvirt/driver.py | 1 + + 2 files changed, 7 insertions(+) + +commit b3c2f61d8d54b0e8c0afe3da529b3ec7c12f461b +Author: Hans Lindgren <[email protected]> +Date: Fri Jan 11 13:40:25 2013 +0100 + + Fix typo in resource tracker audit message + + Resolves bug 1092418. + + Change-Id: Ia51f1ee78bc612743095759fef6067c93fbcd222 + + nova/compute/resource_tracker.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 63fd557ec42ea59aa77a2d4aca3c4f9c301320fd +Author: Vishvananda Ishaya <[email protected]> +Date: Wed Nov 7 23:28:28 2012 -0800 + + Limit formatting routes when adding resources + + By default, routes.mapper.Mapper.resource adds a bunch of formatted + routes that accept anything after a '.'. Our spec says only .xml + and .json are accepted so limit the formatting to those valuse. + + This allows identifiers with a '.' in urls. A few tests were added + to the extensions test to prove that .xml and .json are stripped + but other values are not. + + Fixes bug 1027788 + + Change-Id: Ic888aa5d75050d6b14763c2a787ac8c8d5ab1f69 + (cherry picked from commit 8935c3bde9e9635f65522488c1aca5df5b03050d) + + nova/api/openstack/__init__.py | 9 +++++++ + .../tests/api/openstack/compute/test_extensions.py | 28 ++++++++++++++++++++ + 2 files changed, 37 insertions(+) + +commit 4bfc8f1165b05c2cc7c5506641b9b85fa8e1e144 +Author: Adam Gandelman <[email protected]> +Date: Tue Dec 18 09:50:46 2012 -0800 + + Add an iptables mangle rule per-bridge for DHCP. + + When vhost-net is present on a host, and DHCP services are + run on the same system as guests (multi_host), an iptables + rule is needed to fill packet checksums. This adds a rule + per-bridge for multi_host networks when vhost-net is present, + similar to how newer versions of libvirt handle the issue for + bridges/networks that it manages. + + Fixes LP: #1029430 + + EDIT: Updated tests and pep8. + + (Backported from commit 901a3dacb6f2d36cbe8d23707dba75452e91df33) + + Change-Id: I1a51c1d808fa47a77e713dbfe384ffad183d6031 + + nova/network/linux_net.py | 29 +++++++++++++++++++++++++++-- + nova/tests/test_libvirt.py | 16 ++++++++++++++++ + 2 files changed, 43 insertions(+), 2 deletions(-) + +commit 451003e0670b854bc833f32c67bb7ad646d3ac89 +Merge: 9e62846 f9eacd4 +Author: Jenkins <[email protected]> +Date: Wed Dec 19 12:16:25 2012 +0000 + + Merge "Fix a crash when launching qcow2 images containing snapshots" into stable/folsom + +commit f864a4e2e2a3cc5383e7dce6ad91f42880a64d1a +Author: Mark McLoughlin <[email protected]> +Date: Thu Dec 13 11:21:18 2012 +0000 + + Fix errors in used_limits extension + + Fixes bug #1062049 + + There was a typo mapping the security groups resource to floating IPs. + + Key pairs don't work with the extension because of bug #1089877. + + (cherry picked from commit 6c9d9ab) + + Change-Id: Ifd694b21fef1dc95e67c07dcef0cd6ea3daa8d53 + + nova/api/openstack/compute/contrib/used_limits.py | 4 ++-- + .../openstack/compute/contrib/test_used_limits.py | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + commit 9e62846722a174ffd74f15ea2d45f27bf6509f1f Author: Mark McLoughlin <[email protected]> Date: Thu Dec 13 20:32:12 2012 +0000 @@ -24,6 +215,24 @@ nova/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) +commit f9eacd416360f1c37fd7cb4177f6026eb939cb0b +Author: Joshua Harlow <[email protected]> +Date: Tue Oct 23 13:14:22 2012 -0700 + + Fix a crash when launching qcow2 images containing snapshots + + Break out of the loop when we encounter 'Snapshot list:' + in the output from `qemu-img info` instead of failing + to parse and crashing. + + Fixes bug: 1070088 + Change-Id: I5f501c599b94e0ac13892c97d60ec740ac7e641d + cherry-picked: b4b897e7acebea1ccff336a5fad9313fd3f51326 + + nova/tests/test_image_utils.py | 69 ++++++++++++++++++++++++++++++++++++++++ + nova/virt/images.py | 16 ++++++++-- + 2 files changed, 82 insertions(+), 3 deletions(-) + commit a99a802e008eed18e39fc1d98170edc495cbd354 Author: Pádraig Brady <[email protected]> Date: Fri Nov 23 14:59:13 2012 +0000 @@ -63,6 +272,27 @@ nova/flags.py | 3 +++ 1 file changed, 3 insertions(+) +commit eff17b4b1888d3d56bb1ede59e382b8430e2afa9 +Author: Joe Gordon <[email protected]> +Date: Mon Nov 26 22:55:19 2012 +0000 + + Provide better error message for aggregate-create + + For an InvalidAggregateAction exception: + Before: 'ERROR: There was a conflict when trying to complete your request (HTTP 409)' + After: 'ERROR: Cannot perform action 'create_aggregate' on aggregate 'N/A'. Reason: invalid zone. (HTTP 400)' + + docImpact + + Fix bug 1083353 + + Change-Id: I26e30059fe5bbc30eecc52cccec4eba2a57d00db + (cherry picked from commit 4e43747037058522087e6eb71ef3bcce266d55cc) + + nova/api/openstack/compute/contrib/aggregates.py | 9 +++++---- + .../openstack/compute/contrib/test_aggregates.py | 8 ++++++-- + 2 files changed, 11 insertions(+), 6 deletions(-) + commit b55014ca51dae9078fd68c7e4e380922b80d466d Author: Mark McLoughlin <[email protected]> Date: Thu Nov 29 21:14:46 2012 +0000 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/api/openstack/__init__.py new/nova-2012.2.3/nova/api/openstack/__init__.py --- old/nova-2012.2.3/nova/api/openstack/__init__.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/api/openstack/__init__.py 2013-01-18 00:51:37.000000000 +0100 @@ -87,6 +87,15 @@ return result[0], result[1] return routes.Mapper.routematch(self, url, environ) + def connect(self, *args, **kargs): + # NOTE(vish): Default the format part of a route to only accept json + # and xml so it doesn't eat all characters after a '.' + # in the url. + kargs.setdefault('requirements', {}) + if not kargs['requirements'].get('format'): + kargs['requirements']['format'] = 'json|xml' + return routes.Mapper.connect(self, *args, **kargs) + class ProjectMapper(APIMapper): def resource(self, member_name, collection_name, **kwargs): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/api/openstack/compute/contrib/aggregates.py new/nova-2012.2.3/nova/api/openstack/compute/contrib/aggregates.py --- old/nova-2012.2.3/nova/api/openstack/compute/contrib/aggregates.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/api/openstack/compute/contrib/aggregates.py 2013-01-18 00:51:37.000000000 +0100 @@ -71,11 +71,12 @@ try: aggregate = self.api.create_aggregate(context, name, avail_zone) - except (exception.AggregateNameExists, - exception.InvalidAggregateAction): - LOG.info(_("Cannot create aggregate with name %(name)s and " - "availability zone %(avail_zone)s") % locals()) + except exception.AggregateNameExists as e: + LOG.info(e) raise exc.HTTPConflict + except exception.InvalidAggregateAction as e: + LOG.info(e) + raise return self._marshall_aggregate(aggregate) def show(self, req, id): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/api/openstack/compute/contrib/used_limits.py new/nova-2012.2.3/nova/api/openstack/compute/contrib/used_limits.py --- old/nova-2012.2.3/nova/api/openstack/compute/contrib/used_limits.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/api/openstack/compute/contrib/used_limits.py 2013-01-18 00:51:37.000000000 +0100 @@ -51,8 +51,8 @@ 'totalInstancesUsed': 'instances', 'totalVolumesUsed': 'volumes', 'totalVolumeGigabytesUsed': 'gigabytes', - 'totalSecurityGroupsUsed': 'floating_ips', - 'totalKeyPairsUsed': 'key_pairs', + 'totalFloatingIpsUsed': 'floating_ips', + 'totalSecurityGroupsUsed': 'security_groups', } used_limits = {} for display_name, quota in quota_map.iteritems(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/compute/manager.py new/nova-2012.2.3/nova/compute/manager.py --- old/nova-2012.2.3/nova/compute/manager.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/compute/manager.py 2013-01-18 00:51:40.000000000 +0100 @@ -271,7 +271,7 @@ self.driver.filter_defer_apply_on() try: - for count, instance in enumerate(instances): + for instance in instances: db_state = instance['power_state'] drv_state = self._get_power_state(context, instance) closing_vm_states = (vm_states.DELETED, @@ -291,10 +291,9 @@ net_info = compute_utils.get_nw_info_for_instance(instance) # We're calling plug_vifs to ensure bridge and iptables - # filters are present, calling it once is enough. - if count == 0: - legacy_net_info = self._legacy_nw_info(net_info) - self.driver.plug_vifs(instance, legacy_net_info) + # rules exist. This needs to be called for each instance. + legacy_net_info = self._legacy_nw_info(net_info) + self.driver.plug_vifs(instance, legacy_net_info) if ((expect_running and FLAGS.resume_guests_state_on_host_boot) or FLAGS.start_guests_on_host_boot): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/compute/resource_tracker.py new/nova-2012.2.3/nova/compute/resource_tracker.py --- old/nova-2012.2.3/nova/compute/resource_tracker.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/compute/resource_tracker.py 2013-01-18 00:51:40.000000000 +0100 @@ -227,7 +227,7 @@ "%(free_mem)d MB") % dict( total_mem=self.compute_node['memory_mb'], used_mem=self.compute_node['memory_mb_used'], - free_mem=self.compute_node['local_gb_used']) + free_mem=self.compute_node['free_ram_mb']) LOG.audit(msg) if memory_mb_limit is None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/network/linux_net.py new/nova-2012.2.3/nova/network/linux_net.py --- old/nova-2012.2.3/nova/network/linux_net.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/network/linux_net.py 2013-01-18 00:51:37.000000000 +0100 @@ -277,7 +277,8 @@ self.execute = execute self.ipv4 = {'filter': IptablesTable(), - 'nat': IptablesTable()} + 'nat': IptablesTable(), + 'mangle': IptablesTable()} self.ipv6 = {'filter': IptablesTable()} self.iptables_apply_deferred = False @@ -298,7 +299,8 @@ # Wrap the built-in chains builtin_chains = {4: {'filter': ['INPUT', 'OUTPUT', 'FORWARD'], - 'nat': ['PREROUTING', 'OUTPUT', 'POSTROUTING']}, + 'nat': ['PREROUTING', 'OUTPUT', 'POSTROUTING'], + 'mangle': ['POSTROUTING']}, 6: {'filter': ['INPUT', 'OUTPUT', 'FORWARD']}} for ip_version in builtin_chains: @@ -732,6 +734,24 @@ iptables_manager.apply() +def _add_dhcp_mangle_rule(dev): + if not os.path.exists('/dev/vhost-net'): + return + table = iptables_manager.ipv4['mangle'] + table.add_rule('POSTROUTING', + '-o %s -p udp -m udp --dport 68 -j CHECKSUM ' + '--checksum-fill' % dev) + iptables_manager.apply() + + +def _remove_dhcp_mangle_rule(dev): + table = iptables_manager.ipv4['mangle'] + table.remove_rule('POSTROUTING', + '-o %s -p udp -m udp --dport 68 -j CHECKSUM ' + '--checksum-fill' % dev) + iptables_manager.apply() + + def get_dhcp_opts(context, network_ref): """Get network's hosts config in dhcp-opts format.""" hosts = [] @@ -788,6 +808,8 @@ else: LOG.debug(_('Pid %d is stale, skip killing dnsmasq'), pid) + _remove_dhcp_mangle_rule(dev) + # NOTE(ja): Sending a HUP only reloads the hostfile, so any # configuration options (like dchp-range, vlan, ...) @@ -809,6 +831,9 @@ write_to_file(optsfile, get_dhcp_opts(context, network_ref)) os.chmod(optsfile, 0644) + if network_ref['multi_host']: + _add_dhcp_mangle_rule(dev) + # Make sure dnsmasq can actually read it (it setuid()s to "nobody") os.chmod(conffile, 0644) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_aggregates.py new/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_aggregates.py --- old/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_aggregates.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_aggregates.py 2013-01-18 00:51:37.000000000 +0100 @@ -88,11 +88,15 @@ def test_create_with_incorrect_availability_zone(self): def stub_create_aggregate(context, name, availability_zone): - raise exception.InvalidAggregateAction + raise exception.InvalidAggregateAction(action='create_aggregate', + aggregate_id="'N/A'", + reason='invalid zone') + self.stubs.Set(self.controller.api, "create_aggregate", stub_create_aggregate) - self.assertRaises(exc.HTTPConflict, self.controller.create, + self.assertRaises(exception.InvalidAggregateAction, + self.controller.create, self.req, {"aggregate": {"name": "test", "availability_zone": "nova_bad"}}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_used_limits.py new/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_used_limits.py --- old/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_used_limits.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/tests/api/openstack/compute/contrib/test_used_limits.py 2013-01-18 00:51:37.000000000 +0100 @@ -52,8 +52,8 @@ 'totalInstancesUsed': 'instances', 'totalVolumesUsed': 'volumes', 'totalVolumeGigabytesUsed': 'gigabytes', - 'totalSecurityGroupsUsed': 'floating_ips', - 'totalKeyPairsUsed': 'key_pairs', + 'totalFloatingIpsUsed': 'floating_ips', + 'totalSecurityGroupsUsed': 'security_groups', } limits = {} for display_name, q in quota_map.iteritems(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/tests/api/openstack/compute/test_extensions.py new/nova-2012.2.3/nova/tests/api/openstack/compute/test_extensions.py --- old/nova-2012.2.3/nova/tests/api/openstack/compute/test_extensions.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/tests/api/openstack/compute/test_extensions.py 2013-01-18 00:51:37.000000000 +0100 @@ -667,3 +667,31 @@ self.assertEqual(link_nodes[i].get(key), value) xmlutil.validate_schema(root, 'extensions') + + +class ExtensionControllerIdFormatTest(test.TestCase): + + def _bounce_id(self, test_id): + + class BounceController(object): + def show(self, req, id): + return id + res_ext = base_extensions.ResourceExtension('bounce', + BounceController()) + manager = StubExtensionManager(res_ext) + app = compute.APIRouter(manager) + request = webob.Request.blank("/fake/bounce/%s" % test_id) + response = request.get_response(app) + return response.body + + def test_id_with_xml_format(self): + result = self._bounce_id('foo.xml') + self.assertEqual(result, 'foo') + + def test_id_with_json_format(self): + result = self._bounce_id('foo.json') + self.assertEqual(result, 'foo') + + def test_id_with_bad_format(self): + result = self._bounce_id('foo.bad') + self.assertEqual(result, 'foo.bad') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/tests/test_image_utils.py new/nova-2012.2.3/nova/tests/test_image_utils.py --- old/nova-2012.2.3/nova/tests/test_image_utils.py 1970-01-01 01:00:00.000000000 +0100 +++ new/nova-2012.2.3/nova/tests/test_image_utils.py 2013-01-18 00:51:38.000000000 +0100 @@ -0,0 +1,69 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from nova import test +from nova import utils + +from nova.virt import images + + +class ImageUtilsTestCase(test.TestCase): + def test_qemu_info(self): + path = "disk.config" + example_output = """image: disk.config +file format: raw +virtual size: 64M (67108864 bytes) +cluster_size: 65536 +disk size: 96K +blah BLAH: bb +""" + self.mox.StubOutWithMock(utils, 'execute') + utils.execute('env', 'LC_ALL=C', 'LANG=C', + 'qemu-img', 'info', path).AndReturn((example_output, '')) + self.mox.ReplayAll() + image_info = images.qemu_img_info(path) + self.assertEquals('disk.config', image_info['image']) + self.assertEquals('raw', image_info['file format']) + self.assertEquals('64M (67108864 bytes)', image_info['virtual size']) + self.assertEquals('96K', image_info['disk size']) + self.assertEquals('bb', image_info['blah blah']) + self.assertEquals("65536", image_info['cluster_size']) + + def test_qemu_info_snap(self): + path = "disk.config" + example_output = """image: disk.config +file format: raw +virtual size: 64M (67108864 bytes) +cluster_size: 65536 +disk size: 96K +Snapshot list: +ID TAG VM SIZE DATE VM CLOCK +1 d9a9784a500742a7bb95627bb3aace38 0 2012-08-20 10:52:46 00:00:00.000 +""" + self.mox.StubOutWithMock(utils, 'execute') + utils.execute('env', 'LC_ALL=C', 'LANG=C', + 'qemu-img', 'info', path).AndReturn((example_output, '')) + self.mox.ReplayAll() + image_info = images.qemu_img_info(path) + self.assertEquals('disk.config', image_info['image']) + self.assertEquals('raw', image_info['file format']) + self.assertEquals('64M (67108864 bytes)', image_info['virtual size']) + self.assertEquals('96K', image_info['disk size']) + self.assertEquals("65536", image_info['cluster_size']) + # This would be triggered if the split encountered this section + self.assertNotIn('snapshot list', image_info) + bad_cap = '1 d9a9784a500742a7bb95627bb3aace38 0 2012-08-20 10' + self.assertNotIn(bad_cap, image_info) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/tests/test_libvirt.py new/nova-2012.2.3/nova/tests/test_libvirt.py --- old/nova-2012.2.3/nova/tests/test_libvirt.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/tests/test_libvirt.py 2013-01-18 00:51:38.000000000 +0100 @@ -815,6 +815,9 @@ cpu.model = "Opteron_G4" cpu.vendor = "AMD" + cpu.features.append(config.LibvirtConfigGuestCPUFeature("tm2")) + cpu.features.append(config.LibvirtConfigGuestCPUFeature("ht")) + caps = config.LibvirtConfigCaps() caps.host = config.LibvirtConfigCapsHost() caps.host.cpu = cpu @@ -838,6 +841,9 @@ self.assertEquals(conf.cpu.mode, None) self.assertEquals(conf.cpu.model, "Opteron_G4") self.assertEquals(conf.cpu.vendor, "AMD") + self.assertEquals(len(conf.cpu.features), 2) + self.assertEquals(conf.cpu.features[0].name, "tm2") + self.assertEquals(conf.cpu.features[1].name, "ht") def test_get_guest_cpu_config_custom_old(self): def get_lib_version_stub(self): @@ -3099,6 +3105,20 @@ ':POSTROUTING ACCEPT [5063:386098]', ] + in_mangle_rules = [ + '# Generated by iptables-save v1.4.12 on Tue Dec 18 15:50:25 201;', + '*mangle', + ':PREROUTING ACCEPT [241:39722]', + ':INPUT ACCEPT [230:39282]', + ':FORWARD ACCEPT [0:0]', + ':OUTPUT ACCEPT [266:26558]', + ':POSTROUTING ACCEPT [267:26590]', + '-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM ' + '--checksum-fill', + 'COMMIT', + '# Completed on Tue Dec 18 15:50:25 2012', + ] + in_filter_rules = [ '# Generated by iptables-save v1.4.4 on Mon Dec 6 11:54:13 2010', '*filter', @@ -3200,6 +3220,8 @@ return '\n'.join(self.in_filter_rules), None if cmd == ('iptables-save', '-c', '-t', 'nat'): return '\n'.join(self.in_nat_rules), None + if cmd == ('iptables-save', '-c', '-t', 'mangle'): + return '\n'.join(self.in_mangle_rules), None if cmd == ('iptables-restore', '-c',): lines = process_input.split('\n') if '*filter' in lines: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/virt/images.py new/nova-2012.2.3/nova/virt/images.py --- old/nova-2012.2.3/nova/virt/images.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/virt/images.py 2013-01-18 00:51:38.000000000 +0100 @@ -50,11 +50,21 @@ 'qemu-img', 'info', path) # output of qemu-img is 'field: value' + # except when its in the snapshot listing mode data = {} for line in out.splitlines(): - field, val = line.split(':', 1) - if val[0] == " ": - val = val[1:] + pieces = line.split(':', 1) + if len(pieces) != 2: + continue + (field, val) = pieces + field = field.strip().lower() + val = val.strip() + if field == 'snapshot list': + # Skip everything after the snapshot list + # which is safe to do since the code prints + # these out at the end and nobody currently + # uses this information in openstack as-is. + break data[field] = val return data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova/virt/libvirt/driver.py new/nova-2012.2.3/nova/virt/libvirt/driver.py --- old/nova-2012.2.3/nova/virt/libvirt/driver.py 2012-12-19 13:16:56.000000000 +0100 +++ new/nova-2012.2.3/nova/virt/libvirt/driver.py 2013-01-18 00:51:40.000000000 +0100 @@ -148,7 +148,8 @@ 'local=nova.virt.libvirt.volume.LibvirtVolumeDriver', 'fake=nova.virt.libvirt.volume.LibvirtFakeVolumeDriver', 'rbd=nova.virt.libvirt.volume.LibvirtNetVolumeDriver', - 'sheepdog=nova.virt.libvirt.volume.LibvirtNetVolumeDriver' + 'sheepdog=nova.virt.libvirt.volume.LibvirtNetVolumeDriver', + 'nfs=nova.virt.libvirt.volume_nfs.NfsVolumeDriver' ], help='Libvirt handlers for remote volumes.'), cfg.StrOpt('libvirt_disk_prefix', @@ -1516,6 +1517,7 @@ for hostfeat in hostcpu.features: guestfeat = config.LibvirtConfigGuestCPUFeature(hostfeat.name) guestfeat.policy = "require" + guestcpu.features.append(guestfeat) return guestcpu diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-2012.2.3/nova.egg-info/SOURCES.txt new/nova-2012.2.3/nova.egg-info/SOURCES.txt --- old/nova-2012.2.3/nova.egg-info/SOURCES.txt 2012-12-19 13:20:24.000000000 +0100 +++ new/nova-2012.2.3/nova.egg-info/SOURCES.txt 2013-01-18 00:55:42.000000000 +0100 @@ -729,6 +729,7 @@ nova/tests/test_fakelibvirt.py nova/tests/test_flags.py nova/tests/test_hypervapi.py +nova/tests/test_image_utils.py nova/tests/test_imagebackend.py nova/tests/test_imagecache.py nova/tests/test_instance_types.py -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
