boxgrinder-build 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/CHANGELOG +7 -0
  2. data/Manifest +0 -0
  3. data/Rakefile +11 -0
  4. data/bin/boxgrinder-build +33 -27
  5. data/boxgrinder-build.gemspec +38 -0
  6. data/lib/boxgrinder-build/appliance.rb +32 -41
  7. data/lib/boxgrinder-build/helpers/appliance-customize-helper.rb +3 -48
  8. data/lib/boxgrinder-build/helpers/guestfs-helper.rb +98 -12
  9. data/lib/boxgrinder-build/helpers/linux-helper.rb +69 -0
  10. data/lib/boxgrinder-build/helpers/package-helper.rb +20 -11
  11. data/lib/boxgrinder-build/helpers/plugin-helper.rb +32 -32
  12. data/lib/boxgrinder-build/managers/plugin-manager.rb +98 -0
  13. data/lib/boxgrinder-build/plugins/base-plugin.rb +70 -17
  14. data/spec/Rakefile +13 -0
  15. data/spec/appliance-spec.rb +195 -0
  16. data/spec/helpers/appliance-customize-helper-spec.rb +30 -0
  17. data/spec/helpers/guestfs-helper-spec.rb +129 -0
  18. data/spec/helpers/linux-helper-spec.rb +50 -0
  19. data/spec/helpers/package-helper-spec.rb +6 -0
  20. data/spec/helpers/plugin-helper-spec.rb +63 -0
  21. data/spec/managers/plugin-manager-spec.rb +27 -0
  22. data/spec/plugins/base-plugin-spec.rb +89 -0
  23. data/spec/rspec/src/appliances/jeos-f13.appl +27 -0
  24. metadata +60 -157
  25. data/docs/examples/appliances/appliances.appl +0 -5
  26. data/docs/examples/appliances/minimal.appl +0 -9
  27. data/docs/examples/appliances/mix.appl +0 -8
  28. data/docs/examples/appliances/packages.appl +0 -13
  29. data/docs/node-info/pom.xml +0 -31
  30. data/docs/node-info/src/main/webapp/META-INF/MANIFEST.MF +0 -3
  31. data/docs/node-info/src/main/webapp/WEB-INF/web.xml +0 -7
  32. data/docs/node-info/src/main/webapp/index.jsp +0 -70
  33. data/lib/boxgrinder-build/helpers/rake-helper.rb +0 -71
  34. data/lib/boxgrinder-build/managers/base-plugin-manager.rb +0 -62
  35. data/lib/boxgrinder-build/managers/delivery-plugin-manager.rb +0 -39
  36. data/lib/boxgrinder-build/managers/operating-system-plugin-manager.rb +0 -6
  37. data/lib/boxgrinder-build/managers/platform-plugin-manager.rb +0 -26
  38. data/lib/boxgrinder-build/plugins/delivery/base/base-delivery-plugin.rb +0 -43
  39. data/lib/boxgrinder-build/plugins/delivery/local/local-plugin.rb +0 -57
  40. data/lib/boxgrinder-build/plugins/delivery/s3/aws-helper.rb +0 -64
  41. data/lib/boxgrinder-build/plugins/delivery/s3/s3-plugin.rb +0 -190
  42. data/lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb +0 -159
  43. data/lib/boxgrinder-build/plugins/os/base/kickstart.rb +0 -148
  44. data/lib/boxgrinder-build/plugins/os/base/rhel-based-os-plugin.rb +0 -51
  45. data/lib/boxgrinder-build/plugins/os/base/rpm-based-os-plugin.rb +0 -134
  46. data/lib/boxgrinder-build/plugins/os/base/src/appliance.ks.erb +0 -41
  47. data/lib/boxgrinder-build/plugins/os/base/src/base.repo +0 -4
  48. data/lib/boxgrinder-build/plugins/os/base/src/motd.init +0 -21
  49. data/lib/boxgrinder-build/plugins/os/base/validators/rpm-dependency-validator.rb +0 -162
  50. data/lib/boxgrinder-build/plugins/os/base-operating-system-plugin.rb +0 -37
  51. data/lib/boxgrinder-build/plugins/os/centos/centos-plugin.rb +0 -52
  52. data/lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb +0 -74
  53. data/lib/boxgrinder-build/plugins/os/rhel/rhel-plugin.rb +0 -40
  54. data/lib/boxgrinder-build/plugins/platform/base-platform-plugin.rb +0 -37
  55. data/lib/boxgrinder-build/plugins/platform/ec2/ec2-plugin.rb +0 -332
  56. data/lib/boxgrinder-build/plugins/platform/ec2/src/f12/yum.conf +0 -24
  57. data/lib/boxgrinder-build/plugins/platform/ec2/src/f12-i386-boxgrinder.repo +0 -11
  58. data/lib/boxgrinder-build/plugins/platform/ec2/src/f12-x86_64-boxgrinder.repo +0 -11
  59. data/lib/boxgrinder-build/plugins/platform/ec2/src/fstab_32bit +0 -8
  60. data/lib/boxgrinder-build/plugins/platform/ec2/src/fstab_64bit +0 -8
  61. data/lib/boxgrinder-build/plugins/platform/ec2/src/ifcfg-eth0 +0 -7
  62. data/lib/boxgrinder-build/plugins/platform/ec2/src/rc_local +0 -29
  63. data/lib/boxgrinder-build/plugins/platform/vmware/src/README +0 -42
  64. data/lib/boxgrinder-build/plugins/platform/vmware/src/base.vmdk +0 -19
  65. data/lib/boxgrinder-build/plugins/platform/vmware/src/base.vmx +0 -45
  66. data/lib/boxgrinder-build/plugins/platform/vmware/vmware-plugin.rb +0 -181
  67. data/lib/boxgrinder-build/validators/appliance-config-parameter-validator.rb +0 -37
  68. data/lib/boxgrinder-build/validators/appliance-validator.rb +0 -84
  69. data/lib/boxgrinder-build/validators/config-validator.rb +0 -48
  70. data/lib/boxgrinder-build/validators/ssh-validator.rb +0 -35
  71. data/lib/boxgrinder-build/validators/validator.rb +0 -91
