mixlibrary-core 0.0.10-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7c83fe0d62a694a7e1dad5cd238947981c4dde9d
4
+ data.tar.gz: 8148c0655f4d391e8266b0af0bbb14a2f4f296ce
5
+ SHA512:
6
+ metadata.gz: 00ccd0f0074d345e5d3df36ab60636cc6fb417f19def1177c8fea53e3a4b8ebf5bd732a3c874ab61e22de95e4244d4d4b07157a74b793bd3231bae3b4357adb1
7
+ data.tar.gz: 1b22b143753da755ce012bb253bcda829c196ad6441fe7f58216d0961b536a60322da1385fca7b5cd53649c8ab91b9fcce10904579c0658030e9fbac3ba35beb
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2014 EBSCO Information Services
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # Mixlibrary-Core
2
+ [![Build Status Master](https://api.travis-ci.org/ebsco/mixlibrary-core.svg?branch=master)](https://travis-ci.org/ebsco/mixlibrary-core)
3
+
4
+ Wraps some provider functionality from chef into easily consumable ruby classes that do not have the extra baggage of being dependent on Chef data objects. Node object, Environment etc.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'mixlibrary-core'
11
+
12
+ And then execute:
13
+
14
+ $ bundle install
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install mixlibrary-core
19
+
20
+ ## How to Install via Chef Recipe
21
+ * [Recipe Install Sample](https://github.com/ebsco/mixlibrary-core/blob/master/Samples/SampleRecipeDeployment.rb)
22
+
23
+ ## Documentation
24
+ * Uses yard to document classes and methods. Generate docs or automatic documentation: http://www.rubydoc.info
25
+ * rake doc
26
+
27
+ ## Usage
28
+
29
+ ### Windows Oriented
30
+
31
+ #### Powershell Scripts
32
+ Needed ability to execute powershell scripts and get the powershell process back. So to execute a powershell script:
33
+
34
+ ```
35
+ require 'mixlibrary/core/apps/shell'
36
+
37
+ script= <<-EOF
38
+ write-host "Hello 'World'"
39
+ EOF
40
+
41
+ procobj = Mixlibrary::Core::Shell.windows_script_out!(:powershell,script)
42
+ ```
43
+
44
+ #### Batch
45
+ Not Implemented yet
46
+
47
+ ### Linux Oriented
48
+
49
+
50
+ ## Contributing
51
+ # Run All the Tests on your platform and build the gem
52
+
53
+ bundle install
54
+
55
+ bundle exec rake
56
+
57
+
58
+
59
+
60
+ 1. Fork it (http://github.com/<my-github-username>/mixlibrary-core/fork)
61
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
62
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
63
+ 4. Push to the branch (`git push origin my-new-feature`)
64
+ 5. Create new Pull Request
@@ -0,0 +1,7 @@
1
+ #only needed for testing outside of chef executions. Should not be called from within a Chef Run
2
+ unless defined?(Chef::Mixin::ShellOut)
3
+ require 'chef'
4
+ end
5
+ unless defined?(Chef::Log)
6
+ require 'chef'
7
+ end
@@ -0,0 +1,3 @@
1
+ require "mixlibrary/core/apps/_dependencies"
2
+
3
+ require "mixlibrary/core/shell/app"
@@ -0,0 +1,4 @@
1
+ require "mixlibrary/core/apps/_dependencies"
2
+
3
+ require 'mixlibrary/core/utilities/ruby_info'
4
+ require "mixlibrary/core/utilities/windows_architecture_helper"
@@ -0,0 +1,55 @@
1
+ #This file defines the typical entrypoint into this shell code base. Other entrypoints can be used, but this one is currently made easiest
2
+ #by including an apps folder at the top level and including this file to get the pieces that are needed.
3
+
4
+ #Could you easily enough require the powershell.rb directly and just outright call it, sure. But most if not all of this code should be stateless. This
5
+ #implies static methods should be used. After a bunch of reading, there seems to be no real consensus on where static methods belong. I like the idea of classes
6
+ #but I found more people sticking these methods in the base module, which is what I am doing here. So the way one can interpret this file is it is the base methods
7
+ #that are exposed in its entirety for the Shell (sub-module) within this Gem. Since everything is stateless no need to expose classes directly unless it is overwhelmingly
8
+ #more complicated and many methods would need to be exposed (Scalability). (We are just scripting after all....)
9
+
10
+ require 'mixlibrary/core/shell/scripts/powershell'
11
+ require "mixlibrary/core/shell/shell_call"
12
+
13
+ module Mixlibrary
14
+ module Core
15
+ module Shell
16
+
17
+ #########################
18
+ #Scripts
19
+ #########################
20
+ def self.windows_script_out(shellType,script, options=nil, flags=nil,desiredarchitecture=nil)
21
+ return run_windows_script(shellType,false,script, options, flags,desiredarchitecture)
22
+ end
23
+
24
+ def self.windows_script_out!(shellType,script, options=nil, flags=nil,desiredarchitecture=nil )
25
+ return run_windows_script(shellType,true,script, options, flags,desiredarchitecture)
26
+ end
27
+
28
+ #########################
29
+ #Shell Out
30
+ #########################
31
+ def self.shell_out!(command, options=nil)
32
+ shellclass=Shell::ShellCall.new
33
+ return shellclass.shell!(command, options)
34
+ end
35
+
36
+ def self.shell_out(command, options=nil)
37
+ shellclass=Shell::ShellCall.new
38
+ return shellclass.shell(command, options)
39
+ end
40
+
41
+ private
42
+ def self.run_windows_script(shellType, validate, script, options, flags, architecture)
43
+ case shellType
44
+ when :powershell
45
+
46
+ obj= Shell::Scripts::Powershell.new(script, validate, options, flags,architecture)
47
+ return obj.orchestrate
48
+
49
+ else
50
+ raise "Shell not supported. Currently supports: :powershell for now!"
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,32 @@
1
+ require "mixlibrary/core/shell/scripts/shelloutwrapper"
2
+
3
+ module Mixlibrary
4
+ module Core
5
+ module Shell
6
+ class Scripts
7
+
8
+ #Base class for all script classes. Provides an Interface of sorts that all other classes must implement and also provides the base methods that would need to be implemented.
9
+ class Base
10
+
11
+ #Orchestrates running the script. Might be as simple as calling shell_out or more complicated like doing syntax validation of the script before execution
12
+ def orchestrate
13
+ raise "Not Implemented Exception"
14
+ end
15
+
16
+ protected
17
+
18
+ def run_command(shell_executable, flags, filename_prefix, file_extension, code,shellout_options, eval_error)
19
+ shellobj =Scripts::ShellOutWrapper.new(shell_executable, flags, filename_prefix, file_extension, code, shellout_options)
20
+
21
+ if(eval_error)
22
+ return shellobj.run_command!
23
+ else
24
+ return shellobj.run_command
25
+ end
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,145 @@
1
+ #Runs powershell scripts with the least amount of intrusion possible. We do some syntax checking and validation that the script did not end badly, but other than that, we
2
+ #try to leave the executing script in the hands of the developer.
3
+ require "chef"
4
+ require "mixlibrary/core/shell/scripts/windows_script"
5
+
6
+ module Mixlibrary
7
+ module Core
8
+ module Shell
9
+ class Scripts
10
+ class Powershell < WindowsScript
11
+ @originalScript =nil
12
+ @validate =nil
13
+ @options =nil
14
+ @flagoverrides =nil
15
+
16
+ def initialize(script, validate, options, flags, architecture = nil)
17
+ super(architecture)
18
+ @originalScript=script
19
+ @options = options
20
+ @validate=validate
21
+ @flagoverrides=flags
22
+ end
23
+
24
+ def orchestrate
25
+ #Powershell kind of sucks with syntax checking.
26
+ #If any part of the script syntactically fails it will exit with a clean exit code of 0
27
+ #So this forced our hand to call powershell twice for every script call.
28
+ #1 - Put passed in script in a function to see if any standard error is generated -
29
+ #only will happen if syntax is incorrect since function is never called
30
+ #2 - Run the user script with exception wraps to guarantee some exit status
31
+ syntax_check()
32
+
33
+ myscriptstring = finalscript()
34
+ Chef::Log::debug("Script Contents:")
35
+ Chef::Log::debug("-----------------------------------------------------")
36
+ Chef::Log::debug(myscriptstring)
37
+ Chef::Log::debug("-----------------------------------------------------")
38
+ return run_command(shell,flags,filename,file_extension, myscriptstring, @options, @validate)
39
+ end
40
+
41
+ private
42
+
43
+ EXIT_STATUS_EXITCONVERSION = <<-EOF
44
+ \#This function changes the exit code as desired back to ruby code.
45
+ function exit-mixlibpowershell([int] $exitcode){
46
+ [Environment]::Exit($exitcode)
47
+ }
48
+ EOF
49
+
50
+ EXIT_STATUS_EXCEPTION_HANDLER= <<-EOF
51
+ trap [Exception]{
52
+ write-error "Trapped in Trap Exception block" -erroraction continue;
53
+ write-error -exception ($_.Exception.Message) -erroraction continue;
54
+ exit-mixlibpowershell 1
55
+ }
56
+ EOF
57
+
58
+ EXIT_STATUS_RESET_SCRIPT= <<-EOF
59
+ $LASTEXITCODE=0
60
+ EOF
61
+
62
+ #Make this set-variable call a read only. Technically can be overridden but most of PS scripts that set this setting,
63
+ #usually try to set this by doing things like $ERRORACTIONPREFERENCE="Stop"
64
+ #Generally speaking this is the best way to handle this situation. We will need to determine if there are many dependent scripts
65
+ #that depend on being able to set this setting.
66
+ EXIT_STATUS_INTIALIZATION= <<-EOF
67
+
68
+ Set-Variable -Name ERRORACTIONPREFERENCE -Value "STOP" -Scope Script -Option "ReadOnly" -force
69
+ \#$ErrorActionPreference="STOP"
70
+ try{
71
+ EOF
72
+
73
+ EXIT_STATUS_POST= <<-EOF
74
+ exit-mixlibpowershell $LASTEXITCODE
75
+ }
76
+ catch{
77
+ write-error "Trapped in Catch block" -erroraction continue;
78
+ write-error -exception ($_.Exception) -erroraction continue;
79
+ exit-mixlibpowershell 1
80
+ }
81
+ EOF
82
+
83
+ #Validate valid powershell was passed in.
84
+ def syntax_check
85
+ local_script_contents=("function testme(){ \n #{@originalScript.to_s} \n} \n")
86
+
87
+ result = run_command(shell,flags,filename,file_extension, local_script_contents, @options, false)
88
+ #puts result.inspect
89
+ if(result.stderr.length >= 1 || result.exitstatus !=0)
90
+ #puts "Standard Output: \n #{result.stdout}"
91
+ #puts "Standard Error: \n #{result.stderr}"
92
+ raise RuntimeError,"Did not syntactically pass the powershell check. \n Standard out: #{result.stdout} \n Standard Error:#{result.stderr}"
93
+ end
94
+ end
95
+
96
+ def finalscript
97
+ changed_script =
98
+ EXIT_STATUS_EXITCONVERSION +
99
+ EXIT_STATUS_EXCEPTION_HANDLER +
100
+ EXIT_STATUS_RESET_SCRIPT +
101
+ EXIT_STATUS_INTIALIZATION +
102
+ @originalScript +
103
+ EXIT_STATUS_POST
104
+
105
+ return changed_script
106
+ end
107
+
108
+ def flags
109
+ flags = [
110
+ # Hides the copyright banner at startup.
111
+ "-NoLogo",
112
+ # Does not present an interactive prompt to the user.
113
+ "-NonInteractive",
114
+ # Does not load the Windows PowerShell profile.
115
+ "-NoProfile",
116
+ # always set the ExecutionPolicy flag
117
+ # see http://technet.microsoft.com/en-us/library/ee176961.aspx
118
+ "-ExecutionPolicy RemoteSigned",
119
+ # Powershell will hang if STDIN is redirected
120
+ # http://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
121
+ "-InputFormat None",
122
+
123
+ "-File"
124
+ ]
125
+ return @flagoverrides if @flagoverrides != nil
126
+ return flags.join(' ')
127
+ end
128
+
129
+ def shell
130
+ return "powershell.exe"
131
+ end
132
+
133
+ def filename
134
+ return "tempPSchef"
135
+ end
136
+
137
+ def file_extension
138
+ return ".ps1"
139
+ end
140
+
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,111 @@
1
+ #Wraps calling shell out with any script file. Will create the script file execute the shell out command and delete the file once complete
2
+
3
+ require "mixlibrary/core/shell/shell_call"
4
+ module Mixlibrary
5
+ module Core
6
+ module Shell
7
+ class Scripts
8
+ class ShellOutWrapper
9
+ @exe
10
+ @flags
11
+ @filename
12
+ @fileext
13
+ @code
14
+ @shellout_options
15
+
16
+ #runtime
17
+ @script_file
18
+
19
+ def initialize(exe, flags, filename, fileext, code, shellout_options)
20
+ @exe=exe
21
+ @flags=flags
22
+ @filename=filename
23
+ @fileext=fileext
24
+ @code=code
25
+ if(shellout_options==nil)
26
+ @shellout_options= Hash.new()
27
+ else
28
+ @shellout_options=shellout_options
29
+ end
30
+ end
31
+
32
+ public
33
+ #Supported options
34
+ #opts[:domain]
35
+ #opts[:password]
36
+ #opts[:timeout] = @new_resource.timeout || 3600
37
+ #opts[:returns] = @new_resource.returns if @new_resource.returns
38
+ #opts[:environment] = @new_resource.environment if @new_resource.environment
39
+ #opts[:user] = @new_resource.user if @new_resource.user
40
+ #opts[:group] = @new_resource.group if @new_resource.group
41
+ #opts[:cwd] = @new_resource.cwd if @new_resource.cwd
42
+ #opts[:umask] = @new_resource.umask if @new_resource.umask
43
+ #opts[:log_level] = :info
44
+ #opts[:log_tag] = @new_resource.to_s
45
+ #cmd = Chef::ShellOut.new("apachectl", "start", :user => 'www', :env => nil, :cwd => '/tmp')
46
+ #puts "#{script_file.path}"
47
+
48
+ def run_command
49
+ return shellout(false)
50
+ end
51
+
52
+ def run_command!
53
+ return shellout(true)
54
+ end
55
+
56
+ private
57
+
58
+ def set_owner_and_group
59
+ # FileUtils itself implements a no-op if +user+ or +group+ are nil
60
+ # You can prove this by running FileUtils.chown(nil,nil,'/tmp/file')
61
+ # as an unprivileged user.
62
+ #puts "#{@shellout_options.inspect}"
63
+ ::FileUtils.chown(@shellout_options[:user], @shellout_options[:group], @script_file.path)
64
+ end
65
+
66
+ def script_file
67
+ #puts "File name #{filename}"
68
+ @script_file ||= Tempfile.open([@filename, @fileext])
69
+ end
70
+
71
+ def unlink_script_file
72
+ @script_file && @script_file.close!
73
+ @script_file=nil
74
+ end
75
+
76
+ def create_file ()
77
+ #Output script to file path
78
+ script_file.puts(@code)
79
+ script_file.close
80
+
81
+ set_owner_and_group
82
+ end
83
+
84
+ def shellout(eval_error)
85
+ begin
86
+ create_file()
87
+
88
+ shellclass=Shell::ShellCall.new
89
+ if(eval_error)
90
+ result = shellclass.shell!("#{@exe} #{@flags} #{@script_file.path}", @shellout_options)
91
+ return result
92
+ else
93
+ result = shellclass.shell("#{@exe} #{@flags} #{@script_file.path}", @shellout_options)
94
+ return result
95
+ end
96
+
97
+ rescue Exception => e
98
+ #puts e.message
99
+ #puts e.backtrace.inspect
100
+ raise
101
+
102
+ ensure
103
+ unlink_script_file
104
+ end
105
+ end
106
+
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,55 @@
1
+ #All windows scripts will inherit from here
2
+ require "mixlibrary/core/shell/scripts/base"
3
+ require 'mixlibrary/core/apps/utilities'
4
+
5
+ module Mixlibrary
6
+ module Core
7
+ module Shell
8
+ class Scripts
9
+ class WindowsScript < Base
10
+
11
+ protected
12
+
13
+ @targetarchitecutre = nil;
14
+ @should_override = nil
15
+
16
+ def initialize(architecture)
17
+ super()
18
+
19
+ #The target arch is either what the machine is or passed in parameter
20
+ @targetarchitecutre = architecture.nil? ? Utilities::WindowsArchitectureHelper.architecture : architecture
21
+ @should_override = Utilities::WindowsArchitectureHelper.wow64_architecture_override_required?(@targetarchitecutre)
22
+
23
+ #why do we care here? If user wants a 32bit process call the 32 bit executable?
24
+ if ( @targetarchitecutre == :i386 )
25
+ if (RubyInfo.architecture==:x86_64)
26
+ raise "Support for the i386 architecture from a 64-bit Ruby runtime is not supported. Please call the specific 32 bit assembly directly"
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ def run_command(shell_executable, flags, filename_prefix, file_extension, code,shellout_options, eval_error)
33
+ wow64_redirection_state = nil
34
+
35
+ if @should_override
36
+ #puts "Disabling redirection"
37
+ wow64_redirection_state = Utilities::WindowsArchitectureHelper.disable_wow64_file_redirection()
38
+ end
39
+
40
+ begin
41
+ return super(shell_executable, flags, filename_prefix, file_extension, code,shellout_options, eval_error)
42
+ rescue
43
+ raise
44
+ ensure
45
+ if ! wow64_redirection_state.nil?
46
+ #puts "Restoring redirection"
47
+ Utilities::WindowsArchitectureHelper.restore_wow64_file_redirection(wow64_redirection_state)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,28 @@
1
+ #We had our hand forced here. We had to make this an instantianted class because the Ruby Include syntax does not work with entirely static methods.
2
+
3
+ module Mixlibrary
4
+ module Core
5
+ module Shell
6
+ class ShellCall
7
+ include Chef::Mixin::ShellOut
8
+
9
+ def intialize ()
10
+
11
+ end
12
+
13
+ def shell(command, options)
14
+ result = shell_out("#{command}", options)
15
+ return result
16
+ end
17
+
18
+ def shell!(command, options)
19
+ result = shell_out!("#{command}", options)
20
+ return result
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+
28
+
@@ -0,0 +1,31 @@
1
+ #Begin defining constant symbols for ruby versions
2
+
3
+ module Mixlibrary
4
+ module Core
5
+ module Utilities
6
+ class RubyInfo
7
+
8
+ def self.windows?
9
+ if RUBY_PLATFORM =~ /mswin|mingw|windows/
10
+ true
11
+ else
12
+ false
13
+ end
14
+ end
15
+
16
+ def self.architecture
17
+ #x64-mingw32
18
+ #i386-mingw32
19
+ myarch = RbConfig::CONFIG["arch"]
20
+ if(myarch.upcase.include?("I386"))
21
+ return :i386
22
+ elsif (myarch.upcase.include?("X64"))
23
+ return :x86_64
24
+ else
25
+ raise "Unsupported arch found: #{myarch}"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,79 @@
1
+ require 'mixlibrary/core/utilities/ruby_info'
2
+ require 'win32/api' if Mixlibrary::Core::Utilities::RubyInfo.windows?
3
+
4
+ module Mixlibrary
5
+ module Core
6
+ module Utilities
7
+ class WindowsArchitectureHelper
8
+
9
+ #Attempts to determine if this machine is 64 bit or not in a variety of ways - using generic ruby and/or Windows specific environment variabes
10
+ def self.is_machine_64bit?
11
+ if(RubyInfo.architecture==:x86_64)
12
+ return true
13
+ end
14
+
15
+ if(ENV.has_key?('ProgramFiles(x86)'))
16
+ return true;
17
+ end
18
+
19
+ if(ENV.has_key?('PROCESSOR_ARCHITEW6432'))
20
+ return true;
21
+ end
22
+
23
+ return false;
24
+ end
25
+
26
+ #returns the architecture based on if the machine is 64 bit
27
+ def self.architecture
28
+ if(is_machine_64bit?)
29
+ return :x86_64
30
+ else
31
+ return :i386
32
+ end
33
+ end
34
+
35
+ #Determines if the syswow redirection needs to be disabled based on the desired architecture.
36
+ def self.wow64_architecture_override_required?(desired_architecture)
37
+ #only use case we need to disable redirection is if
38
+ #running as 32 bit
39
+ #want 64 bit
40
+ #On 64bit machine
41
+ RubyInfo.architecture==:i386 &&
42
+ desired_architecture == :x86_64 &&
43
+ is_machine_64bit?
44
+
45
+ end
46
+
47
+ #Disables syswow redirection
48
+ def self.disable_wow64_file_redirection()
49
+ original_redirection_state = ['0'].pack('P')
50
+
51
+ win32_wow_64_disable_wow_64_fs_redirection =
52
+ ::Win32::API.new('Wow64DisableWow64FsRedirection', 'P', 'L', 'kernel32')
53
+
54
+ succeeded = win32_wow_64_disable_wow_64_fs_redirection.call(original_redirection_state)
55
+
56
+ if succeeded == 0
57
+ raise "Failed to disable Wow64 file redirection"
58
+ end
59
+
60
+ return original_redirection_state
61
+ end
62
+
63
+ #Restore syswow redirection
64
+ def self.restore_wow64_file_redirection(original_redirection_state )
65
+
66
+ win32_wow_64_revert_wow_64_fs_redirection =
67
+ ::Win32::API.new('Wow64RevertWow64FsRedirection', 'P', 'L', 'kernel32')
68
+
69
+ succeeded = win32_wow_64_revert_wow_64_fs_redirection.call(original_redirection_state)
70
+
71
+ if succeeded == 0
72
+ raise "Failed to revert Wow64 file redirection"
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,6 @@
1
+ module Mixlibrary
2
+ module Core
3
+ VERSION = "0.0.10"
4
+ NAME = "mixlibrary-core"
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ module Mixlibrary
2
+ module Core
3
+ module Windows
4
+ class Features
5
+ end
6
+ end
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mixlibrary-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.10
5
+ platform: x86-mingw32
6
+ authors:
7
+ - Nicholas Carpenter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '5.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '5.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-reporters
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: chef
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '11.16'
90
+ - - <
91
+ - !ruby/object:Gem::Version
92
+ version: '13'
93
+ type: :runtime
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '11.16'
100
+ - - <
101
+ - !ruby/object:Gem::Version
102
+ version: '13'
103
+ - !ruby/object:Gem::Dependency
104
+ name: win32-api
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.5.1
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: 1.5.1
117
+ description: 'MixLib for creating Core libraries in ruby for automating machines. This
118
+ is an abstraction away from using Chef Providers directly to give us access to the
119
+ lower layers of Chef implementation to meet additional use cases. '
120
+ email:
121
+ - ncarpenter@ebsco.com
122
+ executables: []
123
+ extensions: []
124
+ extra_rdoc_files: []
125
+ files:
126
+ - LICENSE.txt
127
+ - README.md
128
+ - lib/mixlibrary/core/apps/_dependencies.rb
129
+ - lib/mixlibrary/core/apps/shell.rb
130
+ - lib/mixlibrary/core/apps/utilities.rb
131
+ - lib/mixlibrary/core/shell/app.rb
132
+ - lib/mixlibrary/core/shell/scripts/base.rb
133
+ - lib/mixlibrary/core/shell/scripts/powershell.rb
134
+ - lib/mixlibrary/core/shell/scripts/shelloutwrapper.rb
135
+ - lib/mixlibrary/core/shell/scripts/windows_script.rb
136
+ - lib/mixlibrary/core/shell/shell_call.rb
137
+ - lib/mixlibrary/core/utilities/ruby_info.rb
138
+ - lib/mixlibrary/core/utilities/windows_architecture_helper.rb
139
+ - lib/mixlibrary/core/version.rb
140
+ - lib/mixlibrary/core/windows/features.rb
141
+ homepage: https://www.ebsco.com/
142
+ licenses:
143
+ - Apache2
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '2.4'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 2.4.1
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: MixLib for creating Core libraries in ruby for automating machines.
165
+ test_files: []