vagrant-pe_build 0.2.0 → 0.3.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 +59 -0
- data/README.markdown +148 -5
- data/lib/pe_build.rb +5 -3
- data/lib/pe_build/action.rb +5 -0
- data/lib/pe_build/action/pe_build_dir.rb +18 -0
- data/lib/pe_build/archive.rb +39 -46
- data/lib/pe_build/cap.rb +17 -0
- data/lib/pe_build/cap/detect_installer/base.rb +15 -0
- data/lib/pe_build/cap/detect_installer/debian.rb +23 -0
- data/lib/pe_build/cap/detect_installer/posix.rb +73 -0
- data/lib/pe_build/cap/detect_installer/redhat.rb +18 -0
- data/lib/pe_build/cap/detect_installer/ubuntu.rb +23 -0
- data/lib/pe_build/cap/run_install/posix.rb +26 -0
- data/lib/pe_build/command.rb +6 -63
- data/lib/pe_build/command/base.rb +55 -0
- data/lib/pe_build/command/copy.rb +22 -23
- data/lib/pe_build/command/download.rb +4 -8
- data/lib/pe_build/command/list.rb +1 -6
- data/lib/pe_build/config/global.rb +13 -4
- data/lib/pe_build/config/pe_bootstrap.rb +4 -0
- data/lib/pe_build/idempotent.rb +1 -1
- data/lib/pe_build/on_machine.rb +10 -0
- data/lib/pe_build/plugin.rb +58 -22
- data/lib/pe_build/provisioner/pe_bootstrap.rb +123 -156
- data/lib/pe_build/provisioner/pe_bootstrap/answers_file.rb +49 -0
- data/lib/pe_build/release.rb +23 -0
- data/lib/pe_build/release/2_0.rb +25 -0
- data/lib/pe_build/release/2_5.rb +28 -0
- data/lib/pe_build/release/2_6.rb +27 -0
- data/lib/pe_build/release/2_7.rb +28 -0
- data/lib/pe_build/release/2_8.rb +35 -0
- data/lib/pe_build/release/3_0.rb +36 -0
- data/lib/pe_build/release/instance.rb +63 -0
- data/lib/pe_build/transfer.rb +25 -0
- data/lib/pe_build/transfer/file.rb +11 -9
- data/lib/pe_build/transfer/open_uri.rb +62 -0
- data/lib/pe_build/version.rb +1 -1
- data/templates/answers/{agent.txt.erb → agent-2.x.txt.erb} +1 -1
- data/templates/answers/agent-3.x.txt.erb +16 -0
- data/templates/answers/{master.txt.erb → master-2.x.txt.erb} +0 -0
- data/templates/answers/master-3.x.txt.erb +44 -0
- data/templates/locales/en.yml +16 -3
- metadata +28 -6
- data/lib/pe_build/transfer/uri.rb +0 -53
- data/templates/answers/master-existing-db.txt.erb +0 -52
data/CHANGELOG
CHANGED
@@ -1,6 +1,65 @@
|
|
1
1
|
vagrant-pe_build
|
2
2
|
================
|
3
3
|
|
4
|
+
0.3.0
|
5
|
+
-----
|
6
|
+
|
7
|
+
2013-08-14
|
8
|
+
|
9
|
+
This is a backwards compatible feature and bugfix release.
|
10
|
+
|
11
|
+
### User notes:
|
12
|
+
|
13
|
+
#### Enhancements:
|
14
|
+
|
15
|
+
* Puppet Enterprise 3 is now fully supported and should have answers that
|
16
|
+
work out of the box.
|
17
|
+
* (GH-25) The installer for a given platform will be detected based on the
|
18
|
+
guest platform, which means that the most precise installer will be used
|
19
|
+
instead of the `all` installer.
|
20
|
+
* pe_build.download_root now fully supports a local directory with URIs using
|
21
|
+
the "file" URI.
|
22
|
+
* As part of GH-25 pe_build.suffix defaults to detect, which will auto-select
|
23
|
+
the correct installer name
|
24
|
+
|
25
|
+
#### Fixes:
|
26
|
+
|
27
|
+
* (GH-23) Removed double expansion of files when running `vagrant pe-build copy`
|
28
|
+
* (GH-24) Installer files are downloaded at provision time instead of before
|
29
|
+
VMs are constructed
|
30
|
+
|
31
|
+
#### Deprecations:
|
32
|
+
|
33
|
+
* Shell scripts run with the `add_step` hash are deprecated and will be
|
34
|
+
removed in the next 'major development' release (either 0.4.0, 0.5.0,
|
35
|
+
or 1.0.0). This behavior is effectively provided by the `shell` provisioner.
|
36
|
+
|
37
|
+
### Developer notes (AKA the gory details):
|
38
|
+
|
39
|
+
* Informational logging has been expanded and is directed to the Vagrant
|
40
|
+
internal loggers.
|
41
|
+
* Answers file generation has been extracted out of the pe_bootstrap
|
42
|
+
provisioner and into an independent class to respect the single
|
43
|
+
responsibility principle.
|
44
|
+
* New guest capability: "detect_installer" detects the correct installer
|
45
|
+
for the given guest platform. Initial supported platforms are Debian,
|
46
|
+
Ubuntu, and Redhat.
|
47
|
+
* New guest capability: "run_install" extracts the actual command generation
|
48
|
+
and execution to install PE on a guest. Initial supported platforms are
|
49
|
+
Linux and Solaris.
|
50
|
+
* Installer file transfer has been fully extracted from the PEBuild::Archive
|
51
|
+
class and pushed into pe_build/transfer classes.
|
52
|
+
* File transfer behavior has been abstracted behind the PEBuild::Transfer
|
53
|
+
module and the implementing class is selected based on the scheme of the
|
54
|
+
requested URI.
|
55
|
+
* Almost everything ever has been beaten with the refactor hammer.
|
56
|
+
|
57
|
+
### Thanks
|
58
|
+
|
59
|
+
* Thanks to Tom Linkin as always for his awesome work and contributions to
|
60
|
+
this plugin.
|
61
|
+
* Thanks to Jon Mosco for reporting GH-23.
|
62
|
+
|
4
63
|
0.2.0
|
5
64
|
-----
|
6
65
|
|
data/README.markdown
CHANGED
@@ -9,25 +9,168 @@ Synopsis
|
|
9
9
|
`vagrant-pe_build` manages the downloading and installation of Puppet Enterprise
|
10
10
|
on Vagrant boxes to rapidly build a functioning Puppet environment.
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
Vagrantfile Settings
|
13
|
+
-------------------
|
14
|
+
|
15
|
+
#### Config Namespace `config.pe_build`
|
16
|
+
|
17
|
+
These settings go in the config object namespace and act as defaults in
|
18
|
+
the event multiple machines are being provisioned. These settings are
|
19
|
+
optional and can be overridden in a VM's individual provisioner config.
|
20
|
+
|
21
|
+
* `config.pe_build.version`
|
22
|
+
* Description: The version of Puppet Enterprise to install.
|
23
|
+
* `config.pe_build.suffix` - Suffix of the Puppet Enterprise installer to use.
|
24
|
+
* Description: The distribution specifix suffix of the Puppet Enterprise
|
25
|
+
installer to use.
|
26
|
+
* Default: `:detect`
|
27
|
+
* `config.pe_build.filename`
|
28
|
+
* Description: The filename of the Puppet Enterprise installer.
|
29
|
+
* Default: this will use the version and suffix provided to guess a filename
|
30
|
+
of the form `puppet-enterprise-<version>-<suffix>.tar.gz`.
|
31
|
+
* `config.pe_build.download_root`
|
32
|
+
* Description: The URI to the directory containing Puppet Enterprise
|
33
|
+
installers if the installer is not yet cached. This setting is optional.
|
34
|
+
* Supported URI schemes:
|
35
|
+
* http
|
36
|
+
* https
|
37
|
+
* ftp
|
38
|
+
* file
|
39
|
+
* A blank URI will default to `file`.
|
40
|
+
|
41
|
+
#### Provisioner Namespace
|
42
|
+
|
43
|
+
These settings are on a per provisioner basis. They configure the individual
|
44
|
+
behaviors of the provisioner. All of the `config.pe_build` options can be
|
45
|
+
overridden at this point.
|
46
|
+
|
47
|
+
* `role`
|
48
|
+
* Description: The role of the Puppet Enterprise install.
|
49
|
+
* Options: `:agent`, `:master`
|
50
|
+
* Default: `:agent`
|
51
|
+
* `verbose`
|
52
|
+
* Description: Whether or not to show the verbose output of the Puppet
|
53
|
+
Enterprise install.
|
54
|
+
* Options: `true`, `false`
|
55
|
+
* Default: `true`
|
56
|
+
* `master`
|
57
|
+
* Description: The address of the puppet master
|
58
|
+
* Default: `master`
|
59
|
+
* `answer_file`
|
60
|
+
* Description: The location of alternate answer file for PE installation.
|
61
|
+
Values can be paths relative to the Vagrantfile's project directory.
|
62
|
+
* Default: The default answer file for the Puppet Enterprise version and
|
63
|
+
role.
|
64
|
+
* `relocate_manifests`
|
65
|
+
* Description: Whether or not to change the PE master to use a config of
|
66
|
+
`manifestdir=/manifests` and `modulepath=/modules`. This is meant to be
|
67
|
+
used when the vagrant working directory manifests and modules are
|
68
|
+
remounted on the guest.
|
69
|
+
* Options: `true`, `false`
|
70
|
+
* Default: `false`
|
71
|
+
|
72
|
+
Commands
|
73
|
+
--------
|
74
|
+
|
75
|
+
Usage Example
|
76
|
+
-------------
|
77
|
+
|
78
|
+
### Minimal configuration
|
79
|
+
|
80
|
+
This requires that the necessary installers have already been downloaded and
|
81
|
+
added with `vagrant pe-build copy`.
|
14
82
|
|
15
83
|
Vagrant.configure('2') do |config|
|
84
|
+
config.pe_build.version = '3.0.0'
|
85
|
+
|
86
|
+
config.vm.define 'master' do |node|
|
87
|
+
node.vm.box = 'centos-6-i386'
|
88
|
+
|
89
|
+
node.vm.provision :pe_bootstrap do |provisioner|
|
90
|
+
provisioner.role = :master
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
config.vm.define 'agent1' do |node|
|
95
|
+
node.vm.box = 'centos-6-i386'
|
96
|
+
node.vm.provision :pe_bootstrap
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
### Specifying a download root
|
102
|
+
|
103
|
+
Vagrant.configure('2') do |config|
|
104
|
+
config.pe_build.version = '3.0.0'
|
16
105
|
config.pe_build.download_root = 'http://my.pe.download.mirror/installers'
|
17
|
-
|
18
|
-
|
106
|
+
|
107
|
+
# Alternately, a local directory can be specified
|
108
|
+
#config.pe_build.download_root = 'file://Users/luke/Downloads'
|
19
109
|
|
20
110
|
config.vm.define 'master' do |node|
|
111
|
+
node.vm.box = 'centos-6-i386'
|
112
|
+
|
21
113
|
node.vm.provision :pe_bootstrap do |provisioner|
|
22
114
|
provisioner.role = :master
|
23
115
|
end
|
24
116
|
end
|
25
117
|
|
26
118
|
config.vm.define 'agent1' do |node|
|
119
|
+
node.vm.box = 'centos-6-i386'
|
120
|
+
|
121
|
+
node.vm.provision :pe_bootstrap
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
### Using a manual answers file
|
126
|
+
|
127
|
+
Vagrant.configure('2') do |config|
|
128
|
+
config.pe_build.version = '3.0.0'
|
129
|
+
config.pe_build.download_root = 'http://my.pe.download.mirror/installers'
|
130
|
+
|
131
|
+
# Alternately, a local directory can be specified
|
132
|
+
#config.pe_build.download_root = 'file://Users/luke/Downloads'
|
133
|
+
|
134
|
+
config.vm.define 'master' do |node|
|
135
|
+
node.vm.box = 'centos-6-i386'
|
136
|
+
|
137
|
+
node.vm.provision :pe_bootstrap do |provisioner|
|
138
|
+
provisioner.role = :master
|
139
|
+
provisioner.answer_file = 'answers/vagrant_master.answers.txt'
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
config.vm.define 'agent1' do |node|
|
144
|
+
node.vm.box = 'centos-6-i386'
|
145
|
+
|
146
|
+
node.vm.provision :pe_bootstrap
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
### Manually setting a filename
|
151
|
+
|
152
|
+
Vagrant.configure('2') do |config|
|
153
|
+
config.pe_build.version = '3.0.0'
|
154
|
+
config.pe_build.filename = 'puppet-enterprise-3.0.0-all.tar.gz'
|
155
|
+
|
156
|
+
# Alternately, a local directory can be specified
|
157
|
+
#config.pe_build.download_root = 'file://Users/luke/Downloads'
|
158
|
+
|
159
|
+
config.vm.define 'master' do |node|
|
160
|
+
node.vm.box = 'centos-6-i386'
|
161
|
+
|
27
162
|
node.vm.provision :pe_bootstrap do |provisioner|
|
28
|
-
provisioner.role = :
|
163
|
+
provisioner.role = :master
|
164
|
+
provisioner.answer_file = 'answers/vagrant_master.answers.txt'
|
29
165
|
end
|
30
166
|
end
|
167
|
+
|
168
|
+
config.vm.define 'agent1' do |node|
|
169
|
+
node.vm.box = 'centos-6-i386'
|
170
|
+
|
171
|
+
node.vm.provision :pe_bootstrap do |provisioner|
|
172
|
+
provisioner.role = :agent end
|
173
|
+
end
|
31
174
|
end
|
32
175
|
|
33
176
|
Requirements
|
data/lib/pe_build.rb
CHANGED
@@ -2,6 +2,11 @@ require 'vagrant'
|
|
2
2
|
|
3
3
|
module PEBuild
|
4
4
|
|
5
|
+
require 'pe_build/plugin'
|
6
|
+
require 'pe_build/version'
|
7
|
+
|
8
|
+
WORK_DIR = '.pe_build'
|
9
|
+
|
5
10
|
# Return the path to the archived PE builds
|
6
11
|
#
|
7
12
|
# @param env [Vagrant::Environment]
|
@@ -20,6 +25,3 @@ end
|
|
20
25
|
|
21
26
|
# I18n to load the en locale
|
22
27
|
I18n.load_path << File.expand_path("locales/en.yml", PEBuild.template_dir)
|
23
|
-
|
24
|
-
require 'pe_build/plugin'
|
25
|
-
require 'pe_build/version'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Set up the PE build cache dir
|
2
|
+
class PEBuild::Action::PEBuildDir
|
3
|
+
|
4
|
+
def initialize(app, env)
|
5
|
+
@app, @env = app, env
|
6
|
+
|
7
|
+
@build_dir = @env[:home_path].join('pe_builds')
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
@env = env
|
12
|
+
|
13
|
+
@build_dir.mkpath unless @build_dir.exist?
|
14
|
+
@env[:pe_build_dir] = @build_dir
|
15
|
+
|
16
|
+
@app.call(@env)
|
17
|
+
end
|
18
|
+
end
|
data/lib/pe_build/archive.rb
CHANGED
@@ -2,13 +2,10 @@ require 'pe_build'
|
|
2
2
|
require 'pe_build/idempotent'
|
3
3
|
require 'pe_build/archive_collection'
|
4
4
|
|
5
|
-
require 'pe_build/transfer
|
6
|
-
require 'pe_build/transfer/uri'
|
5
|
+
require 'pe_build/transfer'
|
7
6
|
|
8
7
|
require 'pe_build/unpack/tar'
|
9
8
|
|
10
|
-
require 'fileutils'
|
11
|
-
|
12
9
|
module PEBuild
|
13
10
|
|
14
11
|
class ArchiveNoInstallerSource < Vagrant::Errors::VagrantError
|
@@ -35,69 +32,65 @@ class Archive
|
|
35
32
|
def initialize(filename, env)
|
36
33
|
@filename = filename
|
37
34
|
@env = env
|
38
|
-
end
|
39
35
|
|
40
|
-
|
41
|
-
def unpack_to(fs_dir)
|
42
|
-
tar = PEBuild::Unpack::Tar.new(archive_path, fs_dir)
|
43
|
-
path = File.join(fs_dir, tar.dirname)
|
36
|
+
@archive_dir = PEBuild.archive_directory(@env)
|
44
37
|
|
45
|
-
|
46
|
-
tar.unpack
|
47
|
-
end
|
38
|
+
@logger = Log4r::Logger.new('vagrant::pe_build::archive')
|
48
39
|
end
|
49
40
|
|
50
|
-
# @param
|
51
|
-
def
|
52
|
-
|
41
|
+
# @param base_uri [String] A string representation of the download source URI
|
42
|
+
def fetch(str)
|
43
|
+
return if self.exist?
|
44
|
+
|
45
|
+
if str.nil?
|
46
|
+
@env.ui.error "Cannot fetch installer #{versioned_path @filename}; no download source available."
|
47
|
+
@env.ui.error ""
|
48
|
+
@env.ui.error "Installers available for use:"
|
53
49
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
collection = PEBuild::ArchiveCollection.new(@archive_dir, @env)
|
51
|
+
collection.display
|
52
|
+
|
53
|
+
raise PEBuild::ArchiveNoInstallerSource, :filename => versioned_path(@filename)
|
58
54
|
end
|
59
|
-
end
|
60
55
|
|
61
|
-
|
62
|
-
|
63
|
-
idempotent(archive_path, "Installer #{versioned_path @filename}") do
|
64
|
-
if download_dir.nil?
|
65
|
-
@env.ui.error "Installer #{versioned_path @filename} is not available."
|
56
|
+
uri = URI.parse(versioned_path(str + '/' + @filename))
|
57
|
+
dst = File.join(@archive_dir, versioned_path(@filename))
|
66
58
|
|
67
|
-
|
59
|
+
transfer = PEBuild::Transfer.generate(uri, dst)
|
60
|
+
transfer.copy
|
61
|
+
end
|
68
62
|
|
69
|
-
|
70
|
-
|
63
|
+
# @param fs_dir [String] The base directory to extract the installer to
|
64
|
+
def unpack_to(fs_dir)
|
65
|
+
unless exist?
|
66
|
+
raise "Tried to unpack #{@filename} but it was not downloaded!"
|
67
|
+
end
|
71
68
|
|
72
|
-
|
73
|
-
|
74
|
-
str = versioned_path("#{download_dir}/#{@filename}")
|
69
|
+
tar = PEBuild::Unpack::Tar.new(archive_path, fs_dir)
|
70
|
+
path = File.join(fs_dir, tar.dirname)
|
75
71
|
|
76
|
-
|
77
|
-
|
78
|
-
transfer.copy
|
79
|
-
end
|
72
|
+
idempotent(path, "Unpacked archive #{versioned_path filename}") do
|
73
|
+
tar.unpack
|
80
74
|
end
|
81
75
|
end
|
82
76
|
|
83
|
-
|
77
|
+
def exist?
|
78
|
+
File.exist? archive_path
|
79
|
+
end
|
84
80
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
def prepare_for_copy!
|
89
|
-
archive_dir = PEBuild.archive_directory(@env)
|
81
|
+
def to_s
|
82
|
+
versioned_path(@filename)
|
83
|
+
end
|
90
84
|
|
91
|
-
|
92
|
-
|
93
|
-
end
|
85
|
+
def installer_dir
|
86
|
+
versioned_path(@filename).gsub('.tar.gz', '')
|
94
87
|
end
|
95
88
|
|
89
|
+
private
|
96
90
|
|
97
91
|
# @return [String] The interpolated archive path
|
98
92
|
def archive_path
|
99
|
-
|
100
|
-
path = File.join(archive_dir, @filename)
|
93
|
+
path = File.join(@archive_dir, @filename)
|
101
94
|
versioned_path(path)
|
102
95
|
end
|
103
96
|
|
data/lib/pe_build/cap.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module PEBuild
|
2
|
+
module Cap
|
3
|
+
module DetectInstaller
|
4
|
+
require 'pe_build/cap/detect_installer/base'
|
5
|
+
require 'pe_build/cap/detect_installer/posix'
|
6
|
+
|
7
|
+
require 'pe_build/cap/detect_installer/redhat'
|
8
|
+
require 'pe_build/cap/detect_installer/debian'
|
9
|
+
require 'pe_build/cap/detect_installer/ubuntu'
|
10
|
+
#require 'pe_build/cap/detect_installer/suse'
|
11
|
+
end
|
12
|
+
|
13
|
+
module RunInstall
|
14
|
+
require 'pe_build/cap/run_install/posix'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class PEBuild::Cap::DetectInstaller::Base
|
2
|
+
|
3
|
+
def self.detect_installer(machine, version)
|
4
|
+
new(machine, version).detect
|
5
|
+
end
|
6
|
+
|
7
|
+
def initialize(machine, version)
|
8
|
+
@machine, @version = machine, version
|
9
|
+
end
|
10
|
+
|
11
|
+
# @!method detect
|
12
|
+
# Return the installer for the given operating system
|
13
|
+
# @abstract
|
14
|
+
# @return [String] The installer for the given operating system
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class PEBuild::Cap::DetectInstaller::Debian < PEBuild::Cap::DetectInstaller::POSIX
|
2
|
+
|
3
|
+
def name
|
4
|
+
'debian'
|
5
|
+
end
|
6
|
+
|
7
|
+
def release_file
|
8
|
+
'/etc/debian_version'
|
9
|
+
end
|
10
|
+
|
11
|
+
def release_file_format
|
12
|
+
%r[^(\d+)\.]
|
13
|
+
end
|
14
|
+
|
15
|
+
def supported_releases
|
16
|
+
%w[6 7]
|
17
|
+
end
|
18
|
+
|
19
|
+
def arch
|
20
|
+
retval = super
|
21
|
+
(retval == 'x86_64') ? 'amd64' : retval
|
22
|
+
end
|
23
|
+
end
|