oscar 0.2.0alpha1

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.
Files changed (42) hide show
  1. data/.gitignore +3 -0
  2. data/CHANGELOG +12 -0
  3. data/Gemfile +1 -0
  4. data/LICENSE +14 -0
  5. data/README.markdown +97 -0
  6. data/Vagrantfile +6 -0
  7. data/bootstrap/base/pre/set_hostname.sh +3 -0
  8. data/bootstrap/base/provision/install_puppet_enterprise.sh +6 -0
  9. data/bootstrap/master/post/relocate_puppet.sh +23 -0
  10. data/config/.gitignore +1 -0
  11. data/config/roles.yaml.dist +17 -0
  12. data/doc/answers/README.markdown +1 -0
  13. data/doc/answers/agent.txt +10 -0
  14. data/doc/answers/master-1.1.txt +22 -0
  15. data/doc/answers/master-2.0.0.txt +42 -0
  16. data/doc/answers/master-2.5.0.txt +36 -0
  17. data/doc/answers/master-db.txt +52 -0
  18. data/lib/oscar.rb +17 -0
  19. data/lib/oscar/config.rb +97 -0
  20. data/lib/oscar/environment.rb +28 -0
  21. data/lib/oscar/networking.rb +47 -0
  22. data/lib/oscar/node.rb +91 -0
  23. data/lib/oscar/schema.yaml +73 -0
  24. data/lib/oscar/version.rb +3 -0
  25. data/lib/pe_build.rb +13 -0
  26. data/lib/pe_build/action.rb +20 -0
  27. data/lib/pe_build/action/download.rb +56 -0
  28. data/lib/pe_build/action/unpackage.rb +70 -0
  29. data/lib/pe_build/command.rb +31 -0
  30. data/lib/pe_build/command/download.rb +8 -0
  31. data/lib/pe_build/command/list.rb +10 -0
  32. data/lib/pe_build/config.rb +30 -0
  33. data/lib/pe_build/provisioners.rb +9 -0
  34. data/lib/pe_build/provisioners/puppet_enterprise.rb +1 -0
  35. data/lib/pe_build/provisioners/puppet_enterprise_bootstrap.rb +138 -0
  36. data/lib/pe_build/version.rb +5 -0
  37. data/manifests/.gitignore +3 -0
  38. data/modules/.gitignore +2 -0
  39. data/oscar.gemspec +27 -0
  40. data/templates/answers/agent.txt.erb +10 -0
  41. data/templates/answers/master.txt.erb +52 -0
  42. metadata +175 -0
