]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-deploy.git/commitdiff
[RM-15016] Fixes related to changes in argparse's behavior
authorOleh Prypin <oleh@pryp.in>
Mon, 23 May 2016 17:26:40 +0000 (20:26 +0300)
committerOleh Prypin <oleh@pryp.in>
Thu, 9 Jun 2016 12:29:03 +0000 (15:29 +0300)
* No error when passing an incomplete command:
  http://bugs.python.org/issue9253#msg186387
* Different error message for too few arguments
* Different output stream for version number

Signed-off-by: Oleh Prypin <oleh@pryp.in>
25 files changed:
ceph_deploy/calamari.py
ceph_deploy/cli.py
ceph_deploy/config.py
ceph_deploy/mds.py
ceph_deploy/mon.py
ceph_deploy/osd.py
ceph_deploy/rgw.py
ceph_deploy/tests/parser/test_admin.py
ceph_deploy/tests/parser/test_calamari.py
ceph_deploy/tests/parser/test_config.py
ceph_deploy/tests/parser/test_disk.py
ceph_deploy/tests/parser/test_gatherkeys.py
ceph_deploy/tests/parser/test_install.py
ceph_deploy/tests/parser/test_main.py
ceph_deploy/tests/parser/test_mds.py
ceph_deploy/tests/parser/test_new.py
ceph_deploy/tests/parser/test_osd.py
ceph_deploy/tests/parser/test_pkg.py
ceph_deploy/tests/parser/test_purge.py
ceph_deploy/tests/parser/test_purgedata.py
ceph_deploy/tests/parser/test_repo.py
ceph_deploy/tests/parser/test_rgw.py
ceph_deploy/tests/parser/test_uninstall.py
ceph_deploy/tests/test_cli_mon.py
ceph_deploy/tests/util.py

