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,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