facter 3.11.4.cfacter.20180821 → 3.11.5.cfacter.20181022
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/facter/facter/CMakeLists.txt +1 -1
- data/ext/facter/facter/Gemfile +13 -0
- data/ext/facter/facter/Rakefile +9 -0
- data/ext/facter/facter/acceptance/lib/facter/acceptance/base_fact_utils.rb +3 -1
- data/ext/facter/facter/acceptance/tests/facts/dmi.rb +1 -1
- data/ext/facter/facter/appveyor.yml +14 -17
- data/ext/facter/facter/exe/facter.cc +2 -1
- data/ext/facter/facter/lib/Doxyfile +1 -1
- data/ext/facter/facter/lib/inc/facter/ruby/ruby.hpp +11 -0
- data/ext/facter/facter/lib/inc/internal/facts/linux/os_osrelease.hpp +98 -0
- data/ext/facter/facter/lib/src/facts/collection.cc +2 -0
- data/ext/facter/facter/lib/src/facts/linux/operating_system_resolver.cc +5 -8
- data/ext/facter/facter/lib/src/facts/windows/dmi_resolver.cc +3 -2
- data/ext/facter/facter/lib/src/facts/windows/kernel_resolver.cc +21 -41
- data/ext/facter/facter/lib/src/facts/windows/operating_system_resolver.cc +23 -1
- data/ext/facter/facter/lib/src/ruby/ruby.cc +35 -3
- data/ext/facter/facter/lib/tests/CMakeLists.txt +9 -25
- data/ext/facter/facter/lib/tests/facts/collection.cc +1 -1
- data/ext/facter/facter/locales/FACTER.pot +23 -7
- data/ext/facter/leatherman/CMakeLists.txt +1 -1
- data/ext/facter/leatherman/ruby/inc/leatherman/ruby/api.hpp +4 -0
- data/ext/facter/leatherman/ruby/src/api.cc +1 -0
- data/ext/facter/leatherman/windows/inc/leatherman/windows/wmi.hpp +5 -0
- metadata +4 -4
- data/ext/facter/facter/lib/inc/internal/facts/linux/os_coreos.hpp +0 -56
- data/ext/facter/facter/lib/inc/internal/facts/linux/os_cumulus.hpp +0 -56
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a4a4e2fb925fbcdc4a6df9f5059c352c21537d00
         | 
| 4 | 
            +
              data.tar.gz: e2fa7aed4bc3b820555b69ec88c4fc1732b72932
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ab739721a51ceeed3d9e91be204b99cc028b7f1cb412714b216fc082d3cd5ec7b6110776586e45fd6a30bbe9cdd897cff3f448282896743ac712739d9d917b7a
         | 
| 7 | 
            +
              data.tar.gz: 4c1ff6d9e83af0f0b7a0f346f2a3e95f5adb5885f8f56f7d137d16fe7e00398b23b8ddac455e942586d71f20ce339cce9413e8ed16be44e8b906a264671ebe31
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            source ENV['GEM_SOURCE'] || 'https://artifactory.delivery.puppetlabs.net/artifactory/api/gems/rubygems/'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            def location_for(place, fake_version = nil)
         | 