index f9f846547206a38b778c70db785ffd257843638b..8bece0bcb6636a8f72049073052e8e0fe968bca2 100644 (file)
@@ -85,6 +85,7 @@ def make(parser):
     (http://ceph.com/ceph-deploy/docs/conf.html)
     """
     calamari_parser = parser.add_subparsers(dest='subcommand')
+    calamari_parser.required = True
 
     calamari_connect = calamari_parser.add_parser(
         'connect',
index 9f325f5404b45f66b2115470cd7018078a0da0ba..4d84ae36de8c1fffca4250fb620ddb02b6d330e4 100644 (file)
@@ -84,6 +84,7 @@ def get_parser():
         metavar='COMMAND',
         help='description',
         )
+    sub.required = True
     entry_points = [
         (ep.name, ep.load())
         for ep in pkg_resources.iter_entry_points('ceph_deploy.cli')
@@ -103,6 +104,7 @@ def get_parser():
         # flag if the default release is being used
         p.set_defaults(default_release=False)
         fn(p)
+        p.required = True
     parser.set_defaults(
         cluster='ceph',
         )
index 93b261ad8e1fd4ef92980f16191eed5ed56dd527..1f85ed7dd165d1c393f0137619364a64f60b7b03 100644 (file)
@@ -83,6 +83,7 @@ def make(parser):
     Copy ceph.conf to/from remote host(s)
     """
     config_parser = parser.add_subparsers(dest='subcommand')
+    config_parser.required = True
 
     config_push = config_parser.add_parser(
         'push',
index 5e8382854ac1cdec18b3986e547f0a0341db1ef1..2ea73827163ff3eb6d55a9511f758f4c5129bdc7 100644 (file)
@@ -230,6 +230,7 @@ def make(parser):
     Ceph MDS daemon management
     """
     mds_parser = parser.add_subparsers(dest='subcommand')
+    mds_parser.required = True
 
     mds_create = mds_parser.add_parser(
         'create',
index 03eeff2b64b5dcbfb7e02f52678beb8dbd7a95cc..12f4a725198d71f882022ac13b908d69e480a923 100644 (file)
@@ -480,6 +480,7 @@ def make(parser):
     parser.formatter_class = ToggleRawTextHelpFormatter
 
     mon_parser = parser.add_subparsers(dest='subcommand')
+    mon_parser.required = True
 
     mon_add = mon_parser.add_parser(
         'add',
index 3a01d945f3531eaff94049e390f24e3c0a100ca1..0681a66a9023bd9e885e8a146b5ee786776c0aa4 100644 (file)
@@ -685,6 +685,7 @@ def make(parser):
     parser.description = sub_command_help
 
     osd_parser = parser.add_subparsers(dest='subcommand')
+    osd_parser.required = True
 
     osd_list = osd_parser.add_parser(
         'list',
@@ -806,6 +807,7 @@ def make_disk(parser):
     Manage disks on a remote host.
     """
     disk_parser = parser.add_subparsers(dest='subcommand')
+    disk_parser.required = True
 
     disk_zap = disk_parser.add_parser(
         'zap',
index 0fe75bc9a3186d84b69cb3bd39eeb731aa84dd33..e9a1fe3d6d56df0db13302d7d6f1affb9c7fdca9 100644 (file)
@@ -221,6 +221,7 @@ def make(parser):
     Ceph RGW daemon management
     """
     rgw_parser = parser.add_subparsers(dest='subcommand')
+    rgw_parser.required = True
     rgw_create = rgw_parser.add_parser(
         'create',
         help='Create an RGW instance'
index 7b9be206dd193639bfa9eaa6fb0638e503f2fe76..a86fa8e93466e207f7e477d2e911a9c03971df5d 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserAdmin(object):
@@ -20,7 +21,7 @@ class TestParserAdmin(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('admin'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_admin_one_host(self):
         args = self.parser.parse_args('admin host1'.split())
index 0a58d5748cc8faf0f9f8b9c80589b328f2617c10..ee97adb0c1cf330fd64238088333797968bbbff8 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserCalamari(object):
@@ -28,7 +29,7 @@ class TestParserCalamari(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('calamari connect'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_calamari_connect_one_host(self):
         args = self.parser.parse_args('calamari connect host1'.split())
index 41fe9491af0946f4c3185f4c85f008bf92a4d366..74ccb02d04b1858562fa10d65b6856ef72af4d77 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 SUBCMDS_WITH_ARGS = ['push', 'pull']
 
@@ -32,7 +33,7 @@ class TestParserConfig(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('config push'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_config_push_one_host(self):
         args = self.parser.parse_args('config push host1'.split())
@@ -47,7 +48,7 @@ class TestParserConfig(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('config pull'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_config_pull_one_host(self):
         args = self.parser.parse_args('config pull host1'.split())
index fa25423d06ca04cc413817ce91c0e5e6db13e89f..679d5e3145d6da4ccb8fdf6cbe8212d032473fff 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 SUBCMDS_WITH_ARGS = ['list', 'prepare', 'activate', 'zap']
 
@@ -38,7 +39,7 @@ class TestParserDisk(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('disk list'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_disk_list_single_host(self):
         args = self.parser.parse_args('disk list host1'.split())
@@ -99,7 +100,7 @@ class TestParserDisk(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('disk prepare'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_disk_prepare_single_host(self):
         args = self.parser.parse_args('disk prepare host1:sdb'.split())
@@ -122,7 +123,7 @@ class TestParserDisk(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('disk activate'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_disk_activate_single_host(self):
         args = self.parser.parse_args('disk activate host1:sdb1'.split())
@@ -145,7 +146,7 @@ class TestParserDisk(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('disk zap'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_disk_zap_single_host(self):
         args = self.parser.parse_args('disk zap host1:sdb'.split())
index c71cc30111d54434e04b90eecff5913076139a4e..1dcafcc130c0356ab056cc8c8ac4f5c237c842ac 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserGatherKeys(object):
@@ -20,7 +21,7 @@ class TestParserGatherKeys(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('gatherkeys'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_gatherkeys_one_host(self):
         args = self.parser.parse_args('gatherkeys host1'.split())
index 190a984331f7c04e27606dc444cfd3060f6bf11f..cb6284e70f23f0dd6a54336560e0618a535ce748 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 COMP_FLAGS = [
     'mon', 'mds', 'rgw', 'osd', 'common', 'all'
@@ -24,7 +25,7 @@ class TestParserInstall(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('install'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_install_one_host(self):
         args = self.parser.parse_args('install host1'.split())
index 1993c84805eafde2b4a994a204276fd5b8269cf7..0b1a0470f067bccc41bc3d7a1d77cacd66b8ed5f 100644 (file)
@@ -2,6 +2,8 @@ import pytest
 
 import ceph_deploy
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
+
 
 SUBCMDS_WITH_ARGS = [
     'new', 'install', 'rgw', 'mds', 'mon', 'gatherkeys', 'disk', 'osd',
@@ -41,7 +43,7 @@ class TestParserMain(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('--version'.split())
         out, err = capsys.readouterr()
-        assert err.strip() == ceph_deploy.__version__
+        assert ceph_deploy.__version__ in (out.strip(), err.strip())
 
     def test_custom_username(self):
         args = self.parser.parse_args('--username trhoden forgetkeys'.split())
@@ -87,7 +89,7 @@ class TestParserMain(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args(['%s' % cmd])
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
         assert 'invalid choice' not in err
 
     @pytest.mark.parametrize('cmd', SUBCMDS_WITHOUT_ARGS)
index ec9a02bc346a60696b55c0d88f687408cec02cac..0b81c383643e7af873dea8704802a14061c66c07 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserMDS(object):
@@ -20,7 +21,7 @@ class TestParserMDS(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('mds create'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_mds_create_one_host(self):
         args = self.parser.parse_args('mds create host1'.split())
index 7269e3c450c159305a4d97c46ff90775276bc3c0..9395babd654b4c6ff8f4f9120c33faa3060ba338 100644 (file)
@@ -3,6 +3,7 @@ from mock import patch
 
 from ceph_deploy.cli import get_parser
 from ceph_deploy.tests.fakes import fake_arg_val_hostname
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 @patch('ceph_deploy.util.arg_validators.Hostname.__call__', fake_arg_val_hostname)
 class TestParserNew(object):
@@ -70,7 +71,7 @@ class TestParserNew(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('new'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_new_one_mon(self):
         hostnames = ['test1']
index e994860f80a531026202ad6782581326fabef4da..17efeb54242f2a38c42720d402081105ad9904df 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 SUBCMDS_WITH_ARGS = ['list', 'create', 'prepare', 'activate']
 
@@ -38,7 +39,7 @@ class TestParserOSD(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('osd list'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_osd_list_single_host(self):
         args = self.parser.parse_args('osd list host1'.split())
@@ -61,7 +62,7 @@ class TestParserOSD(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('osd create'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_osd_create_single_host(self):
         args = self.parser.parse_args('osd create host1:sdb'.split())
@@ -160,7 +161,7 @@ class TestParserOSD(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('osd prepare'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_osd_prepare_single_host(self):
         args = self.parser.parse_args('osd prepare host1:sdb'.split())
@@ -183,7 +184,7 @@ class TestParserOSD(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('osd activate'.split())
         out, err = capsys.readouterr()
-        assert 'too few arguments' in err
+        assert_too_few_arguments(err)
 
     def test_osd_activate_single_host(self):
         args = self.parser.parse_args('osd activate host1:sdb1'.split())
index 6259e589f4331bd88332916d32470696db477f78..9061a68b7f5cf4b92bade563d9099e4639896ee0 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserPkg(object):
@@ -20,7 +21,7 @@ class TestParserPkg(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('pkg --install pkg1'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_pkg_install_one_host(self):
         args = self.parser.parse_args('pkg --install pkg1 host1'.split())
@@ -41,7 +42,7 @@ class TestParserPkg(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('pkg --remove pkg1'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_pkg_remove_one_host(self):
         args = self.parser.parse_args('pkg --remove pkg1 host1'.split())
index a241892597448f3542dc964ef7ee48a1e7eafefa..8dcb34897ecb74b7970d6ebe89e1fcf0d34f3bde 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserPurge(object):
@@ -20,7 +21,7 @@ class TestParserPurge(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('purge'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_purge_one_host(self):
         args = self.parser.parse_args('purge host1'.split())
index 4d30fa8218007ca1a4b0ba063bd5e7ef3a1a268a..dadef2b9a0caf522978d42d77346b149251c7e1b 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserPurgeData(object):
@@ -20,7 +21,7 @@ class TestParserPurgeData(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('purgedata'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_purgedata_one_host(self):
         args = self.parser.parse_args('purgedata host1'.split())
index e56d888ea0a798dc0c2021d566d74b589e7d2519..a84901efb57242ff03e185141e20177091fc4168 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserRepo(object):
@@ -20,13 +21,13 @@ class TestParserRepo(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('repo'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_repo_host_required(self, capsys):
         with pytest.raises(SystemExit):
             self.parser.parse_args('repo ceph'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_repo_one_host(self):
         args = self.parser.parse_args('repo ceph host1'.split())
index 69adb57d8cf6a11da083e11f804792c0b4bdc7ee..5cbf0a0025df10921b40d756e26c89c90c0df5bd 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserRGW(object):
@@ -20,7 +21,7 @@ class TestParserRGW(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('rgw create'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_rgw_create_one_host(self):
         args = self.parser.parse_args('rgw create host1'.split())
index 81fc70cdabf7107a0a7504a13849dae1565ece8a..30cd918b8258328f3355f77d877a5037a8ad5776 100644 (file)
@@ -1,6 +1,7 @@
 import pytest
 
 from ceph_deploy.cli import get_parser
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 class TestParserUninstall(object):
@@ -20,7 +21,7 @@ class TestParserUninstall(object):
         with pytest.raises(SystemExit):
             self.parser.parse_args('uninstall'.split())
         out, err = capsys.readouterr()
-        assert "error: too few arguments" in err
+        assert_too_few_arguments(err)
 
     def test_uninstall_one_host(self):
         args = self.parser.parse_args('uninstall host1'.split())
index 467a2263515ef05c656eeadfab9f5ba01c7b508f..994868104d9db7f48195d4b9d16d3141a5cd8e8a 100644 (file)
@@ -5,6 +5,7 @@ from mock import Mock, patch
 
 from ceph_deploy.cli import _main as main
 from ceph_deploy.tests.directory import directory
+from ceph_deploy.tests.util import assert_too_few_arguments
 
 
 #TODO: This test does check that things fail if the .conf file is missing
@@ -16,7 +17,7 @@ def test_bad_no_conf(tmpdir, cli):
             ) as p:
             result = p.stderr.read().decode('utf-8')
     assert 'usage: ceph-deploy' in result
-    assert 'too few arguments' in result
+    assert_too_few_arguments(result)
     assert err.value.status == 2
 
 
index 2513de637708e7762fa7e5c9dd9c5836d9cbb8a0..50932dac4bb168d8764aaa95a64f5dd8ea7e3938 100644 (file)
@@ -26,3 +26,8 @@ class Empty(object):
     def __init__(self, **kw):
         for k, v in kw.items():
             setattr(self, k, v)
+
+
+def assert_too_few_arguments(err):
+    assert ("error: too few arguments" in err or
+            "error: the following argument" in err)