libstorage-ng
LvmVg.h
1 /*
2  * Copyright (c) [2016-2017] SUSE LLC
3  *
4  * All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of version 2 of the GNU General Public License as published
8  * by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, contact Novell, Inc.
17  *
18  * To contact Novell about this file by physical or electronic mail, you may
19  * find current contact information at www.novell.com.
20  */
21 
22 
23 #ifndef STORAGE_LVM_VG_H
24 #define STORAGE_LVM_VG_H
25 
26 
27 #include "storage/Devices/Device.h"
28 #include "storage/Devices/LvmLv.h"
29 #include "storage/Devicegraph.h"
30 
31 
32 namespace storage
33 {
34  class Region;
35  class BlkDevice;
36  class LvmPv;
37  class LvmLv;
38 
39 
41  {
42  public:
43 
44  LvmVgNotFoundByVgName(const std::string& vg_name);
45  };
46 
47 
49  {
50  public:
51 
52  InvalidExtentSize(unsigned long long extent_size);
53  };
54 
55 
59  class LvmVg : public Device
60  {
61  public:
62 
68  static LvmVg* create(Devicegraph* devicegraph, const std::string& vg_name);
69 
70  static LvmVg* load(Devicegraph* devicegraph, const xmlNode* node);
71 
75  const std::string& get_vg_name() const;
76 
83  void set_vg_name(const std::string& vg_name);
84 
85  const Region& get_region() const;
86 
90  unsigned long long get_size() const;
91 
98  std::string get_size_string() const;
99 
105  unsigned long long get_extent_size() const;
106 
118  void set_extent_size(unsigned long long extent_size);
119 
123  unsigned long long number_of_extents() const;
124 
129  unsigned long long number_of_used_extents() const;
130 
134  unsigned long long number_of_free_extents() const;
135 
140  bool is_overcommitted() const;
141 
147  LvmPv* add_lvm_pv(BlkDevice* blk_device);
148 
153  void remove_lvm_pv(BlkDevice* blk_device);
154 
161  unsigned long long max_size_for_lvm_lv(LvType lv_type) const;
162 
169  LvmLv* create_lvm_lv(const std::string& lv_name, LvType lv_type,
170  unsigned long long size);
171 
172  LvmLv* create_lvm_lv(const std::string& lv_name, unsigned long long size) ST_DEPRECATED;
173 
178  void delete_lvm_lv(LvmLv* lvm_lv);
179 
183  static std::vector<LvmVg*> get_all(Devicegraph* devicegraph);
184 
188  static std::vector<const LvmVg*> get_all(const Devicegraph* devicegraph);
189 
195  static LvmVg* find_by_vg_name(Devicegraph* devicegraph, const std::string& vg_name);
196 
200  static const LvmVg* find_by_vg_name(const Devicegraph* devicegraph, const std::string& vg_name);
201 
205  std::vector<LvmPv*> get_lvm_pvs();
206 
210  std::vector<const LvmPv*> get_lvm_pvs() const;
211 
215  LvmLv* get_lvm_lv(const std::string& lv_name);
216 
223  std::vector<LvmLv*> get_lvm_lvs();
224 
228  std::vector<const LvmLv*> get_lvm_lvs() const;
229 
237  static bool compare_by_vg_name(const LvmVg* lhs, const LvmVg* rhs);
238 
239  public:
240 
241  class Impl;
242 
243  Impl& get_impl();
244  const Impl& get_impl() const;
245 
246  virtual LvmVg* clone() const override;
247 
248  protected:
249 
250  LvmVg(Impl* impl);
251 
252  };
253 
254 
260  bool is_lvm_vg(const Device* device);
261 
268  LvmVg* to_lvm_vg(Device* device);
269 
273  const LvmVg* to_lvm_vg(const Device* device);
274 
275 }
276 
277 #endif
unsigned long long max_size_for_lvm_lv(LvType lv_type) const
Return the max size in bytes for a new logical volume of type lv_type.
std::string get_size_string() const
Returns the size of the volume group as a localised string.
A Logical Volume of the Logical Volume Manager (LVM).
Definition: LvmLv.h:130
std::vector< LvmLv * > get_lvm_lvs()
Get all logical volumes of the volume group that are direct children of the volume group...
unsigned long long number_of_used_extents() const
Calculates the number of used extents in the volume group.
A Volume Group of the Logical Volume Manager (LVM).
Definition: LvmVg.h:59
static bool compare_by_vg_name(const LvmVg *lhs, const LvmVg *rhs)
Compare (less than) two LvmVgs by vg-name.
Definition: LvmPv.h:36
A start/length pair with a block size.
Definition: Region.h:73
const std::string & get_vg_name() const
Get volume group name.
void set_extent_size(unsigned long long extent_size)
Set the extent size of the volume group.
The main container of the libstorage-ng.
Definition: Devicegraph.h:169
An abstract Block Device.
Definition: BlkDevice.h:46
Definition: LvmVg.h:40
void set_vg_name(const std::string &vg_name)
Set the volume group name.
Definition: LvmVg.h:48
unsigned long long get_extent_size() const
Returns the extent size of the volume group.
LvmPv * add_lvm_pv(BlkDevice *blk_device)
Adds a block device as a physical volume to the volume group.
An abstract base class for storage devices.
Definition: Device.h:81
unsigned long long number_of_extents() const
Calculates the number of extents in the volume group.
Definition: Devicegraph.h:49
bool is_overcommitted() const
Check whether the volume group is overcommitted.
static std::vector< LvmVg * > get_all(Devicegraph *devicegraph)
Get all LvmVgs.
LvmLv * create_lvm_lv(const std::string &lv_name, LvType lv_type, unsigned long long size)
Create a logical volume with name lv_name and type lv_type in the volume group.
void delete_lvm_lv(LvmLv *lvm_lv)
Delete a logical volume in the volume group.
void remove_lvm_pv(BlkDevice *blk_device)
Removes a block device from the volume group.
static LvmVg * create(Devicegraph *devicegraph, const std::string &vg_name)
Create a device of type LvmVg.
std::vector< LvmPv * > get_lvm_pvs()
Get all physical volumes of the volume group.
unsigned long long number_of_free_extents() const
Calculates the number of free extents in the volume group.
unsigned long long get_size() const
Returns the size of the volume group.
Base class for storage exceptions.
Definition: Exception.h:113
LvmLv * get_lvm_lv(const std::string &lv_name)
static LvmVg * find_by_vg_name(Devicegraph *devicegraph, const std::string &vg_name)
Find a volume group by vg-name.
The storage namespace.
Definition: Actiongraph.h:38
bool is_lvm_vg(const Device *device)
Checks whether device points to a LvmVg.
LvmVg * to_lvm_vg(Device *device)
Converts pointer to Device to pointer to LvmVg.
LvType
LVM logical volume types, see lvs(8).
Definition: LvmLv.h:40