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