]> git.proxmox.com Git - ceph.git/blame - ceph/src/ceph-volume/ceph_volume/devices/lvm/create.py
update sources to v12.2.3
[ceph.git] / ceph / src / ceph-volume / ceph_volume / devices / lvm / create.py
CommitLineData
d2e6a577
FG
1from __future__ import print_function
2from textwrap import dedent
b32b8144 3import logging
d2e6a577 4from ceph_volume.util import system
b32b8144
FG
5from ceph_volume import decorators, terminal
6from .common import create_parser, rollback_osd
d2e6a577
FG
7from .prepare import Prepare
8from .activate import Activate
9
b32b8144
FG
10logger = logging.getLogger(__name__)
11
d2e6a577
FG
12
13class Create(object):
14
15 help = 'Create a new OSD from an LVM device'
16
17 def __init__(self, argv):
18 self.argv = argv
19
20 @decorators.needs_root
21 def create(self, args):
22 if not args.osd_fsid:
23 args.osd_fsid = system.generate_uuid()
b32b8144
FG
24 prepare_step = Prepare([])
25 prepare_step.safe_prepare(args)
26 osd_id = prepare_step.osd_id
27 try:
28 # we try this for activate only when 'creating' an OSD, because a rollback should not
29 # happen when doing normal activation. For example when starting an OSD, systemd will call
30 # activate, which would never need to be rolled back.
31 Activate([]).activate(args)
32 except Exception:
33 logger.error('lvm activate was unable to complete, while creating the OSD')
34 logger.info('will rollback OSD ID creation')
35 rollback_osd(args, osd_id)
36 raise
37 terminal.success("ceph-volume lvm create successful for: %s" % args.data)
d2e6a577
FG
38
39 def main(self):
40 sub_command_help = dedent("""
41 Create an OSD by assigning an ID and FSID, registering them with the
42 cluster with an ID and FSID, formatting and mounting the volume, adding
43 all the metadata to the logical volumes using LVM tags, and starting
44 the OSD daemon.
45
d2e6a577
FG
46 Example calls for supported scenarios:
47
b5b8bbf5
FG
48 Filestore
49 ---------
d2e6a577
FG
50
51 Existing logical volume (lv) or device:
52
b5b8bbf5 53 ceph-volume lvm create --filestore --data {vg name/lv name} --journal /path/to/device
d2e6a577
FG
54
55 Or:
56
b5b8bbf5 57 ceph-volume lvm create --filestore --data {vg name/lv name} --journal {vg name/lv name}
d2e6a577
FG
58
59 """)
60 parser = create_parser(
61 prog='ceph-volume lvm create',
62 description=sub_command_help,
63 )
64 if len(self.argv) == 0:
65 print(sub_command_help)
66 return
67 args = parser.parse_args(self.argv)
3efd9988
FG
68 # Default to bluestore here since defaulting it in add_argument may
69 # cause both to be True
b32b8144 70 if not args.bluestore and not args.filestore:
3efd9988 71 args.bluestore = True
d2e6a577 72 self.create(args)