vagrant-pe_build 0.0.3 → 0.1.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/Gemfile +2 -0
- data/README.markdown +10 -10
- data/lib/pe_build.rb +15 -7
- data/lib/pe_build/archive.rb +112 -0
- data/lib/pe_build/archive_collection.rb +43 -0
- data/lib/pe_build/command.rb +48 -11
- data/lib/pe_build/command/copy.rb +38 -0
- data/lib/pe_build/command/download.rb +34 -3
- data/lib/pe_build/command/list.rb +16 -4
- data/lib/pe_build/config/global.rb +69 -0
- data/lib/pe_build/config/pe_bootstrap.rb +110 -0
- data/lib/pe_build/config_default.rb +16 -0
- data/lib/pe_build/idempotent.rb +16 -0
- data/lib/pe_build/plugin.rb +38 -0
- data/lib/pe_build/provisioner/pe_bootstrap.rb +202 -0
- data/lib/pe_build/transfer/file.rb +18 -0
- data/lib/pe_build/transfer/uri.rb +53 -0
- data/lib/pe_build/unpack/tar.rb +38 -0
- data/lib/pe_build/util/config.rb +29 -0
- data/lib/pe_build/version.rb +1 -1
- data/lib/{vagrant_init.rb → vagrant-pe_build.rb} +0 -0
- data/templates/answers/agent.txt.erb +1 -1
- data/templates/answers/master-existing-db.txt.erb +2 -2
- data/templates/answers/master.txt.erb +2 -2
- data/templates/locales/en.yml +7 -0
- data/{bootstrap/master/post/relocate_puppet.sh → templates/scripts/relocate_installation.sh} +0 -0
- data/vagrant-pe_build.gemspec +2 -1
- metadata +40 -17
- data/bootstrap/base/provision/install_puppet_enterprise.sh +0 -10
- data/lib/pe_build/action.rb +0 -20
- data/lib/pe_build/action/download.rb +0 -56
- data/lib/pe_build/action/unpackage.rb +0 -70
- data/lib/pe_build/config.rb +0 -35
- data/lib/pe_build/provisioners.rb +0 -9
- data/lib/pe_build/provisioners/puppet_enterprise.rb +0 -1
- data/lib/pe_build/provisioners/puppet_enterprise_bootstrap.rb +0 -171
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'archive/tar/minitar'
|
2
|
+
require 'zlib'
|
3
|
+
|
4
|
+
module PEBuild
|
5
|
+
module Unpack
|
6
|
+
class Tar
|
7
|
+
|
8
|
+
# @param src [String]
|
9
|
+
# @param dst [String]
|
10
|
+
def initialize(src, dst)
|
11
|
+
@src, @dst = src, dst
|
12
|
+
end
|
13
|
+
|
14
|
+
def unpack
|
15
|
+
::Archive::Tar::Minitar.unpack(zip, @dst)
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String] The base directory contained in the tar archive
|
19
|
+
def dirname
|
20
|
+
input = ::Archive::Tar::Minitar::Input.new(zip)
|
21
|
+
|
22
|
+
base = nil
|
23
|
+
input.each do |entry|
|
24
|
+
path = entry.name
|
25
|
+
base = path.split(File::SEPARATOR).first
|
26
|
+
end
|
27
|
+
|
28
|
+
base
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def zip
|
34
|
+
Zlib::GzipReader.new(File.open(@src, 'rb'))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module PEBuild
|
2
|
+
module Util
|
3
|
+
module Config
|
4
|
+
|
5
|
+
# Merge configuration classes together with the "local" object overwriting any
|
6
|
+
# values set in the "other" object. This uses the default merging in the Vagrant
|
7
|
+
# plugin config class. The builtin merge function is not straight forward however.
|
8
|
+
# It needs to be called on the object being overwritten. When using a subclass of
|
9
|
+
# a global config for a provisioner config, the builtin merge method cannot actually
|
10
|
+
# merge them in the direction that would be needed.
|
11
|
+
#
|
12
|
+
# This function assumes that the "local" object is of the same class or at the very
|
13
|
+
# least a subclass of "other".
|
14
|
+
#
|
15
|
+
# @param local [Vagrant::Plugin::V2::Config] Local configuration class to merge
|
16
|
+
# @param other [Vagrant::Plugin::V2::Config] Other configuration class to merge
|
17
|
+
# @return [Vagrant::Plugin::V2::Config] New object of the same class as Local that represents the merged result
|
18
|
+
#
|
19
|
+
def self.local_merge(local, other)
|
20
|
+
if other.class >= local.class
|
21
|
+
result = local.class.new
|
22
|
+
|
23
|
+
result = result.merge(other)
|
24
|
+
result = result.merge(local)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/pe_build/version.rb
CHANGED
File without changes
|
@@ -2,7 +2,7 @@ q_install=y
|
|
2
2
|
q_puppet_cloud_install=n
|
3
3
|
q_puppet_enterpriseconsole_install=n
|
4
4
|
q_puppet_symlinks_install=y
|
5
|
-
q_puppetagent_certname=<%= @
|
5
|
+
q_puppetagent_certname=<%= @machine.name %>
|
6
6
|
q_puppetagent_install=y
|
7
7
|
q_puppetagent_server=<%= config.master %>
|
8
8
|
q_puppetmaster_install=n
|
@@ -33,9 +33,9 @@ q_puppet_enterpriseconsole_smtp_user_auth=n
|
|
33
33
|
q_puppet_enterpriseconsole_smtp_username=
|
34
34
|
|
35
35
|
q_puppet_symlinks_install=y
|
36
|
-
q_puppetagent_certname=<%= @
|
36
|
+
q_puppetagent_certname=<%= @machine.name %>
|
37
37
|
q_puppetagent_install=y
|
38
|
-
q_puppetagent_server=<%= @
|
38
|
+
q_puppetagent_server=<%= @machine.name %>
|
39
39
|
q_puppetca_install=y
|
40
40
|
q_puppetmaster_certname=master
|
41
41
|
q_puppetmaster_dnsaltnames=master,puppet
|
@@ -27,9 +27,9 @@ q_puppet_enterpriseconsole_smtp_use_tls=n
|
|
27
27
|
q_puppet_enterpriseconsole_smtp_user_auth=n
|
28
28
|
q_puppet_enterpriseconsole_smtp_username=
|
29
29
|
|
30
|
-
q_puppetagent_certname=<%= @
|
30
|
+
q_puppetagent_certname=<%= @machine.name %>
|
31
31
|
q_puppetagent_install=y
|
32
|
-
q_puppetagent_server=<%= @
|
32
|
+
q_puppetagent_server=<%= @machine.name %>
|
33
33
|
q_puppetca_install=y
|
34
34
|
q_puppetmaster_certname=master
|
35
35
|
q_puppetmaster_dnsaltnames=master,puppet
|
data/{bootstrap/master/post/relocate_puppet.sh → templates/scripts/relocate_installation.sh}
RENAMED
File without changes
|
data/vagrant-pe_build.gemspec
CHANGED
@@ -13,7 +13,8 @@ Gem::Specification.new do |gem|
|
|
13
13
|
|
14
14
|
gem.summary = "Vagrant provisioner for installing Puppet Enterprise"
|
15
15
|
|
16
|
-
gem.add_dependency '
|
16
|
+
gem.add_dependency 'progressbar'
|
17
|
+
gem.add_dependency 'minitar'
|
17
18
|
|
18
19
|
gem.files = %x{git ls-files -z}.split("\0")
|
19
20
|
gem.require_path = 'lib'
|
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.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,24 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: progressbar
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: minitar
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
description:
|
31
47
|
email: adrien@somethingsinistral.net
|
32
48
|
executables: []
|
@@ -36,8 +52,6 @@ files:
|
|
36
52
|
- Gemfile
|
37
53
|
- LICENSE
|
38
54
|
- README.markdown
|
39
|
-
- bootstrap/base/provision/install_puppet_enterprise.sh
|
40
|
-
- bootstrap/master/post/relocate_puppet.sh
|
41
55
|
- doc/answers/README.markdown
|
42
56
|
- doc/answers/agent.txt
|
43
57
|
- doc/answers/master-1.1.txt
|
@@ -45,21 +59,29 @@ files:
|
|
45
59
|
- doc/answers/master-2.5.0.txt
|
46
60
|
- doc/answers/master-db.txt
|
47
61
|
- lib/pe_build.rb
|
48
|
-
- lib/pe_build/
|
49
|
-
- lib/pe_build/
|
50
|
-
- lib/pe_build/action/unpackage.rb
|
62
|
+
- lib/pe_build/archive.rb
|
63
|
+
- lib/pe_build/archive_collection.rb
|
51
64
|
- lib/pe_build/command.rb
|
65
|
+
- lib/pe_build/command/copy.rb
|
52
66
|
- lib/pe_build/command/download.rb
|
53
67
|
- lib/pe_build/command/list.rb
|
54
|
-
- lib/pe_build/config.rb
|
55
|
-
- lib/pe_build/
|
56
|
-
- lib/pe_build/
|
57
|
-
- lib/pe_build/
|
68
|
+
- lib/pe_build/config/global.rb
|
69
|
+
- lib/pe_build/config/pe_bootstrap.rb
|
70
|
+
- lib/pe_build/config_default.rb
|
71
|
+
- lib/pe_build/idempotent.rb
|
72
|
+
- lib/pe_build/plugin.rb
|
73
|
+
- lib/pe_build/provisioner/pe_bootstrap.rb
|
74
|
+
- lib/pe_build/transfer/file.rb
|
75
|
+
- lib/pe_build/transfer/uri.rb
|
76
|
+
- lib/pe_build/unpack/tar.rb
|
77
|
+
- lib/pe_build/util/config.rb
|
58
78
|
- lib/pe_build/version.rb
|
59
|
-
- lib/
|
79
|
+
- lib/vagrant-pe_build.rb
|
60
80
|
- templates/answers/agent.txt.erb
|
61
81
|
- templates/answers/master-existing-db.txt.erb
|
62
82
|
- templates/answers/master.txt.erb
|
83
|
+
- templates/locales/en.yml
|
84
|
+
- templates/scripts/relocate_installation.sh
|
63
85
|
- vagrant-pe_build.gemspec
|
64
86
|
homepage: https://github.com/adrienthebo/vagrant-pe_build
|
65
87
|
licenses: []
|
@@ -86,3 +108,4 @@ signing_key:
|
|
86
108
|
specification_version: 3
|
87
109
|
summary: Vagrant provisioner for installing Puppet Enterprise
|
88
110
|
test_files: []
|
111
|
+
has_rdoc:
|
@@ -1,10 +0,0 @@
|
|
1
|
-
if [ -f /opt/puppet/bin/puppet ]; then
|
2
|
-
echo "Puppet Enterprise already present, version $(/opt/puppet/bin/puppet --version)"
|
3
|
-
echo "Skipping installation."
|
4
|
-
else
|
5
|
-
<%= @installer_cmd %>
|
6
|
-
echo
|
7
|
-
echo
|
8
|
-
echo " -- Notice: scheduling Puppet run in one minute to install mcollective"
|
9
|
-
echo "/opt/puppet/bin/puppet agent --onetime --noop" | at next minute
|
10
|
-
fi
|
data/lib/pe_build/action.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'vagrant'
|
2
|
-
require 'vagrant/action/builder'
|
3
|
-
require 'pe_build'
|
4
|
-
|
5
|
-
module PEBuild::Action
|
6
|
-
end
|
7
|
-
|
8
|
-
require 'pe_build/action/download'
|
9
|
-
require 'pe_build/action/unpackage'
|
10
|
-
|
11
|
-
builder = Vagrant::Action::Builder.new do
|
12
|
-
use PEBuild::Action::Download
|
13
|
-
end
|
14
|
-
|
15
|
-
Vagrant.actions.register :download_pe_build, builder
|
16
|
-
|
17
|
-
Vagrant.actions.register(:prep_build, Vagrant::Action::Builder.new do
|
18
|
-
use PEBuild::Action::Download
|
19
|
-
use PEBuild::Action::Unpackage
|
20
|
-
end)
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'pe_build'
|
2
|
-
require 'pe_build/action'
|
3
|
-
require 'vagrant'
|
4
|
-
require 'fileutils'
|
5
|
-
|
6
|
-
class PEBuild::Action::Download
|
7
|
-
# Downloads a PE build to a temp directory
|
8
|
-
|
9
|
-
def initialize(app, env)
|
10
|
-
@app, @env = app, env
|
11
|
-
load_variables
|
12
|
-
end
|
13
|
-
|
14
|
-
def call(env)
|
15
|
-
@env = env
|
16
|
-
perform_download
|
17
|
-
@app.call(@env)
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
# Determine system state and download a PE build accordingly.
|
23
|
-
#
|
24
|
-
# If we are applying actions within the context of a single box, then we
|
25
|
-
# should try to prefer and box level configuration options first. If
|
26
|
-
# anything is unset then we should fall back to the global settings.
|
27
|
-
def load_variables
|
28
|
-
if @env[:box_name]
|
29
|
-
@root = @env[:vm].pe_build.download_root
|
30
|
-
@version = @env[:vm].pe_build.version
|
31
|
-
@filename = @env[:vm].pe_build.filename
|
32
|
-
end
|
33
|
-
|
34
|
-
@root ||= @env[:global_config].pe_build.download_root
|
35
|
-
@version ||= @env[:global_config].pe_build.version
|
36
|
-
@filename ||= @env[:global_config].pe_build.filename
|
37
|
-
|
38
|
-
@archive_path = File.join(PEBuild.archive_directory, @filename)
|
39
|
-
end
|
40
|
-
|
41
|
-
# @return [String] The full URL to download, based on the config
|
42
|
-
def url
|
43
|
-
[@root, @version, @filename].join('/')
|
44
|
-
end
|
45
|
-
|
46
|
-
def perform_download
|
47
|
-
if File.exist? @archive_path
|
48
|
-
@env[:ui].info "#{@filename} cached, skipping download."
|
49
|
-
else
|
50
|
-
FileUtils.mkdir_p PEBuild.archive_directory unless File.directory? PEBuild.archive_directory
|
51
|
-
cmd = %{curl -L -A "Vagrant/PEBuild (v#{PEBuild::VERSION})" -O #{url}}
|
52
|
-
@env[:ui].info "Executing '#{cmd}'"
|
53
|
-
Dir.chdir(PEBuild.archive_directory) { %x{#{cmd}} }
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'vagrant'
|
2
|
-
require 'pe_build/action'
|
3
|
-
require 'fileutils'
|
4
|
-
|
5
|
-
class PEBuild::Action::Unpackage
|
6
|
-
def initialize(app, env)
|
7
|
-
@app, @env = app, env
|
8
|
-
load_variables
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(env)
|
12
|
-
@env = env
|
13
|
-
@extracted_dir = File.join(@env[:unpack_directory], destination_directory)
|
14
|
-
extract_build
|
15
|
-
@app.call(@env)
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def load_variables
|
21
|
-
if @env[:box_name]
|
22
|
-
@root = @env[:vm].pe_build.download_root
|
23
|
-
@version = @env[:vm].pe_build.version
|
24
|
-
@filename = @env[:vm].pe_build.version
|
25
|
-
end
|
26
|
-
|
27
|
-
@root ||= @env[:global_config].pe_build.download_root
|
28
|
-
@version ||= @env[:global_config].pe_build.version
|
29
|
-
@filename ||= @env[:global_config].pe_build.filename
|
30
|
-
|
31
|
-
@archive_path = File.join(PEBuild.archive_directory, @filename)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Sadly, shelling out is more sane than trying to use the facilities
|
35
|
-
# provided.
|
36
|
-
def extract_build
|
37
|
-
if File.directory? @extracted_dir
|
38
|
-
@env[:ui].info "#{destination_directory} already present, skipping extraction."
|
39
|
-
else
|
40
|
-
cmd = %{tar xf #{@archive_path} -C #{@env[:unpack_directory]}}
|
41
|
-
@env[:ui].info "Extracting #{@archive_path} to #{@env[:unpack_directory]}"
|
42
|
-
%x{#{cmd}}
|
43
|
-
end
|
44
|
-
rescue => e
|
45
|
-
# If anything goes wrong while extracting, nuke the extracted directory
|
46
|
-
# as it could be incomplete. If we do this, then we can ensure that if
|
47
|
-
# the extracted directory already exists then it will be in a good state.
|
48
|
-
@env[:ui].info "Removing possibly damaged installer directory '#{@extracted_dir}'"
|
49
|
-
FileUtils.rm_r @extracted_dir
|
50
|
-
end
|
51
|
-
|
52
|
-
# Determine the name of the top level directory by peeking into the tarball
|
53
|
-
def destination_directory
|
54
|
-
raise Errno::ENOENT, "No such file \"#{@archive_path}\"" unless File.file? @archive_path
|
55
|
-
|
56
|
-
firstline = nil
|
57
|
-
dir = nil
|
58
|
-
dir_regex = %r[^(.*?)/]
|
59
|
-
IO.popen(%{tar -tf #{@archive_path}}) { |out| firstline = out.gets }
|
60
|
-
|
61
|
-
if firstline.nil? or firstline.empty?
|
62
|
-
raise "Could not get a directory listing from the installer tarfile #{File.basename @archive_path}"
|
63
|
-
elsif (match = firstline.match dir_regex)
|
64
|
-
dir = match[1]
|
65
|
-
else
|
66
|
-
raise "Could not determine the base directory name from #{firstline} - doesn't match #{dir_regex.to_s}"
|
67
|
-
end
|
68
|
-
dir
|
69
|
-
end
|
70
|
-
end
|
data/lib/pe_build/config.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'vagrant'
|
2
|
-
require 'uri'
|
3
|
-
require 'pe_build'
|
4
|
-
|
5
|
-
class PEBuild::Config < Vagrant::Config::Base
|
6
|
-
attr_writer :download_root
|
7
|
-
attr_writer :version
|
8
|
-
attr_writer :filename
|
9
|
-
attr_writer :suffix
|
10
|
-
|
11
|
-
def download_root
|
12
|
-
@download_root
|
13
|
-
end
|
14
|
-
|
15
|
-
def version
|
16
|
-
@version
|
17
|
-
end
|
18
|
-
|
19
|
-
def filename
|
20
|
-
@filename
|
21
|
-
end
|
22
|
-
|
23
|
-
def suffix
|
24
|
-
@suffix || :all
|
25
|
-
end
|
26
|
-
|
27
|
-
def validate(env, errors)
|
28
|
-
URI.parse(download_root)
|
29
|
-
rescue
|
30
|
-
# TODO I18n
|
31
|
-
errors.add("Invalid download root '#{download_root.inspect}'")
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
Vagrant.config_keys.register(:pe_build) { PEBuild::Config }
|
@@ -1,9 +0,0 @@
|
|
1
|
-
require 'pe_build'
|
2
|
-
require 'vagrant'
|
3
|
-
|
4
|
-
module PEBuild::Provisioners; end
|
5
|
-
|
6
|
-
require 'pe_build/provisioners/puppet_enterprise_bootstrap'
|
7
|
-
#require 'pe_build/provisioners/puppet_enterprise'
|
8
|
-
|
9
|
-
Vagrant.provisioners.register(:puppet_enterprise_bootstrap) { PEBuild::Provisioners::PuppetEnterpriseBootstrap}
|