Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / qa / tasks / populate_rbd_pool.py
1 """
2 Populate rbd pools
3 """
4 import contextlib
5 import logging
6
7 log = logging.getLogger(__name__)
8
9 @contextlib.contextmanager
10 def task(ctx, config):
11     """
12     Populate <num_pools> pools with prefix <pool_prefix> with <num_images>
13     rbd images at <num_snaps> snaps
14
15     The config could be as follows::
16
17         populate_rbd_pool:
18           client: <client>
19           pool_prefix: foo
20           num_pools: 5
21           num_images: 10
22           num_snaps: 3
23           image_size: 10737418240
24     """
25     if config is None:
26         config = {}
27     client = config.get("client", "client.0")
28     pool_prefix = config.get("pool_prefix", "foo")
29     num_pools = config.get("num_pools", 2)
30     num_images = config.get("num_images", 20)
31     num_snaps = config.get("num_snaps", 4)
32     image_size = config.get("image_size", 100)
33     write_size = config.get("write_size", 1024*1024)
34     write_threads = config.get("write_threads", 10)
35     write_total_per_snap = config.get("write_total_per_snap", 1024*1024*30)
36
37     (remote,) = ctx.cluster.only(client).remotes.iterkeys()
38
39     for poolid in range(num_pools):
40         poolname = "%s-%s" % (pool_prefix, str(poolid))
41         log.info("Creating pool %s" % (poolname,))
42         ctx.managers['ceph'].create_pool(poolname)
43         for imageid in range(num_images):
44             imagename = "rbd-%s" % (str(imageid),)
45             log.info("Creating imagename %s" % (imagename,))
46             remote.run(
47                 args = [
48                     "rbd",
49                     "create",
50                     imagename,
51                     "--image-format", "1",
52                     "--size", str(image_size),
53                     "--pool", str(poolname)])
54             def bench_run():
55                 remote.run(
56                     args = [
57                         "rbd",
58                         "bench-write",
59                         imagename,
60                         "--pool", poolname,
61                         "--io-size", str(write_size),
62                         "--io-threads", str(write_threads),
63                         "--io-total", str(write_total_per_snap),
64                         "--io-pattern", "rand"])
65             log.info("imagename %s first bench" % (imagename,))
66             bench_run()
67             for snapid in range(num_snaps):
68                 snapname = "snap-%s" % (str(snapid),)
69                 log.info("imagename %s creating snap %s" % (imagename, snapname))
70                 remote.run(
71                     args = [
72                         "rbd", "snap", "create",
73                         "--pool", poolname,
74                         "--snap", snapname,
75                         imagename
76                         ])
77                 bench_run()
78
79     try:
80         yield
81     finally:
82         log.info('done')