Commit 6e4ea8fd authored by Pawel Kaminski's avatar Pawel Kaminski Committed by Darek Stojaczyk
Browse files

rpc.py: add --dry-run option to print the json request and exit

parent 5468acd8
Loading
Loading
Loading
Loading
+95 −79
Original line number Diff line number Diff line
#!/usr/bin/env python3

from rpc.client import print_dict, JSONRPCException
from rpc.client import print_dict, print_string, JSONRPCException
from rpc.helpers import deprecated_aliases

import logging
@@ -8,6 +8,7 @@ import argparse
import rpc
import sys
import shlex
import json

try:
    from shlex import quote
@@ -34,6 +35,8 @@ if __name__ == "__main__":
                        help='Set verbose mode to INFO', default="ERROR")
    parser.add_argument('--verbose', dest='verbose', choices=['DEBUG', 'INFO', 'ERROR'],
                        help="""Set verbose level. """)
    parser.add_argument('--dry_run', dest='dry_run', action='store_true', help="Display request and exit")
    parser.set_defaults(dry_run=False)
    subparsers = parser.add_subparsers(help='RPC methods', dest='called_rpc_name')

    def start_subsystem_init(args):
@@ -57,7 +60,7 @@ if __name__ == "__main__":
    p.set_defaults(func=rpc_get_methods)

    def get_spdk_version(args):
        print(rpc.get_spdk_version(args.client))
        print_string(rpc.get_spdk_version(args.client))

    p = subparsers.add_parser('get_spdk_version', help='Get SPDK version')
    p.set_defaults(func=get_spdk_version)
