vagrant-pe_build 0.4.3 → 0.5.0
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.
- data/CHANGELOG +31 -0
- data/lib/pe_build/archive.rb +4 -7
- data/lib/pe_build/cap.rb +9 -1
- data/lib/pe_build/cap/detect_installer/posix.rb +35 -12
- data/lib/pe_build/cap/detect_installer/sles.rb +19 -0
- data/lib/pe_build/cap/detect_installer/solaris.rb +24 -0
- data/lib/pe_build/cap/detect_installer/windows.rb +13 -0
- data/lib/pe_build/cap/run_install/posix.rb +1 -1
- data/lib/pe_build/cap/run_install/windows.rb +35 -0
- data/lib/pe_build/plugin.rb +24 -0
- data/lib/pe_build/release.rb +2 -0
- data/lib/pe_build/release/2_0.rb +2 -0
- data/lib/pe_build/release/2_5.rb +2 -0
- data/lib/pe_build/release/2_6.rb +2 -0
- data/lib/pe_build/release/2_7.rb +2 -0
- data/lib/pe_build/release/2_8.rb +2 -0
- data/lib/pe_build/release/3_0.rb +2 -0
- data/lib/pe_build/transfer/open_uri.rb +1 -1
- data/lib/pe_build/unpack.rb +28 -0
- data/lib/pe_build/unpack/copy.rb +25 -0
- data/lib/pe_build/unpack/tar.rb +5 -0
- data/lib/pe_build/version.rb +1 -1
- data/templates/locales/en.yml +9 -0
- metadata +8 -2
data/CHANGELOG
CHANGED
@@ -1,7 +1,38 @@
|
|
1
1
|
vagrant-pe_build
|
2
2
|
================
|
3
3
|
|
4
|
+
0.5.0
|
5
|
+
-----
|
6
|
+
|
7
|
+
2013-09-17
|
8
|
+
|
9
|
+
This is a backwards compatible bugfix and feature release.
|
10
|
+
|
11
|
+
### User notes:
|
12
|
+
|
13
|
+
* Added detect_installer capability for SLES
|
14
|
+
* (GH-32) Added detect_installer capability for Solaris
|
15
|
+
* (GH-32) run_install capability uses posix compliant `at` command syntax
|
16
|
+
* (GH-33) Added detect_installer and run_install capabilities for Windows
|
17
|
+
|
18
|
+
### Developer notes:
|
19
|
+
|
20
|
+
* All StandardError exceptions emitted from transfer/open_uri are now rescued,
|
21
|
+
so errors generated during downloads won't cause Vagrant to die with a
|
22
|
+
stacktrace.
|
23
|
+
* cap/detect_installer exceptions now subclass Vagrant::Errors::VagrantErrors
|
24
|
+
so that detection errors don't cause stacktraces.
|
25
|
+
* Archive unpacking logic has been generalized to support multiple implementations
|
26
|
+
like 'pe_build/transfer'
|
27
|
+
|
28
|
+
Thanks to Reid Vandewiele for implementing the Windows and Solaris fixes and
|
29
|
+
extracting the 'unpack' logic.
|
30
|
+
|
31
|
+
Thanks to Charlie Sharpsteen for validating the new platform support and
|
32
|
+
correcting the issues around open_uri error handling.
|
33
|
+
|
4
34
|
0.4.3
|
35
|
+
-----
|
5
36
|
|
6
37
|
2013-09-09
|
7
38
|
|
data/lib/pe_build/archive.rb
CHANGED
@@ -3,8 +3,7 @@ require 'pe_build/idempotent'
|
|
3
3
|
require 'pe_build/archive_collection'
|
4
4
|
|
5
5
|
require 'pe_build/transfer'
|
6
|
-
|
7
|
-
require 'pe_build/unpack/tar'
|
6
|
+
require 'pe_build/unpack'
|
8
7
|
|
9
8
|
module PEBuild
|
10
9
|
|
@@ -66,11 +65,9 @@ class Archive
|
|
66
65
|
raise "Tried to unpack #{@filename} but it was not downloaded!"
|
67
66
|
end
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
idempotent(path, "Unpacked archive #{versioned_path filename}") do
|
73
|
-
tar.unpack
|
68
|
+
archive = PEBuild::Unpack.generate(archive_path, fs_dir)
|
69
|
+
idempotent(archive.creates, "Unpacked archive #{versioned_path filename}") do
|
70
|
+
archive.unpack
|
74
71
|
end
|
75
72
|
end
|
76
73
|
|
data/lib/pe_build/cap.rb
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
module PEBuild
|
2
2
|
module Cap
|
3
3
|
module DetectInstaller
|
4
|
+
|
5
|
+
class DetectFailed < Vagrant::Errors::VagrantError
|
6
|
+
error_key(:detect_failed, 'pebuild.cap.detect_installer')
|
7
|
+
end
|
8
|
+
|
4
9
|
require 'pe_build/cap/detect_installer/base'
|
5
10
|
require 'pe_build/cap/detect_installer/posix'
|
11
|
+
require 'pe_build/cap/detect_installer/windows'
|
6
12
|
|
7
13
|
require 'pe_build/cap/detect_installer/redhat'
|
8
14
|
require 'pe_build/cap/detect_installer/debian'
|
9
15
|
require 'pe_build/cap/detect_installer/ubuntu'
|
10
|
-
|
16
|
+
require 'pe_build/cap/detect_installer/sles'
|
17
|
+
require 'pe_build/cap/detect_installer/solaris'
|
11
18
|
end
|
12
19
|
|
13
20
|
module RunInstall
|
14
21
|
require 'pe_build/cap/run_install/posix'
|
22
|
+
require 'pe_build/cap/run_install/windows'
|
15
23
|
end
|
16
24
|
end
|
17
25
|
end
|
@@ -21,24 +21,29 @@ class PEBuild::Cap::DetectInstaller::POSIX < PEBuild::Cap::DetectInstaller::Base
|
|
21
21
|
# @abstract
|
22
22
|
# @return [Array<String>] All supported releases for the distribution
|
23
23
|
|
24
|
-
|
25
24
|
def detect
|
26
25
|
dist_version = parse_release_file
|
27
26
|
|
28
27
|
unless supported_releases.include? dist_version
|
29
|
-
raise
|
28
|
+
raise PEBuild::Cap::DetectInstaller::DetectFailed,
|
29
|
+
:name => @machine.name,
|
30
|
+
:error => "#{self.class.name} release #{dist_version} not supported"
|
30
31
|
end
|
31
32
|
|
32
33
|
"puppet-enterprise-#{@version}-#{name}-#{dist_version}-#{arch}.#{ext}"
|
33
34
|
end
|
34
35
|
|
35
36
|
def arch
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
results = execute_command("uname -m")
|
38
|
+
|
39
|
+
unless results[:retval] == 0
|
40
|
+
raise PEBuild::Cap::DetectInstaller::DetectFailed,
|
41
|
+
:name => @machine.name,
|
42
|
+
:error => "Could not run 'uname -m' on #{@machine.name}: got #{results[:stderr]}"
|
40
43
|
end
|
41
44
|
|
45
|
+
content = results[:stdout]
|
46
|
+
|
42
47
|
content = 'i386' if content.match /i\d86/
|
43
48
|
|
44
49
|
content
|
@@ -51,23 +56,41 @@ class PEBuild::Cap::DetectInstaller::POSIX < PEBuild::Cap::DetectInstaller::Base
|
|
51
56
|
private
|
52
57
|
|
53
58
|
def release_content
|
54
|
-
|
59
|
+
results = execute_command("cat #{release_file}")
|
55
60
|
|
56
|
-
|
57
|
-
raise
|
58
|
-
|
61
|
+
unless results[:retval] == 0
|
62
|
+
raise PEBuild::Cap::DetectInstaller::DetectFailed,
|
63
|
+
:name => @machine.name,
|
64
|
+
:error => "Could not read #{release_file} on #{@machine.name}: got #{results[:stderr]}"
|
59
65
|
end
|
60
66
|
|
61
|
-
|
67
|
+
results[:stdout]
|
62
68
|
end
|
63
69
|
|
64
70
|
def parse_release_file
|
65
71
|
matchdata = release_content.match(release_file_format)
|
66
72
|
|
67
73
|
if matchdata.nil? or matchdata[1].nil?
|
68
|
-
raise
|
74
|
+
raise PEBuild::Cap::DetectInstaller::DetectFailed,
|
75
|
+
:name => @machine.name,
|
76
|
+
:error => "#{self.class.name} could not determine release value: content #{release_content.inspect} did not match #{release_file_format}"
|
69
77
|
end
|
70
78
|
|
71
79
|
matchdata[1]
|
72
80
|
end
|
81
|
+
|
82
|
+
def execute_command(cmd)
|
83
|
+
stdout = ''
|
84
|
+
stderr = ''
|
85
|
+
|
86
|
+
retval = @machine.communicate.execute(cmd, :error_check => false) do |type, data|
|
87
|
+
if type == :stderr
|
88
|
+
stderr << data
|
89
|
+
else
|
90
|
+
stdout << data
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
{:stdout => stdout.chomp, :stderr => stderr.chomp, :retval => retval}
|
95
|
+
end
|
73
96
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class PEBuild::Cap::DetectInstaller::SLES < PEBuild::Cap::DetectInstaller::POSIX
|
2
|
+
|
3
|
+
def name
|
4
|
+
'sles'
|
5
|
+
end
|
6
|
+
|
7
|
+
def release_file
|
8
|
+
'/etc/SuSE-release'
|
9
|
+
end
|
10
|
+
|
11
|
+
def release_file_format
|
12
|
+
%r[^SUSE Linux Enterprise Server (\d+)]
|
13
|
+
end
|
14
|
+
|
15
|
+
def supported_releases
|
16
|
+
%w[11]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class PEBuild::Cap::DetectInstaller::Solaris < PEBuild::Cap::DetectInstaller::POSIX
|
2
|
+
|
3
|
+
def name
|
4
|
+
'solaris'
|
5
|
+
end
|
6
|
+
|
7
|
+
def release_file
|
8
|
+
'/etc/release'
|
9
|
+
end
|
10
|
+
|
11
|
+
def release_file_format
|
12
|
+
%r[^(?:\s)*(?:Oracle )?Solaris (\d+)]
|
13
|
+
end
|
14
|
+
|
15
|
+
def supported_releases
|
16
|
+
%w[10]
|
17
|
+
end
|
18
|
+
|
19
|
+
def arch
|
20
|
+
retval = super
|
21
|
+
(retval == 'i86pc') ? 'i386' : retval
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Provide an abstract base class for detecting the installer name on
|
2
|
+
# POSIX systems.
|
3
|
+
#
|
4
|
+
# @abstract
|
5
|
+
# @protected
|
6
|
+
class PEBuild::Cap::DetectInstaller::Windows < PEBuild::Cap::DetectInstaller::Base
|
7
|
+
|
8
|
+
def detect
|
9
|
+
# Yes, it really is this simple. For Windows anyway.
|
10
|
+
"puppet-enterprise-#{@version}.msi"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -29,7 +29,7 @@ class PEBuild::Cap::RunInstall::POSIX
|
|
29
29
|
|
30
30
|
if machine.communicate.test('which at')
|
31
31
|
machine.ui.info I18n.t('pebuild.cap.run_install.scheduling_run')
|
32
|
-
machine.communicate.sudo("echo '/opt/puppet/bin/puppet agent -t --waitforcert 10' | at
|
32
|
+
machine.communicate.sudo("echo '/opt/puppet/bin/puppet agent -t --waitforcert 10' | at now '+ 1min'")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'pe_build/on_machine'
|
2
|
+
class PEBuild::Cap::RunInstall::Windows
|
3
|
+
|
4
|
+
extend PEBuild::OnMachine
|
5
|
+
|
6
|
+
def self.run_install(machine, config, archive)
|
7
|
+
|
8
|
+
gt_win2k3_path = '${Env:ALLUSERSPROFILE}\\PuppetLabs'
|
9
|
+
le_win2k3_path = '${Env:ALLUSERSPROFILE}\\Application Data\\PuppetLabs'
|
10
|
+
testpath = "(Test-Path \"#{gt_win2k3_path}\") -or (Test-Path \"#{le_win2k3_path}\")"
|
11
|
+
|
12
|
+
if machine.communicate.test("If (#{testpath}) { Exit 0 } Else { Exit 1 }")
|
13
|
+
machine.ui.warn I18n.t('pebuild.cap.run_install.already_installed'),
|
14
|
+
:name => machine.name
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
root = File.join('\\\\VBOXSVR\\vagrant', PEBuild::WORK_DIR)
|
19
|
+
|
20
|
+
# The installer will be fed to msiexec. That means the File.join() method
|
21
|
+
# is of limited use since it won't execute on the Windows system
|
22
|
+
installer = File.join(root, archive.to_s).gsub('/', '\\')
|
23
|
+
|
24
|
+
cmd = []
|
25
|
+
cmd << 'msiexec' << '/qn' << '/i' << installer
|
26
|
+
|
27
|
+
cmd << "PUPPET_MASTER_SERVER=#{config.master}"
|
28
|
+
cmd << "PUPPET_AGENT_CERTNAME=#{machine.name}"
|
29
|
+
|
30
|
+
argv = cmd.join(' ')
|
31
|
+
|
32
|
+
on_machine(machine, argv)
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
data/lib/pe_build/plugin.rb
CHANGED
@@ -39,6 +39,8 @@ module PEBuild
|
|
39
39
|
|
40
40
|
# Guest capabilities for installing PE
|
41
41
|
|
42
|
+
## Detect installer
|
43
|
+
|
42
44
|
guest_capability('debian', 'detect_installer') do
|
43
45
|
require_relative 'cap'
|
44
46
|
PEBuild::Cap::DetectInstaller::Debian
|
@@ -54,6 +56,23 @@ module PEBuild
|
|
54
56
|
PEBuild::Cap::DetectInstaller::Ubuntu
|
55
57
|
end
|
56
58
|
|
59
|
+
guest_capability('suse', 'detect_installer') do
|
60
|
+
require_relative 'cap'
|
61
|
+
PEBuild::Cap::DetectInstaller::SLES
|
62
|
+
end
|
63
|
+
|
64
|
+
guest_capability('solaris', 'detect_installer') do
|
65
|
+
require_relative 'cap'
|
66
|
+
PEBuild::Cap::DetectInstaller::Solaris
|
67
|
+
end
|
68
|
+
|
69
|
+
guest_capability('windows', 'detect_installer') do
|
70
|
+
require_relative 'cap'
|
71
|
+
PEBuild::Cap::DetectInstaller::Windows
|
72
|
+
end
|
73
|
+
|
74
|
+
## Run install
|
75
|
+
|
57
76
|
guest_capability('linux', 'run_install') do
|
58
77
|
require_relative 'cap'
|
59
78
|
PEBuild::Cap::RunInstall::POSIX
|
@@ -64,6 +83,11 @@ module PEBuild
|
|
64
83
|
PEBuild::Cap::RunInstall::POSIX
|
65
84
|
end
|
66
85
|
|
86
|
+
guest_capability('windows', 'run_install') do
|
87
|
+
require_relative 'cap'
|
88
|
+
PEBuild::Cap::RunInstall::Windows
|
89
|
+
end
|
90
|
+
|
67
91
|
# internal action hooks
|
68
92
|
|
69
93
|
action_hook('PE Build: initialize build dir') do |hook|
|
data/lib/pe_build/release.rb
CHANGED
data/lib/pe_build/release/2_0.rb
CHANGED
data/lib/pe_build/release/2_5.rb
CHANGED
data/lib/pe_build/release/2_6.rb
CHANGED
data/lib/pe_build/release/2_7.rb
CHANGED
data/lib/pe_build/release/2_8.rb
CHANGED
data/lib/pe_build/release/3_0.rb
CHANGED
@@ -25,7 +25,7 @@ class PEBuild::Transfer::OpenURI
|
|
25
25
|
tmpfile = download_file
|
26
26
|
FileUtils.mv(tmpfile, @dst)
|
27
27
|
end
|
28
|
-
rescue
|
28
|
+
rescue StandardError => e
|
29
29
|
raise DownloadFailed, :uri => @uri, :msg => e.message
|
30
30
|
end
|
31
31
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module PEBuild
|
2
|
+
module Unpack
|
3
|
+
|
4
|
+
class UnknownInstallerType < Vagrant::Errors::VagrantError
|
5
|
+
error_key(:unknown_installer_type, "pebuild.unpack")
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'pe_build/unpack/tar'
|
9
|
+
require 'pe_build/unpack/copy'
|
10
|
+
|
11
|
+
IMPLEMENTATIONS = {
|
12
|
+
'.tar.gz' => PEBuild::Unpack::Tar,
|
13
|
+
'.msi' => PEBuild::Unpack::Copy,
|
14
|
+
}
|
15
|
+
|
16
|
+
# @param src [String]
|
17
|
+
# @param dst [String]
|
18
|
+
def self.generate(src, dst)
|
19
|
+
klass = IMPLEMENTATIONS.find do |key,v|
|
20
|
+
src.end_with?(key)
|
21
|
+
end.last
|
22
|
+
|
23
|
+
raise UnknownInstallerType, :src => src unless klass
|
24
|
+
klass.new(src, dst)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module PEBuild
|
4
|
+
module Unpack
|
5
|
+
class Copy
|
6
|
+
|
7
|
+
# @param src [String]
|
8
|
+
# @param dst [String]
|
9
|
+
def initialize(src, dst)
|
10
|
+
@src, @dst = src, dst
|
11
|
+
end
|
12
|
+
|
13
|
+
def unpack
|
14
|
+
FileUtils.cp(@src, creates)
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [String] The file/dir that will be created as a result of unpack
|
18
|
+
def creates
|
19
|
+
basename = File.basename(@src)
|
20
|
+
deploy_path = File.join(@dst, basename)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/pe_build/unpack/tar.rb
CHANGED
@@ -15,6 +15,11 @@ class Tar
|
|
15
15
|
::Archive::Tar::Minitar.unpack(zip, @dst)
|
16
16
|
end
|
17
17
|
|
18
|
+
# @return [String] The file/dir that will be created as a result of unpack
|
19
|
+
def creates
|
20
|
+
File.join(@dst, dirname)
|
21
|
+
end
|
22
|
+
|
18
23
|
# @return [String] The base directory contained in the tar archive
|
19
24
|
def dirname
|
20
25
|
input = ::Archive::Tar::Minitar::Input.new(zip)
|
data/lib/pe_build/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -19,6 +19,10 @@ en:
|
|
19
19
|
unhandled_uri_scheme: |-
|
20
20
|
The URI scheme "%{scheme}" cannot be handled by any file transferrers.
|
21
21
|
Supported URI schemes: %{supported}
|
22
|
+
unpack:
|
23
|
+
unknown_installer_type: |-
|
24
|
+
PEBuild does not know how to unpack the installer archive file type.
|
25
|
+
The installer file is %{src}.
|
22
26
|
config:
|
23
27
|
global:
|
24
28
|
errors:
|
@@ -53,3 +57,8 @@ en:
|
|
53
57
|
Puppet Enterprise is already installed, skipping installation.
|
54
58
|
scheduling_run: |-
|
55
59
|
Scheduling Puppet run to kickstart node classification.
|
60
|
+
detect_installer:
|
61
|
+
detect_failed: |-
|
62
|
+
The VM "%{name}" could not detect the version of Puppet Enterprise and failed with
|
63
|
+
the following error:
|
64
|
+
"%{error}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-pe_build
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: progressbar
|
@@ -70,8 +70,12 @@ files:
|
|
70
70
|
- lib/pe_build/cap/detect_installer/debian.rb
|
71
71
|
- lib/pe_build/cap/detect_installer/posix.rb
|
72
72
|
- lib/pe_build/cap/detect_installer/redhat.rb
|
73
|
+
- lib/pe_build/cap/detect_installer/sles.rb
|
74
|
+
- lib/pe_build/cap/detect_installer/solaris.rb
|
73
75
|
- lib/pe_build/cap/detect_installer/ubuntu.rb
|
76
|
+
- lib/pe_build/cap/detect_installer/windows.rb
|
74
77
|
- lib/pe_build/cap/run_install/posix.rb
|
78
|
+
- lib/pe_build/cap/run_install/windows.rb
|
75
79
|
- lib/pe_build/command.rb
|
76
80
|
- lib/pe_build/command/base.rb
|
77
81
|
- lib/pe_build/command/copy.rb
|
@@ -101,6 +105,8 @@ files:
|
|
101
105
|
- lib/pe_build/transfer.rb
|
102
106
|
- lib/pe_build/transfer/file.rb
|
103
107
|
- lib/pe_build/transfer/open_uri.rb
|
108
|
+
- lib/pe_build/unpack.rb
|
109
|
+
- lib/pe_build/unpack/copy.rb
|
104
110
|
- lib/pe_build/unpack/tar.rb
|
105
111
|
- lib/pe_build/util/config.rb
|
106
112
|
- lib/pe_build/version.rb
|