]>
Commit | Line | Data |
---|---|---|
1 | import logging | |
2 | ||
3 | try: | |
4 | from typing import Optional | |
5 | except ImportError: | |
6 | pass | |
7 | ||
8 | from ceph.deployment.drive_group import DriveGroupSpec | |
9 | from ceph.deployment.drive_selection.selector import DriveSelection | |
10 | ||
11 | logger = logging.getLogger(__name__) | |
12 | ||
13 | ||
14 | class 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 |