voxpupuli / rspec-puppet-facts

Simplify your unit tests by looping on every supported Operating System and populating facts.
Apache License 2.0
61 stars 53 forks source link

File resource is trying to load Windows provider on a non-Windows computer #68

Open glennsarti opened 6 years ago

glennsarti commented 6 years ago

With v1.9.0 having better Windows support, it has exposed a possible issue with loading providers.

In the puppet_agent module, running https://github.com/puppetlabs/puppetlabs-puppet_agent/blob/master/spec/classes/puppet_agent_spec.rb with v 1.8.0 of rspec-puppet-facts gem, they pass correctly.

When I run with v1.9.0 I get errrors such as;

  8) puppet_agent supported operating systems on ubuntu-16.04-x86_64 puppet_agent class without any parameters should compile into a catalogue without dependency cycles
     Failure/Error: it { is_expected.to compile.with_all_deps }

     NoMethodError:
       undefined method `supports_acl?' for File[sources.list](provider=windows):Puppet::Type::File::ProviderWindows
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/provider/file/windows.rb:84:in `validate'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/type/file.rb:394:in `block (2 levels) in <top (required)>'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/type.rb:2402:in `initialize'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/type/file.rb:491:in `initialize'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/resource.rb:461:in `new'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/resource.rb:461:in `to_ral'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/resource/catalog.rb:640:in `block in to_catalog'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/resource/catalog.rb:632:in `each'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/resource/catalog.rb:632:in `to_catalog'
     # /usr/local/bundle/gems/puppet-5.4.0/lib/puppet/resource/catalog.rb:513:in `to_ral'
     # /usr/local/bundle/gems/rspec-puppet-2.6.9/lib/rspec-puppet/matchers/compile.rb:142:in `cycles_found?'
     # /usr/local/bundle/gems/rspec-puppet-2.6.9/lib/rspec-puppet/matchers/compile.rb:25:in `matches?'
     # ./spec/classes/puppet_agent_spec.rb:154:in `block (7 levels) in <top (required)>'

Note that it's trying to load the Windows File resource provider.

So what I did was run ONLY ubuntu-16.04-x86_64 tests and they pass. If the Windows tests run prior they fail with error above.

It appears that the first invocation is determining the default provider.

To test this I changed: https://github.com/puppetlabs/puppetlabs-puppet_agent/blob/master/spec/classes/puppet_agent_spec.rb#L75

to (ubuntu only)

context "on #{os}", :if => (os == 'ubuntu-16.04-x86_64') do

to (windows -> windows -> ubuntu)

context "on #{os}", :if => (os == 'windows-2008 R2-x64' || os == 'windows-2012-x64' || os == 'ubuntu-16.04-x86_64') do

Environment: Docker on Windows Linux bdf55e700bbe 4.9.60-linuxkit-aufs #1 SMP Mon Nov 6 16:00:12 UTC 2017 x86_64 GNU/Linux

Puppet facts

root@bdf55e700bbe:/project# bundle exec puppet facts
{
  "name": "bdf55e700bbe.gallifrey.local",
  "values": {
    "puppetversion": "5.4.0",
    "kernel": "Linux",
    "kernelrelease": "4.9.60-linuxkit-aufs",
    "facterversion": "2.5.1",
    "partitions": {
      "sda1": {
        "size": "125827072",
        "mount": "/etc/resolv.conf"
      }
    },
    "operatingsystem": "Debian",
    "domain": "gallifrey.local",
    "operatingsystemmajrelease": "8",
    "timezone": "UTC",
    "selinux": false,
    "uptime_days": 0,
    "physicalprocessorcount": 1,
    "os": {
      "name": "Debian",
      "family": "Debian",
      "release": {
        "major": "8",
        "minor": "8",
        "full": "8.8"
      }
    },
    "rubyplatform": "x86_64-linux",
    "virtual": "docker",
    "is_virtual": true,
    "architecture": "amd64",
    "hardwaremodel": "x86_64",
    "uptime_hours": 3,
    "processors": {
      "models": [
        "Intel(R) Core(TM) i7-7560U CPU @ 2.40GHz",
        "Intel(R) Core(TM) i7-7560U CPU @ 2.40GHz"
      ],
      "count": 2,
      "physicalcount": 1
    },
    "processor0": "Intel(R) Core(TM) i7-7560U CPU @ 2.40GHz",
    "processor1": "Intel(R) Core(TM) i7-7560U CPU @ 2.40GHz",
    "processorcount": 2,
    "interfaces": "",
    "ipaddress": "172.17.0.2",
    "osfamily": "Debian",
    "operatingsystemrelease": "8.8",
    "kernelmajversion": "4.9",
    "rubysitedir": "/usr/local/lib/ruby/site_ruby/2.1.0",
    "uptime_seconds": 11444,
    "fqdn": "bdf55e700bbe.gallifrey.local",
    "filesystems": "ext2,ext3,ext4,iso9660,msdos,squashfs,udf,vfat,xfs",
    "uniqueid": "11ac0200",
    "path": "/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
    "blockdevice_sr0_size": 443424768,
    "blockdevice_sr0_vendor": "Msft",
    "blockdevice_sr0_model": "Virtual DVD-ROM",
    "blockdevice_sda_size": 64424509440,
    "blockdevice_sda_vendor": "Msft",
    "blockdevice_sda_model": "Virtual Disk",
    "blockdevice_sr1_size": 174080,
    "blockdevice_sr1_vendor": "Msft",
    "blockdevice_sr1_model": "Virtual DVD-ROM",
    "blockdevices": "sda,sr0,sr1",
    "gid": "root",
    "system_uptime": {
      "seconds": 11444,
      "hours": 3,
      "days": 0,
      "uptime": "3:10 hours"
    },
    "hostname": "bdf55e700bbe",
    "rubyversion": "2.1.10",
    "kernelversion": "4.9.60",
    "ps": "ps -ef",
    "memorysize": "1.93 GB",
    "memoryfree": "1.53 GB",
    "swapsize": "1024.00 MB",
    "swapfree": "1023.83 MB",
    "swapsize_mb": "1024.00",
    "swapfree_mb": "1023.83",
    "memorysize_mb": "1980.77",
    "memoryfree_mb": "1565.25",
    "hardwareisa": "unknown",
    "id": "root",
    "uptime": "3:10 hours",
    "clientcert": "bdf55e700bbe.gallifrey.local",
    "clientversion": "5.4.0",
    "clientnoop": false
  },
  "timestamp": "2018-02-26T06:52:36.884490600+00:00",
  "expiration": "2018-02-26T07:22:36.884672700+00:00"
}
ghoneycutt commented 5 years ago

@glennsarti is this still an issue or was it fixed by MODULES-6686 ?

glennsarti commented 5 years ago

Wasn't really fixed MODULES-6686. It just added a bunch of guards.

In particular, there's still a workaround in place for this issue

https://github.com/puppetlabs/puppetlabs-puppet_agent/pull/275/files#diff-dd7937600c4fa756c1d8e06ddbcf61e9R84