PackerFiles 0.0.1

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 (195) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/PackerFiles.gemspec +36 -0
  6. data/README.md +32 -0
  7. data/Rakefile +21 -0
  8. data/bin/pkf +5 -0
  9. data/lib/PackerFiles/CLI/OS.rb +44 -0
  10. data/lib/PackerFiles/CLI/Root.rb +41 -0
  11. data/lib/PackerFiles/Core/Base.rb +23 -0
  12. data/lib/PackerFiles/Core/CDImage.rb +185 -0
  13. data/lib/PackerFiles/Core/Disk.rb +135 -0
  14. data/lib/PackerFiles/Core/Exceptions.rb +65 -0
  15. data/lib/PackerFiles/Core/Hypervisor.rb +96 -0
  16. data/lib/PackerFiles/Core/Keyboard.rb +38 -0
  17. data/lib/PackerFiles/Core/Locale.rb +62 -0
  18. data/lib/PackerFiles/Core/LogicalVolume.rb +41 -0
  19. data/lib/PackerFiles/Core/Network.rb +67 -0
  20. data/lib/PackerFiles/Core/Packages.rb +30 -0
  21. data/lib/PackerFiles/Core/Partition.rb +41 -0
  22. data/lib/PackerFiles/Core/TimeZone.rb +45 -0
  23. data/lib/PackerFiles/Core/User.rb +46 -0
  24. data/lib/PackerFiles/Core/VolumeGroup.rb +50 -0
  25. data/lib/PackerFiles/Core/example/CDImage.txt +75 -0
  26. data/lib/PackerFiles/Core/example/Disk.txt +29 -0
  27. data/lib/PackerFiles/Core/example/Hypervisor.txt +111 -0
  28. data/lib/PackerFiles/Core/example/Keyboard.txt +28 -0
  29. data/lib/PackerFiles/Core/example/Locale.txt +31 -0
  30. data/lib/PackerFiles/Core/example/Network.txt +68 -0
  31. data/lib/PackerFiles/Core/example/Packages.txt +22 -0
  32. data/lib/PackerFiles/Core/example/TimeZone.txt +36 -0
  33. data/lib/PackerFiles/Core/example/User.txt +48 -0
  34. data/lib/PackerFiles/OS/Builder.rb +116 -0
  35. data/lib/PackerFiles/OS/CentOS/CD.rb +81 -0
  36. data/lib/PackerFiles/OS/CentOS/Kickstart.rb +64 -0
  37. data/lib/PackerFiles/OS/CentOS/Server.rb +170 -0
  38. data/lib/PackerFiles/OS/CentOS/Templates/Base_erb.rb +4 -0
  39. data/lib/PackerFiles/OS/CentOS/Templates/Disk_erb.rb +35 -0
  40. data/lib/PackerFiles/OS/CentOS/Templates/Keyboard_erb.rb +4 -0
  41. data/lib/PackerFiles/OS/CentOS/Templates/Locale_erb.rb +4 -0
  42. data/lib/PackerFiles/OS/CentOS/Templates/Network_erb.rb +17 -0
  43. data/lib/PackerFiles/OS/CentOS/Templates/Packages_erb.rb +34 -0
  44. data/lib/PackerFiles/OS/CentOS/Templates/Tail_erb.rb +15 -0
  45. data/lib/PackerFiles/OS/CentOS/Templates/TimeZone_erb.rb +10 -0
  46. data/lib/PackerFiles/OS/CentOS/Templates/User_erb.rb +20 -0
  47. data/lib/PackerFiles/OS/CentOS/Templates/boot_command_erb.rb +16 -0
  48. data/lib/PackerFiles/OS/CentOS/Templates/command_as_root_erb.rb +1 -0
  49. data/lib/PackerFiles/OS/CentOS/Templates/disable_root_erb.rb +1 -0
  50. data/lib/PackerFiles/OS/CentOS/Templates/enable_root_erb.rb +1 -0
  51. data/lib/PackerFiles/OS/CentOS/Templates/shutdown_command_erb.rb +1 -0
  52. data/lib/PackerFiles/OS/Debian/Apt.rb +42 -0
  53. data/lib/PackerFiles/OS/Debian/CD.rb +65 -0
  54. data/lib/PackerFiles/OS/Debian/Mirrors.rb +73 -0
  55. data/lib/PackerFiles/OS/Debian/Preseed.rb +64 -0
  56. data/lib/PackerFiles/OS/Debian/Server.rb +169 -0
  57. data/lib/PackerFiles/OS/Debian/Templates/Apt_erb.rb +18 -0
  58. data/lib/PackerFiles/OS/Debian/Templates/Disk_erb.rb +69 -0
  59. data/lib/PackerFiles/OS/Debian/Templates/Keyboard_erb.rb +5 -0
  60. data/lib/PackerFiles/OS/Debian/Templates/Locale_erb.rb +7 -0
  61. data/lib/PackerFiles/OS/Debian/Templates/Mirrors_erb.rb +9 -0
  62. data/lib/PackerFiles/OS/Debian/Templates/Network_erb.rb +19 -0
  63. data/lib/PackerFiles/OS/Debian/Templates/Packages_erb.rb +6 -0
  64. data/lib/PackerFiles/OS/Debian/Templates/TimeZone_erb.rb +6 -0
  65. data/lib/PackerFiles/OS/Debian/Templates/User_erb.rb +14 -0
  66. data/lib/PackerFiles/OS/Debian/Templates/boot_command_erb.rb +24 -0
  67. data/lib/PackerFiles/OS/Debian/Templates/command_as_root_erb.rb +1 -0
  68. data/lib/PackerFiles/OS/Debian/Templates/disable_root_erb.rb +5 -0
  69. data/lib/PackerFiles/OS/Debian/Templates/enable_root_erb.rb +1 -0
  70. data/lib/PackerFiles/OS/Debian/Templates/shutdown_command_erb.rb +1 -0
  71. data/lib/PackerFiles/OS/Debian/example/Apt.txt +55 -0
  72. data/lib/PackerFiles/OS/DocGenerator.rb +51 -0
  73. data/lib/PackerFiles/OS/Finder.rb +96 -0
  74. data/lib/PackerFiles/OS/RHEL/CD.rb +32 -0
  75. data/lib/PackerFiles/OS/RHEL/Fedora.rb +59 -0
  76. data/lib/PackerFiles/OS/RHEL/FedoraCD.rb +68 -0
  77. data/lib/PackerFiles/OS/RHEL/Server.rb +32 -0
  78. data/lib/PackerFiles/OS/RHEL/Templates/Fedora_Tail_erb.rb +14 -0
  79. data/lib/PackerFiles/OS/RHEL/Templates/boot_command_fedora_erb.rb +16 -0
  80. data/lib/PackerFiles/OS/SUSE/Templates/Base_erb.xml +32 -0
  81. data/lib/PackerFiles/OS/SUSE/Templates/Disk_erb.xml +110 -0
  82. data/lib/PackerFiles/OS/SUSE/Templates/Keyboard_erb.xml +7 -0
  83. data/lib/PackerFiles/OS/SUSE/Templates/Locale_erb.xml +18 -0
  84. data/lib/PackerFiles/OS/SUSE/Templates/Network_erb.xml +143 -0
  85. data/lib/PackerFiles/OS/SUSE/Templates/Packages_erb.xml +29 -0
  86. data/lib/PackerFiles/OS/SUSE/Templates/Tail_erb.xml +4 -0
  87. data/lib/PackerFiles/OS/SUSE/Templates/TimeZone_erb.xml +15 -0
  88. data/lib/PackerFiles/OS/SUSE/Templates/User_erb.xml +57 -0
  89. data/lib/PackerFiles/OS/SUSE/Templates/boot_command_erb.rb +23 -0
  90. data/lib/PackerFiles/OS/SUSE/Templates/command_as_root_erb.rb +1 -0
  91. data/lib/PackerFiles/OS/SUSE/Templates/disable_root_erb.rb +1 -0
  92. data/lib/PackerFiles/OS/SUSE/Templates/enable_root_erb.rb +1 -0
  93. data/lib/PackerFiles/OS/SUSE/Templates/shutdown_command_erb.rb +1 -0
  94. data/lib/PackerFiles/OS/Ubuntu/CD.rb +81 -0
  95. data/lib/PackerFiles/OS/Ubuntu/Desktop.rb +50 -0
  96. data/lib/PackerFiles/OS/Ubuntu/DesktopCD.rb +16 -0
  97. data/lib/PackerFiles/OS/Ubuntu/Mirrors.rb +103 -0
  98. data/lib/PackerFiles/OS/Ubuntu/Server.rb +78 -0
  99. data/lib/PackerFiles/OS/Ubuntu/Templates/Apt_erb.rb +18 -0
  100. data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_desktop_erb.rb +36 -0
  101. data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_erb.rb +30 -0
  102. data/lib/PackerFiles/OS/Ubuntu/Templates/ubiquity_erb.rb +8 -0
  103. data/lib/PackerFiles/OS/example/Doc.txt +8 -0
  104. data/lib/PackerFiles/Provision/Base.rb +20 -0
  105. data/lib/PackerFiles/Provision/ChefSolo.rb +90 -0
  106. data/lib/PackerFiles/Provision/ChefSoloHelper.rb +72 -0
  107. data/lib/PackerFiles/Provision/Copy.rb +22 -0
  108. data/lib/PackerFiles/Provision/ExternalScript.rb +43 -0
  109. data/lib/PackerFiles/Provision/InlineScript.rb +37 -0
  110. data/lib/PackerFiles/Provision/Provisioners.rb +87 -0
  111. data/lib/PackerFiles/Provision/example/Provisioners.txt +21 -0
  112. data/lib/PackerFiles/Utils/AutoZone.rb +96 -0
  113. data/lib/PackerFiles/Utils/FastestURL.rb +73 -0
  114. data/lib/PackerFiles/Utils/Generator.rb +34 -0
  115. data/lib/PackerFiles/Utils/HashSerializer.rb +110 -0
  116. data/lib/PackerFiles/Utils/Size.rb +44 -0
  117. data/lib/PackerFiles/Utils/TypeAccessor.rb +71 -0
  118. data/lib/PackerFiles/Virtual/Hypervisors.rb +72 -0
  119. data/lib/PackerFiles/Virtual/KVM.rb +119 -0
  120. data/lib/PackerFiles/Virtual/KVMConverter.rb +79 -0
  121. data/lib/PackerFiles/Virtual/VMWare.rb +108 -0
  122. data/lib/PackerFiles/Virtual/VMWareConverter.rb +78 -0
  123. data/lib/PackerFiles/Virtual/VirtualBox.rb +98 -0
  124. data/lib/PackerFiles/Virtual/VirtualBoxConverter.rb +75 -0
  125. data/lib/PackerFiles/Virtual/example/Hypervisors.txt +23 -0
  126. data/lib/PackerFiles/version.rb +3 -0
  127. data/lib/PackerFiles.rb +44 -0
  128. data/spec/core/builder_spec.rb +84 -0
  129. data/spec/core/cdimage_spec.rb +159 -0
  130. data/spec/core/disk_spec.rb +191 -0
  131. data/spec/core/keyboard_spec.rb +36 -0
  132. data/spec/core/locale_spec.rb +73 -0
  133. data/spec/core/network_spec.rb +96 -0
  134. data/spec/core/packages_spec.rb +18 -0
  135. data/spec/core/timezone_spec.rb +43 -0
  136. data/spec/core/user_spec.rb +44 -0
  137. data/spec/core/volume_group_spec.rb +53 -0
  138. data/spec/os/centos/cd_spec.rb +12 -0
  139. data/spec/os/centos/data/Server-Script-Provisioner.rb +57 -0
  140. data/spec/os/centos/data/Server.rb +55 -0
  141. data/spec/os/centos/data/chef-solo-provisioner.rb +58 -0
  142. data/spec/os/centos/finder_spec.rb +22 -0
  143. data/spec/os/centos/templates/boot_command_spec.rb +57 -0
  144. data/spec/os/centos/templates/disk_spec.rb +79 -0
  145. data/spec/os/centos/templates/keyboard_spec.rb +18 -0
  146. data/spec/os/centos/templates/locale_spec.rb +26 -0
  147. data/spec/os/centos/templates/network_spec.rb +38 -0
  148. data/spec/os/centos/templates/packages_spec.rb +18 -0
  149. data/spec/os/centos/templates/timezone_spec.rb +37 -0
  150. data/spec/os/centos/templates/user_spec.rb +24 -0
  151. data/spec/os/debian/apt_spec.rb +50 -0
  152. data/spec/os/debian/cd_spec.rb +30 -0
  153. data/spec/os/debian/data/7zip.tar.gz +0 -0
  154. data/spec/os/debian/data/All-sections.rb +60 -0
  155. data/spec/os/debian/data/Chef-Solo-Provisioner.rb +60 -0
  156. data/spec/os/debian/data/Copy-Provisioner.rb +61 -0
  157. data/spec/os/debian/data/External-Script-Provisioner.rb +69 -0
  158. data/spec/os/debian/data/Missing-CDImage.rb +53 -0
  159. data/spec/os/debian/data/Missing-VMWare-KVM-sections.rb +51 -0
  160. data/spec/os/debian/data/Missing-sections.rb +53 -0
  161. data/spec/os/debian/data/Script-Provisioner.rb +62 -0
  162. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/Berksfile.lock +32 -0
  163. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/README.md +81 -0
  164. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/attributes/default.rb +3 -0
  165. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/metadata.rb +11 -0
  166. data/spec/os/debian/data/chef-solo-cookbooks/git_setup/recipes/default.rb +30 -0
  167. data/spec/os/debian/data/chef-solo.json +5 -0
  168. data/spec/os/debian/data/test-script.sh +4 -0
  169. data/spec/os/debian/finder_spec.rb +59 -0
  170. data/spec/os/debian/mirrors_spec.rb +18 -0
  171. data/spec/os/debian/preseed_spec.rb +56 -0
  172. data/spec/os/debian/server_spec.rb +59 -0
  173. data/spec/os/debian/templates/apt_spec.rb +20 -0
  174. data/spec/os/debian/templates/boot_command_spec.rb +56 -0
  175. data/spec/os/debian/templates/disk_spec.rb +81 -0
  176. data/spec/os/debian/templates/keyboard_spec.rb +18 -0
  177. data/spec/os/debian/templates/locale_spec.rb +36 -0
  178. data/spec/os/debian/templates/mirrors_spec.rb +16 -0
  179. data/spec/os/debian/templates/network_spec.rb +38 -0
  180. data/spec/os/debian/templates/packages_spec.rb +17 -0
  181. data/spec/os/debian/templates/timezone_spec.rb +36 -0
  182. data/spec/os/debian/templates/user_spec.rb +25 -0
  183. data/spec/os/finder_spec.rb +21 -0
  184. data/spec/os/rhel/data/Fedora.rb +45 -0
  185. data/spec/os/rhel/data/Server-Custom.rb +54 -0
  186. data/spec/os/rhel/data/Server.rb +45 -0
  187. data/spec/os/rhel/finder_spec.rb +21 -0
  188. data/spec/os/ubuntu/cd_spec.rb +28 -0
  189. data/spec/os/ubuntu/data/Desktop.rb +61 -0
  190. data/spec/os/ubuntu/data/Server.rb +61 -0
  191. data/spec/os/ubuntu/finder_spec.rb +17 -0
  192. data/spec/os/ubuntu/mirrors_spec.rb +18 -0
  193. data/spec/utils/autozone_spec.rb +33 -0
  194. data/spec/virtual/virtual_box_spec.rb +16 -0
  195. metadata +405 -0
