]> git.proxmox.com Git - ceph.git/blame - ceph/src/tools/rbd/ArgumentTypes.h
bump version to 18.2.4-pve3
[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");
7c673cae
FG
39static const std::string SNAPSHOT_SPEC("snap-spec");
40static const std::string IMAGE_OR_SNAPSHOT_SPEC("image-or-snap-spec");
7c673cae
FG
41static const std::string PATH_NAME("path-name");
42static const std::string IMAGE_ID("image-id");
43
44// optional arguments
45static const std::string CONFIG_PATH("conf");
46static const std::string POOL_NAME("pool");
47static const std::string DEST_POOL_NAME("dest-pool");
11fdf7f2
TL
48static const std::string NAMESPACE_NAME("namespace");
49static const std::string DEST_NAMESPACE_NAME("dest-namespace");
7c673cae
FG
50static const std::string IMAGE_NAME("image");
51static const std::string DEST_IMAGE_NAME("dest");
7c673cae 52static const std::string SNAPSHOT_NAME("snap");
11fdf7f2 53static const std::string SNAPSHOT_ID("snap-id");
7c673cae 54static const std::string DEST_SNAPSHOT_NAME("dest-snap");
7c673cae
FG
55static const std::string PATH("path");
56static const std::string FROM_SNAPSHOT_NAME("from-snap");
57static const std::string WHOLE_OBJECT("whole-object");
58
1e59de90
TL
59// encryption arguments
60static const std::string ENCRYPTION_FORMAT("encryption-format");
61static const std::string ENCRYPTION_PASSPHRASE_FILE("encryption-passphrase-file");
62
7c673cae
FG
63static const std::string IMAGE_FORMAT("image-format");
64static const std::string IMAGE_NEW_FORMAT("new-format");
65static const std::string IMAGE_ORDER("order");
66static const std::string IMAGE_OBJECT_SIZE("object-size");
67static const std::string IMAGE_FEATURES("image-feature");
68static const std::string IMAGE_SHARED("image-shared");
69static const std::string IMAGE_SIZE("size");
70static const std::string IMAGE_STRIPE_UNIT("stripe-unit");
71static const std::string IMAGE_STRIPE_COUNT("stripe-count");
72static const std::string IMAGE_DATA_POOL("data-pool");
73static const std::string IMAGE_SPARSE_SIZE("sparse-size");
11fdf7f2
TL
74static const std::string IMAGE_THICK_PROVISION("thick-provision");
75static const std::string IMAGE_FLATTEN("flatten");
1911f103 76static const std::string IMAGE_MIRROR_IMAGE_MODE("mirror-image-mode");
7c673cae
FG
77
78static const std::string JOURNAL_OBJECT_SIZE("journal-object-size");
79static const std::string JOURNAL_SPLAY_WIDTH("journal-splay-width");
80static const std::string JOURNAL_POOL("journal-pool");
81
82static const std::string NO_PROGRESS("no-progress");
83static const std::string FORMAT("format");
84static const std::string PRETTY_FORMAT("pretty-format");
85static const std::string VERBOSE("verbose");
f67539c2 86static const std::string NO_ERR("no-error");
7c673cae 87
7c673cae
FG
88static const std::string LIMIT("limit");
89
f67539c2
TL
90static const std::string SKIP_QUIESCE("skip-quiesce");
91static const std::string IGNORE_QUIESCE_ERROR("ignore-quiesce-error");
92
7c673cae 93static const std::set<std::string> SWITCH_ARGUMENTS = {
20effc67
TL
94 WHOLE_OBJECT, IMAGE_SHARED, IMAGE_THICK_PROVISION, IMAGE_FLATTEN,
95 NO_PROGRESS, PRETTY_FORMAT, VERBOSE, NO_ERR, SKIP_QUIESCE,
f67539c2
TL
96 IGNORE_QUIESCE_ERROR
97};
7c673cae
FG
98
99struct ImageSize {};
100struct ImageOrder {};
101struct ImageObjectSize {};
102struct ImageFormat {};
103struct ImageNewFormat {};
104
105struct ImageFeatures {
106 static const std::map<uint64_t, std::string> FEATURE_MAPPING;
107
108 uint64_t features;
109};
110
1911f103
TL
111struct MirrorImageMode {};
112
7c673cae
FG
113template <typename T>
114struct TypedValue {
115 T value;
116 TypedValue(const T& t) : value(t) {}
117};
118
119struct Format : public TypedValue<std::string> {
120 typedef boost::shared_ptr<ceph::Formatter> Formatter;
121
122 Format(const std::string &format) : TypedValue<std::string>(format) {}
123
124 Formatter create_formatter(bool pretty) const;
125};
126
127struct JournalObjectSize {};
128
129struct ExportFormat {};
130
131struct Secret {};
132
f67539c2 133struct EncryptionAlgorithm {};
1e59de90
TL
134struct EncryptionFormat {
135 uint64_t format;
136};
f67539c2 137
7c673cae
FG
138void add_export_format_option(boost::program_options::options_description *opt);
139
140std::string get_name_prefix(ArgumentModifier modifier);
141std::string get_description_prefix(ArgumentModifier modifier);
142
11fdf7f2
TL
143void add_all_option(boost::program_options::options_description *opt,
144 std::string description);
7c673cae
FG
145
146void add_pool_option(boost::program_options::options_description *opt,
147 ArgumentModifier modifier,
148 const std::string &desc_suffix = "");
11fdf7f2
TL
149void add_namespace_option(boost::program_options::options_description *opt,
150 ArgumentModifier modifier);
7c673cae
FG
151
152void add_image_option(boost::program_options::options_description *opt,
153 ArgumentModifier modifier,
154 const std::string &desc_suffix = "");
155
156void add_image_id_option(boost::program_options::options_description *opt,
157 const std::string &desc_suffix = "");
158
7c673cae
FG
159void add_snap_option(boost::program_options::options_description *opt,
160 ArgumentModifier modifier);
11fdf7f2 161void add_snap_id_option(boost::program_options::options_description *opt);
7c673cae
FG
162
163void add_pool_options(boost::program_options::options_description *pos,
11fdf7f2
TL
164 boost::program_options::options_description *opt,
165 bool namespaces_supported);
7c673cae
FG
166
167void add_image_spec_options(boost::program_options::options_description *pos,
168 boost::program_options::options_description *opt,
169 ArgumentModifier modifier);
170
7c673cae
FG
171void add_snap_spec_options(boost::program_options::options_description *pos,
172 boost::program_options::options_description *opt,
173 ArgumentModifier modifier);
174
175void add_image_or_snap_spec_options(
176 boost::program_options::options_description *pos,
177 boost::program_options::options_description *opt,
178 ArgumentModifier modifier);
179
7c673cae
FG
180void add_create_image_options(boost::program_options::options_description *opt,
181 bool include_format);
182
183void add_create_journal_options(
184 boost::program_options::options_description *opt);
185
186void add_size_option(boost::program_options::options_description *opt);
187
188void add_sparse_size_option(boost::program_options::options_description *opt);
189
190void add_path_options(boost::program_options::options_description *pos,
191 boost::program_options::options_description *opt,
192 const std::string &description);
193
194void add_limit_option(boost::program_options::options_description *opt);
195
196void add_no_progress_option(boost::program_options::options_description *opt);
197
198void add_format_options(boost::program_options::options_description *opt);
199
200void add_verbose_option(boost::program_options::options_description *opt);
201
202void add_no_error_option(boost::program_options::options_description *opt);
203
11fdf7f2
TL
204void add_flatten_option(boost::program_options::options_description *opt);
205
f67539c2
TL
206void add_snap_create_options(boost::program_options::options_description *opt);
207
1e59de90
TL
208void add_encryption_options(boost::program_options::options_description *opt);
209
7c673cae
FG
210std::string get_short_features_help(bool append_suffix);
211std::string get_long_features_help();
212
213void validate(boost::any& v, const std::vector<std::string>& values,
214 ExportFormat *target_type, int);
215void validate(boost::any& v, const std::vector<std::string>& values,
216 ImageSize *target_type, int);
217void validate(boost::any& v, const std::vector<std::string>& values,
218 ImageOrder *target_type, int);
219void validate(boost::any& v, const std::vector<std::string>& values,
220 ImageObjectSize *target_type, int);
221void validate(boost::any& v, const std::vector<std::string>& values,
222 ImageFormat *target_type, int);
223void validate(boost::any& v, const std::vector<std::string>& values,
224 ImageNewFormat *target_type, int);
225void validate(boost::any& v, const std::vector<std::string>& values,
226 ImageFeatures *target_type, int);
227void validate(boost::any& v, const std::vector<std::string>& values,
228 Format *target_type, int);
229void validate(boost::any& v, const std::vector<std::string>& values,
230 JournalObjectSize *target_type, int);
f67539c2
TL
231void validate(boost::any& v, const std::vector<std::string>& values,
232 EncryptionAlgorithm *target_type, int);
1e59de90
TL
233void validate(boost::any& v, const std::vector<std::string>& values,
234 EncryptionFormat *target_type, int);
7c673cae
FG
235void validate(boost::any& v, const std::vector<std::string>& values,
236 Secret *target_type, int);
237
238
239std::ostream &operator<<(std::ostream &os, const ImageFeatures &features);
240
241} // namespace argument_types
242} // namespace rbd
243
244#endif // CEPH_RBD_ARGUMENT_TYPES_H