@@ -0,0 +1,8 @@
1
+ require 'pe_build'
2
+ require 'vagrant'
3
+
4
+ class PEBuild::Command::Download < Vagrant::Command::Base
5
+ def execute
6
+ @env.action_runner.run(:download_pe_build)
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ require 'vagrant'
2
+ class PEBuild::Command::List < Vagrant::Command::Base
3
+ def execute
4
+ if File.directory? PEBuild.archive_directory and (entries = Dir["#{PEBuild.archive_directory}/*"])
5
+ puts entries.join('\n')
6
+ else
7
+ warn "No PE versions downloaded."
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,30 @@
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
+
10
+ def download_root
11
+ @download_root || 'https://pm.puppetlabs.com/puppet-enterprise'
12
+ end
13
+
14
+ def version
15
+ @version || '2.5.3'
16
+ end
17
+
18
+ def filename
19
+ @filename || "puppet-enterprise-#{version}-all.tar.gz"
20
+ end
21
+
22
+ def validate(env, errors)
23
+ URI.parse(download_root)
24
+ rescue
25
+ # TODO I18n
26
+ errors.add("Invalid download root '#{download_root.inspect}'")
27
+ end
28
+ end
29
+
30
+ Vagrant.config_keys.register(:pe_build) { PEBuild::Config }
@@ -0,0 +1,9 @@
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}
@@ -0,0 +1 @@
1
+ require 'pe_build/provisioners'
@@ -0,0 +1,138 @@
1
+ require 'pe_build/provisioners'
2
+ require 'vagrant'
3
+ require 'fileutils'
4
+ require 'erb'
5
+
6
+ class PEBuild::Provisioners::PuppetEnterpriseBootstrap < Vagrant::Provisioners::Base
7
+
8
+ class Config < Vagrant::Config::Base
9
+ attr_writer :verbose, :master
10
+
11
+ def role=(rolename)
12
+ @role = (rolename.is_a?(Symbol)) ? rolename : rolename.intern
13
+ end
14
+
15
+ def role
16
+ @role || :agent
17
+ end
18
+
19
+ def verbose
20
+ @verbose || true
21
+ end
22
+
23
+ def master
24
+ @master || 'master'
25
+ end
26
+
27
+ def validate(env, errors)
28
+ errors.add("role must be one of [:master, :agent]") unless [:master, :agent].include? role
29
+ end
30
+ end
31
+
32
+ def self.config_class
33
+ Config
34
+ end
35
+
36
+ def initialize(*args)
37
+ super
38
+
39
+ load_variables
40
+
41
+ @cache_path = File.join(@env[:root_path], '.pe_build')
42
+ @answers_dir = File.join(@cache_path, 'answers')
43
+ end
44
+
45
+ def validate(app, env)
46
+
47
+ end
48
+
49
+ def prepare
50
+ FileUtils.mkdir @cache_path unless File.directory? @cache_path
51
+ @env[:action_runner].run(:prep_build, :unpack_directory => @cache_path)
52
+ end
53
+
54
+ def provision!
55
+ # determine if bootstrapping is necessary
56
+
57
+ prepare_answers_file
58
+ configure_installer
59
+
60
+ [:pre, :provision, :post].each do |stepname|
61
+ [:base, config.role].each do |rolename|
62
+ step rolename, stepname
63
+ end
64
+ end
65
+ end
66
+
67
+ private
68
+
69
+ # I HATE THIS.
70
+ def load_variables
71
+ if @env[:box_name]
72
+ @root = @env[:vm].pe_build.download_root
73
+ @version = @env[:vm].pe_build.version
74
+ @filename = @env[:vm].pe_build.version
75
+ end
76
+
77
+ @root ||= @env[:global_config].pe_build.download_root
78
+ @version ||= @env[:global_config].pe_build.version
79
+ @filename ||= @env[:global_config].pe_build.filename
80
+
81
+ @archive_path = File.join(PEBuild.archive_directory, @filename)
82
+ end
83
+
84
+ # @todo use absolute path for locating answers file template
85
+ def prepare_answers_file
86
+ FileUtils.mkdir_p @answers_dir unless File.directory? @answers_dir
87
+ @env[:ui].info "Creating answers file, node:#{@env[:vm].name}, role: #{config.role}"
88
+
89
+ template = File.read("#{@env[:root_path]}/templates/answers/#{config.role}.txt.erb")
90
+ dest = "#{@answers_dir}/#{@env[:vm].name}.txt"
91
+
92
+ contents = ERB.new(template).result(binding)
93
+
94
+ @env[:ui].info "Writing answers file to #{dest}"
95
+ File.open(dest, "w") do |file|
96
+ file.write contents
97
+ end
98
+ end
99
+
100
+ def step(role, stepname)
101
+ script_dir = File.join(@env[:root_path], 'bootstrap', role.to_s, stepname.to_s)
102
+ script_list = Dir.glob("#{script_dir}/*")
103
+
104
+ if script_list.empty?
105
+ @env[:ui].info "No steps for #{role}/#{stepname}", :color => :cyan
106
+ end
107
+
108
+ script_list.each do |template_path|
109
+ template = File.read(template_path)
110
+ contents = ERB.new(template).result(binding)
111
+
112
+ on_remote contents
113
+ end
114
+ end
115
+
116
+ # Determine the proper invocation of the PE installer
117
+ #
118
+ # @todo Don't restrict this to the universal installer
119
+ def configure_installer
120
+ vm_base_dir = "/vagrant/.pe_build"
121
+ installer = "#{vm_base_dir}/puppet-enterprise-#{@version}-all/puppet-enterprise-installer"
122
+ answers = "#{vm_base_dir}/answers/#{@env[:vm].name}.txt"
123
+ log_file = "/root/puppet-enterprise-installer-#{Time.now.strftime('%s')}.log"
124
+
125
+ @installer_cmd = "#{installer} -a #{answers} -l #{log_file}"
126
+ end
127
+
128
+ def on_remote(cmd)
129
+ env[:vm].channel.sudo(cmd) do |type, data|
130
+ # This section is directly ripped off from the shell provider.
131
+ if type == :stdout and config.verbose
132
+ @env[:ui].info(data.chomp, :color => :green, :prefix => false)
133
+ elsif type == :stderr
134
+ @env[:ui].info(data.chomp, :color => :red, :prefix => false)
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,5 @@
1
+ require 'oscar/version'
2
+ module PEBuild
3
+ # Copy the version constant from oscar
4
+ VERSION = Oscar::VERSION
5
+ end
@@ -0,0 +1,3 @@
1
+ *
2
+ !.gitignore
3
+
@@ -0,0 +1,2 @@
1
+ *
2
+ !.gitignore
data/oscar.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
2
+ require 'oscar/version'
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'oscar'
6
+ gem.version = Oscar::VERSION
7
+ gem.date = Date.today.to_s
8
+
9
+ gem.summary = 'Easy mode Puppet Enterprise provisioning'
10
+ gem.description = <<-EOD
11
+ Oscar is a series of extensions to simplify building out a Puppet Enterprise
12
+ environment. It handles networking configuration and fetching/installing
13
+ Puppet Enterprise.
14
+ EOD
15
+
16
+ gem.authors = 'Adrien Thebo'
17
+ gem.email = 'adrien@somethingsinistral.net'
18
+ gem.homepage = 'https://github.com/adrienthebo/oscar'
19
+
20
+ gem.add_dependency 'vagrant', '~> 1.0.0'
21
+ gem.add_dependency 'vagrant-hosts', '0.0.1rc1'
22
+ gem.add_dependency 'kwalify', '~> 0.7.0'
23
+ gem.add_dependency 'ipaddress', '~> 0.8.0'
24
+
25
+ gem.files = %x{git ls-files -z}.split("\0")
26
+ gem.require_path = 'lib'
27
+ end
@@ -0,0 +1,10 @@
1
+ q_install=y
2
+ q_puppet_cloud_install=n
3
+ q_puppet_enterpriseconsole_install=n
4
+ q_puppet_symlinks_install=y
5
+ q_puppetagent_certname=<%= @env[:vm].name %>
6
+ q_puppetagent_install=y
7
+ q_puppetagent_server=<%= config.master %>
8
+ q_puppetmaster_install=n
9
+ q_vendor_packages_install=y
10
+ q_continue_or_reenter_master_hostname=c
@@ -0,0 +1,52 @@
1
+ q_install=y
2
+ q_puppet_cloud_install=n
3
+
4
+ q_puppet_enterpriseconsole_auth_database_name=console_auth
5
+ q_puppet_enterpriseconsole_auth_database_password=console_auth
6
+ q_puppet_enterpriseconsole_auth_database_user=console_auth
7
+ q_puppet_enterpriseconsole_auth_password=console
8
+ q_puppet_enterpriseconsole_auth_user_email=console@example.com
9
+
10
+ # Use existing database
11
+ q_puppet_enterpriseconsole_database_install=n
12
+ q_puppet_enterpriseconsole_setup_db=y
13
+
14
+ q_puppet_enterpriseconsole_database_name=console
15
+ q_puppet_enterpriseconsole_database_user=console
16
+ q_puppet_enterpriseconsole_database_password=console
17
+ q_puppet_enterpriseconsole_database_remote=n
18
+ q_puppet_enterpriseconsole_database_root_password=console
19
+
20
+ q_puppet_enterpriseconsole_httpd_port=443
21
+ q_puppet_enterpriseconsole_install=y
22
+
23
+ q_puppet_enterpriseconsole_inventory_hostname=master
24
+ q_puppet_enterpriseconsole_inventory_port=8140
25
+
26
+ q_puppet_enterpriseconsole_master_hostname=master
27
+
28
+ q_puppet_enterpriseconsole_smtp_host=smtp.google.com
29
+ q_puppet_enterpriseconsole_smtp_password=
30
+ q_puppet_enterpriseconsole_smtp_port=25
31
+ q_puppet_enterpriseconsole_smtp_use_tls=n
32
+ q_puppet_enterpriseconsole_smtp_user_auth=n
33
+ q_puppet_enterpriseconsole_smtp_username=
34
+
35
+ q_puppet_symlinks_install=y
36
+ q_puppetagent_certname=<%= @env[:vm].name %>
37
+ q_puppetagent_install=y
38
+ q_puppetagent_server=<%= @env[:vm].name %>
39
+ q_puppetca_install=y
40
+ q_puppetmaster_certname=master
41
+ q_puppetmaster_dnsaltnames=master,puppet
42
+ q_puppetmaster_enterpriseconsole_hostname=localhost
43
+ q_puppetmaster_enterpriseconsole_port=443
44
+ q_puppetmaster_forward_facts=n
45
+ q_puppetmaster_install=y
46
+ q_vendor_packages_install=y
47
+
48
+ # pe 2.0 option
49
+ q_puppet_enterpriseconsole_auth_user=console
50
+
51
+ # pe 2.0 - 2.5 upgrade options
52
+ q_puppet_enterpriseconsole_setup_auth_db=y
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oscar
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3134727173
5
+ prerelease: 5
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ - alpha
11
+ - 1
12
+ version: 0.2.0alpha1
13
+ platform: ruby
14
+ authors:
15
+ - Adrien Thebo
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2012-11-05 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: vagrant
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 23
31
+ segments:
32
+ - 1
33
+ - 0
34
+ - 0
35
+ version: 1.0.0
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: vagrant-hosts
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - "="
45
+ - !ruby/object:Gem::Version
46
+ hash: 1796845819
47
+ segments:
48
+ - 0
49
+ - 0
50
+ - 1
51
+ - rc
52
+ - 1
53
+ version: 0.0.1rc1
54
+ type: :runtime
55
+ version_requirements: *id002
56
+ - !ruby/object:Gem::Dependency
57
+ name: kwalify
58
+ prerelease: false
59
+ requirement: &id003 !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ~>
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ - 7
68
+ - 0
69
+ version: 0.7.0
70
+ type: :runtime
71
+ version_requirements: *id003
72
+ - !ruby/object:Gem::Dependency
73
+ name: ipaddress
74
+ prerelease: false
75
+ requirement: &id004 !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ hash: 63
81
+ segments:
82
+ - 0
83
+ - 8
84
+ - 0
85
+ version: 0.8.0
86
+ type: :runtime
87
+ version_requirements: *id004
88
+ description: " Oscar is a series of extensions to simplify building out a Puppet Enterprise\n environment. It handles networking configuration and fetching/installing\n Puppet Enterprise.\n"
89
+ email: adrien@somethingsinistral.net
90
+ executables: []
91
+
92
+ extensions: []
93
+
94
+ extra_rdoc_files: []
95
+
96
+ files:
97
+ - .gitignore
98
+ - CHANGELOG
99
+ - Gemfile
100
+ - LICENSE
101
+ - README.markdown
102
+ - Vagrantfile
103
+ - bootstrap/base/pre/set_hostname.sh
104
+ - bootstrap/base/provision/install_puppet_enterprise.sh
105
+ - bootstrap/master/post/relocate_puppet.sh
106
+ - config/.gitignore
107
+ - config/roles.yaml.dist
108
+ - doc/answers/README.markdown
109
+ - doc/answers/agent.txt
110
+ - doc/answers/master-1.1.txt
111
+ - doc/answers/master-2.0.0.txt
112
+ - doc/answers/master-2.5.0.txt
113
+ - doc/answers/master-db.txt
114
+ - lib/oscar.rb
115
+ - lib/oscar/config.rb
116
+ - lib/oscar/environment.rb
117
+ - lib/oscar/networking.rb
118
+ - lib/oscar/node.rb
119
+ - lib/oscar/schema.yaml
120
+ - lib/oscar/version.rb
121
+ - lib/pe_build.rb
122
+ - lib/pe_build/action.rb
123
+ - lib/pe_build/action/download.rb
124
+ - lib/pe_build/action/unpackage.rb
125
+ - lib/pe_build/command.rb
126
+ - lib/pe_build/command/download.rb
127
+ - lib/pe_build/command/list.rb
128
+ - lib/pe_build/config.rb
129
+ - lib/pe_build/provisioners.rb
130
+ - lib/pe_build/provisioners/puppet_enterprise.rb
131
+ - lib/pe_build/provisioners/puppet_enterprise_bootstrap.rb
132
+ - lib/pe_build/version.rb
133
+ - manifests/.gitignore
134
+ - modules/.gitignore
135
+ - oscar.gemspec
136
+ - templates/answers/agent.txt.erb
137
+ - templates/answers/master.txt.erb
138
+ homepage: https://github.com/adrienthebo/oscar
139
+ licenses: []
140
+
141
+ post_install_message:
142
+ rdoc_options: []
143
+
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ hash: 3
152
+ segments:
153
+ - 0
154
+ version: "0"
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ">"
159
+ - !ruby/object:Gem::Version
160
+ hash: 25
161
+ segments:
162
+ - 1
163
+ - 3
164
+ - 1
165
+ version: 1.3.1
166
+ requirements: []
167
+
168
+ rubyforge_project:
169
+ rubygems_version: 1.8.24
170
+ signing_key:
171
+ specification_version: 3
172
+ summary: Easy mode Puppet Enterprise provisioning
173
+ test_files: []
174
+
175
+ has_rdoc: