jruzicka pushed to python-openstackclient (master). "Give up nuking pbr (..more)"
notifications at fedoraproject.org
notifications at fedoraproject.org
Wed Apr 29 18:01:49 UTC 2015
>From 97574a72b6e717f53e7781bf35248a0b63a01445 Mon Sep 17 00:00:00 2001
From: Jakub Ruzicka <jruzicka at redhat.com>
Date: Wed, 29 Apr 2015 19:00:56 +0200
Subject: Give up nuking pbr
Changelog:
- Give up nuking pbr
- Add the ability to set and unset flavor properties
- Use %license
diff --git a/0001-Add-the-ability-to-set-and-unset-flavor-properties.patch b/0001-Add-the-ability-to-set-and-unset-flavor-properties.patch
new file mode 100644
index 0000000..c6f3bde
--- /dev/null
+++ b/0001-Add-the-ability-to-set-and-unset-flavor-properties.patch
@@ -0,0 +1,269 @@
+From 4aa10e818a323056cc8679384da36827af313f9d Mon Sep 17 00:00:00 2001
+From: Marek Aufart <maufart at redhat.com>
+Date: Tue, 17 Mar 2015 15:38:24 +0100
+Subject: [PATCH] Add the ability to set and unset flavor properties
+
+Added flavor set and unset command which allow manage flavor
+properties called extra_specs.
+
+Command flavor show output was extended with these properties.
+
+Closes-Bug: 1434137
+Change-Id: Ie469bade802de18aab9d58eda3fff46064008163
+(cherry picked from commit 621434451f561e7ef7c549a134f3bfadcf10520f)
+---
+ doc/source/command-objects/flavor.rst | 40 +++++++++++++
+ openstackclient/compute/v2/flavor.py | 78 ++++++++++++++++++++++++-
+ openstackclient/tests/compute/v2/test_flavor.py | 77 +++++++++++++++++++++++-
+ setup.cfg | 2 +
+ 4 files changed, 193 insertions(+), 4 deletions(-)
+
+diff --git a/doc/source/command-objects/flavor.rst b/doc/source/command-objects/flavor.rst
+index fa9fd80..5254b12 100644
+--- a/doc/source/command-objects/flavor.rst
++++ b/doc/source/command-objects/flavor.rst
+@@ -123,3 +123,43 @@ Display flavor details
+ .. describe:: <flavor>
+
+ Flavor to display (name or ID)
++
++flavor set
++----------
++
++Set flavor properties
++
++.. program:: flavor set
++.. code:: bash
++
++ os flavor set
++ [--property <key=value> [...] ]
++ <flavor>
++
++.. option:: --property <key=value>
++
++ Property to add or modify for this flavor (repeat option to set multiple properties)
++
++.. describe:: <flavor>
++
++ Flavor to modify (name or ID)
++
++flavor unset
++------------
++
++Unset flavor properties
++
++.. program:: flavor unset
++.. code:: bash
++
++ os flavor unset
++ [--property <key> [...] ]
++ <flavor>
++
++.. option:: --property <key>
++
++ Property to remove from flavor (repeat option to remove multiple properties)
++
++.. describe:: <flavor>
++
++ Flavor to modify (name or ID)
+diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py
+index 195c9a0..eb18a43 100644
+--- a/openstackclient/compute/v2/flavor.py
++++ b/openstackclient/compute/v2/flavor.py
+@@ -22,6 +22,7 @@ from cliff import command
+ from cliff import lister
+ from cliff import show
+
++from openstackclient.common import parseractions
+ from openstackclient.common import utils
+
+
+@@ -237,8 +238,79 @@ class ShowFlavor(show.ShowOne):
+ def take_action(self, parsed_args):
+ self.log.debug("take_action(%s)", parsed_args)
+ compute_client = self.app.client_manager.compute
+- flavor = utils.find_resource(compute_client.flavors,
+- parsed_args.flavor)._info.copy()
+- flavor.pop("links")
++ resource_flavor = utils.find_resource(compute_client.flavors,
++ parsed_args.flavor)
++ flavor = resource_flavor._info.copy()
++ flavor.pop("links", None)
++
++ flavor['properties'] = utils.format_dict(resource_flavor.get_keys())
++
++ return zip(*sorted(six.iteritems(flavor)))
++
++
++class SetFlavor(show.ShowOne):
++ """Set flavor properties"""
++
++ log = logging.getLogger(__name__ + ".SetFlavor")
++
++ def get_parser(self, prog_name):
++ parser = super(SetFlavor, self).get_parser(prog_name)
++ parser.add_argument(
++ "--property",
++ metavar="<key=value>",
++ action=parseractions.KeyValueAction,
++ help='Property to add or modify for this flavor '
++ '(repeat option to set multiple properties)',
++ )
++ parser.add_argument(
++ "flavor",
++ metavar="<flavor>",
++ help="Flavor to modify (name or ID)",
++ )
++ return parser
++
++ def take_action(self, parsed_args):
++ self.log.debug("take_action(%s)", parsed_args)
++ compute_client = self.app.client_manager.compute
++ resource_flavor = compute_client.flavors.find(name=parsed_args.flavor)
++
++ resource_flavor.set_keys(parsed_args.property)
++
++ flavor = resource_flavor._info.copy()
++ flavor['properties'] = utils.format_dict(resource_flavor.get_keys())
++ flavor.pop("links", None)
++ return zip(*sorted(six.iteritems(flavor)))
++
++
++class UnsetFlavor(show.ShowOne):
++ """Unset flavor properties"""
++
++ log = logging.getLogger(__name__ + ".UnsetFlavor")
++
++ def get_parser(self, prog_name):
++ parser = super(UnsetFlavor, self).get_parser(prog_name)
++ parser.add_argument(
++ "--property",
++ metavar="<key>",
++ action='append',
++ help='Property to remove from flavor '
++ '(repeat option to unset multiple properties)',
++ )
++ parser.add_argument(
++ "flavor",
++ metavar="<flavor>",
++ help="Flavor to modify (name or ID)",
++ )
++ return parser
++
++ def take_action(self, parsed_args):
++ self.log.debug("take_action(%s)", parsed_args)
++ compute_client = self.app.client_manager.compute
++ resource_flavor = compute_client.flavors.find(name=parsed_args.flavor)
++
++ resource_flavor.unset_keys(parsed_args.property)
+
++ flavor = resource_flavor._info.copy()
++ flavor['properties'] = utils.format_dict(resource_flavor.get_keys())
++ flavor.pop("links", None)
+ return zip(*sorted(six.iteritems(flavor)))
+diff --git a/openstackclient/tests/compute/v2/test_flavor.py b/openstackclient/tests/compute/v2/test_flavor.py
+index 8f33ccf..19be812 100644
+--- a/openstackclient/tests/compute/v2/test_flavor.py
++++ b/openstackclient/tests/compute/v2/test_flavor.py
+@@ -22,8 +22,17 @@ from openstackclient.tests import fakes
+
+ class FakeFlavorResource(fakes.FakeResource):
+
++ _keys = {'property': 'value'}
++
++ def set_keys(self, args):
++ self._keys.update(args)
++
++ def unset_keys(self, keys):
++ for key in keys:
++ self._keys.pop(key, None)
++
+ def get_keys(self):
+- return {'property': 'value'}
++ return self._keys
+
+
+ class TestFlavor(compute_fakes.TestComputev2):
+@@ -272,3 +281,69 @@ class TestFlavorList(TestFlavor):
+ 'property=\'value\''
+ ), )
+ self.assertEqual(datalist, tuple(data))
++
++
++class TestFlavorSet(TestFlavor):
++
++ def setUp(self):
++ super(TestFlavorSet, self).setUp()
++
++ self.flavors_mock.find.return_value = FakeFlavorResource(
++ None,
++ copy.deepcopy(compute_fakes.FLAVOR),
++ loaded=True,
++ )
++
++ self.cmd = flavor.SetFlavor(self.app, None)
++
++ def test_flavor_set(self):
++ arglist = [
++ '--property', 'FOO="B A R"',
++ 'baremetal'
++ ]
++ verifylist = [
++ ('property', {'FOO': '"B A R"'}),
++ ('flavor', 'baremetal')
++ ]
++
++ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
++
++ columns, data = self.cmd.take_action(parsed_args)
++
++ self.flavors_mock.find.assert_called_with(name='baremetal')
++
++ self.assertEqual('properties', columns[2])
++ self.assertIn('FOO=\'"B A R"\'', data[2])
++
++
++class TestFlavorUnset(TestFlavor):
++
++ def setUp(self):
++ super(TestFlavorUnset, self).setUp()
++
++ self.flavors_mock.find.return_value = FakeFlavorResource(
++ None,
++ copy.deepcopy(compute_fakes.FLAVOR),
++ loaded=True,
++ )
++
++ self.cmd = flavor.UnsetFlavor(self.app, None)
++
++ def test_flavor_unset(self):
++ arglist = [
++ '--property', 'property',
++ 'baremetal'
++ ]
++ verifylist = [
++ ('property', ['property']),
++ ('flavor', 'baremetal'),
++ ]
++
++ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
++
++ columns, data = self.cmd.take_action(parsed_args)
++
++ self.flavors_mock.find.assert_called_with(name='baremetal')
++
++ self.assertEqual('properties', columns[2])
++ self.assertNotIn('property', data[2])
+diff --git a/setup.cfg b/setup.cfg
+index 444981d..91effc9 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -65,6 +65,8 @@ openstack.compute.v2 =
+ flavor_delete = openstackclient.compute.v2.flavor:DeleteFlavor
+ flavor_list = openstackclient.compute.v2.flavor:ListFlavor
+ flavor_show = openstackclient.compute.v2.flavor:ShowFlavor
++ flavor_set = openstackclient.compute.v2.flavor:SetFlavor
++ flavor_unset = openstackclient.compute.v2.flavor:UnsetFlavor
+ host_list = openstackclient.compute.v2.host:ListHost
+ host_show = openstackclient.compute.v2.host:ShowHost
+ hypervisor_list = openstackclient.compute.v2.hypervisor:ListHypervisor
diff --git a/0001-Remove-runtime-dependency-on-python-pbr.patch b/0001-Remove-runtime-dependency-on-python-pbr.patch
deleted file mode 100644
index 6d37def..0000000
--- a/0001-Remove-runtime-dependency-on-python-pbr.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From a45ab368b57891aaa6d6152ec296021dc8aa3e52 Mon Sep 17 00:00:00 2001
-From: Jakub Ruzicka <jruzicka at redhat.com>
-Date: Tue, 8 Apr 2014 15:50:33 +0200
-Subject: [PATCH] Remove runtime dependency on python-pbr
-
-Also remove pbr/pkg_resources requirements handling.
-
-ERROR: openstackclient.shell Exception raised: \
- (pycrypto 2.0.1 (/usr/lib64/python2.6/site-packages), Requirement.parse('pycrypto>=2.6'))
-
-DO NOT WANT
----
- openstackclient/__init__.py | 8 +-------
- setup.py | 1 -
- 2 files changed, 1 insertion(+), 8 deletions(-)
-
-diff --git a/openstackclient/__init__.py b/openstackclient/__init__.py
-index 89deee3..b55482b 100644
---- a/openstackclient/__init__.py
-+++ b/openstackclient/__init__.py
-@@ -13,10 +13,4 @@
-
- __all__ = ['__version__']
-
--import pbr.version
--
--version_info = pbr.version.VersionInfo('python-openstackclient')
--try:
-- __version__ = version_info.version_string()
--except AttributeError:
-- __version__ = None
-+__version__ = 'REDHATOPENSTACKCLIENTVERSION'
-diff --git a/setup.py b/setup.py
-index 7363757..09230a0 100644
---- a/setup.py
-+++ b/setup.py
-@@ -26,5 +26,4 @@ except ImportError:
- pass
-
- setuptools.setup(
-- setup_requires=['pbr'],
- pbr=True)
diff --git a/python-openstackclient.spec b/python-openstackclient.spec
index 16b4929..efbaf61 100644
--- a/python-openstackclient.spec
+++ b/python-openstackclient.spec
@@ -1,14 +1,17 @@
Name: python-openstackclient
Version: 1.0.3
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: OpenStack Command-line Client
Group: Development/Languages
License: ASL 2.0
-URL: http://github.com/openstack/python-openstackclient
+URL: http://github.com/openstack/%{name}
Source0: http://pypi.python.org/packages/source/p/%{name}/%{name}-%{version}.tar.gz
-Patch0001: 0001-Remove-runtime-dependency-on-python-pbr.patch
+#
+# patches_base=+1
+#
+Patch0001: 0001-Add-the-ability-to-set-and-unset-flavor-properties.patch
BuildArch: noarch
@@ -19,6 +22,7 @@ BuildRequires: python-d2to1
BuildRequires: python-oslo-sphinx
BuildRequires: git
+Requires: python-pbr
Requires: python-babel
Requires: python-cliff
Requires: python-crypto
@@ -67,9 +71,6 @@ git add .
git commit -a -q -m "%{version} baseline"
git am %{patches}
-# We provide version like this in order to remove runtime dep on pbr
-sed -i s/REDHATOPENSTACKCLIENTVERSION/%{version}/ openstackclient/__init__.py
-
# We handle requirements ourselves, pkg_resources only bring pain
rm -rf requirements.txt test-requirements.txt
@@ -97,16 +98,23 @@ install -p -D -m 644 man/openstack.1 %{buildroot}%{_mandir}/man1/openstack.1
rm -fr html/.doctrees html/.buildinfo
%files
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%{_bindir}/openstack
%{python_sitelib}/openstackclient
%{python_sitelib}/*.egg-info
%{_mandir}/man1/openstack.1*
%files doc
+%license LICENSE
%doc html
%changelog
+* Wed Apr 29 2015 Jakub Ruzicka <jruzicka at redhat.com> 1.0.3-2
+- Give up nuking pbr
+- Add the ability to set and unset flavor properties
+- Use %license
+
* Tue Mar 31 2015 Jakub Ruzicka <jruzicka at redhat.com> 1.0.3-1
- Update to upstream 1.0.3
--
cgit v0.10.2
http://pkgs.fedoraproject.org/cgit/python-openstackclient.git/commit/?h=master&id=97574a72b6e717f53e7781bf35248a0b63a01445
More information about the scm-commits
mailing list