22
33# Helper to determine the version of Puppet
44
5- require 'fileutils '
6- require 'open3 '
7- require 'shellwords '
5+ require 'logger '
6+ require 'stringio '
7+ require_relative 'scriptrunner '
88
99module OctocatalogDiff
1010 module Util
@@ -17,19 +17,24 @@ class PuppetVersion
1717 def self . puppet_version ( puppet , options = { } )
1818 raise ArgumentError , 'Puppet binary was not supplied' if puppet . nil?
1919 raise Errno ::ENOENT , "Puppet binary #{ puppet } doesn't exist" unless File . file? ( puppet )
20- cmdline = [ Shellwords . escape ( puppet ) , '--version' ] . join ( ' ' )
2120
22- # This is the environment provided to the puppet command.
23- env = {
24- 'HOME' => ENV [ 'HOME' ] ,
25- 'PATH' => ENV [ 'PATH' ] ,
26- 'PWD' => File . dirname ( puppet )
21+ sr_opts = {
22+ logger : Logger . new ( StringIO . new ) ,
23+ default_script : 'puppet-version/puppet-version.sh' ,
24+ override_script_path : options [ :override_script_path ]
2725 }
28- pass_env_vars = options . fetch ( :pass_env_vars , [ ] )
29- pass_env_vars . each { |var | env [ var ] ||= ENV [ var ] }
30- out , err , _status = Open3 . capture3 ( env , cmdline , unsetenv_others : true , chdir : env [ 'PWD' ] )
31- return Regexp . last_match ( 1 ) if out =~ /^([\d \. ]+)\s *$/
32- raise "Unable to determine Puppet version: #{ out } #{ err } "
26+
27+ script = OctocatalogDiff ::Util ::ScriptRunner . new ( sr_opts )
28+
29+ sr_run_opts = {
30+ :working_dir => File . dirname ( puppet ) ,
31+ :pass_env_vars => options [ :pass_env_vars ] ,
32+ 'OCD_PUPPET_BINARY' => puppet
33+ }
34+
35+ output = script . run ( sr_run_opts )
36+ return Regexp . last_match ( 1 ) if output =~ /^([\d \. ]+)\s *$/
37+ raise "Unable to determine Puppet version: #{ script . output } "
3338 end
3439 end
3540 end
0 commit comments