@@ -1,41 +0,0 @@
1
- lang en_US.UTF-8
2
- keyboard us
3
- timezone US/Eastern
4
- auth --useshadow --enablemd5
5
- selinux --permissive
6
- firewall --disabled
7
- bootloader --timeout=1 --append="acpi=force scsi_mod.scan=sync"
8
- firstboot --disabled
9
-
10
- <% if graphical %>
11
- xconfig --startxonboot
12
- services --enabled=NetworkManager --disabled=network,sshd
13
- <% else %>
14
- network --bootproto=dhcp --device=eth0 --onboot=on
15
- services --enabled=network
16
- <% end %>
17
-
18
- rootpw <%= root_password %>
19
-
20
- <% appliance_config.hardware.partitions.each do |root, partition| %>
21
- part <%= root %> --size <%= (partition['size'].to_f * 1024).to_i %> --fstype <%= fstype %> --ondisk sda<% end %>
22
-
23
- <% for repo in repos %>
24
- <%= repo %><% end %>
25
-
26
- <% if graphical %>
27
- %packages --excludedocs
28
- <% else %>
29
- %packages --excludedocs --nobase
30
- <% end %>
31
-
32
- <% for package in packages %>
33
- <%= package %><% end %>
34
- %end
35
- %post
36
-
37
- <% if graphical %>
38
- chkconfig --level 345 firstboot off 2>/dev/null<% end %>
39
-
40
- %end
41
-
@@ -1,4 +0,0 @@
1
- [#NAME#]
2
- name=#NAME#
3
- enabled=1
4
- gpgcheck=0
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- #
3
- # motd Prepares /etc/motd file
4
- #
5
- # chkconfig: 2345 99 05
6
- # description: Prepares /etc/motd file
7
- #
8
- ### BEGIN INIT INFO
9
- # Provides: ec2
10
- # Default-Start: 2345
11
- # Default-Stop: 0 1 6
12
- # Short-Description: Prepares /etc/motd file
13
- # Description: Prepares /etc/motd file
14
- ### END INIT INFO
15
-
16
- HOSTNAME=`/bin/uname -a | awk '{print $2}'`
17
- IP_ADDRESS=`ip addr list eth0 | grep "inet " | cut -d' ' -f6 | cut -d/ -f1`
18
-
19
- echo -e "\nAppliance:\t#APPLIANCE# #VERSION#\nHostname:\t$HOSTNAME\nIP Address:\t$IP_ADDRESS\n" > /etc/motd
20
-
21
- exit 0
@@ -1,162 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'yaml'
22
-
23
- module BoxGrinder
24
- class Repo
25
- def initialize( name, baseurl = nil, mirrorlist = nil )
26
- @name = name
27
- @baseurl = baseurl
28
- @mirrorlist = mirrorlist
29
- end
30
-
31
- attr_reader :name
32
- attr_reader :baseurl
33
- attr_reader :mirrorlist
34
- end
35
-
36
- class RPMDependencyValidator
37
- def initialize( config, appliance_config, options = {} )
38
- @config = config
39
- @appliance_config = appliance_config
40
-
41
- @log = options[:log] || Logger.new(STDOUT)
42
- @exec_helper = options[:exec_helper] || ExecHelper.new( { :log => @log } )
43
-
44
- # Because we're using repoquery command from our building environment, we must ensure, that our repository
45
- # names are unique
46
- @magic_hash = "#{@config.name.downcase.gsub(" ", "_")}-"
47
-
48
- define_tasks
49
- end
50
-
51
- def define_tasks
52
- desc "Validate packages dependencies for #{@appliance_config.simple_name} appliance"
53
- task "appliance:#{@appliance_config.name}:validate:dependencies" => [ @appliance_config.path.file.raw.kickstart ] do
54
- # if RAW file is already built, don't check for dependencies
55
- resolve_packages unless File.exists?( @appliance_config.path.file.raw.disk )
56
- end
57
-
58
- task "appliance:all:validate:dependencies" => [ "appliance:#{@appliance_config.name}:validate:dependencies" ]
59
- end
60
-
61
- def resolve_packages
62
- @log.info "Resolving packages added to #{@appliance_config.simple_name} appliance definition file..."
63
-
64
- repos = read_repos_from_kickstart_file
65
- package_list = generate_package_list
66
- repo_list = generate_repo_list( repos )
67
-
68
- generate_yum_config( repos )
69
-
70
- invalid_names = invalid_names( repo_list, package_list )
71
-
72
- if invalid_names.size == 0
73
- @log.info "All additional packages for #{@appliance_config.simple_name} appliance successfully resolved."
74
- else
75
- raise "Package#{invalid_names.size > 1 ? "s" : ""} #{invalid_names.join(', ')} for #{@appliance_config.simple_name} appliance not found in repositories. Please check package names in appliance definition file."
76
- end
77
- end
78
-
79
- def invalid_names( repo_list, package_list )
80
- @log.debug "Querying package database..."
81
-
82
- unless @appliance_config.is64bit?
83
- arches = "i386,i486,i586,i686"
84
- else
85
- arches = "x86_64"
86
- end
87
-
88
- repoquery_output = @exec_helper.execute( "sudo repoquery --quiet --disablerepo=* --enablerepo=#{repo_list} -c #{@appliance_config.path.file.raw.yum} list available #{package_list.join( ' ' )} --nevra --archlist=#{arches},noarch" )
89
- invalid_names = []
90
-
91
- for name in package_list
92
- found = false
93
-
94
- repoquery_output.each do |line|
95
- line = line.strip
96
-
97
- package = line.match( /^([\S]+)-\d+:/ )
98
- package = package.nil? ? line : package[1]
99
-
100
- if package.size > 0 and name.match( /^#{package.gsub(/[\+]/, '\\+')}/ )
101
- found = true
102
- end
103
- end
104
- invalid_names += [ name ] unless found
105
- end
106
-
107
- invalid_names
108
- end
109
-
110
- def generate_package_list
111
- packages = []
112
- for package in @appliance_config.packages.includes
113
- packages << package unless package.match /^@/
114
- end
115
- packages
116
- end
117
-
118
- def generate_repo_list(repos)
119
- repo_list = ""
120
-
121
- repos.each do |repo|
122
- repo_list += "#{@magic_hash}#{repo.name},"
123
- end
124
-
125
- repo_list = repo_list[0, repo_list.length - 1]
126
- end
127
-
128
- def read_repos_from_kickstart_file
129
- repos = `grep -e "^repo" #{@appliance_config.path.file.raw.kickstart}`
130
- repo_list = []
131
-
132
- repos.each do |repo_line|
133
- name = repo_line.match( /--name=([\w\-]+)/ )[1]
134
- baseurl = repo_line.match( /--baseurl=([\w\-\:\/\.&\?=]+)/ )
135
- mirrorlist = repo_line.match( /--mirrorlist=([\w\-\:\/\.&\?=]+)/ )
136
-
137
- baseurl = baseurl[1] unless baseurl.nil?
138
- mirrorlist = mirrorlist[1] unless mirrorlist.nil?
139
-
140
- repo_list.push( Repo.new( name, baseurl, mirrorlist ) )
141
- end
142
-
143
- repo_list
144
- end
145
-
146
- def generate_yum_config( repo_list )
147
- File.open( @appliance_config.path.file.raw.yum, "w") do |f|
148
-
149
- f.puts( "[main]\r\ncachedir=/tmp/#{@magic_hash}#{@appliance_config.hardware.arch}-yum-cache/\r\n\r\n" )
150
-
151
- for repo in repo_list
152
- f.puts( "[#{@magic_hash}#{repo.name}]" )
153
- f.puts( "name=#{repo.name}" )
154
- f.puts( "baseurl=#{repo.baseurl}" ) unless repo.baseurl.nil?
155
- f.puts( "mirrorlist=#{repo.mirrorlist}" ) unless repo.mirrorlist.nil?
156
- f.puts( "enabled=1" )
157
- f.puts
158
- end
159
- end
160
- end
161
- end
162
- end
@@ -1,37 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/managers/operating-system-plugin-manager'
22
- require 'boxgrinder-build/plugins/base-plugin'
23
-
24
- module BoxGrinder
25
- class BaseOperatingSystemPlugin < BasePlugin
26
- def self.inherited(klass)
27
- OperatingSystemPluginManager.instance << klass
28
- end
29
-
30
- alias_method :execute_original, :execute
31
-
32
- def execute( args = nil )
33
- raise "Build cannot be started before the plugin isn't initialized" if @initialized.nil?
34
- execute_original( args )
35
- end
36
- end
37
- end
@@ -1,52 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/plugins/os/base/rhel-based-os-plugin'
22
-
23
- module BoxGrinder
24
- class CentOSPlugin < RHELBasedOSPlugin
25
-
26
- CENTOS_REPOS = {
27
- "5" => {
28
- "base" => {
29
- "mirrorlist" => "http://mirrorlist.centos.org/?release=#OS_VERSION#&arch=#ARCH#&repo=os"
30
- },
31
- "updates" => {
32
- "mirrorlist" => "http://mirrorlist.centos.org/?release=#OS_VERSION#&arch=#ARCH#&repo=updates"
33
- }
34
- }
35
- }
36
-
37
- def info
38
- {
39
- :name => :centos,
40
- :full_name => "CentOS",
41
- :type => :linux,
42
- :versions => ["5"]
43
- }
44
- end
45
-
46
- def execute
47
- raise "Build cannot be started until the plugin isn't initialized" if @initialized.nil?
48
-
49
- build_rhel( CENTOS_REPOS )
50
- end
51
- end
52
- end
@@ -1,74 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/plugins/os/base/rpm-based-os-plugin'
22
- require 'boxgrinder-build/plugins/os/base/kickstart'
23
- require 'boxgrinder-build/plugins/os/base/validators/rpm-dependency-validator'
24
-
25
- module BoxGrinder
26
- class FedoraPlugin < RPMBasedOSPlugin
27
-
28
- FEDORA_REPOS = {
29
- "13" => {
30
- "base" => {
31
- "mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-13&arch=#ARCH#"
32
- },
33
- "updates" => {
34
- "mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f13&arch=#ARCH#"
35
- }
36
- },
37
- "12" => {
38
- "base" => {
39
- "mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-12&arch=#ARCH#"
40
- },
41
- "updates" => {
42
- "mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f12&arch=#ARCH#"
43
- }
44
- },
45
- "11" => {
46
- "base" => {
47
- "mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-11&arch=#ARCH#"
48
- },
49
- "updates" => {
50
- "mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f11&arch=#ARCH#"
51
- }
52
- },
53
- "rawhide" => {
54
- "base" => {
55
- "mirrorlist" => "http://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=#ARCH#"
56
- }
57
- }
58
-
59
- }
60
-
61
- def info
62
- {
63
- :name => :fedora,
64
- :full_name => "Fedora",
65
- :type => :linux,
66
- :versions => ["11", "12", "13", "rawhide"]
67
- }
68
- end
69
-
70
- def execute
71
- build_with_appliance_creator( FEDORA_REPOS )
72
- end
73
- end
74
- end
@@ -1,40 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/plugins/os/base/rhel-based-os-plugin'
22
-
23
- module BoxGrinder
24
- class RHELPlugin < RHELBasedOSPlugin
25
- def info
26
- {
27
- :name => :rhel,
28
- :full_name => "Red Hat Enterprise Linux",
29
- :type => :linux,
30
- :versions => ["5"]
31
- }
32
- end
33
-
34
- def execute
35
- raise "Build cannot be started until the plugin isn't initialized" if @initialized.nil?
36
-
37
- build_rhel
38
- end
39
- end
40
- end
@@ -1,37 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/managers/platform-plugin-manager'
22
- require 'boxgrinder-build/plugins/base-plugin'
23
-
24
- module BoxGrinder
25
- class BasePlatformPlugin < BasePlugin
26
- def self.inherited(klass)
27
- PlatformPluginManager.instance << klass
28
- end
29
-
30
- alias_method :execute_original, :execute
31
-
32
- def execute(args = nil)
33
- raise "Conversion cannot be started before the plugin isn't initialized" if @initialized.nil?
34
- execute_original(args)
35
- end
36
- end
37
- end