]> git.proxmox.com Git - ceph.git/blame - ceph/src/tools/rbd/ArgumentTypes.h
update sources to v12.1.0
[ceph.git] / ceph / src / tools / rbd / ArgumentTypes.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef CEPH_RBD_ARGUMENT_TYPES_H
5#define CEPH_RBD_ARGUMENT_TYPES_H
6
7#include "include/int_types.h"
8#include <set>
9#include <string>
10#include <vector>
11#include <boost/any.hpp>
12#include <boost/program_options.hpp>
13#include <boost/shared_ptr.hpp>
14
15namespace ceph { class Formatter; }
16
17namespace rbd {
18namespace argument_types {
19
20enum ArgumentModifier {
21 ARGUMENT_MODIFIER_NONE,
22 ARGUMENT_MODIFIER_SOURCE,
23 ARGUMENT_MODIFIER_DEST
24};
25
26enum SpecFormat {
27 SPEC_FORMAT_IMAGE,
28 SPEC_FORMAT_SNAPSHOT,
29 SPEC_FORMAT_IMAGE_OR_SNAPSHOT
30};
31
7c673cae
FG
32static const std::string SOURCE_PREFIX("source-");
33static const std::string DEST_PREFIX("dest-");
34
35// positional arguments
36static const std::string POSITIONAL_COMMAND_SPEC("positional-command-spec");
37static const std::string POSITIONAL_ARGUMENTS("positional-arguments");
38static const std::string IMAGE_SPEC("image-spec");
39static const std::string GROUP_SPEC("group-spec");
40static const std::string SNAPSHOT_SPEC("snap-spec");
41static const std::string IMAGE_OR_SNAPSHOT_SPEC("image-or-snap-spec");
42static const std::string JOURNAL_SPEC("journal-spec");
43static const std::string PATH_NAME("path-name");
44static const std::string IMAGE_ID("image-id");
45
46// optional arguments
47static const std::string CONFIG_PATH("conf");
48static const std::string POOL_NAME("pool");
49static const std::string DEST_POOL_NAME("dest-pool");
50static const std::string IMAGE_NAME("image");
51static const std::string DEST_IMAGE_NAME("dest");
52static const std::string GROUP_NAME("group");
53static const std::string DEST_GROUP_NAME("dest-group");
54static const std::string SNAPSHOT_NAME("snap");
55static const std::string DEST_SNAPSHOT_NAME("dest-snap");
56static const std::string JOURNAL_NAME("journal");
57static const std::string DEST_JOURNAL_NAME("dest-journal");
58static const std::string PATH("path");
59static const std::string FROM_SNAPSHOT_NAME("from-snap");
60static const std::string WHOLE_OBJECT("whole-object");
61
62static const std::string IMAGE_FORMAT("image-format");
63static const std::string IMAGE_NEW_FORMAT("new-format");
64static const std::string IMAGE_ORDER("order");
65static const std::string IMAGE_OBJECT_SIZE("object-size");
66static const std::string IMAGE_FEATURES("image-feature");
67static const std::string IMAGE_SHARED("image-shared");
68static const std::string IMAGE_SIZE("size");
69static const std::string IMAGE_STRIPE_UNIT("stripe-unit");
70static const std::string IMAGE_STRIPE_COUNT("stripe-count");
71static const std::string IMAGE_DATA_POOL("data-pool");
72static const std::string IMAGE_SPARSE_SIZE("sparse-size");
73
74static const std::string JOURNAL_OBJECT_SIZE("journal-object-size");
75static const std::string JOURNAL_SPLAY_WIDTH("journal-splay-width");
76static const std::string JOURNAL_POOL("journal-pool");
77
78static const std::string NO_PROGRESS("no-progress");
79static const std::string FORMAT("format");
80static const std::string PRETTY_FORMAT("pretty-format");
81static const std::string VERBOSE("verbose");
82static const std::string NO_ERROR("no-error");
83
84static const std::string DELAY("delay");
85
86static const std::string LIMIT("limit");
87
88static const std::set<std::string> SWITCH_ARGUMENTS = {
89 WHOLE_OBJECT, NO_PROGRESS, PRETTY_FORMAT, VERBOSE, NO_ERROR};
90
91struct ImageSize {};
92struct ImageOrder {};
93struct ImageObjectSize {};
94struct ImageFormat {};
95struct ImageNewFormat {};
96
97struct ImageFeatures {
98 static const std::map<uint64_t, std::string> FEATURE_MAPPING;
99
100 uint64_t features;
101};
102
103template <typename T>
104struct TypedValue {
105 T value;
106 TypedValue(const T& t) : value(t) {}
107};
108
109struct Format : public TypedValue<std::string> {
110 typedef boost::shared_ptr<ceph::Formatter> Formatter;
111
112 Format(const std::string &format) : TypedValue<std::string>(format) {}
113
114 Formatter create_formatter(bool pretty) const;
115};
116
117struct JournalObjectSize {};
118
119struct ExportFormat {};
120
121struct Secret {};
122
123void add_export_format_option(boost::program_options::options_description *opt);
124
125std::string get_name_prefix(ArgumentModifier modifier);
126std::string get_description_prefix(ArgumentModifier modifier);
127
128
129void add_special_pool_option(boost::program_options::options_description *opt,
130 std::string prefix);
131
132void add_pool_option(boost::program_options::options_description *opt,
133 ArgumentModifier modifier,
134 const std::string &desc_suffix = "");
135
136void add_image_option(boost::program_options::options_description *opt,
137 ArgumentModifier modifier,
138 const std::string &desc_suffix = "");
139
140void add_image_id_option(boost::program_options::options_description *opt,
141 const std::string &desc_suffix = "");
142
143void add_group_option(boost::program_options::options_description *opt,
144 ArgumentModifier modifier,
145 const std::string &desc_suffix = "");
146
147void add_snap_option(boost::program_options::options_description *opt,
148 ArgumentModifier modifier);
149
150void add_journal_option(boost::program_options::options_description *opt,
151 ArgumentModifier modifier,
152 const std::string &desc_suffix = "");
153
154void add_pool_options(boost::program_options::options_description *pos,
155 boost::program_options::options_description *opt);
156
157void add_image_spec_options(boost::program_options::options_description *pos,
158 boost::program_options::options_description *opt,
159 ArgumentModifier modifier);
160
161void add_group_spec_options(boost::program_options::options_description *pos,
162 boost::program_options::options_description *opt,
163 ArgumentModifier modifier);
164
165void add_snap_spec_options(boost::program_options::options_description *pos,
166 boost::program_options::options_description *opt,
167 ArgumentModifier modifier);
168
169void add_image_or_snap_spec_options(
170 boost::program_options::options_description *pos,
171 boost::program_options::options_description *opt,
172 ArgumentModifier modifier);
173
174void add_journal_spec_options(
175 boost::program_options::options_description *pos,
176 boost::program_options::options_description *opt,
177 ArgumentModifier modifier);
178
179void add_create_image_options(boost::program_options::options_description *opt,
180 bool include_format);
181
182void add_create_journal_options(
183 boost::program_options::options_description *opt);
184
185void add_size_option(boost::program_options::options_description *opt);
186
187void add_sparse_size_option(boost::program_options::options_description *opt);
188
189void add_path_options(boost::program_options::options_description *pos,
190 boost::program_options::options_description *opt,
191 const std::string &description);
192
193void add_limit_option(boost::program_options::options_description *opt);
194
195void add_no_progress_option(boost::program_options::options_description *opt);
196
197void add_format_options(boost::program_options::options_description *opt);
198
199void add_verbose_option(boost::program_options::options_description *opt);
200
201void add_no_error_option(boost::program_options::options_description *opt);
202
203std::string get_short_features_help(bool append_suffix);
204std::string get_long_features_help();
205
206void validate(boost::any& v, const std::vector<std::string>& values,
207 ExportFormat *target_type, int);
208void validate(boost::any& v, const std::vector<std::string>& values,
209 ImageSize *target_type, int);
210void validate(boost::any& v, const std::vector<std::string>& values,
211 ImageOrder *target_type, int);
212void validate(boost::any& v, const std::vector<std::string>& values,
213 ImageObjectSize *target_type, int);
214void validate(boost::any& v, const std::vector<std::string>& values,
215 ImageFormat *target_type, int);
216void validate(boost::any& v, const std::vector<std::string>& values,
217 ImageNewFormat *target_type, int);
218void validate(boost::any& v, const std::vector<std::string>& values,
219 ImageFeatures *target_type, int);
220void validate(boost::any& v, const std::vector<std::string>& values,
221 Format *target_type, int);
222void validate(boost::any& v, const std::vector<std::string>& values,
223 JournalObjectSize *target_type, int);
224void validate(boost::any& v, const std::vector<std::string>& values,
225 Secret *target_type, int);
226
227
228std::ostream &operator<<(std::ostream &os, const ImageFeatures &features);
229
230} // namespace argument_types
231} // namespace rbd
232
233#endif // CEPH_RBD_ARGUMENT_TYPES_H