summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lower-constraints.txt4
-rw-r--r--openstackclient/compute/v2/server_group.py25
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server_group.py43
-rw-r--r--releasenotes/notes/story-2007727-69b705c561309742.yaml6
-rw-r--r--test-requirements.txt3
-rw-r--r--tox.ini16
6 files changed, 81 insertions, 16 deletions
diff --git a/lower-constraints.txt b/lower-constraints.txt
index 403ba4e0..d880484b 100644
--- a/lower-constraints.txt
+++ b/lower-constraints.txt
@@ -9,7 +9,7 @@ cliff==2.8.0
cmd2==0.8.0
contextlib2==0.4.0
coverage==4.0
-cryptography==2.1
+cryptography==2.7
ddt==1.0.1
debtcollector==1.2.0
decorator==4.4.1
@@ -110,7 +110,7 @@ python-watcherclient==2.5.0
python-zaqarclient==1.0.0
python-zunclient==3.6.0
pytz==2013.6
-PyYAML==3.12
+PyYAML==3.13
repoze.lru==0.7
requests-mock==1.2.0
requests==2.14.2
diff --git a/openstackclient/compute/v2/server_group.py b/openstackclient/compute/v2/server_group.py
index 1af6e28d..a3363244 100644
--- a/openstackclient/compute/v2/server_group.py
+++ b/openstackclient/compute/v2/server_group.py
@@ -56,12 +56,18 @@ class CreateServerGroup(command.ShowOne):
parser.add_argument(
'--policy',
metavar='<policy>',
+ choices=[
+ 'affinity',
+ 'anti-affinity',
+ 'soft-affinity',
+ 'soft-anti-affinity',
+ ],
default='affinity',
- help=_("Add a policy to <name> "
- "('affinity' or 'anti-affinity', "
- "defaults to 'affinity'). Specify --os-compute-api-version "
- "2.15 or higher for the 'soft-affinity' or "
- "'soft-anti-affinity' policy.")
+ help=_(
+ "Add a policy to <name> "
+ "Specify --os-compute-api-version 2.15 or higher for the "
+ "'soft-affinity' or 'soft-anti-affinity' policy."
+ )
)
return parser
@@ -69,9 +75,18 @@ class CreateServerGroup(command.ShowOne):
compute_client = self.app.client_manager.compute
info = {}
+ if parsed_args.policy in ('soft-affinity', 'soft-anti-affinity'):
+ if compute_client.api_version < api_versions.APIVersion('2.15'):
+ msg = _(
+ '--os-compute-api-version 2.15 or greater is required to '
+ 'support the %s policy'
+ )
+ raise exceptions.CommandError(msg % parsed_args.policy)
+
policy_arg = {'policies': [parsed_args.policy]}
if compute_client.api_version >= api_versions.APIVersion("2.64"):
policy_arg = {'policy': parsed_args.policy}
+
server_group = compute_client.server_groups.create(
name=parsed_args.name, **policy_arg)
diff --git a/openstackclient/tests/unit/compute/v2/test_server_group.py b/openstackclient/tests/unit/compute/v2/test_server_group.py
index 359cd2bd..bf0ea0ba 100644
--- a/openstackclient/tests/unit/compute/v2/test_server_group.py
+++ b/openstackclient/tests/unit/compute/v2/test_server_group.py
@@ -91,6 +91,28 @@ class TestServerGroupCreate(TestServerGroup):
def test_server_group_create(self):
arglist = [
+ '--policy', 'anti-affinity',
+ 'affinity_group',
+ ]
+ verifylist = [
+ ('policy', 'anti-affinity'),
+ ('name', 'affinity_group'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+ self.server_groups_mock.create.assert_called_once_with(
+ name=parsed_args.name,
+ policies=[parsed_args.policy],
+ )
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
+ def test_server_group_create_with_soft_policies(self):
+ self.app.client_manager.compute.api_version = api_versions.APIVersion(
+ '2.15')
+
+ arglist = [
'--policy', 'soft-anti-affinity',
'affinity_group',
]
@@ -108,6 +130,27 @@ class TestServerGroupCreate(TestServerGroup):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
+ def test_server_group_create_with_soft_policies_pre_v215(self):
+ self.app.client_manager.compute.api_version = api_versions.APIVersion(
+ '2.14')
+
+ arglist = [
+ '--policy', 'soft-anti-affinity',
+ 'affinity_group',
+ ]
+ verifylist = [
+ ('policy', 'soft-anti-affinity'),
+ ('name', 'affinity_group'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ ex = self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+ self.assertIn(
+ '--os-compute-api-version 2.15 or greater is required',
+ str(ex))
+
def test_server_group_create_v264(self):
self.app.client_manager.compute.api_version = api_versions.APIVersion(
'2.64')
diff --git a/releasenotes/notes/story-2007727-69b705c561309742.yaml b/releasenotes/notes/story-2007727-69b705c561309742.yaml
new file mode 100644
index 00000000..4a9eeae3
--- /dev/null
+++ b/releasenotes/notes/story-2007727-69b705c561309742.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ The ``openstack server group create`` command will now validate the policy
+ value requested with ``--policy``, restricting it to the valid values
+ allowed by given microversions.
diff --git a/test-requirements.txt b/test-requirements.txt
index 3dce687b..8b61a5c0 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,10 +1,8 @@
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-hacking>=2.0.0 # Apache-2.0
coverage!=4.4,>=4.0 # Apache-2.0
fixtures>=3.0.0 # Apache-2.0/BSD
-flake8-import-order>=0.13 # LGPLv3
oslotest>=3.2.0 # Apache-2.0
requests>=2.14.2 # Apache-2.0
requests-mock>=1.2.0 # Apache-2.0
@@ -12,6 +10,5 @@ stestr>=1.0.0 # Apache-2.0
testtools>=2.2.0 # MIT
tempest>=17.1.0 # Apache-2.0
osprofiler>=1.4.0 # Apache-2.0
-bandit!=1.6.0,>=1.1.0 # Apache-2.0
wrapt>=1.7.0 # BSD License
ddt>=1.0.1 # MIT
diff --git a/tox.ini b/tox.ini
index c0f6dd5d..bace7a4f 100644
--- a/tox.ini
+++ b/tox.ini
@@ -14,7 +14,7 @@ setenv = OS_STDOUT_CAPTURE=1
OS_STDERR_CAPTURE=1
OS_TEST_TIMEOUT=60
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt
commands = stestr run {posargs}
@@ -28,9 +28,13 @@ commands =
{toxinidir}/tools/fast8.sh
[testenv:pep8]
+deps =
+ hacking>=2.0.0,<4.0.0
+ bandit!=1.6.0,>=1.1.0
+ flake8-import-order>=0.13 # LGPLv3
commands =
- flake8
- bandit -r openstackclient -x tests -s B105,B106,B107,B401,B404,B603,B606,B607,B110,B605,B101
+ flake8
+ bandit -r openstackclient -x tests -s B105,B106,B107,B401,B404,B603,B606,B607,B110,B605,B101
[testenv:bandit]
# This command runs the bandit security linter against the openstackclient
@@ -88,7 +92,7 @@ commands =
[testenv:venv]
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
-r{toxinidir}/requirements.txt
-r{toxinidir}/doc/requirements.txt
commands = {posargs}
@@ -110,7 +114,7 @@ commands =
[testenv:docs]
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
-r{toxinidir}/doc/requirements.txt
commands =
sphinx-build -a -E -W -d doc/build/doctrees -b html doc/source doc/build/html
@@ -120,7 +124,7 @@ commands =
[testenv:releasenotes]
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
-r{toxinidir}/doc/requirements.txt
commands =
sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html