diff --git a/magnumclient/tests/test_shell_args.py b/magnumclient/tests/test_shell_args.py index 02155170..051a5635 100644 --- a/magnumclient/tests/test_shell_args.py +++ b/magnumclient/tests/test_shell_args.py @@ -423,6 +423,10 @@ class TestCommandLineArgument(utils.TestCase): @mock.patch('magnumclient.v1.replicationcontrollers.' 'ReplicationControllerManager.create') def test_rc_create_success(self, mock_create, mock_get): + mockbay = mock.MagicMock() + mockbay.status = "CREATE_COMPLETE" + mock_get.return_value = mockbay + self._test_arg_success('rc-create ' '--bay xxx ' '--manifest test ' diff --git a/magnumclient/tests/v1/test_shell.py b/magnumclient/tests/v1/test_shell.py index 8b2ff063..64784349 100644 --- a/magnumclient/tests/v1/test_shell.py +++ b/magnumclient/tests/v1/test_shell.py @@ -263,6 +263,7 @@ class ShellTest(base.TestCase): client_mock = mock.MagicMock() bay = mock.MagicMock() bay.uuid = 'uuid' + bay.status = 'CREATE_COMPLETE' client_mock.bays.get.return_value = bay args = mock.MagicMock() @@ -277,6 +278,24 @@ class ShellTest(base.TestCase): client_mock.rcs.create.assert_called_once_with( manifest_url=manifest_url, bay_uuid=bay.uuid) + def test_do_rc_create_with_bay_status_wrong(self): + client_mock = mock.MagicMock() + bay = mock.MagicMock() + bay.uuid = 'uuid' + bay.status = 'XXX' + client_mock.bays.get.return_value = bay + + args = mock.MagicMock() + manifest_url = "test_url" + args.manifest_url = manifest_url + bay_id_or_name = "xxx" + args.bay_id = bay_id_or_name + manifest = "test_manifest" + args.manifest = manifest + + shell.do_rc_create(client_mock, args) + self.assertFalse(client_mock.rcs.create.called) + def test_do_rc_update(self): client_mock = mock.MagicMock() args = mock.MagicMock() diff --git a/magnumclient/v1/shell.py b/magnumclient/v1/shell.py index c8f67663..fc33bf88 100644 --- a/magnumclient/v1/shell.py +++ b/magnumclient/v1/shell.py @@ -359,6 +359,12 @@ def do_rc_list(cs, args): def do_rc_create(cs, args): """Create a replication controller.""" bay = cs.bays.get(args.bay) + if bay.status not in ['CREATE_COMPLETE', 'UPDATE_COMPLETE']: + print('Bay status for %s is: %s. We can not create a ' + 'replication controller in bay until the status ' + 'is CREATE_COMPLETE or UPDATE_COMPLETE.' % + (args.bay, bay.status)) + return opts = {} opts['manifest_url'] = args.manifest_url