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
@@ -0,0 +1,73 @@
|
|
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::POSIX < PEBuild::Cap::DetectInstaller::Base
|
7
|
+
|
8
|
+
# @!method name
|
9
|
+
# @abstract
|
10
|
+
# @return [String] The name of the distribution
|
11
|
+
|
12
|
+
# @!method release_file
|
13
|
+
# @abstract
|
14
|
+
# @return [String] The file to use as the release file for the guest
|
15
|
+
|
16
|
+
# @!method release_file_format
|
17
|
+
# @abstract
|
18
|
+
# @return [Regexp] A regular expression with one capture that parses the distro version
|
19
|
+
|
20
|
+
# @!method supported_releases
|
21
|
+
# @abstract
|
22
|
+
# @return [Array<String>] All supported releases for the distribution
|
23
|
+
|
24
|
+
|
25
|
+
def detect
|
26
|
+
dist_version = parse_release_file
|
27
|
+
|
28
|
+
unless supported_releases.include? dist_version
|
29
|
+
raise "#{self.class.name} release #{dist_version} not supported"
|
30
|
+
end
|
31
|
+
|
32
|
+
"puppet-enterprise-#{@version}-#{name}-#{dist_version}-#{arch}.#{ext}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def arch
|
36
|
+
content = ""
|
37
|
+
@machine.communicate.execute("uname -m") do |type, data|
|
38
|
+
raise "Could not run 'uname -m' on #{@machine}: got #{data}" if type == :stderr
|
39
|
+
content << data.chomp
|
40
|
+
end
|
41
|
+
|
42
|
+
content = 'i386' if content.match /i\d86/
|
43
|
+
|
44
|
+
content
|
45
|
+
end
|
46
|
+
|
47
|
+
def ext
|
48
|
+
'tar.gz'
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def release_content
|
54
|
+
content = ""
|
55
|
+
|
56
|
+
@machine.communicate.execute("cat #{release_file}") do |type, data|
|
57
|
+
raise "Could not read #{release_file} on #{@machine}: got #{data}" if type == :stderr
|
58
|
+
content << data
|
59
|
+
end
|
60
|
+
|
61
|
+
content
|
62
|
+
end
|
63
|
+
|
64
|
+
def parse_release_file
|
65
|
+
matchdata = release_content.match(release_file_format)
|
66
|
+
|
67
|
+
if matchdata.nil? or matchdata[1].nil?
|
68
|
+
raise "#{self.class.name} could not determine release value: content #{release_content.inspect} did not match #{release_file_format}"
|
69
|
+
end
|
70
|
+
|
71
|
+
matchdata[1]
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class PEBuild::Cap::DetectInstaller::Redhat < PEBuild::Cap::DetectInstaller::POSIX
|
2
|
+
|
3
|
+
def name
|
4
|
+
'el'
|
5
|
+
end
|
6
|
+
|
7
|
+
def release_file
|
8
|
+
'/etc/redhat-release'
|
9
|
+
end
|
10
|
+
|
11
|
+
def release_file_format
|
12
|
+
%r[release (\d+)\.\d+]
|
13
|
+
end
|
14
|
+
|
15
|
+
def supported_releases
|
16
|
+
%w[5 6]
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class PEBuild::Cap::DetectInstaller::Ubuntu < PEBuild::Cap::DetectInstaller::POSIX
|
2
|
+
|
3
|
+
def name
|
4
|
+
'ubuntu'
|
5
|
+
end
|
6
|
+
|
7
|
+
def release_file
|
8
|
+
'/etc/issue'
|
9
|
+
end
|
10
|
+
|
11
|
+
def release_file_format
|
12
|
+
%r[Ubuntu (\d{2}\.\d{2})]
|
13
|
+
end
|
14
|
+
|
15
|
+
def supported_releases
|
16
|
+
%w[10.04 12.04]
|
17
|
+
end
|
18
|
+
|
19
|
+
def arch
|
20
|
+
retval = super
|
21
|
+
(retval == 'x86_64') ? 'amd64' : retval
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'pe_build/on_machine'
|
2
|
+
class PEBuild::Cap::RunInstall::POSIX
|
3
|
+
|
4
|
+
extend PEBuild::OnMachine
|
5
|
+
|
6
|
+
def self.run_install(machine, config, archive)
|
7
|
+
|
8
|
+
root = File.join('/vagrant', PEBuild::WORK_DIR)
|
9
|
+
|
10
|
+
cmd_path = []
|
11
|
+
cmd_path << root
|
12
|
+
|
13
|
+
cmd_path << archive.installer_dir
|
14
|
+
cmd_path << "puppet-enterprise-installer"
|
15
|
+
|
16
|
+
cmd = File.join(cmd_path)
|
17
|
+
answers = File.join(root, 'answers', "#{machine.name}.txt")
|
18
|
+
|
19
|
+
argv = "#{cmd} -a #{answers}"
|
20
|
+
|
21
|
+
on_machine(machine, argv)
|
22
|
+
|
23
|
+
machine.ui.info I18n.t('pebuild.provisioner.pe_bootstrap.scheduling_run')
|
24
|
+
machine.communicate.sudo("echo '/opt/puppet/bin/puppet agent -t' | at next minute")
|
25
|
+
end
|
26
|
+
end
|
data/lib/pe_build/command.rb
CHANGED
@@ -1,68 +1,11 @@
|
|
1
1
|
require 'vagrant'
|
2
|
+
require 'optparse'
|
2
3
|
|
3
4
|
module PEBuild
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@main_args, @subcommand, @sub_args = split_main_and_subcommand(argv)
|
10
|
-
|
11
|
-
@subcommands = Vagrant::Registry.new
|
12
|
-
|
13
|
-
register_subcommands
|
14
|
-
end
|
15
|
-
|
16
|
-
def execute
|
17
|
-
if @subcommand and (klass = @subcommands.get(@subcommand))
|
18
|
-
klass.new(@argv, @env).execute
|
19
|
-
elsif @subcommand
|
20
|
-
raise "Unrecognized subcommand #{@subcommand}"
|
21
|
-
else
|
22
|
-
print_help
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def register_subcommands
|
29
|
-
@subcommands.register('copy') do
|
30
|
-
require_relative 'command/copy'
|
31
|
-
PEBuild::Command::Copy
|
32
|
-
end
|
33
|
-
|
34
|
-
@subcommands.register('download') do
|
35
|
-
require_relative 'command/download'
|
36
|
-
PEBuild::Command::Download
|
37
|
-
end
|
38
|
-
|
39
|
-
@subcommands.register('list') do
|
40
|
-
require_relative 'command/list'
|
41
|
-
PEBuild::Command::List
|
42
|
-
end
|
5
|
+
module Command
|
6
|
+
require 'pe_build/command/base'
|
7
|
+
require 'pe_build/command/copy'
|
8
|
+
require 'pe_build/command/list'
|
9
|
+
require 'pe_build/command/download'
|
43
10
|
end
|
44
|
-
|
45
|
-
def print_help
|
46
|
-
cmd = 'vagrant pe-build'
|
47
|
-
opts = OptionParser.new do |opts|
|
48
|
-
opts.banner = "Usage: #{cmd} <command> [<args>]"
|
49
|
-
opts.separator ""
|
50
|
-
opts.separator "Available subcommands:"
|
51
|
-
|
52
|
-
# Add the available subcommands as separators in order to print them
|
53
|
-
# out as well.
|
54
|
-
keys = []
|
55
|
-
@subcommands.each { |key, value| keys << key.to_s }
|
56
|
-
|
57
|
-
keys.sort.each do |key|
|
58
|
-
opts.separator " #{key}"
|
59
|
-
end
|
60
|
-
|
61
|
-
opts.separator ""
|
62
|
-
opts.separator "For help on any individual command run `#{cmd} COMMAND -h`"
|
63
|
-
end
|
64
|
-
|
65
|
-
@env.ui.info(opts.help, :prefix => false)
|
66
|
-
end
|
67
|
-
end
|
68
11
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
|
3
|
+
class PEBuild::Command::Base < Vagrant.plugin(2, :command)
|
4
|
+
|
5
|
+
def initialize(argv, env)
|
6
|
+
super
|
7
|
+
split_argv
|
8
|
+
|
9
|
+
@subcommands = {
|
10
|
+
'list' => PEBuild::Command::List,
|
11
|
+
'download' => PEBuild::Command::Download,
|
12
|
+
'copy' => PEBuild::Command::Copy,
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute
|
17
|
+
if @subcommand
|
18
|
+
execute_subcommand
|
19
|
+
else
|
20
|
+
print_help
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def split_argv
|
27
|
+
@main_args, @subcommand, @sub_args = split_main_and_subcommand(@argv)
|
28
|
+
end
|
29
|
+
|
30
|
+
def execute_subcommand
|
31
|
+
if (klass = @subcommands[@subcommand])
|
32
|
+
klass.new(@argv, @env).execute
|
33
|
+
else
|
34
|
+
raise "Unrecognized subcommand #{@subcommand}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def print_help
|
39
|
+
cmd = 'vagrant pe-build'
|
40
|
+
opts = OptionParser.new do |opts|
|
41
|
+
opts.banner = "Usage: #{cmd} <command> [<args>]"
|
42
|
+
opts.separator ""
|
43
|
+
opts.separator "Available subcommands:"
|
44
|
+
|
45
|
+
@subcommands.keys.sort.each do |key|
|
46
|
+
opts.separator " #{key}"
|
47
|
+
end
|
48
|
+
|
49
|
+
opts.separator ""
|
50
|
+
opts.separator "For help on any individual command run `#{cmd} COMMAND -h`"
|
51
|
+
end
|
52
|
+
|
53
|
+
@env.ui.info(opts.help, :prefix => false)
|
54
|
+
end
|
55
|
+
end
|
@@ -1,16 +1,31 @@
|
|
1
|
-
require 'vagrant'
|
2
|
-
require 'optparse'
|
3
1
|
require 'pe_build/archive'
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
class PEBuild::Command::Copy < Vagrant.plugin(2, :command)
|
4
|
+
|
5
|
+
def initialize(argv, env)
|
6
|
+
super
|
7
|
+
@options = {}
|
8
|
+
end
|
8
9
|
|
9
10
|
def execute
|
11
|
+
argv = parse_options(parser)
|
12
|
+
|
13
|
+
filename = File.basename(argv.last)
|
14
|
+
src_dir = File.dirname(argv.last)
|
15
|
+
|
16
|
+
archive = PEBuild::Archive.new(filename, @env)
|
17
|
+
archive.version = @options[:version]
|
18
|
+
|
19
|
+
uri = URI.parse src_dir
|
20
|
+
archive.fetch(uri)
|
21
|
+
|
22
|
+
@env.ui.info "pe-build: #{archive} has been added and is ready for use!", :prefix => true
|
23
|
+
end
|
10
24
|
|
11
|
-
|
25
|
+
private
|
12
26
|
|
13
|
-
|
27
|
+
def parser
|
28
|
+
OptionParser.new do |o|
|
14
29
|
o.banner = "Usage: vagrant pe-build copy path/to/installer.tar.gz"
|
15
30
|
o.separator ''
|
16
31
|
|
@@ -18,21 +33,5 @@ class Copy < Vagrant.plugin(2, :command)
|
|
18
33
|
options[:version] = val
|
19
34
|
end
|
20
35
|
end
|
21
|
-
|
22
|
-
argv = parse_options(parser)
|
23
|
-
fpath = argv.last
|
24
|
-
|
25
|
-
basename = File.basename(fpath)
|
26
|
-
dirname = File.dirname(fpath)
|
27
|
-
|
28
|
-
#unless options[:version]
|
29
|
-
# raise Vagrant::Errors::CLIInvalidUsage, :help => parser.help.chomp
|
30
|
-
#end
|
31
|
-
|
32
|
-
archive = PEBuild::Archive.new(fpath, @env)
|
33
|
-
archive.version = options[:version]
|
34
|
-
archive.copy_from(dirname)
|
35
36
|
end
|
36
37
|
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,10 +1,6 @@
|
|
1
|
-
require 'vagrant'
|
2
|
-
require 'optparse'
|
3
1
|
require 'pe_build/archive'
|
4
2
|
|
5
|
-
|
6
|
-
class Command
|
7
|
-
class Download < Vagrant.plugin(2, :command)
|
3
|
+
class PEBuild::Command::Download < Vagrant.plugin(2, :command)
|
8
4
|
|
9
5
|
def execute
|
10
6
|
|
@@ -30,10 +26,10 @@ class Download < Vagrant.plugin(2, :command)
|
|
30
26
|
raise Vagrant::Errors::CLIInvalidUsage, :help => parser.help.chomp
|
31
27
|
end
|
32
28
|
|
29
|
+
uri = URI.parse(options[:dir])
|
30
|
+
|
33
31
|
archive = PEBuild::Archive.new(filename, @env)
|
34
32
|
archive.version = options[:version]
|
35
|
-
archive.
|
33
|
+
archive.fetch(options[:dir])
|
36
34
|
end
|
37
35
|
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,9 +1,6 @@
|
|
1
|
-
require 'vagrant'
|
2
1
|
require 'pe_build/archive_collection'
|
3
2
|
|
4
|
-
|
5
|
-
class Command
|
6
|
-
class List < Vagrant.plugin(2, :command)
|
3
|
+
class PEBuild::Command::List < Vagrant.plugin(2, :command)
|
7
4
|
def execute
|
8
5
|
archive_dir = PEBuild.archive_directory(@env)
|
9
6
|
|
@@ -18,5 +15,3 @@ class List < Vagrant.plugin(2, :command)
|
|
18
15
|
end
|
19
16
|
end
|
20
17
|
end
|
21
|
-
end
|
22
|
-
end
|
@@ -2,6 +2,7 @@ require 'uri'
|
|
2
2
|
require 'vagrant'
|
3
3
|
|
4
4
|
require 'pe_build/config_default'
|
5
|
+
require 'pe_build/transfer'
|
5
6
|
|
6
7
|
module PEBuild
|
7
8
|
module Config
|
@@ -45,7 +46,8 @@ class Global < Vagrant.plugin('2', :config)
|
|
45
46
|
include PEBuild::ConfigDefault
|
46
47
|
|
47
48
|
def finalize!
|
48
|
-
set_default :@suffix,
|
49
|
+
set_default :@suffix, :detect
|
50
|
+
|
49
51
|
#set_default :@version, DEFAULT_PE_VERSION
|
50
52
|
|
51
53
|
set_default :@download_root, nil
|
@@ -66,9 +68,16 @@ class Global < Vagrant.plugin('2', :config)
|
|
66
68
|
errors << "version only accepts a string, got #{@version.class}"
|
67
69
|
end
|
68
70
|
|
69
|
-
|
70
|
-
|
71
|
-
|
71
|
+
if @download_root and @download_root != UNSET_VALUE
|
72
|
+
begin
|
73
|
+
uri = URI.parse(@download_root)
|
74
|
+
|
75
|
+
if PEBuild::Transfer::IMPLEMENTATIONS[uri.scheme].nil?
|
76
|
+
errors << "No handlers available for URI scheme #{uri.scheme}"
|
77
|
+
end
|
78
|
+
rescue URI::InvalidURIError
|
79
|
+
errors << 'download_root must be a valid URL or nil'
|
80
|
+
end
|
72
81
|
end
|
73
82
|
|
74
83
|
{"PE Build global config" => errors}
|
@@ -77,6 +77,10 @@ class PEBootstrap < PEBuild::Config::Global
|
|
77
77
|
def validate(machine)
|
78
78
|
h = super
|
79
79
|
|
80
|
+
unless @step.empty?
|
81
|
+
machine.ui.warn "pe_bootstrap: explicit steps are deprecated and will be removed soon."
|
82
|
+
end
|
83
|
+
|
80
84
|
errors = []
|
81
85
|
if @version == UNSET_VALUE and global_config_from(machine).pe_build.version == UNSET_VALUE
|
82
86
|
errors << "Version must be set on provisioner when unset globally"
|
data/lib/pe_build/idempotent.rb
CHANGED