]> git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/devices/lvm/trigger.py
update sources to v12.1.3
[ceph.git] / ceph / src / ceph-volume / ceph_volume / devices / lvm / trigger.py
1 from __future__ import print_function
2 import argparse
3 from textwrap import dedent
4 from ceph_volume.exceptions import SuffixParsingError
5 from ceph_volume import decorators
6 from .activate import Activate
7
8
9 def parse_osd_id(string):
10 osd_id = string.split('-', 1)[0]
11 if not osd_id:
12 raise SuffixParsingError('OSD id', string)
13 if osd_id.isdigit():
14 return osd_id
15 raise SuffixParsingError('OSD id', string)
16
17
18 def parse_osd_uuid(string):
19 osd_id = '%s-' % parse_osd_id(string)
20 # remove the id first
21 osd_uuid = string.split(osd_id)[-1]
22 if not osd_uuid:
23 raise SuffixParsingError('OSD uuid', string)
24 return osd_uuid
25
26
27 class Trigger(object):
28
29 help = 'systemd helper to activate an OSD'
30
31 def __init__(self, argv):
32 self.argv = argv
33
34 @decorators.needs_root
35 def main(self):
36 sub_command_help = dedent("""
37 ** DO NOT USE DIRECTLY **
38 This tool is meant to help the systemd unit that knows about OSDs.
39
40 Proxy OSD activation to ``ceph-volume lvm activate`` by parsing the
41 input from systemd, detecting the UUID and ID associated with an OSD::
42
43 ceph-volume lvm trigger {SYSTEMD-DATA}
44
45 The systemd "data" is expected to be in the format of::
46
47 {OSD ID}-{OSD UUID}
48
49 The lvs associated with the OSD need to have been prepared previously,
50 so that all needed tags and metadata exist.
51 """)
52 parser = argparse.ArgumentParser(
53 prog='ceph-volume lvm trigger',
54 formatter_class=argparse.RawDescriptionHelpFormatter,
55 description=sub_command_help,
56 )
57
58 parser.add_argument(
59 'systemd_data',
60 metavar='SYSTEMD_DATA',
61 nargs='?',
62 help='Data from a systemd unit containing ID and UUID of the OSD, like asdf-lkjh-0'
63 )
64 if len(self.argv) == 0:
65 print(sub_command_help)
66 return
67 args = parser.parse_args(self.argv)
68 osd_id = parse_osd_id(args.systemd_data)
69 osd_uuid = parse_osd_uuid(args.systemd_data)
70 Activate([osd_id, osd_uuid]).main()