#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace leatherman::windows; using namespace leatherman::util; using namespace facter::facts::external; using namespace boost::filesystem; namespace facter { namespace facts { vector collection::get_external_fact_directories() const { if (user::is_admin()) { // Get the common data path try { path p = file_util::get_programdata_dir() / "PuppetLabs" / "facter" / "facts.d"; return {p.string()}; } catch (file_util::unknown_folder_exception &e) { LOG_WARNING("external facts unavailable, %1%", e.what()); } } else { auto home = user::home_dir(); if (!home.empty()) { path p1 = path(home) / ".puppetlabs" / "opt" / "facter" / "facts.d"; path p2 = path(home) / ".facter" / "facts.d"; return {p1.string(), p2.string()}; } LOG_DEBUG("HOME environment variable not set, external facts unavailable"); } return {}; } vector> collection::get_external_resolvers() { vector> resolvers; resolvers.emplace_back(new text_resolver()); resolvers.emplace_back(new yaml_resolver()); resolvers.emplace_back(new json_resolver()); // The execution resolver is a catch-all for Windows executable types: .bat, .cmd, .com, .exe resolvers.emplace_back(new execution_resolver()); resolvers.emplace_back(new powershell_resolver()); return resolvers; } void collection::add_platform_facts() { add(make_shared()); add(make_shared()); add(make_shared()); add(make_shared()); add(make_shared()); add(make_shared()); try { shared_ptr shared_wmi = make_shared(); add(make_shared(shared_wmi)); add(make_shared(shared_wmi)); add(make_shared(shared_wmi)); add(make_shared(shared_wmi)); } catch (wmi_exception &e) { LOG_ERROR("failed adding platform facts that require WMI: {1}", e.what()); } } }} // namespace facter::facts