]>
Commit | Line | Data |
---|---|---|
9f95a23c TL |
1 | import logging |
2 | ||
3 | try: | |
1911f103 | 4 | from typing import Optional, List |
9f95a23c TL |
5 | except ImportError: |
6 | pass | |
7 | ||
9f95a23c TL |
8 | from ceph.deployment.drive_selection.selector import DriveSelection |
9 | ||
10 | logger = logging.getLogger(__name__) | |
11 | ||
12 | ||
f6b5b4d7 | 13 | # TODO refactor this to a DriveSelection method |
9f95a23c TL |
14 | class to_ceph_volume(object): |
15 | ||
16 | def __init__(self, | |
1911f103 TL |
17 | selection, # type: DriveSelection |
18 | osd_id_claims=None, # type: Optional[List[str]] | |
19 | preview=False # type: bool | |
9f95a23c TL |
20 | ): |
21 | ||
9f95a23c | 22 | self.selection = selection |
f6b5b4d7 | 23 | self.spec = selection.spec |
1911f103 TL |
24 | self.preview = preview |
25 | self.osd_id_claims = osd_id_claims | |
9f95a23c TL |
26 | |
27 | def run(self): | |
33c7a0ef | 28 | # type: () -> List[str] |
9f95a23c TL |
29 | """ Generate ceph-volume commands based on the DriveGroup filters """ |
30 | data_devices = [x.path for x in self.selection.data_devices()] | |
31 | db_devices = [x.path for x in self.selection.db_devices()] | |
32 | wal_devices = [x.path for x in self.selection.wal_devices()] | |
33 | journal_devices = [x.path for x in self.selection.journal_devices()] | |
34 | ||
35 | if not data_devices: | |
33c7a0ef | 36 | return [] |
9f95a23c | 37 | |
33c7a0ef | 38 | cmds: List[str] = [] |
20effc67 TL |
39 | if self.spec.method == 'raw': |
40 | assert self.spec.objectstore == 'bluestore' | |
33c7a0ef TL |
41 | # ceph-volume raw prepare only support 1:1 ratio of data to db/wal devices |
42 | if data_devices and db_devices: | |
43 | if len(data_devices) != len(db_devices): | |
44 | raise ValueError('Number of data devices must match number of ' | |
45 | 'db devices for raw mode osds') | |
46 | if data_devices and wal_devices: | |
47 | if len(data_devices) != len(wal_devices): | |
48 | raise ValueError('Number of data devices must match number of ' | |
49 | 'wal devices for raw mode osds') | |
50 | # for raw prepare each data device needs its own prepare command | |
51 | dev_counter = 0 | |
52 | while dev_counter < len(data_devices): | |
53 | cmd = "raw prepare --bluestore" | |
54 | cmd += " --data {}".format(data_devices[dev_counter]) | |
55 | if db_devices: | |
56 | cmd += " --block.db {}".format(db_devices[dev_counter]) | |
57 | if wal_devices: | |
58 | cmd += " --block.wal {}".format(wal_devices[dev_counter]) | |
59 | cmds.append(cmd) | |
60 | dev_counter += 1 | |
20effc67 TL |
61 | |
62 | elif self.spec.objectstore == 'filestore': | |
33c7a0ef | 63 | # for lvm batch we can just do all devices in one command |
9f95a23c TL |
64 | cmd = "lvm batch --no-auto" |
65 | ||
66 | cmd += " {}".format(" ".join(data_devices)) | |
67 | ||
68 | if self.spec.journal_size: | |
69 | cmd += " --journal-size {}".format(self.spec.journal_size) | |
70 | ||
71 | if journal_devices: | |
72 | cmd += " --journal-devices {}".format( | |
73 | ' '.join(journal_devices)) | |
74 | ||
75 | cmd += " --filestore" | |
33c7a0ef | 76 | cmds.append(cmd) |
9f95a23c | 77 | |
20effc67 | 78 | elif self.spec.objectstore == 'bluestore': |
33c7a0ef | 79 | # for lvm batch we can just do all devices in one command |
9f95a23c TL |
80 | cmd = "lvm batch --no-auto {}".format(" ".join(data_devices)) |
81 | ||
82 | if db_devices: | |
83 | cmd += " --db-devices {}".format(" ".join(db_devices)) | |
84 | ||
85 | if wal_devices: | |
86 | cmd += " --wal-devices {}".format(" ".join(wal_devices)) | |
87 | ||
88 | if self.spec.block_wal_size: | |
89 | cmd += " --block-wal-size {}".format(self.spec.block_wal_size) | |
90 | ||
91 | if self.spec.block_db_size: | |
92 | cmd += " --block-db-size {}".format(self.spec.block_db_size) | |
33c7a0ef | 93 | cmds.append(cmd) |
9f95a23c | 94 | |
33c7a0ef TL |
95 | for i in range(len(cmds)): |
96 | if self.spec.encrypted: | |
97 | cmds[i] += " --dmcrypt" | |
9f95a23c | 98 | |
33c7a0ef TL |
99 | if self.spec.osds_per_device: |
100 | cmds[i] += " --osds-per-device {}".format(self.spec.osds_per_device) | |
9f95a23c | 101 | |
33c7a0ef TL |
102 | if self.spec.data_allocate_fraction: |
103 | cmds[i] += " --data-allocate-fraction {}".format(self.spec.data_allocate_fraction) | |
20effc67 | 104 | |
33c7a0ef TL |
105 | if self.osd_id_claims: |
106 | cmds[i] += " --osd-ids {}".format(" ".join(self.osd_id_claims)) | |
1911f103 | 107 | |
33c7a0ef TL |
108 | if self.spec.method != 'raw': |
109 | cmds[i] += " --yes" | |
110 | cmds[i] += " --no-systemd" | |
9f95a23c | 111 | |
33c7a0ef TL |
112 | if self.preview: |
113 | cmds[i] += " --report" | |
114 | cmds[i] += " --format json" | |
1911f103 | 115 | |
33c7a0ef | 116 | return cmds |