Uploaded image for project: 'Puppet'
  1. Puppet
  2. PUP-2788

Puppet package source check fails with DFS share

    XMLWordPrintable

Details

    • Bug
    • Status: Closed
    • Normal
    • Resolution: Fixed
    • PUP 3.6.2
    • PUP 4.4.2
    • Types and Providers
    • All open source edition

      Client:
      Windows Server 2012 R2
      Puppet 3.6.2
      ruby 1.9.3p484 (2013-11-22) [i386-mingw32]

      Master:
      CentOS
      Puppet 3.6.2

    Description

      package { 'NetFx452':
             ensure          => installed,
             source          => '//dfs_share/software/dotNetFx452_Full_x86_x64.exe',
             install_options => ['/q'],
          }
      

      fails with error

      Error: The source does not exist: '//dfs_share/software/dotNetFx452_Full_x86_x64.exe'
      

      Digging through the source code (I'm one of those dangerous users ) it works fine if I revert the change in package.rb from this commit
      https://github.com/puppetlabs/puppet/commit/780ecb238d47f1ab5d6ce18fc8e38f98a12d66c0#diff-2499957120d586e4d51a5c151467348b

      Digging a little further into the current code it appears the file has the flag indicating it as a sym link, FILE_ATTRIBUTE_REPARSE_POINT, so Puppet::FileSystem::File19Windows.symlink? returns true, but Puppet::FileSystem::File19Windows.readlink returns "".

      Some of my tom-hackery here...

      C:\Windows\system32>irb
      irb(main):001:0> require 'C:\Program Files (x86)\Puppet Labs\Puppet\puppet\lib\puppet.rb'
      => true
      irb(main):004:0> Puppet::FileSystem::exist?('//dfs_share/software/jdk6/jdk-6u45-windows-x64.exe')
      => false
      irb(main):005:0> File.exist?('//dfs_share/software/jdk6/jdk-6u45-windows-x64.exe')
      => true
      irb(main):006:0> Puppet::Util::Windows::File.symlink?('//dfs_share/software/jdk6/jdk-6u45-windows-x64.exe')
      => true
      irb(main):006:0> Puppet::Util::Windows::File.symlink?('//actual_server/software/jdk6/jdk-6u45-windows-x64.exe')
      => true
      irb(main):007:0> Puppet::Util::Windows::File.readlink('//dfs_share/software/jdk6/jdk-6u45-windows-x64.exe')
      => ""
      irb(main):017:0> Puppet::Util::Windows::File.get_file_attributes('//actual_server/software/jdk6/jdk-6u45-windows-x64.exe')
      => 1568
      irb(main):018:0> 1568 & 0x400
      => 1024 # FILE_ATTRIBUTE_REPARSE_POINT = 0x400
      

      Stack trace for reproducing with puppet resource:

      PS C:\temp> puppet resource package ensure=installed source='//vmdfsp01-hs/software/dotNet/dotNetFx452_Full_x86_x64.exe'
       --trace --debug --verbose
      Debug: Puppet::Type::Package::ProviderJgem: file jgem does not exist
      Debug: Puppet::Type::Package::ProviderPe_gem: file /opt/puppet/bin/gem does not exist
      Debug: Puppet::Type::Package::ProviderAix: file /usr/bin/lslpp does not exist
      Debug: Puppet::Type::Package::ProviderDpkg: file /usr/bin/dpkg does not exist
      Debug: Puppet::Type::Package::ProviderApt: file /usr/bin/apt-get does not exist
      Debug: Puppet::Type::Package::ProviderAptitude: file /usr/bin/aptitude does not exist
      Debug: Puppet::Type::Package::ProviderRpm: file rpm does not exist
      Debug: Puppet::Type::Package::ProviderAptrpm: file apt-get does not exist
      Debug: Puppet::Type::Package::ProviderSun: file /usr/bin/pkginfo does not exist
      Debug: Puppet::Type::Package::ProviderFink: file /sw/bin/fink does not exist
      Debug: Puppet::Type::Package::ProviderOpenbsd: file pkg_info does not exist
      Debug: Puppet::Type::Package::ProviderFreebsd: file /usr/sbin/pkg_info does not exist
      Debug: Puppet::Type::Package::ProviderHpux: file /usr/sbin/swinstall does not exist
      Debug: Puppet::Type::Package::ProviderNim: file /usr/sbin/nimclient does not exist
      Debug: Puppet::Type::Package::ProviderOpkg: file opkg does not exist
      Debug: Puppet::Type::Package::ProviderPacman: file /usr/bin/pacman does not exist
      Debug: Puppet::Type::Package::ProviderPkg: file /usr/bin/pkg does not exist
      Debug: Puppet::Type::Package::ProviderPkgin: file pkgin does not exist
      Debug: Puppet::Type::Package::ProviderPortage: file /usr/bin/emerge does not exist
      Debug: Puppet::Type::Package::ProviderPorts: file /usr/local/sbin/portupgrade does not exist
      Debug: Puppet::Type::Package::ProviderPortupgrade: file /usr/local/sbin/portupgrade does not exist
      Debug: Puppet::Type::Package::ProviderRug: file /usr/bin/rug does not exist
      Debug: Puppet::Type::Package::ProviderSunfreeware: file pkg-get does not exist
      Debug: Puppet::Type::Package::ProviderUp2date: file /usr/sbin/up2date-nox does not exist
      Debug: Puppet::Type::Package::ProviderUrpmi: file urpmi does not exist
      Debug: Puppet::Type::Package::ProviderYum: file yum does not exist
      Debug: Puppet::Type::Package::ProviderZypper: file /usr/bin/zypper does not exist
      Debug: /Package[ensure=installed]: Provider windows does not support features virtual_packages; not managing attribute a
      llow_virtual
      Debug: Loaded state in 0.13 seconds
      Debug: Failed to load library 'selinux' for feature 'selinux'
      Debug: Prefetching windows resources for package
      Error: The source does not exist: '//vmdfsp01-hs/software/dotNet/dotNetFx452_Full_x86_x64.exe'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/util/errors.rb:104:in `fail'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/provider/package/windows/package.rb:61:in `installer_class'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/provider/package/windows.rb:58:in `install'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/type/package.rb:73:in `block (3 levels) in <module:Puppet>'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/property.rb:197:in `call_valuemethod'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/property.rb:498:in `set'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/property.rb:581:in `sync'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction/resource_harness.rb:191:in `sync'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction/resource_harness.rb:128:in `sync_if_needed'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction/resource_harness.rb:81:in `perform_changes'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction/resource_harness.rb:20:in `evaluate'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction.rb:174:in `apply'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction.rb:187:in `eval_resource'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction.rb:117:in `call'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction.rb:117:in `block (2 levels) in evaluate'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/util.rb:327:in `block in thinmark'
      C:/Program Files (x86)/Puppet Labs/Puppet/sys/ruby/lib/ruby/1.9.1/benchmark.rb:295:in `realtime'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/util.rb:326:in `thinmark'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction.rb:117:in `block in evaluate'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/graph/relationship_graph.rb:118:in `traverse'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction.rb:108:in `evaluate'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/resource/catalog.rb:167:in `block in apply'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/util/log.rb:153:in `with_destination'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/transaction/report.rb:112:in `as_logging_destination'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/resource/catalog.rb:166:in `apply'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/indirector/resource/ral.rb:41:in `save'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/indirector/indirection.rb:283:in `save'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/application/resource.rb:219:in `find_or_save_resources'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/application/resource.rb:143:in `main'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/application.rb:379:in `run_command'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/application.rb:371:in `block (2 levels) in run'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/application.rb:477:in `plugin_hook'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/application.rb:371:in `block in run'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/util.rb:479:in `exit_on_fail'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/application.rb:371:in `run'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/util/command_line.rb:137:in `run'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/util/command_line.rb:91:in `execute'
      C:/Program Files (x86)/Puppet Labs/Puppet/puppet/bin/puppet:8:in `<main>'
      Error: /Package[ensure=installed]/ensure: change from absent to present failed: The source does not exist: '//vmdfsp01-h
      s/software/dotNet/dotNetFx452_Full_x86_x64.exe'
      Debug: Finishing transaction 37765356
      Debug: Storing state
      Debug: Stored state in 0.14 seconds
      package { 'ensure=installed':
        ensure => 'absent',
      }
      PS C:\temp>
      

      All works fine using a local share so may be something to do with (our?) DFS share.

      Attachments

        Issue Links

          Activity

            People

              krutisfood Kurt Gardiner
              krutisfood Kurt Gardiner
              Kurt Wall Kurt Wall
              Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Zendesk Support