]> git.proxmox.com Git - ceph.git/blame - ceph/src/python-common/ceph/deployment/translate.py
import 15.2.0 Octopus source
[ceph.git] / ceph / src / python-common / ceph / deployment / translate.py
CommitLineData
9f95a23c
TL
1import logging
2
3try:
4 from typing import Optional
5except ImportError:
6 pass
7
8from ceph.deployment.drive_group import DriveGroupSpec
9from ceph.deployment.drive_selection.selector import DriveSelection
10
11logger = logging.getLogger(__name__)
12
13
14class to_ceph_volume(object):
15
16 def __init__(self,
17 spec, # type: DriveGroupSpec
18 selection # type: DriveSelection
19 ):
20
21 self.spec = spec
22 self.selection = selection
23
24 def run(self):
25 # type: () -> Optional[str]
26 """ Generate ceph-volume commands based on the DriveGroup filters """
27 data_devices = [x.path for x in self.selection.data_devices()]
28 db_devices = [x.path for x in self.selection.db_devices()]
29 wal_devices = [x.path for x in self.selection.wal_devices()]
30 journal_devices = [x.path for x in self.selection.journal_devices()]
31
32 if not data_devices:
33 return None
34
35 if self.spec.objectstore == 'filestore':
36 cmd = "lvm batch --no-auto"
37
38 cmd += " {}".format(" ".join(data_devices))
39
40 if self.spec.journal_size:
41 cmd += " --journal-size {}".format(self.spec.journal_size)
42
43 if journal_devices:
44 cmd += " --journal-devices {}".format(
45 ' '.join(journal_devices))
46
47 cmd += " --filestore"
48
49 # HORRIBLE HACK
50 if self.spec.objectstore == 'bluestore' and \
51 not self.spec.encrypted and \
52 not self.spec.osds_per_device and \
53 len(data_devices) == 1 and \
54 not db_devices and \
55 not wal_devices:
56 cmd = "lvm prepare --bluestore --data %s --no-systemd" % (' '.join(data_devices))
57 return cmd
58
59 if self.spec.objectstore == 'bluestore':
60
61 cmd = "lvm batch --no-auto {}".format(" ".join(data_devices))
62
63 if db_devices:
64 cmd += " --db-devices {}".format(" ".join(db_devices))
65
66 if wal_devices:
67 cmd += " --wal-devices {}".format(" ".join(wal_devices))
68
69 if self.spec.block_wal_size:
70 cmd += " --block-wal-size {}".format(self.spec.block_wal_size)
71
72 if self.spec.block_db_size:
73 cmd += " --block-db-size {}".format(self.spec.block_db_size)
74
75 if self.spec.encrypted:
76 cmd += " --dmcrypt"
77
78 if self.spec.osds_per_device:
79 cmd += " --osds-per-device {}".format(self.spec.osds_per_device)
80
81 cmd += " --yes"
82 cmd += " --no-systemd"
83
84 return cmd