diff --git a/README.md b/README.md index 7f8e417c2fa2e0ff1fabe601612cfaeb6a35aba4..d9e393bc4fac4cc147131e39dc429ac484784e6a 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ to easily run in schedulers. cp examples/rwm-backups.conf rwm.conf rwm restic init -rwm backup_all +rwm backup-all rwm restic snapshots rwm restic mount /mnt/restore ``` @@ -89,22 +89,22 @@ Two S3 accounts in the same tenant are required (*admin*, *user1*) ``` # create storage cp examples/rwm-admin.conf admin.conf -rwm --confg admin.conf storage_list -rwm --confg admin.conf storage_create bucket1 user1 +rwm --confg admin.conf storage-list +rwm --confg admin.conf storage-create bucket1 user1 # do backups cp examples/rwm-backups.conf rwm.conf rwm restic init -rwm backup_all +rwm backup-all rwm restic snapshots rwm restic mount /mnt/restore # if storage is consistent, drop old object versions to reclaim storage space -rwm --confg admin.conf storage_drop_versions bucket1 +rwm --confg admin.conf storage-drop-versions bucket1 # if storage gets corrupted, state can be restored to other bucket -rwm --confg admin.conf storage_info bucket1 # select existing state file from here -rwm --confg admin.conf storage_restore_state bucket1 bucket1-restore rwm/state_[timestamp].json.gz +rwm --confg admin.conf storage-info bucket1 # select existing state file from here +rwm --confg admin.conf storage-restore-state bucket1 bucket1-restore rwm/state_[timestamp].json.gz ``` diff --git a/rwm.py b/rwm.py index 5cfc6cdfb556a88d28063562a653d4088a4c66fe..45aaf0bf62499a4f24c2a6633912ed171949f2c6 100755 --- a/rwm.py +++ b/rwm.py @@ -625,27 +625,27 @@ def parse_arguments(argv): backup_cmd_parser = subparsers.add_parser("backup", help="perform backup") backup_cmd_parser.add_argument("name", help="backup name") - _ = subparsers.add_parser("backup_all", help="run all backups in config") + _ = subparsers.add_parser("backup-all", help="run all backups in config") - storage_create_cmd_parser = subparsers.add_parser("storage_create", help="create policed storage bucked") + storage_create_cmd_parser = subparsers.add_parser("storage-create", help="create policed storage bucked") storage_create_cmd_parser.add_argument("bucket_name", help="bucket name") storage_create_cmd_parser.add_argument("target_username", help="user to be granted limited RW access") - storage_delete_cmd_parser = subparsers.add_parser("storage_delete", help="delete storage") + storage_delete_cmd_parser = subparsers.add_parser("storage-delete", help="delete storage") storage_delete_cmd_parser.add_argument("bucket_name", help="bucket name") - _ = subparsers.add_parser("storage_list", help="list storages") + _ = subparsers.add_parser("storage-list", help="list storages") - storage_info_cmd_parser = subparsers.add_parser("storage_info", help="show detailed storage info") + storage_info_cmd_parser = subparsers.add_parser("storage-info", help="show detailed storage info") storage_info_cmd_parser.add_argument("bucket_name", help="bucket name") storage_drop_versions_cmd_parser = subparsers.add_parser( - "storage_drop_versions", + "storage-drop-versions", help="reclaim storage space; drop any old object versions from bucket" ) storage_drop_versions_cmd_parser.add_argument("bucket_name", help="bucket name") - storage_restore_state_cmd_parser = subparsers.add_parser("storage_restore_state", help="restore bucketX stateX1 to bucketY") + storage_restore_state_cmd_parser = subparsers.add_parser("storage-restore-state", help="restore bucketX stateX1 to bucketY") storage_restore_state_cmd_parser.add_argument("source_bucket", help="source_bucket") storage_restore_state_cmd_parser.add_argument("target_bucket", help="target_bucket; should not exist") storage_restore_state_cmd_parser.add_argument("state", help="state object key in source bucket") @@ -684,21 +684,21 @@ def main(argv=None): # pylint: disable=too-many-branches if args.command == "backup": ret = rwmi.backup(args.name) logger.info("rwm backup finished with %s (ret %d)", "success" if ret == 0 else "errors", ret) - if args.command == "backup_all": + if args.command == "backup-all": ret = rwmi.backup_all() logger.info("rwm backup_all finished with %s (ret %d)", "success" if ret == 0 else "errors", ret) - if args.command == "storage_create": + if args.command == "storage-create": ret = rwmi.storage_create(args.bucket_name, args.target_username) - if args.command == "storage_delete": + if args.command == "storage-delete": ret = rwmi.storage_delete(args.bucket_name) - if args.command == "storage_list": + if args.command == "storage-list": ret = rwmi.storage_list() - if args.command == "storage_info": + if args.command == "storage-info": ret = rwmi.storage_info(args.bucket_name) - if args.command == "storage_drop_versions": + if args.command == "storage-drop-versions": ret = rwmi.storage_drop_versions(args.bucket_name) - if args.command == "storage_restore_state": + if args.command == "storage-restore-state": ret = rwmi.storage_restore_state(args.source_bucket, args.target_bucket, args.state) logger.debug("rwm finished with %s (ret %d)", "success" if ret == 0 else "errors", ret) diff --git a/tests/test_default.py b/tests/test_default.py index ff9c793fe68907f461b6021b126aff47d217d144..ef469babfe6ea7b86bcddcded0fe8c7b22bb85ef 100644 --- a/tests/test_default.py +++ b/tests/test_default.py @@ -28,37 +28,45 @@ def test_size_fmt(): assert size_fmt(10**25) == "8.3 YiB" +def _rwm_minconfig(args): + return rwm_main(["--config", "tests/rwmtest.conf"] + args) + + def test_main(): """test main""" - def rwm_main_minconfig(args): - return rwm_main(["--config", "tests/rwmtest.conf"] + args) - - assert rwm_main_minconfig(["version"]) == 0 + assert _rwm_minconfig(["version"]) == 0 # command branches mock_proc = Mock(return_value=CompletedProcess(args='dummy', returncode=0)) mock_ok = Mock(return_value=0) with patch.object(rwm.RWM, "aws_cmd", mock_proc): - assert rwm_main_minconfig(["aws", "dummy"]) == 0 + assert _rwm_minconfig(["aws", "dummy"]) == 0 + with patch.object(rwm.RWM, "restic_cmd", mock_proc): - assert rwm_main_minconfig(["restic", "dummy"]) == 0 + assert _rwm_minconfig(["restic", "dummy"]) == 0 with patch.object(rwm.RWM, "backup", mock_ok): - assert rwm_main_minconfig(["backup", "dummy"]) == 0 + assert _rwm_minconfig(["backup", "dummy"]) == 0 + with patch.object(rwm.RWM, "backup_all", mock_ok): - assert rwm_main_minconfig(["backup_all"]) == 0 + assert _rwm_minconfig(["backup-all"]) == 0 with patch.object(rwm.RWM, "storage_create", mock_ok): - assert rwm_main_minconfig(["storage_create", "bucket", "user"]) == 0 + assert _rwm_minconfig(["storage-create", "bucket", "user"]) == 0 + with patch.object(rwm.RWM, "storage_delete", mock_ok): - assert rwm_main_minconfig(["storage_delete", "bucket"]) == 0 + assert _rwm_minconfig(["storage-delete", "bucket"]) == 0 + with patch.object(rwm.RWM, "storage_list", mock_ok): - assert rwm_main_minconfig(["storage_list"]) == 0 + assert _rwm_minconfig(["storage-list"]) == 0 + with patch.object(rwm.RWM, "storage_info", mock_ok): - assert rwm_main_minconfig(["storage_info", "dummy"]) == 0 + assert _rwm_minconfig(["storage-info", "dummy"]) == 0 + with patch.object(rwm.RWM, "storage_drop_versions", mock_ok): - assert rwm_main_minconfig(["storage_drop_versions", "bucket"]) == 0 + assert _rwm_minconfig(["storage-drop-versions", "bucket"]) == 0 + with patch.object(rwm.RWM, "storage_restore_state", mock_ok): - assert rwm_main_minconfig(["storage_restore_state", "bucket", "bucket", "state"]) == 0 + assert _rwm_minconfig(["storage-restore-state", "bucket", "bucket", "state"]) == 0