facter 3.11.6.cfacter.20181031 → 3.12.0.cfacter.20180918
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/ext/facter/cpp-hocon/CMakeLists.txt +1 -1
- data/ext/facter/cpp-hocon/lib/inc/hocon/types.hpp +6 -0
- data/ext/facter/cpp-hocon/lib/src/parseable.cc +3 -0
- data/ext/facter/facter/CMakeLists.txt +1 -1
- data/ext/facter/facter/acceptance/lib/facter/acceptance/base_fact_utils.rb +1 -3
- data/ext/facter/facter/acceptance/tests/facts/dmi.rb +1 -1
- data/ext/facter/facter/appveyor.yml +17 -14
- data/ext/facter/facter/exe/facter.cc +1 -2
- data/ext/facter/facter/lib/CMakeLists.txt +17 -1
- data/ext/facter/facter/lib/Doxyfile +1 -1
- data/ext/facter/facter/lib/inc/facter/facts/os.hpp +8 -0
- data/ext/facter/facter/lib/inc/facter/ruby/ruby.hpp +0 -11
- data/ext/facter/facter/lib/inc/internal/facts/freebsd/disk_resolver.hpp +25 -0
- data/ext/facter/facter/lib/inc/internal/facts/freebsd/filesystem_resolver.hpp +25 -0
- data/ext/facter/facter/lib/inc/internal/util/freebsd/geom.hpp +149 -0
- data/ext/facter/facter/lib/src/facts/collection.cc +0 -2
- data/ext/facter/facter/lib/src/facts/freebsd/collection.cc +4 -2
- data/ext/facter/facter/lib/src/facts/freebsd/disk_resolver.cc +34 -0
- data/ext/facter/facter/lib/src/facts/freebsd/filesystem_resolver.cc +37 -0
- data/ext/facter/facter/lib/src/facts/linux/os_linux.cc +4 -0
- data/ext/facter/facter/lib/src/facts/windows/dmi_resolver.cc +2 -3
- data/ext/facter/facter/lib/src/facts/windows/operating_system_resolver.cc +1 -23
- data/ext/facter/facter/lib/src/ruby/fact.cc +41 -57
- data/ext/facter/facter/lib/src/ruby/ruby.cc +3 -35
- data/ext/facter/facter/lib/src/util/freebsd/geom.cc +130 -0
- data/ext/facter/facter/lib/tests/CMakeLists.txt +25 -9
- data/ext/facter/facter/lib/tests/facts/collection.cc +1 -1
- data/ext/facter/facter/lib/tests/fixtures.cc +1 -0
- data/ext/facter/facter/locales/FACTER.pot +18 -18
- data/ext/facter/leatherman/CMakeLists.txt +1 -1
- data/ext/facter/leatherman/cmake/cflags.cmake +2 -2
- data/ext/facter/leatherman/dynamic_library/CMakeLists.txt +1 -1
- data/ext/facter/leatherman/locale/src/locale.cc +1 -0
- data/ext/facter/leatherman/ruby/inc/leatherman/ruby/api.hpp +0 -4
- data/ext/facter/leatherman/ruby/src/api.cc +0 -1
- data/ext/facter/leatherman/util/inc/leatherman/util/strings.hpp +3 -0
- data/ext/facter/leatherman/windows/CMakeLists.txt +1 -1
- data/ext/facter/leatherman/windows/inc/leatherman/windows/wmi.hpp +0 -5
- metadata +9 -4
- data/ext/facter/facter/acceptance/tests/custom_facts/conflicts_with_builtin_fact.rb +0 -106
@@ -309,8 +309,6 @@ namespace facter { namespace facts {
|
|
309
309
|
{
|
310
310
|
resolve_facts();
|
311
311
|
|
312
|
-
// We intentionally are using find_if with no return value as a "map until" construct.
|
313
|
-
// cppcheck-suppress ignoredReturnValue
|
314
312
|
find_if(begin(_facts), end(_facts), [&func](map<string, unique_ptr<value>>::value_type const& it) {
|
315
313
|
return !func(it.first, it.second.get());
|
316
314
|
});
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#include <facter/facts/collection.hpp>
|
2
|
-
#include <internal/facts/
|
2
|
+
#include <internal/facts/freebsd/filesystem_resolver.hpp>
|
3
3
|
#include <internal/facts/bsd/uptime_resolver.hpp>
|
4
4
|
#include <internal/facts/glib/load_average_resolver.hpp>
|
5
5
|
#include <internal/facts/freebsd/processor_resolver.hpp>
|
@@ -14,6 +14,7 @@
|
|
14
14
|
#include <internal/facts/freebsd/zpool_resolver.hpp>
|
15
15
|
#include <internal/facts/freebsd/virtualization_resolver.hpp>
|
16
16
|
#include <internal/facts/freebsd/memory_resolver.hpp>
|
17
|
+
#include <internal/facts/freebsd/disk_resolver.hpp>
|
17
18
|
|
18
19
|
using namespace std;
|
19
20
|
|
@@ -25,7 +26,7 @@ namespace facter { namespace facts {
|
|
25
26
|
add(make_shared<freebsd::operating_system_resolver>());
|
26
27
|
add(make_shared<freebsd::networking_resolver>());
|
27
28
|
add(make_shared<bsd::uptime_resolver>());
|
28
|
-
add(make_shared<
|
29
|
+
add(make_shared<freebsd::filesystem_resolver>());
|
29
30
|
add(make_shared<posix::ssh_resolver>());
|
30
31
|
add(make_shared<posix::identity_resolver>());
|
31
32
|
add(make_shared<posix::timezone_resolver>());
|
@@ -36,6 +37,7 @@ namespace facter { namespace facts {
|
|
36
37
|
add(make_shared<freebsd::zpool_resolver>());
|
37
38
|
add(make_shared<freebsd::virtualization_resolver>());
|
38
39
|
add(make_shared<freebsd::memory_resolver>());
|
40
|
+
add(make_shared<freebsd::disk_resolver>());
|
39
41
|
}
|
40
42
|
|
41
43
|
}} // namespace facter::facts
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#include <internal/facts/freebsd/disk_resolver.hpp>
|
2
|
+
#include <internal/util/freebsd/geom.hpp>
|
3
|
+
#include <leatherman/logging/logging.hpp>
|
4
|
+
|
5
|
+
#include <libgeom.h>
|
6
|
+
|
7
|
+
using namespace std;
|
8
|
+
|
9
|
+
namespace facter { namespace facts { namespace freebsd {
|
10
|
+
|
11
|
+
disk_resolver::data disk_resolver::collect_data(collection& facts)
|
12
|
+
{
|
13
|
+
data result;
|
14
|
+
|
15
|
+
try {
|
16
|
+
facter::util::freebsd::geom_class disks("DISK");
|
17
|
+
|
18
|
+
for (auto& geom : disks.geoms) {
|
19
|
+
for (auto& provider : geom.providers) {
|
20
|
+
disk d;
|
21
|
+
d.name = provider.name();
|
22
|
+
d.size = provider.mediasize();
|
23
|
+
d.model = provider.config("descr");
|
24
|
+
result.disks.push_back(move(d));
|
25
|
+
}
|
26
|
+
}
|
27
|
+
} catch (util::freebsd::geom_exception const &e) {
|
28
|
+
LOG_ERROR(e.what());
|
29
|
+
}
|
30
|
+
|
31
|
+
return result;
|
32
|
+
}
|
33
|
+
|
34
|
+
}}} // namespace facter::facts::freebsd
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#include <internal/facts/freebsd/filesystem_resolver.hpp>
|
2
|
+
#include <internal/util/freebsd/geom.hpp>
|
3
|
+
#include <leatherman/logging/logging.hpp>
|
4
|
+
|
5
|
+
#include <libgeom.h>
|
6
|
+
|
7
|
+
using namespace std;
|
8
|
+
|
9
|
+
namespace facter { namespace facts { namespace freebsd {
|
10
|
+
|
11
|
+
filesystem_resolver::data filesystem_resolver::collect_data(collection& facts)
|
12
|
+
{
|
13
|
+
data result = bsd::filesystem_resolver::collect_data(facts);
|
14
|
+
|
15
|
+
try {
|
16
|
+
facter::util::freebsd::geom_class disks("PART");
|
17
|
+
|
18
|
+
for (auto& geom : disks.geoms) {
|
19
|
+
for (auto& provider : geom.providers) {
|
20
|
+
partition p;
|
21
|
+
p.name = provider.name();
|
22
|
+
p.size = provider.mediasize();
|
23
|
+
if (geom.config("scheme") == "GPT") {
|
24
|
+
p.partition_label = provider.config("label");
|
25
|
+
p.partition_uuid = provider.config("rawuuid");
|
26
|
+
}
|
27
|
+
result.partitions.push_back(move(p));
|
28
|
+
}
|
29
|
+
}
|
30
|
+
} catch (util::freebsd::geom_exception const& e) {
|
31
|
+
LOG_ERROR(e.what());
|
32
|
+
}
|
33
|
+
|
34
|
+
return result;
|
35
|
+
}
|
36
|
+
|
37
|
+
}}} // namespace facter::facts::freebsd
|
@@ -84,8 +84,10 @@ namespace facter { namespace facts { namespace linux {
|
|
84
84
|
make_tuple(boost::regex("(?i)scientific linux CERN"), string(os::scientific_cern)),
|
85
85
|
make_tuple(boost::regex("(?i)scientific linux release"), string(os::scientific)),
|
86
86
|
make_tuple(boost::regex("(?im)^cloudlinux"), string(os::cloud_linux)),
|
87
|
+
make_tuple(boost::regex("(?im)^virtuozzo linux"), string(os::virtuozzo_linux)),
|
87
88
|
make_tuple(boost::regex("(?i)Ascendos"), string(os::ascendos)),
|
88
89
|
make_tuple(boost::regex("(?im)^XenServer"), string(os::xen_server)),
|
90
|
+
make_tuple(boost::regex("(?im)^XCP-ng"), string(os::xcp_ng)),
|
89
91
|
make_tuple(boost::regex("XCP"), string(os::zen_cloud_platform)),
|
90
92
|
make_tuple(boost::regex("(?im)^Parallels Server Bare Metal"), string(os::psbm)),
|
91
93
|
make_tuple(boost::regex("(?m)^Fedora release"), string(os::fedora)),
|
@@ -228,6 +230,7 @@ namespace facter { namespace facts { namespace linux {
|
|
228
230
|
{ string(os::oracle_enterprise_linux), string(os_family::redhat) },
|
229
231
|
{ string(os::amazon), string(os_family::redhat) },
|
230
232
|
{ string(os::xen_server), string(os_family::redhat) },
|
233
|
+
{ string(os::xcp_ng), string(os_family::redhat) },
|
231
234
|
{ string(os::photon_os), string(os_family::redhat) },
|
232
235
|
{ string(os::huawei), string(os_family::debian) },
|
233
236
|
{ string(os::linux_mint), string(os_family::debian) },
|
@@ -265,6 +268,7 @@ namespace facter { namespace facts { namespace linux {
|
|
265
268
|
{ string(os::cloud_linux), string(release_file::redhat) },
|
266
269
|
{ string(os::psbm), string(release_file::redhat) },
|
267
270
|
{ string(os::xen_server), string(release_file::redhat) },
|
271
|
+
{ string(os::xcp_ng), string(release_file::redhat) },
|
268
272
|
{ string(os::fedora), string(release_file::fedora) },
|
269
273
|
{ string(os::meego), string(release_file::meego) },
|
270
274
|
{ string(os::oracle_linux), string(release_file::oracle_linux) },
|
@@ -17,12 +17,11 @@ namespace facter { namespace facts { namespace windows {
|
|
17
17
|
{
|
18
18
|
data result;
|
19
19
|
|
20
|
-
auto vals = _wmi->query(wmi::computersystemproduct, {wmi::name
|
20
|
+
auto vals = _wmi->query(wmi::computersystemproduct, {wmi::name});
|
21
21
|
if (vals.empty()) {
|
22
|
-
LOG_DEBUG("WMI query returned no results for {1} with
|
22
|
+
LOG_DEBUG("WMI query returned no results for {1} with value {2}.", wmi::computersystemproduct, wmi::name);
|
23
23
|
} else {
|
24
24
|
result.product_name = wmi::get(vals, wmi::name);
|
25
|
-
result.uuid = wmi::get(vals, wmi::uuid);
|
26
25
|
}
|
27
26
|
|
28
27
|
vals = _wmi->query(wmi::bios, {wmi::manufacturer, wmi::serialnumber});
|
@@ -2,9 +2,7 @@
|
|
2
2
|
#include <leatherman/windows/system_error.hpp>
|
3
3
|
#include <leatherman/windows/wmi.hpp>
|
4
4
|
#include <leatherman/windows/windows.hpp>
|
5
|
-
#include <facter/facts/fact.hpp>
|
6
5
|
#include <facter/facts/collection.hpp>
|
7
|
-
#include <facter/facts/scalar_value.hpp>
|
8
6
|
#include <facter/facts/os_family.hpp>
|
9
7
|
#include <leatherman/logging/logging.hpp>
|
10
8
|
#include <leatherman/util/regex.hpp>
|
@@ -12,7 +10,6 @@
|
|
12
10
|
#include <winnt.h>
|
13
11
|
#include <Shlobj.h>
|
14
12
|
#include <map>
|
15
|
-
#include <string>
|
16
13
|
#include <boost/filesystem.hpp>
|
17
14
|
|
18
15
|
using namespace std;
|
@@ -104,26 +101,7 @@ namespace facter { namespace facts { namespace windows {
|
|
104
101
|
auto version = result.release.substr(0, lastDot);
|
105
102
|
bool consumerrel = (wmi::get(vals, wmi::producttype) == "1");
|
106
103
|
if (version == "10.0") {
|
107
|
-
|
108
|
-
// Windows Server 2016 and 2019. Note that the kernel
|
109
|
-
// version is written as <major>.<minor>.<build_number>
|
110
|
-
auto kernel_version_fact = facts.get<string_value>(fact::kernel_version);
|
111
|
-
if (! kernel_version_fact) {
|
112
|
-
LOG_DEBUG("Could not resolve the OS release and OS major version facts from the kernel version fact");
|
113
|
-
return result;
|
114
|
-
}
|
115
|
-
auto kernel_version = kernel_version_fact->value();
|
116
|
-
auto build_number_as_str = kernel_version.substr(
|
117
|
-
kernel_version.find_last_of('.') + 1);
|
118
|
-
auto build_number = stol(build_number_as_str);
|
119
|
-
|
120
|
-
if (consumerrel) {
|
121
|
-
result.release = "10";
|
122
|
-
} else if (build_number >= 17623L) {
|
123
|
-
result.release = "2019";
|
124
|
-
} else {
|
125
|
-
result.release = "2016";
|
126
|
-
}
|
104
|
+
result.release = consumerrel ? "10" : "2016";
|
127
105
|
} else if (version == "6.3") {
|
128
106
|
result.release = consumerrel ? "8.1" : "2012 R2";
|
129
107
|
} else if (version == "6.2") {
|
@@ -83,69 +83,53 @@ namespace facter { namespace ruby {
|
|
83
83
|
});
|
84
84
|
|
85
85
|
_resolving = true;
|
86
|
-
bool add = true;
|
87
|
-
|
88
|
-
vector<VALUE>::iterator it;
|
89
|
-
ruby.rescue([&]() {
|
90
|
-
volatile VALUE value = ruby.nil_value();
|
91
|
-
size_t weight = 0;
|
92
86
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
87
|
+
// If no resolutions or the top resolution has a weight of 0, first check the native collection for the fact
|
88
|
+
// This way we treat the "built-in" as implicitly having a resolution with weight 0
|
89
|
+
bool add = true;
|
90
|
+
if (_resolutions.empty() || ruby.to_native<resolution>(_resolutions.front())->weight() == 0) {
|
91
|
+
// Check to see the value is in the collection
|
92
|
+
auto value = facts[ruby.to_string(_name)];
|
93
|
+
if (value) {
|
94
|
+
// Already in collection, do not add
|
95
|
+
add = false;
|
96
|
+
_value = facter->to_ruby(value);
|
97
|
+
_weight = value->weight();
|
104
98
|
}
|
99
|
+
}
|
105
100
|
|
106
|
-
|
107
|
-
|
108
|
-
|
101
|
+
if (ruby.is_nil(_value)) {
|
102
|
+
vector<VALUE>::iterator it;
|
103
|
+
ruby.rescue([&]() {
|
104
|
+
volatile VALUE value = ruby.nil_value();
|
105
|
+
size_t weight = 0;
|
106
|
+
|
107
|
+
// Look through the resolutions and find the first allowed resolution that resolves
|
108
|
+
for (it = _resolutions.begin(); it != _resolutions.end(); ++it) {
|
109
|
+
auto res = ruby.to_native<resolution>(*it);
|
110
|
+
if (!res->suitable(*facter)) {
|
111
|
+
continue;
|
112
|
+
}
|
113
|
+
value = res->value();
|
114
|
+
if (!ruby.is_nil(value)) {
|
115
|
+
weight = res->weight();
|
116
|
+
break;
|
117
|
+
}
|
118
|
+
}
|
109
119
|
|
110
|
-
|
120
|
+
// Set the value to what was resolved
|
121
|
+
_value = value;
|
122
|
+
_weight = weight;
|
111
123
|
return 0;
|
112
|
-
}
|
113
|
-
|
114
|
-
// There's two possibilities here:
|
115
|
-
// 1. None of our resolvers could resolve the value
|
116
|
-
// 2. A resolver of weight 0 resolved the value
|
117
|
-
//
|
118
|
-
// In both cases, we attempt to use the "built-in" fact's
|
119
|
-
// value. This serves as a fallback resolver for Case (1)
|
120
|
-
// while for Case (2), we want built-in values to take
|
121
|
-
// precedence over 0-weight custom facts.
|
122
|
-
|
123
|
-
auto builtin_value = facts[ruby.to_string(_name)];
|
124
|
-
if (! builtin_value) {
|
125
|
-
return 0;
|
126
|
-
}
|
127
|
-
auto builtin_ruby_value = facter->to_ruby(builtin_value);
|
128
|
-
|
129
|
-
// We need this check for Case (2). Otherwise, we risk
|
130
|
-
// overwriting our resolved value in the small chance
|
131
|
-
// that builtin_value exists, but its ruby value is
|
132
|
-
// nil.
|
133
|
-
if (! ruby.is_nil(builtin_ruby_value)) {
|
134
|
-
// Already in collection, do not add
|
135
|
-
add = false;
|
136
|
-
_value = builtin_ruby_value;
|
137
|
-
_weight = builtin_value->weight();
|
138
|
-
}
|
139
|
-
|
140
|
-
return 0;
|
141
|
-
}, [&](VALUE ex) {
|
142
|
-
LOG_ERROR("error while resolving custom fact \"{1}\": {2}", ruby.rb_string_value_ptr(&_name), ruby.exception_to_string(ex));
|
124
|
+
}, [&](VALUE ex) {
|
125
|
+
LOG_ERROR("error while resolving custom fact \"{1}\": {2}", ruby.rb_string_value_ptr(&_name), ruby.exception_to_string(ex));
|
143
126
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
127
|
+
// Failed, so set to nil
|
128
|
+
_value = ruby.nil_value();
|
129
|
+
_weight = 0;
|
130
|
+
return 0;
|
131
|
+
});
|
132
|
+
}
|
149
133
|
|
150
134
|
if (add) {
|
151
135
|
facts.add_custom(ruby.to_string(_name), ruby.is_nil(_value) ? nullptr : make_value<ruby::ruby_value>(_value), _weight);
|
@@ -30,27 +30,6 @@ static const char load_puppet[] =
|
|
30
30
|
" end\n"
|
31
31
|
"end\n";
|
32
32
|
|
33
|
-
// This struct redirects stdout to stderr in the ruby runtime for the
|
34
|
-
// duration of its lifetime. We use this to ensure that any custom
|
35
|
-
// facts writing to stdout during their initialization or execution
|
36
|
-
// won't corrupt json/yaml output from the facter executable.
|
37
|
-
struct RbStdoutGuard {
|
38
|
-
VALUE old_stdout;
|
39
|
-
api& ruby;
|
40
|
-
|
41
|
-
RbStdoutGuard(api& ruby) :ruby(ruby) {
|
42
|
-
LOG_DEBUG("Redirecting ruby's stdout to stderr");
|
43
|
-
auto rb_stderr = ruby.rb_gv_get("$stderr");
|
44
|
-
old_stdout = ruby.rb_gv_get("$stdout");
|
45
|
-
ruby.rb_gv_set("$stdout", rb_stderr);
|
46
|
-
}
|
47
|
-
|
48
|
-
~RbStdoutGuard() {
|
49
|
-
LOG_DEBUG("Restoring Ruby's stdout");
|
50
|
-
ruby.rb_gv_set("$stdout", old_stdout);
|
51
|
-
}
|
52
|
-
};
|
53
|
-
|
54
33
|
namespace facter { namespace ruby {
|
55
34
|
|
56
35
|
bool initialize(bool include_stack_trace)
|
@@ -69,7 +48,7 @@ namespace facter { namespace ruby {
|
|
69
48
|
return true;
|
70
49
|
}
|
71
50
|
|
72
|
-
void load_custom_facts(collection& facts, bool initialize_puppet,
|
51
|
+
void load_custom_facts(collection& facts, bool initialize_puppet, vector<string> const& paths)
|
73
52
|
{
|
74
53
|
#ifdef _WIN32
|
75
54
|
// Initialize WSA before resolving custom facts. The Ruby runtime does this only when running
|
@@ -88,23 +67,12 @@ namespace facter { namespace ruby {
|
|
88
67
|
}
|
89
68
|
}
|
90
69
|
mod.search(paths);
|
91
|
-
|
92
|
-
// Redirect stdout->stderr for custom facts.
|
93
|
-
RbStdoutGuard stdout_guard{ruby};
|
94
|
-
mod.resolve_facts();
|
95
|
-
} else {
|
96
|
-
mod.resolve_facts();
|
97
|
-
}
|
70
|
+
mod.resolve_facts();
|
98
71
|
}
|
99
72
|
|
100
73
|
void load_custom_facts(collection& facts, vector<string> const& paths)
|
101
74
|
{
|
102
|
-
|
103
|
-
}
|
104
|
-
|
105
|
-
void load_custom_facts(collection& facts, bool initialize_puppet, vector<string> const& paths)
|
106
|
-
{
|
107
|
-
load_custom_facts(facts, initialize_puppet, false, paths);
|
75
|
+
load_custom_facts(facts, false, paths);
|
108
76
|
}
|
109
77
|
|
110
78
|
value const* lookup(value const* value, vector<string>::iterator segment, vector<string>::iterator end) {
|
@@ -0,0 +1,130 @@
|
|
1
|
+
#include <internal/util/freebsd/geom.hpp>
|
2
|
+
#include <leatherman/locale/locale.hpp>
|
3
|
+
#include <leatherman/logging/logging.hpp>
|
4
|
+
|
5
|
+
using leatherman::locale::_;
|
6
|
+
|
7
|
+
using namespace std;
|
8
|
+
|
9
|
+
namespace facter { namespace util { namespace freebsd {
|
10
|
+
|
11
|
+
geom_exception::geom_exception(std::string const& message) :
|
12
|
+
runtime_error(message)
|
13
|
+
{
|
14
|
+
}
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
geom_config::geom_config(string name, string value)
|
19
|
+
{
|
20
|
+
_name = name;
|
21
|
+
_value = value;
|
22
|
+
}
|
23
|
+
|
24
|
+
string
|
25
|
+
geom_config::name()
|
26
|
+
{
|
27
|
+
return _name;
|
28
|
+
}
|
29
|
+
|
30
|
+
string
|
31
|
+
geom_config::value()
|
32
|
+
{
|
33
|
+
return _value;
|
34
|
+
}
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
geom_object_with_config::geom_object_with_config(struct gconf *conf)
|
39
|
+
{
|
40
|
+
struct gconfig *config;
|
41
|
+
LIST_FOREACH(config, conf, lg_config) {
|
42
|
+
if (!config->lg_val) {
|
43
|
+
LOG_DEBUG(_("Skipping config {1} because it has a null value", config->lg_name));
|
44
|
+
continue;
|
45
|
+
}
|
46
|
+
_configs.push_back(geom_config(config->lg_name, config->lg_val));
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
string
|
51
|
+
geom_object_with_config::config(string name) {
|
52
|
+
for (auto config : _configs) {
|
53
|
+
if (config.name() == name)
|
54
|
+
return config.value();
|
55
|
+
}
|
56
|
+
return "";
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
geom_provider::geom_provider(struct gprovider* provider) :
|
62
|
+
geom_object_with_config(&provider->lg_config)
|
63
|
+
{
|
64
|
+
_name = provider->lg_name;
|
65
|
+
_mode = provider->lg_mode;
|
66
|
+
_mediasize = provider->lg_mediasize;
|
67
|
+
_sectorsize = provider->lg_sectorsize;
|
68
|
+
_stripeoffset = provider->lg_stripeoffset;
|
69
|
+
_stripesize = provider->lg_stripesize;
|
70
|
+
}
|
71
|
+
|
72
|
+
string
|
73
|
+
geom_provider::name()
|
74
|
+
{
|
75
|
+
return _name;
|
76
|
+
}
|
77
|
+
|
78
|
+
off_t
|
79
|
+
geom_provider::mediasize()
|
80
|
+
{
|
81
|
+
return _mediasize;
|
82
|
+
}
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
geom_geom::geom_geom(struct ggeom *geom) :
|
87
|
+
geom_object_with_config(&geom->lg_config)
|
88
|
+
{
|
89
|
+
_name = geom->lg_name;
|
90
|
+
struct gprovider *provider;
|
91
|
+
LIST_FOREACH(provider, &geom->lg_provider, lg_provider) {
|
92
|
+
providers.push_back(geom_provider(provider));
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
string
|
97
|
+
geom_geom::name()
|
98
|
+
{
|
99
|
+
return _name;
|
100
|
+
}
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
geom_class::geom_class(string type)
|
105
|
+
{
|
106
|
+
if (geom_gettree(&_mesh) < 0) {
|
107
|
+
throw geom_exception(_("Unable to get GEOM tree"));
|
108
|
+
}
|
109
|
+
|
110
|
+
LIST_FOREACH(_class, &(_mesh.lg_class), lg_class) {
|
111
|
+
if (type == string(_class->lg_name))
|
112
|
+
break;
|
113
|
+
}
|
114
|
+
|
115
|
+
if (!_class) {
|
116
|
+
throw geom_exception(_("The GEOM class \"{1}\" was not found", type));
|
117
|
+
}
|
118
|
+
|
119
|
+
struct ggeom *geom;
|
120
|
+
LIST_FOREACH(geom, &(_class->lg_geom), lg_geom) {
|
121
|
+
geoms.push_back(geom_geom(geom));
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
geom_class::~geom_class()
|
126
|
+
{
|
127
|
+
geom_deletetree(&_mesh);
|
128
|
+
}
|
129
|
+
|
130
|
+
}}} // namespace facter::util::freebsd
|