virthttp  0.0
libvirt http interface
Connection.hpp
Go to the documentation of this file.
1 //
2 // Created by _as on 2019-02-01.
3 //
4 
5 #pragma once
6 
7 #include <cstring>
8 #include <exception>
9 #include <vector>
10 #include <gsl/gsl>
11 #include <libvirt/libvirt.h>
12 #include "../Connection.hpp"
13 #include "../Domain.hpp"
14 #include "../Network.hpp"
15 #include "../NodeDevice.hpp"
16 #include "../StoragePool.hpp"
17 #include "../fwd.hpp"
18 #include "../utility.hpp"
19 
20 namespace virt {
21 
22 unsigned long getVersion() {
23  unsigned long ret{};
24  if (virGetVersion(&ret, nullptr, nullptr))
25  throw std::runtime_error{"virGetVersion"};
26  return ret;
27 }
28 
29 ConnectCredential::ConnectCredential(const virConnectCredential& in) noexcept
30  : type(enums::connection::CredentialType(in.type)), prompt(in.prompt), challenge(in.challenge), defresult(in.defresult) {}
31 
32 template <typename Callback>
33 template <typename Container>
34 inline ConnectionAuth<Callback>::ConnectionAuth(Container c, Callback callback) : callback(callback) {
35  if constexpr (std::is_same_v<Container, std::vector<enums::connection::CredentialType>>)
36  cred_types = std::forward(c);
37  else {
38  cred_types.reserve(c.size());
39  std::copy(c.begin(), c.end(), std::back_inserter(cred_types));
40  }
41 }
42 
43 template <typename Callback> ConnectionAuth<Callback>::operator virConnectAuth() noexcept {
44  virConnectAuth ret;
45  ret.credtype = reinterpret_cast<int*>(cred_types.data());
46  ret.ncredtype = gsl::narrow_cast<unsigned>(cred_types.size());
47  ret.cbdata = reinterpret_cast<void*>(&callback);
48 
49  ret.cb = +[](virConnectCredentialPtr creds_ptr, unsigned int ncreds, void* cbdata) -> int {
50  std::vector<ConnectCredential> creds{};
51  creds.reserve(ncreds);
52  std::transform(creds_ptr, creds_ptr + ncreds, std::back_inserter(creds), [](const auto& cred) { return ConnectCredential{cred}; });
53  const bool ret = (*reinterpret_cast<Callback*>(cbdata))(creds);
54  auto it = creds_ptr;
55  for (const auto& [t, p, c, d, res] : creds) {
56  it->result = static_cast<char*>(malloc(it->resultlen = res.length() + 1u));
57  std::copy(res.begin(), res.end(), it->result);
58  ++it;
59  }
60  return ret;
61  };
62 
63  return ret;
64 }
65 
66 inline Connection::Connection(gsl::czstring<> name, bool rd_only) noexcept {
67  underlying = rd_only ? virConnectOpenReadOnly(name) : virConnectOpen(name);
68 }
69 
70 template <typename Callback>
71 inline Connection::Connection(gsl::czstring<> name, ConnectionAuth<Callback>& auth, enums::connection::Flags flags) noexcept {
72  virConnectAuth c_auth = auth;
73  underlying = virConnectOpenAuth(name, &c_auth, to_integral(flags));
74 }
75 
76 constexpr Connection::Connection(Connection&& conn) noexcept : underlying(conn.underlying) { conn.underlying = nullptr; }
77 
78 inline Connection& Connection::operator=(Connection&& conn) noexcept {
79  this->~Connection();
80  underlying = conn.underlying;
81  conn.underlying = nullptr;
82  return *this;
83 }
84 
86  if (underlying)
87  virConnectClose(underlying);
88 }
89 
91  if (virConnectRef(underlying))
92  throw std::runtime_error{"virConnectRef"};
93 }
94 
95 template <typename Data> void Connection::registerCloseCallback(void (*cb)(Data&), std::unique_ptr<Data> data) {
96  virConnectRegisterCloseCallback(underlying, reinterpret_cast<virConnectCloseFunc>(cb), data.release(), &data.get_deleter());
97 }
98 
100  if (virConnectRegisterCloseCallback(underlying, reinterpret_cast<virConnectCloseFunc>(cb), nullptr, nullptr))
101  throw std::runtime_error{"virConnectRegisterCloseCallback"};
102 }
103 
104 template <typename Data> void Connection::unregisterCloseCallback(void (*cb)(Data&)) {
105  if (virConnectUnregisterCloseCallback(underlying, reinterpret_cast<virConnectCloseFunc>(cb)))
106  throw std::runtime_error{"unregisterCloseCallback"};
107 }
108 
110  if (virConnectUnregisterCloseCallback(underlying, reinterpret_cast<virConnectCloseFunc>(cb)))
111  throw std::runtime_error{"unregisterCloseCallback"};
112 }
113 
114 void Connection::setKeepAlive(int interval, unsigned count) {
115  if (virConnectSetKeepAlive(underlying, interval, count))
116  throw std::runtime_error{"virConnectSetKeepAlive"};
117 }
118 
119 [[nodiscard]] inline gsl::zstring<> Connection::findStoragePoolSources(gsl::czstring<> type, gsl::czstring<> srcSpec) const noexcept {
120  return virConnectFindStoragePoolSources(underlying, type, srcSpec, 0u);
121 }
122 #if LIBVIR_VERSION_NUMBER >= 5002000
123 [[nodiscard]] inline gsl::zstring<> Connection::getStoragePoolCapabilities() const noexcept {
124  return virConnectGetStoragePoolCapabilities(underlying, 0u);
125 }
126 #endif
127 
128 inline gsl::zstring<> Connection::getCapabilities() const noexcept { return virConnectGetCapabilities(underlying); }
129 
130 inline gsl::zstring<> Connection::getHostname() const noexcept { return virConnectGetHostname(underlying); }
131 
132 unsigned long Connection::getLibVersion() const {
133  unsigned long ret{};
134  if (virConnectGetLibVersion(underlying, &ret))
135  throw std::runtime_error{"virConnectGetLibVersion"};
136  return ret;
137 }
138 
139 int Connection::getMaxVcpus(gsl::czstring<> type) const noexcept { return virConnectGetMaxVcpus(underlying, type); }
140 
141 passive<gsl::zstring<>> Connection::getSysInfo(unsigned flags) const noexcept { return virConnectGetSysinfo(underlying, flags); }
142 
143 gsl::czstring<> Connection::getType() const noexcept { return virConnectGetType(underlying); }
144 
145 passive<gsl::zstring<>> Connection::getURI() const noexcept { return virConnectGetURI(underlying); }
146 
147 inline bool Connection::isAlive() const noexcept { return virConnectIsAlive(underlying) > 0; }
148 
149 inline bool Connection::isEncrypted() const noexcept { return virConnectIsEncrypted(underlying) > 0; }
150 
151 inline bool Connection::isSecure() const noexcept { return virConnectIsSecure(underlying) > 0; }
152 
153 inline int Connection::numOfDomains() const noexcept { return virConnectNumOfDomains(underlying); }
154 
155 inline int Connection::numOfDefinedDomains() const noexcept { return virConnectNumOfDefinedDomains(underlying); }
156 
157 auto Connection::listDomains() const -> std::vector<int> {
158  std::vector<int> ret{};
159  const auto max_size = numOfDomains();
160  ret.resize(gsl::narrow_cast<unsigned>(max_size));
161  const auto res = virConnectListDomains(underlying, ret.data(), max_size);
162  if (res < 0)
163  throw std::runtime_error{"virConnectListDomains"};
164  ret.resize(gsl::narrow_cast<unsigned>(res));
165  return ret;
166 }
167 
168 template <> auto Connection::listDefinedDomains<gsl::zstring<>>() const {
169  std::vector<gsl::owner<gsl::zstring<>>> buf{};
170  const auto max_size = numOfDomains();
171  buf.resize(gsl::narrow_cast<unsigned>(max_size));
172  const auto res = virConnectListDefinedDomains(underlying, buf.data(), max_size);
173  if (res < 0)
174  throw std::runtime_error{"virConnectListDefinedDomains"};
175  constexpr auto d = +[](gsl::owner<char*> p) { std::free(p); };
176  using D = decltype(d);
177  std::vector<std::unique_ptr<char[], D>> ret;
178  ret.reserve(gsl::narrow_cast<unsigned>(res));
179  std::transform(std::make_move_iterator(buf.begin()), std::make_move_iterator(buf.end()), std::back_inserter(ret),
180  [=](gsl::owner<gsl::zstring<>> str) { return std::unique_ptr<char[], D>(str, d); });
181  return ret;
182 }
183 
184 template <> auto Connection::listDefinedDomains<std::string>() const {
185  std::vector<gsl::owner<gsl::zstring<>>> buf{};
186  const auto max_size = numOfDefinedDomains();
187  buf.resize(gsl::narrow_cast<unsigned>(max_size));
188  const auto res = virConnectListDefinedDomains(underlying, buf.data(), max_size);
189  if (res < 0)
190  throw std::runtime_error{"virConnectListDefinedDomains"};
191  std::vector<std::string> ret;
192  ret.reserve(gsl::narrow_cast<unsigned>(res));
193  std::transform(std::make_move_iterator(buf.begin()), std::make_move_iterator(buf.end()), std::back_inserter(ret),
194  [](gsl::owner<gsl::zstring<>> str) {
195  const std::string ret{str};
196  std::free(str);
197  return ret;
198  });
199  return ret;
200 }
201 
202 auto Connection::listAllDomains(enums::connection::list::domains::Flag flags) const -> std::vector<Domain> {
203  std::vector<Domain> ret;
204  gsl::owner<virDomainPtr*> domains;
205 
206  const auto res = virConnectListAllDomains(underlying, &domains, to_integral(flags));
207  if (res < 0)
208  throw std::runtime_error{"virConnectListAllDomains"};
209 
210  ret.reserve(static_cast<unsigned>(res));
211  std::for_each(domains, domains + res, [&](virDomainPtr d) { ret.emplace_back(d); });
212  std::free(domains);
213 
214  return ret;
215 }
216 
218  virDomainStatsRecordPtr* ptr;
219  const int res = virConnectGetAllDomainStats(underlying, to_integral(stats), &ptr, to_integral(flags));
220  if (res < 0)
221  throw std::runtime_error{"virConnectGetAllDomainStats"};
222 
223  std::vector<Domain::StatsRecord> recs;
224  recs.reserve(static_cast<std::size_t>(res));
225  std::transform(*ptr, *ptr + res, std::back_inserter(recs), [](const virDomainStatsRecord& rec) { return Domain::StatsRecord{rec}; });
226  virDomainStatsRecordListFree(ptr);
227  return recs;
228 }
229 
230 Domain Connection::domainLookupByID(int id) const noexcept { return Domain{virDomainLookupByID(underlying, id)}; }
231 
232 Domain Connection::domainLookupByName(gsl::czstring<> name) const noexcept { return Domain{virDomainLookupByName(underlying, name)}; }
233 Domain Connection::domainLookupByName(const std::string& name) const noexcept { return domainLookupByName(name.c_str()); }
234 
235 Domain Connection::domainLookupByUUID(gsl::basic_zstring<const unsigned char> uuid) const noexcept {
236  return Domain{virDomainLookupByUUID(underlying, uuid)};
237 }
238 
239 Domain Connection::domainLookupByUUIDString(gsl::czstring<> uuid_str) const noexcept {
240  return Domain{virDomainLookupByUUIDString(underlying, uuid_str)};
241 }
242 Domain Connection::domainLookupByUUIDString(const std::string& uuid_str) const noexcept { return domainLookupByUUIDString(uuid_str.c_str()); }
243 
244 bool Connection::domainSaveImageDefineXML(gsl::czstring<> file, gsl::czstring<> dxml, enums::domain::SaveRestoreFlag flags) noexcept {
245  return virDomainSaveImageDefineXML(underlying, file, dxml, to_integral(flags)) >= 0;
246 }
247 
248 [[nodiscard]] UniqueZstring Connection::domainSaveImageGetXMLDesc(gsl::czstring<> file, enums::domain::SaveImageXMLFlag flags) const noexcept {
249  return UniqueZstring{virDomainSaveImageGetXMLDesc(underlying, file, to_integral(flags))};
250 }
251 
252 Network Connection::networkLookupByUUID(gsl::basic_zstring<const unsigned char> uuid) const noexcept {
253  return Network{virNetworkLookupByUUID(underlying, uuid)};
254 }
255 
256 Network Connection::networkLookupByName(gsl::czstring<> name) const noexcept { return Network{virNetworkLookupByName(underlying, name)}; }
257 Network Connection::networkLookupByName(const std::string& name) const noexcept { return networkLookupByName(name.c_str()); }
258 Network Connection::networkLookupByUUIDString(gsl::czstring<> uuid_str) const noexcept {
259  return Network{virNetworkLookupByUUIDString(underlying, uuid_str)};
260 }
261 Network Connection::networkLookupByUUIDString(const std::string& uuid_str) const noexcept { return networkLookupByUUIDString(uuid_str.c_str()); }
262 
263 virNodeInfo Connection::nodeGetInfo() const {
264  virNodeInfo ret{};
265  virNodeGetInfo(underlying, &ret);
266  return ret;
267 }
268 
269 unsigned long long Connection::nodeGetFreeMemory() const { return virNodeGetFreeMemory(underlying); }
270 
271 std::vector<unsigned long long> Connection::nodeGetCellsFreeMemory() const {
272  std::vector<unsigned long long> ret{};
273  ret.resize(nodeGetInfo().nodes);
274  const int res = virNodeGetCellsFreeMemory(underlying, ret.data(), 0, gsl::narrow_cast<int>(ret.size()));
275  if (res < 0)
276  throw std::runtime_error{"virNodeGetCellsFreeMemory"};
277  return ret;
278 }
279 
281  return virt::meta::light::wrap_opram_owning_set_destroyable_arr<Network>(underlying, virConnectListAllNetworks, to_integral(flags));
282 }
283 
284 inline auto Connection::listDefinedNetworksNames() const noexcept {
285  return virt::meta::light::wrap_oparm_owning_fill_freeable_arr(underlying, virConnectNumOfDefinedNetworks, virConnectListDefinedNetworks);
286 }
287 
288 auto Connection::listNetworksNames() const noexcept {
289  return virt::meta::light::wrap_oparm_owning_fill_freeable_arr(underlying, virConnectNumOfNetworks, virConnectListNetworks);
290 }
291 
292 auto Connection::extractDefinedNetworksNames() const -> std::vector<std::string> {
293  return virt::meta::heavy::wrap_oparm_owning_fill_freeable_arr<std::string>(underlying, virConnectNumOfDefinedNetworks,
294  virConnectListDefinedNetworks);
295 }
296 
297 auto Connection::extractNetworksNames() const -> std::vector<std::string> {
298  return virt::meta::heavy::wrap_oparm_owning_fill_freeable_arr<std::string>(underlying, virConnectNumOfNetworks, virConnectListNetworks);
299 }
300 
302  return virt::meta::heavy::wrap_opram_owning_set_destroyable_arr<Network>(underlying, virConnectListAllNetworks, to_integral(flags));
303 }
304 
306  return meta::light::wrap_opram_owning_set_destroyable_arr<NodeDevice, UniqueNullTerminatedSpan>(underlying, virConnectListAllNodeDevices,
307  to_integral(flags));
308 }
310  return meta::heavy::wrap_opram_owning_set_destroyable_arr<NodeDevice>(underlying, virConnectListAllNodeDevices, to_integral(flags));
311 }
312 
313 auto Connection::listDevicesNames(const std::string& capability) const noexcept {
315  underlying, [=](decltype(underlying) u) { return virNodeNumOfDevices(u, capability.data(), 0); },
316  [=](decltype(underlying) u, char** ptr, int max) { return virNodeListDevices(u, capability.data(), ptr, max, 0); });
317 }
318 
319 std::vector<std::string> Connection::extractDevicesNames(const std::string& capability) const {
320  return meta::heavy::wrap_oparm_owning_fill_freeable_arr<std::string>(
321  underlying, [=](decltype(underlying) u) { return virNodeNumOfDevices(u, capability.data(), 0); },
322  [=](decltype(underlying) u, char** ptr, int max) { return virNodeListDevices(u, capability.data(), ptr, max, 0); });
323 }
324 
325 NodeDevice Connection::deviceLookupByName(gsl::czstring<> name) const noexcept { return NodeDevice{virNodeDeviceLookupByName(underlying, name)}; }
326 
327 NodeDevice Connection::deviceLookupSCSIHostByWWN(gsl::czstring<> wwnn, gsl::czstring<> wwpn) const noexcept {
328  return NodeDevice{virNodeDeviceLookupSCSIHostByWWN(underlying, wwnn, wwpn, 0)};
329 }
330 
331 [[nodiscard]] inline auto Connection::listAllStoragePools(enums::connection::list::storage_pool::Flag flags) const noexcept {
332  return meta::light::wrap_opram_owning_set_destroyable_arr<StoragePool>(underlying, virConnectListAllStoragePools, to_integral(flags));
333 }
334 [[nodiscard]] inline std::vector<StoragePool> Connection::extractAllStoragePools(enums::connection::list::storage_pool::Flag flags) const {
335  return meta::heavy::wrap_opram_owning_set_destroyable_arr<StoragePool>(underlying, virConnectListAllStoragePools, to_integral(flags));
336 }
337 [[nodiscard]] inline auto Connection::listDefinedStoragePoolsNames() const noexcept {
338  return meta::light::wrap_oparm_owning_fill_freeable_arr(underlying, virConnectNumOfDefinedStoragePools, virConnectListDefinedStoragePools);
339 }
340 [[nodiscard]] inline auto Connection::listStoragePoolsNames() const noexcept {
341  return meta::light::wrap_oparm_owning_fill_freeable_arr(underlying, virConnectNumOfStoragePools, virConnectListStoragePools);
342 }
343 [[nodiscard]] inline int Connection::numOfDefinedStoragePools() const noexcept { return virConnectNumOfDefinedStoragePools(underlying); }
344 [[nodiscard]] inline int Connection::numOfStoragePools() const noexcept { return virConnectNumOfStoragePools(underlying); }
345 
346 inline StoragePool Connection::storagePoolLookupByName(gsl::czstring<> name) const noexcept {
347  return StoragePool{virStoragePoolLookupByName(underlying, name)};
348 }
349 inline StoragePool Connection::storagePoolLookupByTargetPath(gsl::czstring<> path) const noexcept {
350  return StoragePool{virStoragePoolLookupByTargetPath(underlying, path)};
351 }
352 inline StoragePool Connection::storagePoolLookupByUUID(gsl::basic_zstring<const unsigned char> uuid) const noexcept {
353  return StoragePool{virStoragePoolLookupByUUID(underlying, uuid)};
354 }
355 inline StoragePool Connection::storagePoolLookupByUUIDString(gsl::czstring<> uuidstr) const noexcept {
356  return StoragePool{virStoragePoolLookupByUUIDString(underlying, uuidstr)};
357 }
358 
359 [[nodiscard]] inline StorageVol Connection::storageVolLookupByKey(gsl::czstring<> key) const noexcept {
360  return StorageVol{virStorageVolLookupByKey(underlying, key)};
361 }
362 [[nodiscard]] inline StorageVol Connection::storageVolLookupByPath(gsl::czstring<> path) const noexcept {
363  return StorageVol{virStorageVolLookupByPath(underlying, path)};
364 }
365 
366 inline bool Connection::restore(gsl::czstring<> from) noexcept { return virDomainRestore(underlying, from) == 0; }
367 
368 inline bool Connection::restore(gsl::czstring<> from, gsl::czstring<> dxml, enums::domain::SaveRestoreFlag flags) noexcept {
369  return virDomainRestoreFlags(underlying, from, dxml, to_integral(flags)) == 0;
370 }
371 
372 }
Flags
Definition: Decls.hpp:40
auto listDefinedStoragePoolsNames() const noexcept
Definition: Connection.hpp:337
gsl::zstring findStoragePoolSources(gsl::czstring<> type, gsl::czstring<>) const noexcept
Definition: Connection.hpp:119
bool isAlive() const noexcept
Definition: Connection.hpp:147
std::vector< std::string > extractDevicesNames(const std::string &capability) const
Definition: Connection.hpp:319
constexpr auto to_integral(E e) noexcept
Definition: Base.hpp:32
unsigned long getVersion()
Definition: Connection.hpp:22
Connection & operator=(const Connection &conn) noexcept=delete
auto listAllDomains(enums::connection::list::domains::Flag flags) const -> std::vector< Domain >
Definition: Connection.hpp:202
auto listAllDevices(enums::connection::list::devices::Flags flags=enums::connection::list::devices::Flags::DEFAULT) const noexcept
Definition: Connection.hpp:305
StorageVol storageVolLookupByKey(gsl::czstring<> key) const noexcept
Definition: Connection.hpp:359
unsigned long long nodeGetFreeMemory() const
Definition: Connection.hpp:269
Domain domainLookupByName(gsl::czstring<>) const noexcept
Definition: Connection.hpp:232
Definition: Domain.hpp:463
Network networkLookupByUUID(gsl::basic_zstring< const unsigned char > uuid) const noexcept
Definition: Connection.hpp:252
Definition: ListStoragePoolsFlag.hpp:8
NodeDevice deviceLookupSCSIHostByWWN(gsl::czstring<> wwnn, gsl::czstring<> wwpn) const noexcept
Definition: Connection.hpp:327
Network networkLookupByUUIDString(gsl::czstring<> uuid_str) const noexcept
Definition: Connection.hpp:258
auto listDefinedNetworksNames() const noexcept
Definition: Connection.hpp:284
STL namespace.
Definition: Connection.hpp:47
auto listStoragePoolsNames() const noexcept
Definition: Connection.hpp:340
T passive
Definition: utility.hpp:48
std::vector< unsigned long long > nodeGetCellsFreeMemory() const
Definition: Connection.hpp:271
Definition: Connection.hpp:21
auto wrap_oparm_owning_fill_freeable_arr(U underlying, CF count_fcn, DF data_fcn)
Definition: utility.hpp:276
gsl::czstring getType() const noexcept
Definition: Connection.hpp:143
void unregisterCloseCallback(void(*cb)(Data &))
Definition: Connection.hpp:104
void setKeepAlive(int interval, unsigned count)
Definition: Connection.hpp:114
bool isEncrypted() const noexcept
Definition: Connection.hpp:149
int numOfDomains() const noexcept
Definition: Connection.hpp:153
int numOfDefinedStoragePools() const noexcept
Definition: Connection.hpp:343
virNodeInfo nodeGetInfo() const
Definition: Connection.hpp:263
gsl::zstring getHostname() const noexcept
Definition: Connection.hpp:130
Network networkLookupByName(gsl::czstring<> name) const noexcept
Definition: Connection.hpp:256
auto getAllDomainStats(enums::domain::stats::Types stats, enums::connection::get_all_domains::stats::Flags flags)
Definition: Connection.hpp:217
~Connection()
Definition: Connection.hpp:85
StoragePool storagePoolLookupByUUID(gsl::basic_zstring< const unsigned char > uuid) const noexcept
Definition: Connection.hpp:352
std::vector< std::string > extractDefinedNetworksNames() const
Definition: Connection.hpp:292
int numOfStoragePools() const noexcept
Definition: Connection.hpp:344
bool isSecure() const noexcept
Definition: Connection.hpp:151
StoragePool storagePoolLookupByName(gsl::czstring<> name) const noexcept
Definition: Connection.hpp:346
Definition: NodeDevice.hpp:33
std::vector< NodeDevice > extractAllDevices(enums::connection::list::devices::Flags flags=enums::connection::list::devices::Flags::DEFAULT) const
Definition: Connection.hpp:309
StorageVol storageVolLookupByPath(gsl::czstring<> path) const noexcept
Definition: Connection.hpp:362
NodeDevice deviceLookupByName(gsl::czstring<> name) const noexcept
Definition: Connection.hpp:325
Domain domainLookupByUUID(gsl::basic_zstring< const unsigned char >) const noexcept
Definition: Connection.hpp:235
int getMaxVcpus(gsl::czstring<> type) const noexcept
Definition: Connection.hpp:139
Definition: Connection.hpp:33
Definition: utility.hpp:122
Definition: AdminConnection.hpp:11
Definition: Network.hpp:14
bool domainSaveImageDefineXML(gsl::czstring<> file, gsl::czstring<> dxml, enums::domain::SaveRestoreFlag flags) noexcept
Definition: Connection.hpp:244
Domain domainLookupByID(int) const noexcept
Definition: Connection.hpp:230
ConnectCredential(const virConnectCredential &in) noexcept
Definition: Connection.hpp:29
unsigned long getLibVersion() const
Definition: Connection.hpp:132
Definition: StoragePool.hpp:11
Definition: StorageVol.hpp:10
void ref()
Definition: Connection.hpp:90
std::vector< StoragePool > extractAllStoragePools(enums::connection::list::storage_pool::Flag) const
Definition: Connection.hpp:334
Domain domainLookupByUUIDString(gsl::czstring<>) const noexcept
Definition: Connection.hpp:239
Definition: SaveRestoreFlag.hpp:9
std::vector< enums::connection::CredentialType > cred_types
Definition: Connection.hpp:43
ConnectionAuth(Container c, Callback callback)
Definition: Connection.hpp:34
std::vector< std::string > extractNetworksNames() const
Definition: Connection.hpp:297
auto listNetworksNames() const noexcept
Definition: Connection.hpp:288
int numOfDefinedDomains() const noexcept
Definition: Connection.hpp:155
passive< gsl::zstring<> > getSysInfo(unsigned flags) const noexcept
Definition: Connection.hpp:141
passive< gsl::zstring<> > getURI() const noexcept
Definition: Connection.hpp:145
SaveImageXMLFlag
Definition: Decls.hpp:55
Definition: Domain.hpp:96
auto listAllNetworks(enums::connection::list::networks::Flag) const noexcept
Definition: Connection.hpp:280
void registerCloseCallback(void(*cb)(Data &), std::unique_ptr< Data > data=nullptr)
Definition: Connection.hpp:95
UniqueZstring domainSaveImageGetXMLDesc(gsl::czstring<> file, enums::domain::SaveImageXMLFlag flags) const noexcept
Definition: Connection.hpp:248
gsl::zstring getCapabilities() const noexcept
Definition: Connection.hpp:128
auto listDevicesNames(const std::string &capability) const noexcept
Definition: Connection.hpp:313
Definition: ListDomainFlag.hpp:8
auto listAllStoragePools(enums::connection::list::storage_pool::Flag flags) const noexcept
Definition: Connection.hpp:331
Types
Definition: Decls.hpp:11
StoragePool storagePoolLookupByUUIDString(gsl::czstring<> uuidstr) const noexcept
Definition: Connection.hpp:355
auto listDomains() const -> std::vector< int >
Definition: Connection.hpp:157
bool restore(gsl::czstring<> from) noexcept
Definition: Connection.hpp:366
std::vector< Network > extractAllNetworks(enums::connection::list::networks::Flag) const
Definition: Connection.hpp:301
Callback callback
Definition: Connection.hpp:44
CredentialType
Definition: Decls.hpp:27
StoragePool storagePoolLookupByTargetPath(gsl::czstring<> path) const noexcept
Definition: Connection.hpp:349