| 4 | 
            +
              if place =~ /^(git[:@][^#]*)#(.*)/
         | 
| 5 | 
            +
                [fake_version, { :git => $1, :branch => $2, :require => false }].compact
         | 
| 6 | 
            +
              elsif place =~ /^file:\/\/(.*)/
         | 
| 7 | 
            +
                ['>= 0', { :path => File.expand_path($1), :require => false }]
         | 
| 8 | 
            +
              else
         | 
| 9 | 
            +
                [place, { :require => false }]
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            gem 'packaging', *location_for(ENV['PACKAGING_LOCATION'] || '~> 0.99')
         | 
    
        data/ext/facter/facter/Rakefile
    CHANGED
    
    | @@ -6,3 +6,12 @@ Dir['tasks/**/*.rake'].each { |t| load t } | |
| 6 6 |  | 
| 7 7 | 
             
            require 'packaging'
         | 
| 8 8 | 
             
            Pkg::Util::RakeUtils.load_packaging_tasks
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            namespace :package do
         | 
| 11 | 
            +
              task :bootstrap do
         | 
| 12 | 
            +
                puts 'Bootstrap is no longer needed, using packaging-as-a-gem'
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              task :implode do
         | 
| 15 | 
            +
                puts 'Implode is no longer needed, using packaging-as-a-gem'
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -523,11 +523,13 @@ module Facter | |
| 523 523 | 
             
                    elsif agent['platform'] =~ /2008/
         | 
| 524 524 | 
             
                      os_version = '2008 R2'
         | 
| 525 525 | 
             
                    elsif agent['platform'] =~ /2012/
         | 
| 526 | 
            -
                      os_version = '2012 R2'
         | 
| 526 | 
            +
                      os_version = agent['platform'] =~ /R2/ ? '2012 R2' : '2012'
         | 
| 527 527 | 
             
                    elsif agent['platform'] =~ /-10/
         | 
| 528 528 | 
             
                      os_version = '10'
         | 
| 529 529 | 
             
                    elsif agent['platform'] =~ /2016/
         | 
| 530 530 | 
             
                      os_version = '2016'
         | 
| 531 | 
            +
                    elsif agent['platform'] =~ /2019/
         | 
| 532 | 
            +
                      os_version = '2019'
         | 
| 531 533 | 
             
                    else
         | 
| 532 534 | 
             
                      fail_test "Unknown Windows version #{agent['platform']}"
         | 
| 533 535 | 
             
                    end
         | 
| @@ -15,13 +15,13 @@ test_name "C96148: verify dmi facts" do | |
| 15 15 | 
             
                expected_facts = {
         | 
| 16 16 | 
             
                    'dmi.manufacturer' => /\w+/,
         | 
| 17 17 | 
             
                    'dmi.product.name' => /\w+/,
         | 
| 18 | 
            +
                    'dmi.product.uuid' => /[-0-9A-Fa-f]+/,
         | 
| 18 19 | 
             
                }
         | 
| 19 20 | 
             
                unless agent['platform'] =~ /windows/
         | 
| 20 21 | 
             
                  expected_facts.merge!({'dmi.bios.release_date' => /\d+\/\d+\/\d+/,
         | 
| 21 22 | 
             
                                         'dmi.bios.vendor'       => /\w+/,
         | 
| 22 23 | 
             
                                         'dmi.bios.version'      => /\d+/,
         | 
| 23 24 | 
             
                                         'dmi.chassis.type'      => /\w+/,
         | 
| 24 | 
            -
                                         'dmi.product.uuid'      => /[-0-9A-Fa-f]+/,
         | 
| 25 25 | 
             
                                        })
         | 
| 26 26 | 
             
                end
         | 
| 27 27 | 
             
                unless agent['platform'] =~ /windows|cisco|aarch64|el-/
         | 
| @@ -1,27 +1,21 @@ | |
| 1 1 | 
             
            version: 3.1.0.{build}
         | 
| 2 2 | 
             
            clone_depth: 10
         | 
| 3 3 | 
             
            environment:
         | 
| 4 | 
            -
              LEATHERMAN_VERSION:  | 
| 5 | 
            -
              CPPHOCON_VERSION: 0.1. | 
| 4 | 
            +
              LEATHERMAN_VERSION: 1.4.4
         | 
| 5 | 
            +
              CPPHOCON_VERSION: 0.1.8
         | 
| 6 6 |  | 
| 7 7 | 
             
            init:
         | 
| 8 8 | 
             
              - |
         | 
| 9 | 
            -
                  choco install mingw-w64 - | 
| 9 | 
            +
                  choco install -y mingw-w64 -Version 5.2.0 -source https://www.myget.org/F/puppetlabs
         | 
| 10 | 
            +
                  choco install -y cmake -Version 3.2.2 -source https://www.myget.org/F/puppetlabs
         | 
| 10 11 | 
             
                  choco install -y gettext -Version 0.19.6 -source https://www.myget.org/F/puppetlabs
         | 
| 12 | 
            +
                  choco install -y pl-toolchain-x64 -Version 2015.12.01.1 -source https://www.myget.org/F/puppetlabs
         | 
| 13 | 
            +
                  choco install -y pl-boost-x64 -Version 1.58.0.2 -source https://www.myget.org/F/puppetlabs
         | 
| 14 | 
            +
                  choco install -y pl-openssl-x64 -Version 1.0.24.1 -source https://www.myget.org/F/puppetlabs
         | 
| 15 | 
            +
                  choco install -y pl-curl-x64 -Version 7.46.0.1 -source https://www.myget.org/F/puppetlabs
         | 
| 16 | 
            +
                  choco install -y pl-yaml-cpp-x64 -Version 0.5.1.2 -source https://www.myget.org/F/puppetlabs
         | 
| 11 17 | 
             
                  cmake --version
         | 
| 12 18 | 
             
              - ps: |
         | 
| 13 | 
            -
                  $env:PATH = $env:PATH.Replace("Git\bin", "Git\cmd")
         | 
| 14 | 
            -
                  $env:PATH = $env:PATH.Replace("Git\usr\bin", "Git\cmd")
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  wget 'https://s3.amazonaws.com/kylo-pl-bucket/boost_1_57_0-x86_64_mingw-w64_4.8.3_win32_seh.7z' -OutFile "$env:temp\boost.7z"
         | 
| 17 | 
            -
                  7z.exe x $env:temp\boost.7z -oC:\tools | FIND /V "ing  "
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  wget 'https://s3.amazonaws.com/kylo-pl-bucket/yaml-cpp-0.5.1-x86_64_mingw-w64_4.8.3_win32_seh.7z' -OutFile "$env:temp\yaml-cpp.7z"
         | 
| 20 | 
            -
                  7z.exe x $env:temp\yaml-cpp.7z -oC:\tools | FIND /V "ing  "
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  wget 'https://s3.amazonaws.com/kylo-pl-bucket/curl-7.42.1-x86_64_mingw-w64_4.8.3_win32_seh.7z' -OutFile "$env:temp\curl-7.42.1-x86_64_mingw-w64_4.8.3_win32_seh.7z"
         | 
| 23 | 
            -
                  7z.exe x "$env:temp\curl-7.42.1-x86_64_mingw-w64_4.8.3_win32_seh.7z" -oC:\tools | FIND /V "ing "
         | 
| 24 | 
            -
             | 
| 25 19 | 
             
                  wget "https://github.com/puppetlabs/leatherman/releases/download/$env:LEATHERMAN_VERSION/leatherman.7z" -OutFile "$env:temp\leatherman.7z"
         | 
| 26 20 | 
             
                  7z.exe x $env:temp\leatherman.7z -oC:\tools | FIND /V "ing "
         | 
| 27 21 |  | 
| @@ -29,12 +23,15 @@ init: | |
| 29 23 | 
             
                  7z.exe x $env:temp\cpp-hocon.7z -oC:\tools | FIND /V "ing "
         | 
| 30 24 |  | 
| 31 25 | 
             
            install:
         | 
| 32 | 
            -
             | 
| 26 | 
            +
                # Minimize environment polution; previously we were linking against the wrong OpenSSL DLLs.
         | 
| 27 | 
            +
                # Include Ruby and Powershell for unit tests.
         | 
| 28 | 
            +
              - SET PATH=C:\tools\pl-build-tools\bin;C:\tools\mingw64\bin;C:\ProgramData\chocolatey\bin;C:\Ruby22-x64\bin;C:\Program Files\7-Zip;C:\Windows\system32;C:\Windows;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\gettext-iconv
         | 
| 29 | 
            +
              - ps: rm -r C:\OpenSSL-Win64
         | 
| 33 30 | 
             
              - bundle install --jobs 4 --retry 2 --gemfile=lib/Gemfile --quiet
         | 
| 34 31 |  | 
| 35 32 | 
             
            build_script:
         | 
| 36 33 | 
             
              - ps: |
         | 
| 37 | 
            -
                  cmake -G "MinGW Makefiles" - | 
| 34 | 
            +
                  cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE="C:\tools\pl-build-tools\pl-build-toolchain.cmake" -DCMAKE_PREFIX_PATH="C:\tools\leatherman;C:\tools\cpp-hocon" -DCMAKE_INSTALL_PREFIX="C:\Program Files\FACTER" -DBOOST_STATIC=ON .
         | 
| 38 35 | 
             
                  mingw32-make -j2
         | 
| 39 36 |  | 
| 40 37 | 
             
            test_script:
         | 
| @@ -332,7 +332,8 @@ int main(int argc, char **argv) | |
| 332 332 | 
             
                        if (vm.count("custom-dir")) {
         | 
| 333 333 | 
             
                            custom_directories = vm["custom-dir"].as<vector<string>>();
         | 
| 334 334 | 
             
                        }
         | 
| 335 | 
            -
                         | 
| 335 | 
            +
                        bool redirect_ruby_stdout = vm.count("json") || vm.count("yaml");
         | 
| 336 | 
            +
                        facter::ruby::load_custom_facts(facts, vm.count("puppet"), redirect_ruby_stdout, custom_directories);
         | 
| 336 337 | 
             
                    }
         | 
| 337 338 |  | 
| 338 339 | 
             
                    if (!vm["no-external-facts"].as<bool>()) {
         | 
| @@ -38,7 +38,7 @@ PROJECT_NAME           = facter | |
| 38 38 | 
             
            # could be handy for archiving the generated documentation or if some version
         | 
| 39 39 | 
             
            # control system is used.
         | 
| 40 40 |  | 
| 41 | 
            -
            PROJECT_NUMBER         = 3.11. | 
| 41 | 
            +
            PROJECT_NUMBER         = 3.11.5
         | 
| 42 42 |  | 
| 43 43 | 
             
            # Using the PROJECT_BRIEF tag one can provide an optional one line description
         | 
| 44 44 | 
             
            # for a project that appears at the top of each page and should give viewer a
         | 
| @@ -21,6 +21,17 @@ namespace facter { namespace ruby { | |
| 21 21 | 
             
                 */
         | 
| 22 22 | 
             
                LIBFACTER_EXPORT bool initialize(bool include_stack_trace = false);
         | 
| 23 23 |  | 
| 24 | 
            +
                /**
         | 
| 25 | 
            +
                 * Loads custom facts into the given collection.
         | 
| 26 | 
            +
                 * Important: this function should be called from main().
         | 
| 27 | 
            +
                 * Calling this function from an arbitrary stack depth may result in segfaults during Ruby GC.
         | 
| 28 | 
            +
                 * @param facts The collection to populate with custom facts.
         | 
| 29 | 
            +
                 * @param initialize_puppet Whether puppet should be loaded to find additional facts.
         | 
| 30 | 
            +
                 * @param redirect_stdout Whether Ruby's stdout should be redirected to stderr
         | 
| 31 | 
            +
                 * @param paths The paths to search for custom facts.
         | 
| 32 | 
            +
                 */
         | 
| 33 | 
            +
                LIBFACTER_EXPORT void load_custom_facts(facter::facts::collection& facts, bool initialize_puppet, bool redirect_stdout, std::vector<std::string> const& paths = {});
         | 
| 34 | 
            +
             | 
| 24 35 | 
             
                /**
         | 
| 25 36 | 
             
                 * Loads custom facts into the given collection.
         | 
| 26 37 | 
             
                 * Important: this function should be called from main().
         | 
| @@ -0,0 +1,98 @@ | |
| 1 | 
            +
            /**
         | 
| 2 | 
            +
             * @file
         | 
| 3 | 
            +
             * Declares the Linux operating system query helper based on /etc/os-release.
         | 
| 4 | 
            +
             */
         | 
| 5 | 
            +
            #pragma once
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            #include <internal/facts/linux/os_linux.hpp>
         | 
| 8 | 
            +
            #include <facter/facts/os.hpp>
         | 
| 9 | 
            +
            #include <facter/facts/os_family.hpp>
         | 
| 10 | 
            +
            #include <boost/regex.hpp>
         | 
| 11 | 
            +
            #include <iostream>
         | 
| 12 | 
            +
            using namespace std;
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            namespace facter { namespace facts { namespace linux {
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                /**
         | 
| 17 | 
            +
                 * Responsible for determining the name/family/release of Freedesktop-compliant operating systems.
         | 
| 18 | 
            +
                 */
         | 
| 19 | 
            +
                struct os_osrelease : os_linux
         | 
| 20 | 
            +
                {
         | 
| 21 | 
            +
                    /**
         | 
| 22 | 
            +
                     * Constructs os_release based on details from /etc/os-release.
         | 
| 23 | 
            +
                     */
         | 
| 24 | 
            +
                    os_osrelease() : os_linux({"ID", "VERSION_ID"}) {}
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    /**
         | 
| 27 | 
            +
                     * Returns the release name based on the ID field from /etc/os-release
         | 
| 28 | 
            +
                     * (which has fewer variations to check for than the NAME field)
         | 
| 29 | 
            +
                     * @param distro_id Unused.
         | 
| 30 | 
            +
                     * @return Returns the OS name.
         | 
| 31 | 
            +
                     */
         | 
| 32 | 
            +
                    virtual std::string get_name(std::string const& distro_id) const override
         | 
| 33 | 
            +
                    {
         | 
| 34 | 
            +
                        auto val = _release_info.find("ID");
         | 
| 35 | 
            +
                        if (val != _release_info.end()) {
         | 
| 36 | 
            +
                            auto& id = val->second;
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                            if (id == "coreos") {
         | 
| 39 | 
            +
                                return os::coreos;
         | 
| 40 | 
            +
                            } else if (id == "cumulus-linux") {
         | 
| 41 | 
            +
                                return os::cumulus;
         | 
| 42 | 
            +
                            } else if (id == "opensuse" || id == "opensuse-leap") {
         | 
| 43 | 
            +
                                return os::open_suse;
         | 
| 44 | 
            +
                            } else if (id == "sled") {
         | 
| 45 | 
            +
                                return os::suse_enterprise_desktop;
         | 
| 46 | 
            +
                            } else if (id == "sles") {
         | 
| 47 | 
            +
                                return os::suse_enterprise_server;
         | 
| 48 | 
            +
                            }
         | 
| 49 | 
            +
                        }
         | 
| 50 | 
            +
                        return std::string();
         | 
| 51 | 
            +
                    }
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    /**
         | 
| 54 | 
            +
                     * Returns the release family based on the ID field from /etc/os-release
         | 
| 55 | 
            +
                     * (which has fewer variations to check for than the NAME field)
         | 
| 56 | 
            +
                     * @param name Unused.
         | 
| 57 | 
            +
                     * @return Returns the OS family.
         | 
| 58 | 
            +
                     */
         | 
| 59 | 
            +
                    virtual std::string get_family(std::string const& name) const override
         | 
| 60 | 
            +
                    {
         | 
| 61 | 
            +
                        auto val = _release_info.find("ID");
         | 
| 62 | 
            +
                        if (val != _release_info.end()) {
         | 
| 63 | 
            +
                            auto& id = val->second;
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                            if (id == "coreos") {
         | 
| 66 | 
            +
                                return os_family::coreos;
         | 
| 67 | 
            +
                            } else if (id == "cumulus-linux") {
         | 
| 68 | 
            +
                                return os_family::debian;
         | 
| 69 | 
            +
                            } else if (id == "opensuse" || id == "opensuse-leap" || id == "sled" || id == "sles") {
         | 
| 70 | 
            +
                                return os_family::suse;
         | 
| 71 | 
            +
                            }
         | 
| 72 | 
            +
                        }
         | 
| 73 | 
            +
                        return std::string();
         | 
| 74 | 
            +
                    }
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    /**
         | 
| 77 | 
            +
                     * Returns the OS release version based on the VERSION_ID field from /etc/os-release.
         | 
| 78 | 
            +
                     * @param name Unused.
         | 
| 79 | 
            +
                     * @param distro_release Unused.
         | 
| 80 | 
            +
                     * @return Returns the release version.
         | 
| 81 | 
            +
                     */
         | 
| 82 | 
            +
                    virtual std::string get_release(std::string const& name, std::string const& distro_release) const override
         | 
| 83 | 
            +
                    {
         | 
| 84 | 
            +
                        auto val = _release_info.find("VERSION_ID");
         | 
| 85 | 
            +
                        if (val != _release_info.end()) {
         | 
| 86 | 
            +
                            if (boost::regex_match(val->second, boost::regex("^\\d+$"))) {
         | 
| 87 | 
            +
                                // FACT-1880: when VERSION_ID doesn't specify a point-release,
         | 
| 88 | 
            +
                                // return the major version with ".0" appended so that
         | 
| 89 | 
            +
                                // os.release.minor always returns a value.
         | 
| 90 | 
            +
                                return val->second + ".0";
         | 
| 91 | 
            +
                            }
         | 
| 92 | 
            +
                            return val->second;
         | 
| 93 | 
            +
                        }
         | 
| 94 | 
            +
                        return std::string();
         | 
| 95 | 
            +
                    }
         | 
| 96 | 
            +
                };
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            }}}  // namespace facter::facts::linux
         | 
| @@ -309,6 +309,8 @@ 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
         | 
| 312 314 | 
             
                    find_if(begin(_facts), end(_facts), [&func](map<string, unique_ptr<value>>::value_type const& it) {
         | 
| 313 315 | 
             
                        return !func(it.first, it.second.get());
         | 
| 314 316 | 
             
                    });
         | 
| @@ -2,8 +2,7 @@ | |
| 2 2 | 
             
            #include <internal/facts/linux/release_file.hpp>
         | 
| 3 3 | 
             
            #include <internal/facts/linux/os_linux.hpp>
         | 
| 4 4 | 
             
            #include <internal/facts/linux/os_cisco.hpp>
         | 
| 5 | 
            -
            #include <internal/facts/linux/ | 
| 6 | 
            -
            #include <internal/facts/linux/os_cumulus.hpp>
         | 
| 5 | 
            +
            #include <internal/facts/linux/os_osrelease.hpp>
         | 
| 7 6 | 
             
            #include <facter/facts/os.hpp>
         | 
| 8 7 | 
             
            #include <facter/facts/scalar_value.hpp>
         | 
| 9 8 | 
             
            #include <facter/facts/map_value.hpp>
         | 
| @@ -29,13 +28,11 @@ namespace facter { namespace facts { namespace linux { | |
| 29 28 |  | 
| 30 29 | 
             
                static unique_ptr<os_linux> get_os()
         | 
| 31 30 | 
             
                {
         | 
| 32 | 
            -
                    auto release_info = os_linux::key_value_file(release_file::os, {" | 
| 33 | 
            -
                    auto const& name = release_info["NAME"];
         | 
| 31 | 
            +
                    auto release_info = os_linux::key_value_file(release_file::os, {"ID", "CISCO_RELEASE_INFO"});
         | 
| 34 32 | 
             
                    auto const& id = release_info["ID"];
         | 
| 35 | 
            -
                    if ( | 
| 36 | 
            -
                         | 
| 37 | 
            -
             | 
| 38 | 
            -
                        return unique_ptr<os_linux>(new os_coreos());
         | 
| 33 | 
            +
                    if (id == "coreos" || id == "cumulus-linux" || id == "opensuse" ||
         | 
| 34 | 
            +
                        id == "opensuse-leap" || id== "sled" || id == "sles") {
         | 
| 35 | 
            +
                        return unique_ptr<os_linux>(new os_osrelease());
         | 
| 39 36 | 
             
                    } else {
         | 
| 40 37 | 
             
                        auto const& cisco = release_info["CISCO_RELEASE_INFO"];
         | 
| 41 38 | 
             
                        boost::system::error_code ec;
         | 
| @@ -17,11 +17,12 @@ 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, wmi::uuid});
         | 
| 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 values {2} and {3}.", wmi::computersystemproduct, wmi::name, wmi::uuid);
         | 
| 23 23 | 
             
                    } else {
         | 
| 24 24 | 
             
                        result.product_name = wmi::get(vals, wmi::name);
         | 
| 25 | 
            +
                        result.uuid = wmi::get(vals, wmi::uuid);
         | 
| 25 26 | 
             
                    }
         | 
| 26 27 |  | 
| 27 28 | 
             
                    vals = _wmi->query(wmi::bios, {wmi::manufacturer, wmi::serialnumber});
         | 
| @@ -1,60 +1,42 @@ | |
| 1 | 
            +
            #include <leatherman/dynamic_library/dynamic_library.hpp>
         | 
| 1 2 | 
             
            #include <internal/facts/windows/kernel_resolver.hpp>
         | 
| 2 | 
            -
            #include <leatherman/windows/system_error.hpp>
         | 
| 3 | 
            -
            #include <leatherman/windows/windows.hpp>
         | 
| 4 3 | 
             
            #include <facter/facts/os.hpp>
         | 
| 5 4 | 
             
            #include <leatherman/logging/logging.hpp>
         | 
| 5 | 
            +
             | 
| 6 6 | 
             
            #include <boost/optional.hpp>
         | 
| 7 | 
            -
            #include <boost/algorithm/string/trim.hpp>
         | 
| 8 7 | 
             
            #include <boost/format.hpp>
         | 
| 9 | 
            -
            #include < | 
| 8 | 
            +
            #include <windows.h>
         | 
| 9 | 
            +
            #include <ntstatus.h>
         | 
| 10 10 |  | 
| 11 11 | 
             
            using namespace std;
         | 
| 12 | 
            -
            using namespace leatherman:: | 
| 12 | 
            +
            using namespace leatherman::dynamic_library;
         | 
| 13 | 
            +
            using RtlGetVersionPtr = NTSTATUS (WINAPI *)(PRTL_OSVERSIONINFOW);
         | 
| 13 14 |  | 
| 14 15 | 
             
            namespace facter { namespace facts { namespace windows {
         | 
| 15 16 |  | 
| 16 17 | 
             
                static boost::optional<string> get_release()
         | 
| 17 18 | 
             
                {
         | 
| 18 | 
            -
                     | 
| 19 | 
            -
                     | 
| 20 | 
            -
             | 
| 21 | 
            -
                    // and is what we use here.
         | 
| 22 | 
            -
                    auto fileName = L"Kernel32.dll";
         | 
| 23 | 
            -
                    auto fileVerSize = GetFileVersionInfoSizeW(fileName, nullptr);
         | 
| 24 | 
            -
                    if (fileVerSize == 0) {
         | 
| 25 | 
            -
                        return boost::none;
         | 
| 19 | 
            +
                    dynamic_library ntoskrnl;
         | 
| 20 | 
            +
                    if (! ntoskrnl.load("ntoskrnl.exe")) {
         | 
| 21 | 
            +
                      return boost::none;
         | 
| 26 22 | 
             
                    }
         | 
| 27 23 |  | 
| 28 | 
            -
                     | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 24 | 
            +
                    auto rtlGetVersion = reinterpret_cast<RtlGetVersionPtr>(
         | 
| 25 | 
            +
                        ntoskrnl.find_symbol("RtlGetVersion"));
         | 
| 26 | 
            +
                    if (! rtlGetVersion) {
         | 
| 27 | 
            +
                      return boost::none;
         | 
| 31 28 | 
             
                    }
         | 
| 32 29 |  | 
| 33 | 
            -
                     | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
                    if (!VerQueryValueW(buffer.data(), L"\\VarFileinfo\\Translation",
         | 
| 39 | 
            -
                        reinterpret_cast<LPVOID*>(&lpTranslate), &cbTranslate)) {
         | 
| 40 | 
            -
                        return boost::none;
         | 
| 41 | 
            -
                    }
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    // Use the 1st language found, as ProductVersion should be language-independent.
         | 
| 44 | 
            -
                    wstring subBlock = str(boost::wformat(L"\\StringFileInfo\\%04x%04x\\ProductVersion")
         | 
| 45 | 
            -
                        % lpTranslate->wLanguage % lpTranslate->wCodePage);
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                    wchar_t *version;
         | 
| 48 | 
            -
                    UINT versionLen;
         | 
| 49 | 
            -
                    if (!VerQueryValueW(buffer.data(), subBlock.c_str(), reinterpret_cast<LPVOID*>(&version), &versionLen)) {
         | 
| 50 | 
            -
                        return boost::none;
         | 
| 30 | 
            +
                    OSVERSIONINFOW versionInfo;
         | 
| 31 | 
            +
                    if (rtlGetVersion(&versionInfo) != STATUS_SUCCESS) {
         | 
| 32 | 
            +
                      LOG_DEBUG("failed to get the OS version information from RtlGetVersion");
         | 
| 33 | 
            +
                      return boost::none;
         | 
| 51 34 | 
             
                    }
         | 
| 52 35 |  | 
| 53 | 
            -
                     | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
                    boost::trim_right_if(versionStr, [](char c) { return c == '.'; });  // Remove '.'
         | 
| 36 | 
            +
                    auto versionStr = (boost::format("%1%.%2%.%3%")
         | 
| 37 | 
            +
                        % versionInfo.dwMajorVersion
         | 
| 38 | 
            +
                        % versionInfo.dwMinorVersion
         | 
| 39 | 
            +
                        % versionInfo.dwBuildNumber).str();
         | 
| 58 40 |  | 
| 59 41 | 
             
                    return versionStr;
         | 
| 60 42 | 
             
                }
         | 
| @@ -67,8 +49,6 @@ namespace facter { namespace facts { namespace windows { | |
| 67 49 | 
             
                    if (release) {
         | 
| 68 50 | 
             
                        result.release = move(*release);
         | 
| 69 51 | 
             
                        result.version = result.release;
         | 
| 70 | 
            -
                    } else {
         | 
| 71 | 
            -
                        LOG_DEBUG("failed to retrieve kernel facts: {1}", leatherman::windows::system_error());
         | 
| 72 52 | 
             
                    }
         | 
| 73 53 |  | 
| 74 54 | 
             
                    result.name = os::windows;
         | 
| @@ -2,7 +2,9 @@ | |
| 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>
         | 
| 5 6 | 
             
            #include <facter/facts/collection.hpp>
         | 
| 7 | 
            +
            #include <facter/facts/scalar_value.hpp>
         | 
| 6 8 | 
             
            #include <facter/facts/os_family.hpp>
         | 
| 7 9 | 
             
            #include <leatherman/logging/logging.hpp>
         | 
| 8 10 | 
             
            #include <leatherman/util/regex.hpp>
         | 
| @@ -10,6 +12,7 @@ | |
| 10 12 | 
             
            #include <winnt.h>
         | 
| 11 13 | 
             
            #include <Shlobj.h>
         | 
| 12 14 | 
             
            #include <map>
         | 
| 15 | 
            +
            #include <string>
         | 
| 13 16 | 
             
            #include <boost/filesystem.hpp>
         | 
| 14 17 |  | 
| 15 18 | 
             
            using namespace std;
         | 
| @@ -101,7 +104,26 @@ namespace facter { namespace facts { namespace windows { | |
| 101 104 | 
             
                    auto version = result.release.substr(0, lastDot);
         | 
| 102 105 | 
             
                    bool consumerrel = (wmi::get(vals, wmi::producttype) == "1");
         | 
| 103 106 | 
             
                    if (version == "10.0") {
         | 
| 104 | 
            -
                         | 
| 107 | 
            +
                        // Calculate the build number to distinguish between
         | 
| 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 | 
            +
                        }
         | 
| 105 127 | 
             
                    } else if (version == "6.3") {
         | 
| 106 128 | 
             
                        result.release = consumerrel ? "8.1" : "2012 R2";
         | 
| 107 129 | 
             
                    } else if (version == "6.2") {
         | 
| @@ -30,6 +30,27 @@ 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 | 
            +
             | 
| 33 54 | 
             
            namespace facter { namespace ruby {
         | 
| 34 55 |  | 
| 35 56 | 
             
                bool initialize(bool include_stack_trace)
         | 
| @@ -48,7 +69,7 @@ namespace facter { namespace ruby { | |
| 48 69 | 
             
                    return true;
         | 
| 49 70 | 
             
                }
         | 
| 50 71 |  | 
| 51 | 
            -
                void load_custom_facts(collection& facts, bool initialize_puppet, vector<string> const& paths)
         | 
| 72 | 
            +
                void load_custom_facts(collection& facts, bool initialize_puppet, bool redirect_stdout, vector<string> const& paths)
         | 
| 52 73 | 
             
                {
         | 
| 53 74 | 
             
            #ifdef _WIN32
         | 
| 54 75 | 
             
                    // Initialize WSA before resolving custom facts. The Ruby runtime does this only when running
         | 
| @@ -67,12 +88,23 @@ namespace facter { namespace ruby { | |
| 67 88 | 
             
                        }
         | 
| 68 89 | 
             
                    }
         | 
| 69 90 | 
             
                    mod.search(paths);
         | 
| 70 | 
            -
                     | 
| 91 | 
            +
                    if (redirect_stdout) {
         | 
| 92 | 
            +
                        // Redirect stdout->stderr for custom facts.
         | 
| 93 | 
            +
                        RbStdoutGuard stdout_guard{ruby};
         | 
| 94 | 
            +
                        mod.resolve_facts();
         | 
| 95 | 
            +
                    } else {
         | 
| 96 | 
            +
                        mod.resolve_facts();
         | 
| 97 | 
            +
                    }
         | 
| 71 98 | 
             
                }
         | 
| 72 99 |  | 
| 73 100 | 
             
                void load_custom_facts(collection& facts, vector<string> const& paths)
         | 
| 74 101 | 
             
                {
         | 
| 75 | 
            -
             | 
| 102 | 
            +
                    load_custom_facts(facts, false, false, paths);
         | 
| 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);
         | 
| 76 108 | 
             
                }
         | 
| 77 109 |  | 
| 78 110 | 
             
                value const* lookup(value const* value, vector<string>::iterator segment, vector<string>::iterator end) {
         | 
| @@ -40,6 +40,7 @@ set(LIBFACTER_TESTS_COMMON_SOURCES | |
| 40 40 | 
             
                "logging/logging.cc"
         | 
| 41 41 | 
             
                "log_capture.cc"
         | 
| 42 42 | 
             
                "main.cc"
         | 
| 43 | 
            +
                "mock_server.cc"
         | 
| 43 44 | 
             
                "util/string.cc"
         | 
| 44 45 | 
             
                "fixtures.cc"
         | 
| 45 46 | 
             
                "collection_fixture.cc"
         | 
| @@ -127,37 +128,20 @@ include_directories( | |
| 127 128 | 
             
                ${CPPHOCON_INCLUDE_DIRS}
         | 
| 128 129 | 
             
            )
         | 
| 129 130 |  | 
| 130 | 
            -
            # On EL 4, we run into a linking error when trying to create libraries or
         | 
| 131 | 
            -
            # executables that link in a static library with code using threads. As I
         | 
| 132 | 
            -
            # described in https://gcc.gnu.org/ml/gcc-help/2015-08/msg00035.html, we get
         | 
| 133 | 
            -
            # the error undefined reference to symbol '__tls_get_addr@@GLIBC_2.3'.
         | 
| 134 | 
            -
            # Build mock_server as a separate shared library to avoid this error.
         | 
| 135 131 | 
             
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
         | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
                 | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 132 | 
            +
            if (WIN32)
         | 
| 133 | 
            +
                # On Windows with GCC 5.2, Boost.System emits warnings that aren't correctly
         | 
| 134 | 
            +
                # suppressed by pragmas. Explicitly skip them.
         | 
| 135 | 
            +
            	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable")
         | 
| 136 | 
            +
            endif()
         | 
| 141 137 |  | 
| 142 138 | 
             
            add_executable(libfacter_test $<TARGET_OBJECTS:libfactersrc>
         | 
| 143 139 | 
             
                ${LIBFACTER_TESTS_COMMON_SOURCES}
         | 
| 144 140 | 
             
                ${LIBFACTER_TESTS_PLATFORM_SOURCES}
         | 
| 145 141 | 
             
                ${LIBFACTER_TESTS_CATEGORY_SOURCES})
         | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
            # by Boost.Log in Leatherman logging.
         | 
| 150 | 
            -
            if (WIN32)
         | 
| 151 | 
            -
                target_link_libraries(libfacter_test
         | 
| 152 | 
            -
                    ${LIBS}
         | 
| 153 | 
            -
                    ${LIBFACTER_TESTS_PLATFORM_LIBRARIES}
         | 
| 154 | 
            -
                    mock-server)
         | 
| 155 | 
            -
            else()
         | 
| 156 | 
            -
                target_link_libraries(libfacter_test
         | 
| 157 | 
            -
                    mock-server
         | 
| 158 | 
            -
                    ${LIBS}
         | 
| 159 | 
            -
                    ${LIBFACTER_TESTS_PLATFORM_LIBRARIES})
         | 
| 160 | 
            -
            endif()
         | 
| 142 | 
            +
            target_link_libraries(libfacter_test
         | 
| 143 | 
            +
                ${LIBS}
         | 
| 144 | 
            +
                ${LIBFACTER_TESTS_PLATFORM_LIBRARIES})
         | 
| 161 145 |  | 
| 162 146 | 
             
            if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND BOOST_STATIC AND LEATHERMAN_USE_LOCALES)
         | 
| 163 147 | 
             
                target_link_libraries(libfacter_test iconv)
         | 
| @@ -6,7 +6,7 @@ | |
| 6 6 | 
             
            #, fuzzy
         | 
| 7 7 | 
             
            msgid ""
         | 
| 8 8 | 
             
            msgstr ""
         | 
| 9 | 
            -
            "Project-Id-Version: FACTER 3.11. | 
| 9 | 
            +
            "Project-Id-Version: FACTER 3.11.5\n"
         | 
| 10 10 | 
             
            "Report-Msgid-Bugs-To: docs@puppet.com\n"
         | 
| 11 11 | 
             
            "POT-Creation-Date: \n"
         | 
| 12 12 | 
             
            "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         | 
| @@ -1225,11 +1225,6 @@ msgstr "" | |
| 1225 1225 | 
             
            msgid "failed adding platform facts that require WMI: {1}"
         | 
| 1226 1226 | 
             
            msgstr ""
         | 
| 1227 1227 |  | 
| 1228 | 
            -
            #. debug
         | 
| 1229 | 
            -
            #: lib/src/facts/windows/dmi_resolver.cc
         | 
| 1230 | 
            -
            msgid "WMI query returned no results for {1} with value {2}."
         | 
| 1231 | 
            -
            msgstr ""
         | 
| 1232 | 
            -
             | 
| 1233 1228 | 
             
            #. debug
         | 
| 1234 1229 | 
             
            #: lib/src/facts/windows/dmi_resolver.cc
         | 
| 1235 1230 | 
             
            msgid "WMI query returned no results for {1} with values {2} and {3}."
         | 
| @@ -1242,7 +1237,11 @@ msgstr "" | |
| 1242 1237 |  | 
| 1243 1238 | 
             
            #. debug
         | 
| 1244 1239 | 
             
            #: lib/src/facts/windows/kernel_resolver.cc
         | 
| 1245 | 
            -
            msgid "failed to  | 
| 1240 | 
            +
            msgid "failed to get the OS version information from RtlGetVersion"
         | 
| 1241 | 
            +
            msgstr ""
         | 
| 1242 | 
            +
             | 
| 1243 | 
            +
            #: lib/src/facts/windows/kernel_resolver.cc
         | 
| 1244 | 
            +
            msgid "%1%.%2%.%3%"
         | 
| 1246 1245 | 
             
            msgstr ""
         | 
| 1247 1246 |  | 
| 1248 1247 | 
             
            #. debug
         | 
| @@ -1290,6 +1289,13 @@ msgstr "" | |
| 1290 1289 | 
             
            msgid "error finding SYSTEMROOT: {1}"
         | 
| 1291 1290 | 
             
            msgstr ""
         | 
| 1292 1291 |  | 
| 1292 | 
            +
            #. debug
         | 
| 1293 | 
            +
            #: lib/src/facts/windows/operating_system_resolver.cc
         | 
| 1294 | 
            +
            msgid ""
         | 
| 1295 | 
            +
            "Could not resolve the OS release and OS major version facts from the kernel "
         | 
| 1296 | 
            +
            "version fact"
         | 
| 1297 | 
            +
            msgstr ""
         | 
| 1298 | 
            +
             | 
| 1293 1299 | 
             
            #. debug
         | 
| 1294 1300 | 
             
            #: lib/src/facts/windows/processor_resolver.cc
         | 
| 1295 1301 | 
             
            msgid "WMI processor Name, Architecture query returned no results."
         | 
| @@ -1525,6 +1531,16 @@ msgstr "" | |
| 1525 1531 | 
             
            msgid "timeout= is not supported for custom facts and will be ignored."
         | 
| 1526 1532 | 
             
            msgstr ""
         | 
| 1527 1533 |  | 
| 1534 | 
            +
            #. debug
         | 
| 1535 | 
            +
            #: lib/src/ruby/ruby.cc
         | 
| 1536 | 
            +
            msgid "Redirecting ruby's stdout to stderr"
         | 
| 1537 | 
            +
            msgstr ""
         | 
| 1538 | 
            +
             | 
| 1539 | 
            +
            #. debug
         | 
| 1540 | 
            +
            #: lib/src/ruby/ruby.cc
         | 
| 1541 | 
            +
            msgid "Restoring Ruby's stdout"
         | 
| 1542 | 
            +
            msgstr ""
         | 
| 1543 | 
            +
             | 
| 1528 1544 | 
             
            #. warning
         | 
| 1529 1545 | 
             
            #: lib/src/ruby/ruby.cc
         | 
| 1530 1546 | 
             
            msgid "Could not load puppet; some facts may be unavailable: {1}"
         | 
| @@ -207,6 +207,10 @@ namespace leatherman {  namespace ruby { | |
| 207 207 | 
             
                     * See MRI documentation.
         | 
| 208 208 | 
             
                     */
         | 
| 209 209 | 
             
                    VALUE (* const rb_gv_get)(char const*);
         | 
| 210 | 
            +
                    /**
         | 
| 211 | 
            +
                     * See MRI documentation.
         | 
| 212 | 
            +
                     */
         | 
| 213 | 
            +
                    VALUE (* const rb_gv_set)(char const*, VALUE);
         | 
| 210 214 | 
             
                    /**
         | 
| 211 215 | 
             
                     * See MRI documentation.
         | 
| 212 216 | 
             
                     */
         | 
| @@ -51,6 +51,7 @@ namespace leatherman { namespace ruby { | |
| 51 51 | 
             
                    LOAD_SYMBOL(rb_define_singleton_method),
         | 
| 52 52 | 
             
                    LOAD_SYMBOL(rb_class_new_instance),
         | 
| 53 53 | 
             
                    LOAD_SYMBOL(rb_gv_get),
         | 
| 54 | 
            +
                    LOAD_SYMBOL(rb_gv_set),
         | 
| 54 55 | 
             
                    LOAD_SYMBOL(rb_eval_string),
         | 
| 55 56 | 
             
                    LOAD_SYMBOL(rb_funcall),
         | 
| 56 57 | 
             
                    LOAD_ALIASED_SYMBOL(rb_funcallv, rb_funcall2),
         | 
| @@ -43,6 +43,11 @@ namespace leatherman { namespace windows { | |
| 43 43 | 
             
                     */
         | 
| 44 44 | 
             
                    constexpr static char const* computersystemproduct = "Win32_ComputerSystemProduct";
         | 
| 45 45 |  | 
| 46 | 
            +
                    /**
         | 
| 47 | 
            +
                     * Identifier for the WMI property UUID
         | 
| 48 | 
            +
                     */
         | 
| 49 | 
            +
                    constexpr static char const* uuid = "UUID";
         | 
| 50 | 
            +
             | 
| 46 51 | 
             
                    /**
         | 
| 47 52 | 
             
                     * Identifier for the WMI class Win32_OperatingSystem
         | 
| 48 53 | 
             
                     */
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: facter
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3.11. | 
| 4 | 
            +
              version: 3.11.5.cfacter.20181022
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Puppet
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2018- | 
| 12 | 
            +
            date: 2018-10-22 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: 
         | 
| 15 15 | 
             
            email: info@puppet.com
         | 
| @@ -181,6 +181,7 @@ files: | |
| 181 181 | 
             
            - ext/facter/facter/CMakeLists.txt
         | 
| 182 182 | 
             
            - ext/facter/facter/CONTRIBUTING.md
         | 
| 183 183 | 
             
            - ext/facter/facter/Extensibility.md
         | 
| 184 | 
            +
            - ext/facter/facter/Gemfile
         | 
| 184 185 | 
             
            - ext/facter/facter/LICENSE
         | 
| 185 186 | 
             
            - ext/facter/facter/MAINTAINERS
         | 
| 186 187 | 
             
            - ext/facter/facter/README.md
         | 
| @@ -393,9 +394,8 @@ files: | |
| 393 394 | 
             
            - ext/facter/facter/lib/inc/internal/facts/linux/networking_resolver.hpp
         | 
| 394 395 | 
             
            - ext/facter/facter/lib/inc/internal/facts/linux/operating_system_resolver.hpp
         | 
| 395 396 | 
             
            - ext/facter/facter/lib/inc/internal/facts/linux/os_cisco.hpp
         | 
| 396 | 
            -
            - ext/facter/facter/lib/inc/internal/facts/linux/os_coreos.hpp
         | 
| 397 | 
            -
            - ext/facter/facter/lib/inc/internal/facts/linux/os_cumulus.hpp
         | 
| 398 397 | 
             
            - ext/facter/facter/lib/inc/internal/facts/linux/os_linux.hpp
         | 
| 398 | 
            +
            - ext/facter/facter/lib/inc/internal/facts/linux/os_osrelease.hpp
         | 
| 399 399 | 
             
            - ext/facter/facter/lib/inc/internal/facts/linux/processor_resolver.hpp
         | 
| 400 400 | 
             
            - ext/facter/facter/lib/inc/internal/facts/linux/release_file.hpp
         | 
| 401 401 | 
             
            - ext/facter/facter/lib/inc/internal/facts/linux/uptime_resolver.hpp
         | 
| @@ -1,56 +0,0 @@ | |
| 1 | 
            -
            /**
         | 
| 2 | 
            -
             * @file
         | 
| 3 | 
            -
             * Declares the CoreOS Linux operating system query helper.
         | 
| 4 | 
            -
             */
         | 
| 5 | 
            -
            #pragma once
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            #include <internal/facts/linux/os_linux.hpp>
         | 
| 8 | 
            -
            #include <facter/facts/os.hpp>
         | 
| 9 | 
            -
            #include <facter/facts/os_family.hpp>
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            namespace facter { namespace facts { namespace linux {
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                /**
         | 
| 14 | 
            -
                 * Responsible for determining the name/family/release of CoreOS operating systems.
         | 
| 15 | 
            -
                 */
         | 
| 16 | 
            -
                struct os_coreos : os_linux
         | 
| 17 | 
            -
                {
         | 
| 18 | 
            -
                    /**
         | 
| 19 | 
            -
                     * Constructs the os_cumulus and reads /etc/os-release to gather relevant details.
         | 
| 20 | 
            -
                     */
         | 
| 21 | 
            -
                    os_coreos() : os_linux({"VERSION_ID"}) {}
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                    /**
         | 
| 24 | 
            -
                     * Returns the release name.
         | 
| 25 | 
            -
                     * @param distro_id Unused.
         | 
| 26 | 
            -
                     * @return Returns "CoreOS".
         | 
| 27 | 
            -
                     */
         | 
| 28 | 
            -
                    virtual std::string get_name(std::string const& distro_id) const override
         | 
| 29 | 
            -
                    {
         | 
| 30 | 
            -
                        return os::coreos;
         | 
| 31 | 
            -
                    }
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                    /**
         | 
| 34 | 
            -
                     * Returns the release family.
         | 
| 35 | 
            -
                     * @param name Unused.
         | 
| 36 | 
            -
                     * @return Returns "CoreOS".
         | 
| 37 | 
            -
                     */
         | 
| 38 | 
            -
                    virtual std::string get_family(std::string const& name) const override
         | 
| 39 | 
            -
                    {
         | 
| 40 | 
            -
                        return os_family::coreos;
         | 
| 41 | 
            -
                    }
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    /**
         | 
| 44 | 
            -
                     * Finds VERSION_ID from the release file contents and returns it as the release.
         | 
| 45 | 
            -
                     * @param name Unused.
         | 
| 46 | 
            -
                     * @param distro_release Unused.
         | 
| 47 | 
            -
                     * @return Returns the release version.
         | 
| 48 | 
            -
                     */
         | 
| 49 | 
            -
                    virtual std::string get_release(std::string const& name, std::string const& distro_release) const override
         | 
| 50 | 
            -
                    {
         | 
| 51 | 
            -
                        auto val = _release_info.find("VERSION_ID");
         | 
| 52 | 
            -
                        return (val != _release_info.end()) ? val->second : std::string();
         | 
| 53 | 
            -
                    }
         | 
| 54 | 
            -
                };
         | 
| 55 | 
            -
             | 
| 56 | 
            -
            }}}  // namespace facter::facts::linux
         | 
| @@ -1,56 +0,0 @@ | |
| 1 | 
            -
            /**
         | 
| 2 | 
            -
             * @file
         | 
| 3 | 
            -
             * Declares the Cumulus Linux operating system query helper.
         | 
| 4 | 
            -
             */
         | 
| 5 | 
            -
            #pragma once
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            #include <internal/facts/linux/os_linux.hpp>
         | 
| 8 | 
            -
            #include <facter/facts/os.hpp>
         | 
| 9 | 
            -
            #include <facter/facts/os_family.hpp>
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            namespace facter { namespace facts { namespace linux {
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                /**
         | 
| 14 | 
            -
                 * Responsible for determining the name/family/release of Cumulus operating systems.
         | 
| 15 | 
            -
                 */
         | 
| 16 | 
            -
                struct os_cumulus : os_linux
         | 
| 17 | 
            -
                {
         | 
| 18 | 
            -
                    /**
         | 
| 19 | 
            -
                     * Constructs the os_cumulus and reads /etc/os-release to gather relevant details.
         | 
| 20 | 
            -
                     */
         | 
| 21 | 
            -
                    os_cumulus() : os_linux({"VERSION_ID"}) {}
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                    /**
         | 
| 24 | 
            -
                     * Returns the release name.
         | 
| 25 | 
            -
                     * @param distro_id Unused.
         | 
| 26 | 
            -
                     * @return Returns "CumulusLinux".
         | 
| 27 | 
            -
                     */
         | 
| 28 | 
            -
                    virtual std::string get_name(std::string const& distro_id) const override
         | 
| 29 | 
            -
                    {
         | 
| 30 | 
            -
                        return os::cumulus;
         | 
| 31 | 
            -
                    }
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                    /**
         | 
| 34 | 
            -
                     * Returns the release family.
         | 
| 35 | 
            -
                     * @param name Unused.
         | 
| 36 | 
            -
                     * @return Returns "Debian".
         | 
| 37 | 
            -
                     */
         | 
| 38 | 
            -
                    virtual std::string get_family(std::string const& name) const override
         | 
| 39 | 
            -
                    {
         | 
| 40 | 
            -
                        return os_family::debian;
         | 
| 41 | 
            -
                    }
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    /**
         | 
| 44 | 
            -
                     * Finds VERSION_ID from the release file contents and returns it as the release.
         | 
| 45 | 
            -
                     * @param name Unused.
         | 
| 46 | 
            -
                     * @param distro_release Unused.
         | 
| 47 | 
            -
                     * @return Returns the release version.
         | 
| 48 | 
            -
                     */
         | 
| 49 | 
            -
                    virtual std::string get_release(std::string const& name, std::string const& distro_release) const override
         | 
| 50 | 
            -
                    {
         | 
| 51 | 
            -
                        auto val = _release_info.find("VERSION_ID");
         | 
| 52 | 
            -
                        return (val != _release_info.end()) ? val->second : std::string();
         | 
| 53 | 
            -
                    }
         | 
| 54 | 
            -
                };
         | 
| 55 | 
            -
             | 
| 56 | 
            -
            }}}  // namespace facter::facts::linux
         |