boxgrinder-build 0.4.1 → 0.5.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.
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,181 +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/platform/base-platform-plugin'
22
- require 'boxgrinder-build/helpers/appliance-customize-helper'
23
-
24
- module BoxGrinder
25
- class VMwarePlugin < BasePlatformPlugin
26
- def info
27
- {
28
- :name => :vmware,
29
- :full_name => "VMware"
30
- }
31
- end
32
-
33
- def after_init
34
- @deliverables[:disk] = "#{@appliance_config.path.dir.build}/vmware/#{@appliance_config.name}.raw"
35
-
36
- @deliverables[:metadata] = {
37
- :vmx_enterprise => "#{@appliance_config.path.dir.build}/vmware/#{@appliance_config.name}-enterprise.vmx",
38
- :vmdk_enterprise => "#{@appliance_config.path.dir.build}/vmware/#{@appliance_config.name}-enterprise.vmdk",
39
- :vmx_personal => "#{@appliance_config.path.dir.build}/vmware/#{@appliance_config.name}-personal.vmx",
40
- :vmdk_personal => "#{@appliance_config.path.dir.build}/vmware/#{@appliance_config.name}-personal.vmdk"
41
- }
42
-
43
- @deliverables[:other] = {
44
- :readme => "#{@appliance_config.path.dir.build}/vmware/README"
45
- }
46
- end
47
-
48
-
49
- def execute( base_image_path )
50
- @log.info "Converting image to VMware format..."
51
- @log.debug "Copying VMware image file, this may take several minutes..."
52
-
53
- FileUtils.mkdir_p File.dirname( @deliverables[:disk] )
54
-
55
- @exec_helper.execute "cp #{base_image_path} #{@deliverables[:disk]}" if ( !File.exists?( @deliverables[:disk] ) || File.new( base_image_path ).mtime > File.new( @deliverables[:disk] ).mtime )
56
-
57
- @log.debug "VMware image copied."
58
-
59
- unless @appliance_config.post['vmware'].nil?
60
- customize( @deliverables[:disk] ) do |guestfs, guestfs_helper|
61
- @appliance_config.post['vmware'].each do |cmd|
62
- @log.debug "Executing #{cmd}"
63
- guestfs.sh( cmd )
64
- end
65
- @log.debug "Post commands from appliance definition file executed."
66
- end
67
- else
68
- @log.debug "No commands specified, skipping."
69
- end
70
-
71
- build_vmware_enterprise
72
- build_vmware_personal
73
-
74
- readme = File.open( "#{File.dirname(__FILE__)}/src/README" ).read
75
- readme.gsub!( /#APPLIANCE_NAME#/, @appliance_config.name )
76
- readme.gsub!( /#NAME#/, @config.name )
77
- readme.gsub!( /#VERSION#/, @config.version_with_release )
78
-
79
- File.open( @deliverables[:other][:readme], "w") {|f| f.write( readme ) }
80
-
81
- @log.info "Image converted to VMware format."
82
- end
83
-
84
- # returns value of cylinders, heads and sector for selected disk size (in GB)
85
-
86
- def generate_scsi_chs(disk_size)
87
- disk_size = (disk_size * 1024).to_i
88
-
89
- gb_sectors = 2097152
90
-
91
- if disk_size <= 1024
92
- h = 128
93
- s = 32
94
- else
95
- h = 255
96
- s = 63
97
- end
98
-
99
- c = disk_size / 1024 * gb_sectors / (h*s)
100
- total_sectors = gb_sectors * disk_size / 1024
101
-
102
- return [ c, h, s, total_sectors ]
103
- end
104
-
105
- def change_vmdk_values( type )
106
- vmdk_data = File.open( "#{File.dirname( __FILE__ )}/src/base.vmdk" ).read
107
-
108
- disk_size = 0.0
109
- @appliance_config.hardware.partitions.values.each { |part| disk_size += part['size'].to_f }
110
-
111
- c, h, s, total_sectors = generate_scsi_chs( disk_size )
112
-
113
- is_enterprise = type.eql?("vmfs")
114
-
115
- vmdk_data.gsub!( /#NAME#/, @appliance_config.name )
116
- vmdk_data.gsub!( /#TYPE#/, type )
117
- vmdk_data.gsub!( /#EXTENT_TYPE#/, is_enterprise ? "VMFS" : "FLAT" )
118
- vmdk_data.gsub!( /#NUMBER#/, is_enterprise ? "" : "0" )
119
- vmdk_data.gsub!( /#HW_VERSION#/, is_enterprise ? "4" : "3" )
120
- vmdk_data.gsub!( /#CYLINDERS#/, c.to_s )
121
- vmdk_data.gsub!( /#HEADS#/, h.to_s )
122
- vmdk_data.gsub!( /#SECTORS#/, s.to_s )
123
- vmdk_data.gsub!( /#TOTAL_SECTORS#/, total_sectors.to_s )
124
-
125
- vmdk_data
126
- end
127
-
128
- def change_common_vmx_values
129
- vmx_data = File.open( "#{File.dirname( __FILE__ )}/src/base.vmx" ).read
130
-
131
- # replace version with current appliance version
132
- vmx_data.gsub!( /#VERSION#/, "#{@appliance_config.version}.#{@appliance_config.release}" )
133
- # replace builder with current builder name and version
134
- vmx_data.gsub!( /#BUILDER#/, "#{@config.name} #{@config.version_with_release}" )
135
- # change name
136
- vmx_data.gsub!( /#NAME#/, @appliance_config.name.to_s )
137
- # and summary
138
- vmx_data.gsub!( /#SUMMARY#/, @appliance_config.summary.to_s )
139
- # replace guestOS informations to: linux or otherlinux-64, this seems to be the savests values
140
- vmx_data.gsub!( /#GUESTOS#/, "#{@appliance_config.hardware.arch == "x86_64" ? "otherlinux-64" : "linux"}" )
141
- # memory size
142
- vmx_data.gsub!( /#MEM_SIZE#/, @appliance_config.hardware.memory.to_s )
143
- # memory size
144
- vmx_data.gsub!( /#VCPU#/, @appliance_config.hardware.cpus.to_s )
145
- # network name
146
- # vmx_data.gsub!( /#NETWORK_NAME#/, @image_config.network_name )
147
-
148
- vmx_data
149
- end
150
-
151
- def build_vmware_personal
152
- @log.debug "Building VMware personal image."
153
-
154
- # create .vmx file
155
- File.open( @deliverables[:metadata][:vmx_personal], "w" ) {|f| f.write( change_common_vmx_values ) }
156
-
157
- # create disk descriptor file
158
- File.open( @deliverables[:metadata][:vmdk_personal], "w" ) {|f| f.write( change_vmdk_values( "monolithicFlat" ) ) }
159
-
160
- @log.debug "VMware personal image was built."
161
- end
162
-
163
- def build_vmware_enterprise
164
- @log.debug "Building VMware enterprise image."
165
-
166
- # defaults for ESXi (maybe for others too)
167
- @appliance_config.hardware.network = "VM Network" if @appliance_config.hardware.network.eql?( "NAT" )
168
-
169
- # create .vmx file
170
- vmx_data = change_common_vmx_values
171
- vmx_data += "ethernet0.networkName = \"#{@appliance_config.hardware.network}\""
172
-
173
- File.open( @deliverables[:metadata][:vmx_enterprise], "w" ) {|f| f.write( vmx_data ) }
174
-
175
- # create disk descriptor file
176
- File.open( @deliverables[:metadata][:vmdk_enterprise], "w" ) {|f| f.write( change_vmdk_values( "vmfs" ) ) }
177
-
178
- @log.debug "VMware enterprise image was built."
179
- end
180
- end
181
- 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-core/validators/errors'
22
-
23
- module BoxGrinder
24
- class ApplianceConfigParameterValidator
25
- def validate
26
- raise ValidationError, "'#{ENV['BG_HARDWARE_ARCH']}' is not a valid build architecture. Available architectures: #{SUPPORTED_ARCHES.join(", ")}." if (!ENV['BG_HARDWARE_ARCH'].nil? and !SUPPORTED_ARCHES.include?( ENV['BG_HARDWARE_ARCH']))
27
- raise ValidationError, "'#{ENV['BG_OS_NAME']}' is not a valid OS name. Please enter valid name." if !ENV['BG_OS_NAME'].nil? && !SUPPORTED_OSES.keys.include?( ENV['BG_OS_NAME'] )
28
-
29
- os_name = ENV['BG_OS_NAME'].nil? ? APPLIANCE_DEFAULTS[:os][:name] : ENV['BG_OS_NAME']
30
-
31
- raise ValidationError, "'#{ENV['BG_OS_VERSION']}' is not a valid OS version for #{os_name}. Please enter valid version." if !ENV['BG_OS_VERSION'].nil? && !SUPPORTED_OSES[os_name].include?( ENV['BG_OS_VERSION'] )
32
- raise ValidationError, "'#{ENV['BG_HARDWARE_DISK_SIZE']}' is not a valid disk size. Please enter valid size in GB." if !ENV['BG_HARDWARE_DISK_SIZE'].nil? && ENV['BG_HARDWARE_DISK_SIZE'].to_i == 0
33
- raise ValidationError, "'#{ENV['BG_HARDWARE_MEM_SIZE']}' is not a valid memory size. Please enter valid size in MB." if !ENV['BG_HARDWARE_MEM_SIZE'].nil? && ENV['BG_HARDWARE_MEM_SIZE'].to_i == 0
34
- raise ValidationError, "'#{ENV['BG_HARDWARE_CPUS']}' is not a valid virtual cpu amount. Please enter valid amount." if !ENV['BG_HARDWARE_CPUS'].nil? && ENV['BG_HARDWARE_CPUS'].to_i == 0
35
- end
36
- end
37
- end
@@ -1,84 +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-core/validators/errors'
22
- require 'yaml'
23
-
24
- module BoxGrinder
25
- class ApplianceValidator
26
- def initialize( dir_appliances, appliance_def, options = {} )
27
- @dir_appliances = dir_appliances
28
-
29
- @log = options[:log] || Logger.new(STDOUT)
30
- @exec_helper = options[:exec_helper] || ExecHelper.new( { :log => @log } )
31
-
32
- #check if appliance_def is nil
33
- raise ApplianceValidationError, "Appliance definition file must be specified" if appliance_def.nil? or appliance_def.length == 0
34
-
35
- @appliance_name = File.basename( appliance_def, '.appl' )
36
-
37
- # check if file exists
38
- raise ApplianceValidationError, "Appliance definition file for '#{@appliance_name}' doesn't exists" unless File.exists?( appliance_def )
39
-
40
- @appliance_def = appliance_def
41
- end
42
-
43
- def validate
44
- @definition = YAML.load_file( @appliance_def )
45
- # check for summary
46
- raise ApplianceValidationError, "Appliance definition file for '#{@appliance_name}' should have summary" if @definition['summary'].nil? or @definition['summary'].length == 0
47
- # check if selected desktop type is supported
48
- raise ApplianceValidationError, "Selected desktop type ('#{@definition['desktop']}') isn't supported. Supported desktop types: #{SUPPORTED_DESKTOP_TYPES.join( "," )}" if !@definition['desktop'].nil? and !SUPPORTED_DESKTOP_TYPES.include?( @definition['desktop'] )
49
- # check if all dependent appliances exists
50
- #appliances, valid = get_appliances(@appliance_name)
51
- #raise ApplianceValidationError, "Could not find all dependent appliances for multiappliance '#{@appliance_name}'" unless valid
52
- # check appliance count
53
- #raise ApplianceValidationError, "Invalid appliance count for appliance '#{@appliance_name}'" unless appliances.size >= 1
54
- end
55
-
56
- protected
57
-
58
- def get_appliances( appliance_name )
59
- appliances = Array.new
60
- valid = true
61
-
62
- appliance_def = "#{@dir_appliances}/#{appliance_name}/#{appliance_name}.appl"
63
-
64
- unless File.exists?( appliance_def )
65
- @log.info "Appliance configuration file for '#{appliance_name}' doesn't exists, please check your config files."
66
- return false
67
- end
68
-
69
- appliances_read = YAML.load_file( appliance_def )['appliances']
70
-
71
- appliances_read.each do |appl|
72
- appls, v = get_appliances( appl )
73
-
74
- appliances += appls if v
75
- valid = false unless v
76
- end unless appliances_read.nil? or appliances_read.empty?
77
-
78
- appliances.push( appliance_name )
79
-
80
- [ appliances, valid ]
81
- end
82
-
83
- end
84
- end
@@ -1,48 +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-core/validators/errors'
22
-
23
- module BoxGrinder
24
- class ConfigValidator
25
- def initialize( config, options = {} )
26
- @config = config
27
- @log = options[:log] || Logger.new(STDOUT)
28
- end
29
-
30
- def validate
31
- validate_common
32
- validate_appliance_dir
33
- end
34
-
35
- def validate_common
36
- secure_permissions = "600"
37
-
38
- if File.exists?( @config.config_file )
39
- conf_file_permissions = sprintf( "%o", File.stat( @config.config_file ).mode )[ 3, 5 ]
40
- raise ValidationError, "Configuration file (#{@config.config_file}) has wrong permissions (#{conf_file_permissions}), please correct it, run: 'chmod #{secure_permissions} #{@config.config_file}'." unless conf_file_permissions.eql?( secure_permissions )
41
- end
42
- end
43
-
44
- def validate_appliance_dir
45
- raise ValidationError, "Appliances directory '#{@config.dir.appliances}' doesn't exists, please create it: 'mkdir -p #{@config.dir.appliances}'." if !File.exists?(File.dirname( @config.dir.appliances )) && !File.directory?(File.dirname( @config.dir.appliances ))
46
- end
47
- end
48
- end
@@ -1,35 +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
- module BoxGrinder
22
- class SSHValidator
23
- def initialize( config )
24
- @config = config
25
- end
26
-
27
- def validate
28
- raise ValidationError, "Specified configuration file (#{@config.config_file}) doesn't exists. #{DEFAULT_HELP_TEXT[:general]}" unless File.exists?( @config.config_file )
29
- raise ValidationError, "No 'ssh' section in config file in configuration file '#{@config.config_file}'. #{DEFAULT_HELP_TEXT[:general]}" if @config.data['ssh'].nil?
30
- raise ValidationError, "Host not specified in configuration file '#{@config.config_file}'. #{DEFAULT_HELP_TEXT[:general]}" if @config.data['ssh']['host'].nil?
31
- raise ValidationError, "Username not specified in configuration file '#{@config.config_file}'. #{DEFAULT_HELP_TEXT[:general]}" if @config.data['ssh']['username'].nil?
32
- raise ValidationError, "Remote release packages path (remote_release_path) not specified in ssh section in configuration file '#{@config.config_file}'. #{DEFAULT_HELP_TEXT[:general]}" if @config.data['ssh']['remote_rpm_path'].nil?
33
- end
34
- end
35
- end
@@ -1,91 +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-core/validators/errors'
22
- require 'boxgrinder-build/validators/appliance-validator'
23
- require 'boxgrinder-build/validators/config-validator'
24
- require 'rake/tasklib'
25
-
26
- module BoxGrinder
27
- class Validator < Rake::TaskLib
28
-
29
- def initialize( config, options = {} )
30
- @config = config
31
- @log = options[:log] || Logger.new(STDOUT)
32
-
33
- define_tasks
34
- end
35
-
36
- def define_tasks
37
-
38
- desc "Validate appliance files definitions"
39
- task "validate:definitions" do
40
- validate_definitions
41
- end
42
-
43
- desc "Validate configuration"
44
- task "validate:config" do
45
- validate_configuration
46
- end
47
-
48
- desc "Validate everything"
49
- task "validate:all" => [ "validate:definitions", "validate:config" ]
50
- end
51
-
52
- def validate_definitions
53
- @log.debug "Validating appliance definitions..."
54
-
55
- begin
56
- raise ValidationError, "Appliance directory '#{@config.dir.appliances}' doesn't exists, please check your Rakefile" if @config.dir.appliances.nil? or !File.exists?(File.dirname( @config.dir.appliances )) or !File.directory?(File.dirname( @config.dir.appliances ))
57
-
58
- appliances = Dir[ "#{@config.dir.appliances}/*/*.appl" ]
59
-
60
- appliances.each do |appliance_def|
61
- ApplianceValidator.new( @config.dir.appliances, appliance_def ).validate
62
- end
63
-
64
- if appliances.size == 0
65
- @log.debug "No appliance definitions found in '#{@config.dir.appliances}' directory"
66
- else
67
- @log.debug "All #{appliances.size} appliances definitions are valid"
68
- end
69
- rescue ApplianceValidationError => appliance_validation_error
70
- raise "Error while validating appliance definition: #{appliance_validation_error}"
71
- rescue ValidationError => validation_error
72
- raise "Error while validating appliance definitions: #{validation_error}"
73
- rescue => exception
74
- raise "Something went wrong: #{exception}"
75
- end
76
- end
77
-
78
- def validate_configuration
79
- @log.debug "Validating configuration..."
80
- begin
81
- ConfigValidator.new( @config, :log => @log).validate
82
- rescue ValidationError => validation_error
83
- raise "Error while validating configuration: #{validation_error}"
84
- rescue => exception
85
- raise "Something went wrong: #{exception}"
86
- end
87
-
88
- @log.debug "Configuration is valid"
89
- end
90
- end
91
- end