@@ -0,0 +1,96 @@
1
+
2
+ # Requires
3
+
4
+ module PackerFiles
5
+
6
+ module Core
7
+
8
+ # The Hypervisor class just abstracts out various settings that are
9
+ # applicable on Hypervisors. It is upto the providers to ensure that
10
+ # the appropriate Packer variables are generated for these settings.
11
+ class Hypervisor
12
+
13
+ # CPU count
14
+ attr_accessor :cpu_count
15
+
16
+ # CPU Speed
17
+ attr_accessor :cpu_speed
18
+
19
+ # Enable CPU Hot plug?
20
+ attr_accessor :cpu_hot_plug
21
+
22
+ # CPU Execution Cap
23
+ attr_accessor :cpu_execution_cap
24
+
25
+ # RAM Size
26
+ attr_accessor :ram_size
27
+
28
+ # Video ram size
29
+ attr_accessor :video_ram_size
30
+
31
+ # Is ACPI enabled?
32
+ attr_accessor :acpi_enabled
33
+
34
+ # Should PAE (Processor Address Extensions) enabled?
35
+ attr_accessor :pae_enabled
36
+
37
+ # Should H/w Virtualization for Guest be enabled
38
+ attr_accessor :hw_virt_enabled
39
+
40
+ # Should nested paging for guest be enabled
41
+ attr_accessor :hw_nested_pages
42
+
43
+ # Should Hypervisor use large pages for this guest
44
+ attr_accessor :use_large_pages
45
+
46
+ # Should the guest run in unrestricted mode
47
+ attr_accessor :unrestricted_guest_mode
48
+
49
+ # Should 3d acceleration be enabled for Video
50
+ attr_accessor :video_3d_acceleration
51
+
52
+ # Should EFI firmware be used instead of bios
53
+ attr_accessor :use_efi
54
+
55
+ # Guest memory balloon size
56
+ attr_accessor :guest_balloon_size
57
+
58
+ # Custom object which can be used for whatever purpose
59
+ # it suits the caller
60
+ attr_reader :custom
61
+
62
+ # Documentation for this class
63
+ def self.doc_file
64
+ PackerFiles.DirPath('Core/example/Hypervisor.txt').first
65
+ end
66
+
67
+ # Constructor initializes some sane values for various parameters.
68
+ def initialize
69
+ @cpu_count = 1
70
+ @cpu_speed = '1GHz'
71
+ @cpu_hot_plug = false
72
+ @cpu_execution_cap = 100
73
+ @ram_size = '1GiB'
74
+ @video_ram_size = '64MiB'
75
+ @acpi_enabled = true
76
+ @pae_enabled = true
77
+ @hw_virt_enabled = true
78
+ @use_large_pages = true
79
+ @unrestricted_guest_mode = false
80
+ @video_3d_acceleration = false
81
+ @use_efi = false
82
+ @guest_balloon_size = '0MiB'
83
+ @custom = nil
84
+ yield self if block_given?
85
+ end
86
+
87
+ # The Custom object is filled with whatever is the result of the block
88
+ def Custom(&block)
89
+ @custom = block.call(self)
90
+ end
91
+
92
+ end # class HyperVisor
93
+
94
+ end # Core
95
+
96
+ end # PackerFiles
@@ -0,0 +1,38 @@
1
+
2
+ # Requires
3
+ require_relative 'Base'
4
+ require_relative 'Exceptions'
5
+
6
+ module PackerFiles
7
+ module Core
8
+
9
+ # Define the Keyboard class that can handle Keyboards specified in a Packerfile.
10
+ # Just the barebones attributes that are required for this class are specified
11
+ # here. The conversion of these attributes into a OS build specific file is
12
+ # done by derived classes in the OS specific directories.
13
+ class Keyboard < Base
14
+
15
+ # Specify attributes
16
+ attr_accessor :layout
17
+ attr_accessor :variant
18
+
19
+ # Documentation for this class
20
+ def self.doc_file
21
+ PackerFiles.DirPath('Core/example/Keyboard.txt').first
22
+ end
23
+
24
+ # Constructor to just specify accessor varibales
25
+ def initialize
26
+ yield self if block_given?
27
+ end
28
+
29
+ # Normalize the various values into something useful. The
30
+ # default implementation checks only errors
31
+ def normalize
32
+ raise NilException.new(self, 'layout') if @layout.nil?
33
+ end
34
+
35
+ end
36
+
37
+ end #Core
38
+ end # PackerFiles
@@ -0,0 +1,62 @@
1
+
2
+ # Requires
3
+ require_relative 'Base'
4
+
5
+ module PackerFiles
6
+ module Core
7
+
8
+ # Define the Locale class that can handle locales specified in a Packerfile.
9
+ # Just the barebones attributes that are required for this class are specified
10
+ # here. The conversion of these attributes into a OS build specific file is
11
+ # done by derived classes in the OS specific directories.
12
+ class Locale < Base
13
+
14
+ # Specify attributes
15
+ attr_accessor :default
16
+ attr_accessor :language
17
+ attr_accessor :country
18
+ attr_accessor :supported
19
+
20
+ # Documentation for this class
21
+ def self.doc_file
22
+ PackerFiles.DirPath('Core/example/Locale.txt').first
23
+ end
24
+
25
+ # Constructor to just specify accessor varibales
26
+ def initialize
27
+ @supported = []
28
+ yield self if block_given?
29
+ end
30
+
31
+ # Normalize the various values into something useful. Usually
32
+ # this means adding UTF-8 into the default string. if desired
33
+ def normalize(utf = true, str='.UTF-8')
34
+
35
+ # Concatenate language and country if the detailed notation
36
+ # instead of the simpler one is preferred.
37
+ if (!@language.nil? && !@country.nil?)
38
+ @default = @language + '_' + @country
39
+ end
40
+
41
+ # If you need to add UTF prefixes, then add them to the
42
+ # default locale.
43
+ if (utf && !@default.end_with?(str))
44
+ @default = @default + str
45
+ end
46
+
47
+ # If you need to add UTF prefixes for all the supported
48
+ # locales, do the same.
49
+ @supported.map! {|x|
50
+ if (utf && !x.end_with?(str))
51
+ x + str
52
+ else
53
+ x
54
+ end
55
+ }
56
+ end
57
+
58
+ end # Locale
59
+
60
+ end # Core
61
+
62
+ end # PackerFiles
@@ -0,0 +1,41 @@
1
+
2
+ # Requires
3
+ require 'Utils/Size'
4
+ require_relative 'Base'
5
+ require_relative 'Exceptions'
6
+
7
+ module PackerFiles
8
+ module Core
9
+
10
+ # Abstraction for Logical Volume
11
+ class LogicalVolume < Base
12
+
13
+ # Include MiB as a method inside Disk
14
+ include Utils::Size
15
+
16
+ # Specify attributes
17
+ attr_accessor :size
18
+ attr_accessor :mount_point
19
+ attr_accessor :file_system
20
+ attr_accessor :name
21
+ attr_accessor :vg_name
22
+
23
+ # Constructor to just specify accessor varibales
24
+ def initialize
25
+ @size = 0
26
+ yield self if block_given?
27
+ end
28
+
29
+ # Normalize the values
30
+ def normalize
31
+ raise NilException.new(self, 'name') if @name.nil?
32
+ raise NilException.new(self, 'vg_name') if @vg_name.nil?
33
+ raise 'size cannot be zero' if @size == 0
34
+ @size = MiB(@size)
35
+ end
36
+
37
+ end # LogicalVolume
38
+
39
+ end # Core
40
+ end # PackerFiles
41
+
@@ -0,0 +1,67 @@
1
+
2
+ # Requires
3
+ require_relative 'Base'
4
+ require_relative 'Exceptions'
5
+
6
+ module PackerFiles
7
+
8
+ module Core
9
+ # Define the Network class that can handle Network specified in a Packerfile.
10
+ # Just the barebones attributes that are required for this class are specified
11
+ # here. The conversion of these attributes into a OS build specific file is
12
+ # done by derived classes in the OS specific directories.
13
+ class Network < Base
14
+
15
+ # Specify attributes
16
+ attr_accessor :interface
17
+ attr_accessor :ip
18
+ attr_accessor :mask
19
+ attr_accessor :gateway
20
+ attr_accessor :dns
21
+ attr_accessor :register
22
+ attr_accessor :type
23
+
24
+ # Constants
25
+ IPV4 = 1
26
+ IPV6 = 2
27
+ STATIC = 4
28
+
29
+ # Documentation for this class
30
+ def self.doc_file
31
+ PackerFiles.DirPath('Core/example/Network.txt').first
32
+ end
33
+
34
+ # Constructor to just specify accessor varibales
35
+ def initialize
36
+ @dns = []
37
+ yield self if block_given?
38
+ end
39
+
40
+ # Helper function to check if a static IP address is configured.
41
+ def is_static?
42
+ return ((@type & STATIC) > 0 )
43
+ end
44
+
45
+ # Normalize the various values into something useful. The
46
+ # default implementation checks only errors
47
+ def normalize
48
+ raise NilException.new(self, 'interface') if @interface.nil?
49
+ raise NilException.new(self, 'type') if @type.nil?
50
+ raise 'Mixing IPV4 and IPV6' if ((@type & IPV4) > 0) && ((@type & IPV6) > 0)
51
+ if ( (@type & STATIC) > 0 )
52
+ raise NilException.new(self, 'ip') if @ip.nil?
53
+ raise NilException.new(self, 'mask') if @mask.nil?
54
+ raise NilException.new(self, 'gateway') if @gateway.nil?
55
+ raise NilException.new(self, 'dns') if @dns.nil?
56
+ raise EmptyArrayException.new(self, 'dns') if @dns.empty?
57
+ else
58
+ @register = true
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ end # Core
65
+
66
+ end # PackerFiles
67
+
@@ -0,0 +1,30 @@
1
+ # Requires
2
+ require_relative 'Base'
3
+
4
+ module PackerFiles
5
+
6
+ module Core
7
+
8
+ # The Package class handles various packages that needs to be installed
9
+ # as part of the initial system setup
10
+ class Packages < Base
11
+
12
+ # Specify attributes
13
+ attr_accessor :list
14
+
15
+ # Documentation for this class
16
+ def self.doc_file
17
+ PackerFiles.DirPath('Core/example/Packages.txt').first
18
+ end
19
+
20
+ # Constructor to just specify accessor varibales
21
+ def initialize
22
+ @list = []
23
+ yield self if block_given?
24
+ end
25
+
26
+ end
27
+
28
+ end # Core
29
+
30
+ end # PackerFiles
@@ -0,0 +1,41 @@
1
+
2
+ # Requires
3
+ require_relative 'Base'
4
+ require_relative 'Exceptions'
5
+
6
+ module PackerFiles
7
+
8
+ module Core
9
+
10
+ # Define the Partition class that can handle Partition specified in a Packerfile.
11
+ # Just the barebones attributes that are required for this class are specified
12
+ # here. The conversion of these attributes into a OS build specific file is
13
+ # done by derived classes in the OS specific directories.
14
+ class Partition < Base
15
+
16
+ # Specify attributes
17
+ attr_accessor :boot
18
+ attr_accessor :label
19
+ attr_accessor :size
20
+ attr_accessor :mount_point
21
+ attr_accessor :file_system
22
+ attr_accessor :name
23
+
24
+ # Constructor to just specify accessor varibales
25
+ def initialize
26
+ @boot = false
27
+ @size = 0
28
+ yield self if block_given?
29
+ end
30
+
31
+ # Normalize the values
32
+ def normalize
33
+ raise NilException.new(self, 'name') if @name.nil?
34
+ raise 'size cannot be zero' if @size == 0
35
+ end
36
+
37
+ end # Partition
38
+
39
+ end # Core
40
+
41
+ end # PackerFiles
@@ -0,0 +1,45 @@
1
+
2
+ # Requires
3
+ require_relative 'Base'
4
+ require_relative 'Exceptions'
5
+ require 'Utils/AutoZone'
6
+
7
+ module PackerFiles
8
+ module Core
9
+
10
+ # Define the TimeZone class that can handle TimeZone specified in a Packerfile.
11
+ # Just the barebones attributes that are required for this class are specified
12
+ # here. The conversion of these attributes into a OS build specific file is
13
+ # done by derived classes in the OS specific directories.
14
+ class TimeZone < Base
15
+
16
+ # Specify attributes
17
+ attr_accessor :utc
18
+ attr_accessor :zone
19
+ attr_accessor :auto
20
+
21
+ # Documentation for this class
22
+ def self.doc_file
23
+ PackerFiles.DirPath('Core/example/TimeZone.txt').first
24
+ end
25
+
26
+ # Constructor to just specify accessor varibales
27
+ def initialize
28
+ @utc = true
29
+ yield self if block_given?
30
+ end
31
+
32
+ # Normalize the various values into something useful. The
33
+ # default implementation checks only errors
34
+ def normalize
35
+ raise NilException.new(self, 'zone') if @zone.nil? && @auto.nil?
36
+ if (@zone.nil? && @auto)
37
+ @zone = Utils::AutoZone.new.time_zone
38
+ end
39
+ end
40
+
41
+ end # TimeZone
42
+
43
+ end # Core
44
+
45
+ end # PackerFiles
@@ -0,0 +1,46 @@
1
+
2
+ # Requires
3
+ require_relative 'Base'
4
+ require_relative 'Exceptions'
5
+
6
+ module PackerFiles
7
+
8
+ module Core
9
+
10
+ # Define the User class that can handle User specified in a Packerfile.
11
+ # Just the barebones attributes that are required for this class are specified
12
+ # here. The conversion of these attributes into a OS build specific file is
13
+ # done by derived classes in the OS specific directories.
14
+ class User < Base
15
+
16
+ # Specify attributes
17
+ attr_accessor :login
18
+ attr_accessor :name
19
+ attr_accessor :password
20
+ attr_accessor :uid
21
+ attr_accessor :groups
22
+
23
+ # Documentation for this class
24
+ def self.doc_file
25
+ PackerFiles.DirPath('Core/example/User.txt').first
26
+ end
27
+
28
+ # Constructor to just specify accessor varibales
29
+ def initialize
30
+ @groups = []
31
+ yield self if block_given?
32
+ end
33
+
34
+ # Normalize the various values into something useful. The
35
+ # default implementation checks only errors
36
+ def normalize
37
+ raise NilException.new(self, 'login') if @login.nil?
38
+ raise NilException.new(self, 'name') if @name.nil?
39
+ raise NilException.new(self, 'password') if @password.nil?
40
+ end
41
+
42
+ end
43
+
44
+ end # Core
45
+
46
+ end # PackerFiles
@@ -0,0 +1,50 @@
1
+
2
+ # Requires
3
+ require_relative 'Base'
4
+ require_relative 'LogicalVolume'
5
+
6
+ module PackerFiles
7
+
8
+ module Core
9
+
10
+ # Volume Group abstracts out LVM.
11
+ class VolumeGroup < Base
12
+
13
+ # Specify attributes
14
+ attr_accessor :name
15
+ attr_accessor :disk_names
16
+ attr_accessor :lvs
17
+
18
+ # Constructor to just specify accessor varibales
19
+ def initialize
20
+ @disk_names = []
21
+ @lvs = []
22
+ yield self if block_given?
23
+ end
24
+
25
+ # Adds a Logical volume on this disk by doing an instance-eval
26
+ def LogicalVolume(&block)
27
+ if block_given?
28
+ lv = LogicalVolume.new
29
+ lv.instance_eval &block
30
+ lv.name = 'lv' + @lvs.size.to_s if (lv.name.nil?)
31
+ @lvs.push(lv)
32
+ end
33
+ end
34
+
35
+ # Normalize the various values into something useful
36
+ def normalize
37
+ raise 'name is nil' if @name.nil?
38
+ raise 'Disk names is empty' if @disk_names.empty?
39
+ raise 'LVs is empty' if @lvs.empty?
40
+ @lvs.each {|lv|
41
+ lv.vg_name= @name
42
+ lv.normalize
43
+ }
44
+ end
45
+
46
+ end
47
+
48
+ end # Core
49
+
50
+ end # PackerFiles
@@ -0,0 +1,75 @@
1
+
2
+ # Define CD Image Configuration for this OS
3
+ <% if @obj.nil? -%>
4
+ #os.<%= @name -%> do |CD|
5
+ <% else -%>
6
+ os.<%= @name -%> do |CD|
7
+ <% end -%>
8
+
9
+ # Architecture [i386, amd64..]. This is a mandatory Parameter.
10
+ <% if @obj.nil? || @obj.arch.nil? -%>
11
+ #CD.arch = 'amd64'
12
+ <% else -%>
13
+ CD.arch = '<%= @obj.arch -%>'
14
+ <% end -%>
15
+
16
+ # Release Version of the OS [current, 7.0.5, 6.0.9]
17
+ <% if @obj.nil? || @obj.release.nil? -%>
18
+ #CD.release = 'current'
19
+ <% else -%>
20
+ CD.release = '<%= @obj.release -%>'
21
+ <% end -%>
22
+
23
+ # ISO Name Pattern. It is a file pattern that can be matched by looking
24
+ # at the index URL.
25
+ # But it can be overriden.
26
+ <% if @obj.nil? || @obj.iso_name_pattern.nil? -%>
27
+ #CD.iso_name_pattern = "debian-.*-#{arch}-CD-1.iso"
28
+ <% else -%>
29
+ CD.iso_name_pattern = '<%= @obj.iso_name_pattern -%>'
30
+ <% end -%>
31
+
32
+ # Checksum Name Pattern. It is a file pattern that can be matched by looking
33
+ # at the index URL.
34
+ # But it can be overriden.
35
+ <% if @obj.nil? || @obj.check_sum_pattern.nil? -%>
36
+ #CD.check_sum_pattern = "MD5SUMS"
37
+ <% else -%>
38
+ CD.check_sum_pattern = '<%= @obj.check_sum_pattern -%>'
39
+ <% end -%>
40
+
41
+ # Checksum Name Type.
42
+ <% if @obj.nil? || @obj.check_sum_type.nil? -%>
43
+ #CD.check_sum_type = "md5"
44
+ <% else -%>
45
+ CD.check_sum_type = '<%= @obj.check_sum_type -%>'
46
+ <% end -%>
47
+
48
+ # Index URL. List of URLs that needs to be searched for the CheckSUm Name pattern
49
+ # and ISO Name Pattern.
50
+ <% if @obj.nil? || @obj.index_urls.nil? -%>
51
+ #CD.index_urls = ["http://cdimage.debian.org/debian-cd/#{release}/#{arch}/iso-cd/",
52
+ # "http://cdimage.debian.org/mirror/cdimage/archive/#{@release}/#{@arch}/iso-cd/"]
53
+ <% else -%>
54
+ CD.index_urls = <%= @obj.index_urls.to_s %>
55
+ <% end -%>
56
+
57
+ # ISO URL. This is deduced from other parameters above. But it can be overriden.
58
+ <% if @obj.nil? || @obj.iso_url.nil? -%>
59
+ #CD.iso_url = "http://cdimage.debian.org/debian-cd/#{release}/#{arch}/iso-cd/abc.iso"
60
+ <% else -%>
61
+ CD.iso_url = '<%= @obj.iso_url -%>'
62
+ <% end -%>
63
+
64
+ # Checksum. This is deduced from arch and release values, but can be overriden.
65
+ <% if @obj.nil? || @obj.check_sum.nil? -%>
66
+ #CD.check_sum = ''
67
+ <% else -%>
68
+ CD.check_sum = '<%= @obj.check_sum -%>'
69
+ <% end -%>
70
+
71
+ <% if @obj.nil? -%>
72
+ #end
73
+ <% else -%>
74
+ end
75
+ <% end -%>
@@ -0,0 +1,29 @@
1
+
2
+ # Define Disks for this OS
3
+ <% if @obj.nil? -%>
4
+ #os.<%= @name -%> do |disk|
5
+ <% else -%>
6
+ os.<%= @name -%> do |disk|
7
+ <% end -%>
8
+
9
+ # The Name of the disk. This is mandatory, even though it is
10
+ # only useful for some Operating Systems.
11
+ <% if @obj.nil? || @obj.name.nil? -%>
12
+ #disk.name = 'sda'
13
+ <% else -%>
14
+ disk.name = '<%= @obj.name -%>'
15
+ <% end -%>
16
+
17
+ # The Size of the disk. It can be specified in the form
18
+ # 'GiB', 'GB', 'MB', 'MiB', 'TB', 'TiB'
19
+ <% if @obj.nil? || @obj.size.nil? -%>
20
+ #disk.size = '20GiB'
21
+ <% else -%>
22
+ disk.size = '<%= @obj.size -%>'
23
+ <% end -%>
24
+
25
+ <% if @obj.nil? -%>
26
+ #end
27
+ <% else -%>
28
+ end
29
+ <% end -%>