@@ -134,7 +137,7 @@ if __name__ == "__main__":
    p.set_defaults(func=set_bdev_options)

    def construct_compress_bdev(args):
        print(rpc.bdev.construct_compress_bdev(args.client,
        print_string(rpc.bdev.construct_compress_bdev(args.client,
                                                      base_bdev_name=args.base_bdev_name,
                                                      pm_path=args.pm_path,
                                                      comp_pmd=args.comp_pmd))
@@ -154,7 +157,7 @@ if __name__ == "__main__":
    p.set_defaults(func=delete_compress_bdev)

    def construct_crypto_bdev(args):
        print(rpc.bdev.construct_crypto_bdev(args.client,
        print_string(rpc.bdev.construct_crypto_bdev(args.client,
                                                    base_bdev_name=args.base_bdev_name,
                                                    name=args.name,
                                                    crypto_pmd=args.crypto_pmd,
@@ -176,7 +179,7 @@ if __name__ == "__main__":
    p.set_defaults(func=delete_crypto_bdev)

    def construct_ocf_bdev(args):
        print(rpc.bdev.construct_ocf_bdev(args.client,
        print_string(rpc.bdev.construct_ocf_bdev(args.client,
                                                 name=args.name,
                                                 mode=args.mode,
                                                 cache_bdev_name=args.cache_bdev_name,
@@ -216,7 +219,7 @@ if __name__ == "__main__":

    def construct_malloc_bdev(args):
        num_blocks = (args.total_size * 1024 * 1024) // args.block_size
        print(rpc.bdev.construct_malloc_bdev(args.client,
        print_string(rpc.bdev.construct_malloc_bdev(args.client,
                                                    num_blocks=int(num_blocks),
                                                    block_size=args.block_size,
                                                    name=args.name,
@@ -240,7 +243,7 @@ if __name__ == "__main__":

    def construct_null_bdev(args):
        num_blocks = (args.total_size * 1024 * 1024) // args.block_size
        print(rpc.bdev.construct_null_bdev(args.client,
        print_string(rpc.bdev.construct_null_bdev(args.client,
                                                  num_blocks=num_blocks,
                                                  block_size=args.block_size,
                                                  name=args.name,
@@ -264,7 +267,7 @@ if __name__ == "__main__":
    p.set_defaults(func=delete_null_bdev)

    def construct_aio_bdev(args):
        print(rpc.bdev.construct_aio_bdev(args.client,
        print_string(rpc.bdev.construct_aio_bdev(args.client,
                                                 filename=args.filename,
                                                 name=args.name,
                                                 block_size=args.block_size))
@@ -381,7 +384,7 @@ if __name__ == "__main__":
                if len(parts) != 2:
                    raise Exception('--config %s not in key=value form' % entry)
                config[parts[0]] = parts[1]
        print(rpc.bdev.construct_rbd_bdev(args.client,
        print_string(rpc.bdev.construct_rbd_bdev(args.client,
                                                 name=args.name,
                                                 user=args.user,
                                                 config=config,
@@ -409,7 +412,7 @@ if __name__ == "__main__":
    p.set_defaults(func=delete_rbd_bdev)

    def bdev_delay_create(args):
        print(rpc.bdev.bdev_delay_create(args.client,
        print_string(rpc.bdev.bdev_delay_create(args.client,
                                                base_bdev_name=args.base_bdev_name,
                                                name=args.name,
                                                avg_read_latency=args.avg_read_latency,
@@ -436,7 +439,7 @@ if __name__ == "__main__":
    p.set_defaults(func=bdev_delay_delete)

    def construct_error_bdev(args):
        print(rpc.bdev.construct_error_bdev(args.client,
        print_string(rpc.bdev.construct_error_bdev(args.client,
                                                   base_name=args.base_name))

    p = subparsers.add_parser('construct_error_bdev',
@@ -453,7 +456,7 @@ if __name__ == "__main__":
    p.set_defaults(func=delete_error_bdev)

    def construct_iscsi_bdev(args):
        print(rpc.bdev.construct_iscsi_bdev(args.client,
        print_string(rpc.bdev.construct_iscsi_bdev(args.client,
                                                   name=args.name,
                                                   url=args.url,
                                                   initiator_iqn=args.initiator_iqn))
@@ -474,7 +477,7 @@ if __name__ == "__main__":
    p.set_defaults(func=delete_iscsi_bdev)

    def construct_pmem_bdev(args):
        print(rpc.bdev.construct_pmem_bdev(args.client,
        print_string(rpc.bdev.construct_pmem_bdev(args.client,
                                                  pmem_file=args.pmem_file,
                                                  name=args.name))

@@ -492,7 +495,7 @@ if __name__ == "__main__":
    p.set_defaults(func=delete_pmem_bdev)

    def construct_passthru_bdev(args):
        print(rpc.bdev.construct_passthru_bdev(args.client,
        print_string(rpc.bdev.construct_passthru_bdev(args.client,
                                                      base_bdev_name=args.base_bdev_name,
                                                      name=args.name))

@@ -1093,7 +1096,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse

    # lvol
    def construct_lvol_store(args):
        print(rpc.lvol.construct_lvol_store(args.client,
        print_string(rpc.lvol.construct_lvol_store(args.client,
                                                   bdev_name=args.bdev_name,
                                                   lvs_name=args.lvs_name,
                                                   cluster_sz=args.cluster_sz,
@@ -1118,7 +1121,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
    p.set_defaults(func=rename_lvol_store)

    def construct_lvol_bdev(args):
        print(rpc.lvol.construct_lvol_bdev(args.client,
        print_string(rpc.lvol.construct_lvol_bdev(args.client,
                                                  lvol_name=args.lvol_name,
                                                  size=args.size * 1024 * 1024,
                                                  thin_provision=args.thin_provision,
@@ -1137,7 +1140,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
    p.set_defaults(func=construct_lvol_bdev)

    def snapshot_lvol_bdev(args):
        print(rpc.lvol.snapshot_lvol_bdev(args.client,
        print_string(rpc.lvol.snapshot_lvol_bdev(args.client,
                                                 lvol_name=args.lvol_name,
                                                 snapshot_name=args.snapshot_name))

@@ -1147,7 +1150,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
    p.set_defaults(func=snapshot_lvol_bdev)

    def clone_lvol_bdev(args):
        print(rpc.lvol.clone_lvol_bdev(args.client,
        print_string(rpc.lvol.clone_lvol_bdev(args.client,
                                              snapshot_name=args.snapshot_name,
                                              clone_name=args.clone_name))

@@ -1631,7 +1634,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
    p.set_defaults(func=construct_vhost_scsi_controller)

    def add_vhost_scsi_lun(args):
        print(rpc.vhost.add_vhost_scsi_lun(args.client,
        print_string(rpc.vhost.add_vhost_scsi_lun(args.client,
                                                  ctrlr=args.ctrlr,
                                                  scsi_target_num=args.scsi_target_num,
                                                  bdev_name=args.bdev_name))
@@ -1803,6 +1806,13 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
        if name in deprecated_aliases:
            print("{} is deprecated, use {} instead.".format(name, deprecated_aliases[name]), file=sys.stderr)

    class mock_client:
        def call(self, method, params=None):
            print("Request:\n" + json.dumps({"method": method, "params": params}, indent=2))

    def mock_print(arg):
        pass

    def call_rpc_func(args):
        args.func(args)
        check_called_name(args.called_rpc_name)
@@ -1824,6 +1834,12 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
                exit(1)

    args = parser.parse_args()
    if args.dry_run:
        args.client = mock_client()
        print_dict = mock_print
        print_string = mock_print
        print_array = mock_print
    else:
        args.client = rpc.client.JSONRPCClient(args.server_addr, args.port, args.timeout, log_level=getattr(logging, args.verbose.upper()))
    if hasattr(args, 'func'):
        try:
+4 −0
Original line number Diff line number Diff line
@@ -10,6 +10,10 @@ def print_dict(d):
    print(json.dumps(d, indent=2))


def print_string(s):
    print(json.dumps(s, indent=2).strip('"'))


class JSONRPCException(Exception):
    def __init__(self, message):
        self.message = message