PackerFiles 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/PackerFiles.gemspec +36 -0
- data/README.md +32 -0
- data/Rakefile +21 -0
- data/bin/pkf +5 -0
- data/lib/PackerFiles/CLI/OS.rb +44 -0
- data/lib/PackerFiles/CLI/Root.rb +41 -0
- data/lib/PackerFiles/Core/Base.rb +23 -0
- data/lib/PackerFiles/Core/CDImage.rb +185 -0
- data/lib/PackerFiles/Core/Disk.rb +135 -0
- data/lib/PackerFiles/Core/Exceptions.rb +65 -0
- data/lib/PackerFiles/Core/Hypervisor.rb +96 -0
- data/lib/PackerFiles/Core/Keyboard.rb +38 -0
- data/lib/PackerFiles/Core/Locale.rb +62 -0
- data/lib/PackerFiles/Core/LogicalVolume.rb +41 -0
- data/lib/PackerFiles/Core/Network.rb +67 -0
- data/lib/PackerFiles/Core/Packages.rb +30 -0
- data/lib/PackerFiles/Core/Partition.rb +41 -0
- data/lib/PackerFiles/Core/TimeZone.rb +45 -0
- data/lib/PackerFiles/Core/User.rb +46 -0
- data/lib/PackerFiles/Core/VolumeGroup.rb +50 -0
- data/lib/PackerFiles/Core/example/CDImage.txt +75 -0
- data/lib/PackerFiles/Core/example/Disk.txt +29 -0
- data/lib/PackerFiles/Core/example/Hypervisor.txt +111 -0
- data/lib/PackerFiles/Core/example/Keyboard.txt +28 -0
- data/lib/PackerFiles/Core/example/Locale.txt +31 -0
- data/lib/PackerFiles/Core/example/Network.txt +68 -0
- data/lib/PackerFiles/Core/example/Packages.txt +22 -0
- data/lib/PackerFiles/Core/example/TimeZone.txt +36 -0
- data/lib/PackerFiles/Core/example/User.txt +48 -0
- data/lib/PackerFiles/OS/Builder.rb +116 -0
- data/lib/PackerFiles/OS/CentOS/CD.rb +81 -0
- data/lib/PackerFiles/OS/CentOS/Kickstart.rb +64 -0
- data/lib/PackerFiles/OS/CentOS/Server.rb +170 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Base_erb.rb +4 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Disk_erb.rb +35 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Keyboard_erb.rb +4 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Locale_erb.rb +4 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Network_erb.rb +17 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Packages_erb.rb +34 -0
- data/lib/PackerFiles/OS/CentOS/Templates/Tail_erb.rb +15 -0
- data/lib/PackerFiles/OS/CentOS/Templates/TimeZone_erb.rb +10 -0
- data/lib/PackerFiles/OS/CentOS/Templates/User_erb.rb +20 -0
- data/lib/PackerFiles/OS/CentOS/Templates/boot_command_erb.rb +16 -0
- data/lib/PackerFiles/OS/CentOS/Templates/command_as_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/CentOS/Templates/disable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/CentOS/Templates/enable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/CentOS/Templates/shutdown_command_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/Apt.rb +42 -0
- data/lib/PackerFiles/OS/Debian/CD.rb +65 -0
- data/lib/PackerFiles/OS/Debian/Mirrors.rb +73 -0
- data/lib/PackerFiles/OS/Debian/Preseed.rb +64 -0
- data/lib/PackerFiles/OS/Debian/Server.rb +169 -0
- data/lib/PackerFiles/OS/Debian/Templates/Apt_erb.rb +18 -0
- data/lib/PackerFiles/OS/Debian/Templates/Disk_erb.rb +69 -0
- data/lib/PackerFiles/OS/Debian/Templates/Keyboard_erb.rb +5 -0
- data/lib/PackerFiles/OS/Debian/Templates/Locale_erb.rb +7 -0
- data/lib/PackerFiles/OS/Debian/Templates/Mirrors_erb.rb +9 -0
- data/lib/PackerFiles/OS/Debian/Templates/Network_erb.rb +19 -0
- data/lib/PackerFiles/OS/Debian/Templates/Packages_erb.rb +6 -0
- data/lib/PackerFiles/OS/Debian/Templates/TimeZone_erb.rb +6 -0
- data/lib/PackerFiles/OS/Debian/Templates/User_erb.rb +14 -0
- data/lib/PackerFiles/OS/Debian/Templates/boot_command_erb.rb +24 -0
- data/lib/PackerFiles/OS/Debian/Templates/command_as_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/Templates/disable_root_erb.rb +5 -0
- data/lib/PackerFiles/OS/Debian/Templates/enable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/Templates/shutdown_command_erb.rb +1 -0
- data/lib/PackerFiles/OS/Debian/example/Apt.txt +55 -0
- data/lib/PackerFiles/OS/DocGenerator.rb +51 -0
- data/lib/PackerFiles/OS/Finder.rb +96 -0
- data/lib/PackerFiles/OS/RHEL/CD.rb +32 -0
- data/lib/PackerFiles/OS/RHEL/Fedora.rb +59 -0
- data/lib/PackerFiles/OS/RHEL/FedoraCD.rb +68 -0
- data/lib/PackerFiles/OS/RHEL/Server.rb +32 -0
- data/lib/PackerFiles/OS/RHEL/Templates/Fedora_Tail_erb.rb +14 -0
- data/lib/PackerFiles/OS/RHEL/Templates/boot_command_fedora_erb.rb +16 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Base_erb.xml +32 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Disk_erb.xml +110 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Keyboard_erb.xml +7 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Locale_erb.xml +18 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Network_erb.xml +143 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Packages_erb.xml +29 -0
- data/lib/PackerFiles/OS/SUSE/Templates/Tail_erb.xml +4 -0
- data/lib/PackerFiles/OS/SUSE/Templates/TimeZone_erb.xml +15 -0
- data/lib/PackerFiles/OS/SUSE/Templates/User_erb.xml +57 -0
- data/lib/PackerFiles/OS/SUSE/Templates/boot_command_erb.rb +23 -0
- data/lib/PackerFiles/OS/SUSE/Templates/command_as_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/SUSE/Templates/disable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/SUSE/Templates/enable_root_erb.rb +1 -0
- data/lib/PackerFiles/OS/SUSE/Templates/shutdown_command_erb.rb +1 -0
- data/lib/PackerFiles/OS/Ubuntu/CD.rb +81 -0
- data/lib/PackerFiles/OS/Ubuntu/Desktop.rb +50 -0
- data/lib/PackerFiles/OS/Ubuntu/DesktopCD.rb +16 -0
- data/lib/PackerFiles/OS/Ubuntu/Mirrors.rb +103 -0
- data/lib/PackerFiles/OS/Ubuntu/Server.rb +78 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/Apt_erb.rb +18 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_desktop_erb.rb +36 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/boot_command_erb.rb +30 -0
- data/lib/PackerFiles/OS/Ubuntu/Templates/ubiquity_erb.rb +8 -0
- data/lib/PackerFiles/OS/example/Doc.txt +8 -0
- data/lib/PackerFiles/Provision/Base.rb +20 -0
- data/lib/PackerFiles/Provision/ChefSolo.rb +90 -0
- data/lib/PackerFiles/Provision/ChefSoloHelper.rb +72 -0
- data/lib/PackerFiles/Provision/Copy.rb +22 -0
- data/lib/PackerFiles/Provision/ExternalScript.rb +43 -0
- data/lib/PackerFiles/Provision/InlineScript.rb +37 -0
- data/lib/PackerFiles/Provision/Provisioners.rb +87 -0
- data/lib/PackerFiles/Provision/example/Provisioners.txt +21 -0
- data/lib/PackerFiles/Utils/AutoZone.rb +96 -0
- data/lib/PackerFiles/Utils/FastestURL.rb +73 -0
- data/lib/PackerFiles/Utils/Generator.rb +34 -0
- data/lib/PackerFiles/Utils/HashSerializer.rb +110 -0
- data/lib/PackerFiles/Utils/Size.rb +44 -0
- data/lib/PackerFiles/Utils/TypeAccessor.rb +71 -0
- data/lib/PackerFiles/Virtual/Hypervisors.rb +72 -0
- data/lib/PackerFiles/Virtual/KVM.rb +119 -0
- data/lib/PackerFiles/Virtual/KVMConverter.rb +79 -0
- data/lib/PackerFiles/Virtual/VMWare.rb +108 -0
- data/lib/PackerFiles/Virtual/VMWareConverter.rb +78 -0
- data/lib/PackerFiles/Virtual/VirtualBox.rb +98 -0
- data/lib/PackerFiles/Virtual/VirtualBoxConverter.rb +75 -0
- data/lib/PackerFiles/Virtual/example/Hypervisors.txt +23 -0
- data/lib/PackerFiles/version.rb +3 -0
- data/lib/PackerFiles.rb +44 -0
- data/spec/core/builder_spec.rb +84 -0
- data/spec/core/cdimage_spec.rb +159 -0
- data/spec/core/disk_spec.rb +191 -0
- data/spec/core/keyboard_spec.rb +36 -0
- data/spec/core/locale_spec.rb +73 -0
- data/spec/core/network_spec.rb +96 -0
- data/spec/core/packages_spec.rb +18 -0
- data/spec/core/timezone_spec.rb +43 -0
- data/spec/core/user_spec.rb +44 -0
- data/spec/core/volume_group_spec.rb +53 -0
- data/spec/os/centos/cd_spec.rb +12 -0
- data/spec/os/centos/data/Server-Script-Provisioner.rb +57 -0
- data/spec/os/centos/data/Server.rb +55 -0
- data/spec/os/centos/data/chef-solo-provisioner.rb +58 -0
- data/spec/os/centos/finder_spec.rb +22 -0
- data/spec/os/centos/templates/boot_command_spec.rb +57 -0
- data/spec/os/centos/templates/disk_spec.rb +79 -0
- data/spec/os/centos/templates/keyboard_spec.rb +18 -0
- data/spec/os/centos/templates/locale_spec.rb +26 -0
- data/spec/os/centos/templates/network_spec.rb +38 -0
- data/spec/os/centos/templates/packages_spec.rb +18 -0
- data/spec/os/centos/templates/timezone_spec.rb +37 -0
- data/spec/os/centos/templates/user_spec.rb +24 -0
- data/spec/os/debian/apt_spec.rb +50 -0
- data/spec/os/debian/cd_spec.rb +30 -0
- data/spec/os/debian/data/7zip.tar.gz +0 -0
- data/spec/os/debian/data/All-sections.rb +60 -0
- data/spec/os/debian/data/Chef-Solo-Provisioner.rb +60 -0
- data/spec/os/debian/data/Copy-Provisioner.rb +61 -0
- data/spec/os/debian/data/External-Script-Provisioner.rb +69 -0
- data/spec/os/debian/data/Missing-CDImage.rb +53 -0
- data/spec/os/debian/data/Missing-VMWare-KVM-sections.rb +51 -0
- data/spec/os/debian/data/Missing-sections.rb +53 -0
- data/spec/os/debian/data/Script-Provisioner.rb +62 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/Berksfile.lock +32 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/README.md +81 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/attributes/default.rb +3 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/metadata.rb +11 -0
- data/spec/os/debian/data/chef-solo-cookbooks/git_setup/recipes/default.rb +30 -0
- data/spec/os/debian/data/chef-solo.json +5 -0
- data/spec/os/debian/data/test-script.sh +4 -0
- data/spec/os/debian/finder_spec.rb +59 -0
- data/spec/os/debian/mirrors_spec.rb +18 -0
- data/spec/os/debian/preseed_spec.rb +56 -0
- data/spec/os/debian/server_spec.rb +59 -0
- data/spec/os/debian/templates/apt_spec.rb +20 -0
- data/spec/os/debian/templates/boot_command_spec.rb +56 -0
- data/spec/os/debian/templates/disk_spec.rb +81 -0
- data/spec/os/debian/templates/keyboard_spec.rb +18 -0
- data/spec/os/debian/templates/locale_spec.rb +36 -0
- data/spec/os/debian/templates/mirrors_spec.rb +16 -0
- data/spec/os/debian/templates/network_spec.rb +38 -0
- data/spec/os/debian/templates/packages_spec.rb +17 -0
- data/spec/os/debian/templates/timezone_spec.rb +36 -0
- data/spec/os/debian/templates/user_spec.rb +25 -0
- data/spec/os/finder_spec.rb +21 -0
- data/spec/os/rhel/data/Fedora.rb +45 -0
- data/spec/os/rhel/data/Server-Custom.rb +54 -0
- data/spec/os/rhel/data/Server.rb +45 -0
- data/spec/os/rhel/finder_spec.rb +21 -0
- data/spec/os/ubuntu/cd_spec.rb +28 -0
- data/spec/os/ubuntu/data/Desktop.rb +61 -0
- data/spec/os/ubuntu/data/Server.rb +61 -0
- data/spec/os/ubuntu/finder_spec.rb +17 -0
- data/spec/os/ubuntu/mirrors_spec.rb +18 -0
- data/spec/utils/autozone_spec.rb +33 -0
- data/spec/virtual/virtual_box_spec.rb +16 -0
- metadata +405 -0
@@ -0,0 +1,111 @@
|
|
1
|
+
|
2
|
+
# Define Hypervisor parameters for this OS
|
3
|
+
<% if @obj.nil? -%>
|
4
|
+
#hypervisors.<%= @name -%> do |hyper|
|
5
|
+
<% else -%>
|
6
|
+
hypervisors.<%= @name -%> do |hyper|
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# No. of CPUs
|
10
|
+
<% if @obj.nil? || @obj.cpu_count.nil? -%>
|
11
|
+
#hyper.cpu_count = 1
|
12
|
+
<% else -%>
|
13
|
+
hyper.cpu_count = <%= @obj.cpu_count %>
|
14
|
+
<% end -%>
|
15
|
+
|
16
|
+
# Enable CPU Hot plug?
|
17
|
+
<% if @obj.nil? || @obj.cpu_hot_plug.nil? -%>
|
18
|
+
#hyper.cpu_hot_plug = false
|
19
|
+
<% else -%>
|
20
|
+
hyper.cpu_hot_plug = <%= @obj.cpu_hot_plug %>
|
21
|
+
<% end -%>
|
22
|
+
|
23
|
+
# CPU Execution Cap
|
24
|
+
<% if @obj.nil? || @obj.cpu_execution_cap.nil? -%>
|
25
|
+
#hyper.cpu_execution_cap = 100
|
26
|
+
<% else -%>
|
27
|
+
hyper.cpu_execution_cap = <%= @obj.cpu_execution_cap %>
|
28
|
+
<% end -%>
|
29
|
+
|
30
|
+
# RAM Size
|
31
|
+
<% if @obj.nil? || @obj.ram_size.nil? -%>
|
32
|
+
#hyper.ram_size = '1GiB'
|
33
|
+
<% else -%>
|
34
|
+
hyper.ram_size = '<%= @obj.ram_size -%>'
|
35
|
+
<% end -%>
|
36
|
+
|
37
|
+
# Video ram size
|
38
|
+
<% if @obj.nil? || @obj.video_ram_size.nil? -%>
|
39
|
+
#hyper.video_ram_size = '1GiB'
|
40
|
+
<% else -%>
|
41
|
+
hyper.video_ram_size = '<%= @obj.video_ram_size -%>'
|
42
|
+
<% end -%>
|
43
|
+
|
44
|
+
# Is ACPI enabled?
|
45
|
+
<% if @obj.nil? || @obj.acpi_enabled.nil? -%>
|
46
|
+
#hyper.acpi_enabled = true
|
47
|
+
<% else -%>
|
48
|
+
hyper.acpi_enabled = <%= @obj.acpi_enabled %>
|
49
|
+
<% end -%>
|
50
|
+
|
51
|
+
# Should PAE (Processor Address Extensions) enabled?
|
52
|
+
<% if @obj.nil? || @obj.pae_enabled.nil? -%>
|
53
|
+
#hyper.pae_enabled = true
|
54
|
+
<% else -%>
|
55
|
+
hyper.pae_enabled = <%= @obj.pae_enabled %>
|
56
|
+
<% end -%>
|
57
|
+
|
58
|
+
# Should H/w Virtualization for Guest be enabled
|
59
|
+
<% if @obj.nil? || @obj.hw_virt_enabled.nil? -%>
|
60
|
+
#hyper.hw_virt_enabled = true
|
61
|
+
<% else -%>
|
62
|
+
hyper.hw_virt_enabled = <%= @obj.hw_virt_enabled %>
|
63
|
+
<% end -%>
|
64
|
+
|
65
|
+
# Should nested paging for guest be enabled
|
66
|
+
<% if @obj.nil? || @obj.hw_nested_pages.nil? -%>
|
67
|
+
#hyper.hw_nested_pages = true
|
68
|
+
<% else -%>
|
69
|
+
hyper.hw_nested_pages = <%= @obj.hw_nested_pages %>
|
70
|
+
<% end -%>
|
71
|
+
|
72
|
+
# Should Hypervisor use large pages for this guest
|
73
|
+
<% if @obj.nil? || @obj.use_large_pages.nil? -%>
|
74
|
+
#hyper.use_large_pages = true
|
75
|
+
<% else -%>
|
76
|
+
hyper.use_large_pages = <%= @obj.use_large_pages %>
|
77
|
+
<% end -%>
|
78
|
+
|
79
|
+
# Should the guest run in unrestricted mode
|
80
|
+
<% if @obj.nil? || @obj.unrestricted_guest_mode.nil? -%>
|
81
|
+
#hyper.unrestricted_guest_mode = false
|
82
|
+
<% else -%>
|
83
|
+
hyper.unrestricted_guest_mode = <%= @obj.unrestricted_guest_mode %>
|
84
|
+
<% end -%>
|
85
|
+
|
86
|
+
# Should 3d acceleration be enabled for Video
|
87
|
+
<% if @obj.nil? || @obj.video_3d_acceleration.nil? -%>
|
88
|
+
#hyper.video_3d_acceleration = false
|
89
|
+
<% else -%>
|
90
|
+
hyper.video_3d_acceleration = <%= @obj.video_3d_acceleration %>
|
91
|
+
<% end -%>
|
92
|
+
|
93
|
+
# Should EFI firmware be used instead of bios
|
94
|
+
<% if @obj.nil? || @obj.use_efi.nil? -%>
|
95
|
+
#hyper.use_efi = false
|
96
|
+
<% else -%>
|
97
|
+
hyper.use_efi = <%= @obj.use_efi %>
|
98
|
+
<% end -%>
|
99
|
+
|
100
|
+
# Guest memory balloon size
|
101
|
+
<% if @obj.nil? || @obj.guest_balloon_size.nil? -%>
|
102
|
+
#hyper.guest_balloon_size = '0GiB'
|
103
|
+
<% else -%>
|
104
|
+
hyper.guest_balloon_size = '<%= @obj.guest_balloon_size -%>'
|
105
|
+
<% end -%>
|
106
|
+
|
107
|
+
<% if @obj.nil? -%>
|
108
|
+
#end
|
109
|
+
<% else -%>
|
110
|
+
end
|
111
|
+
<% end -%>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
# Define Keyboard layout for this OS
|
3
|
+
<% if @obj.nil? -%>
|
4
|
+
#os.<%= @name -%> do |keyboard|
|
5
|
+
<% else -%>
|
6
|
+
os.<%= @name -%> do |keyboard|
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# Layout code for the keyboard to be used for this OS.
|
10
|
+
<% if @obj.nil? || @obj.layout.nil? -%>
|
11
|
+
#keyboard.layout = 'us'
|
12
|
+
<% else -%>
|
13
|
+
keyboard.layout = '<%= @obj.layout -%>'
|
14
|
+
<% end -%>
|
15
|
+
|
16
|
+
# Layout Variant for the keyboard to be used for this OS.
|
17
|
+
# Usually this is not required.
|
18
|
+
<% if @obj.nil? || @obj.variant.nil? -%>
|
19
|
+
#keyboard.variant = 'us'
|
20
|
+
<% else -%>
|
21
|
+
#keyboard.variant = '<%= @obj.variant -%>'
|
22
|
+
<% end -%>
|
23
|
+
|
24
|
+
<% if @obj.nil? -%>
|
25
|
+
#end
|
26
|
+
<% else -%>
|
27
|
+
end
|
28
|
+
<% end -%>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
# Define Locales for this OS
|
3
|
+
<% if @obj.nil? -%>
|
4
|
+
#os.<%= @name -%> do |locale|
|
5
|
+
<% else -%>
|
6
|
+
os.<%= @name -%> do |locale|
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# The default locale for the OS. The Values are standard Locale values.
|
10
|
+
# They can also be prefixed with a specified encoding. If no encoding
|
11
|
+
# is specified then by default, it is 'UTF-8' (e.g.) 'en_US.UTF-8'
|
12
|
+
<% if @obj.nil? || @obj.default.nil? -%>
|
13
|
+
#locale.default = 'en_US'
|
14
|
+
<% else -%>
|
15
|
+
locale.default = "<%= @obj.default -%>"
|
16
|
+
<% end -%>
|
17
|
+
|
18
|
+
# Additional locales that ought to be installed for this OS. Depending
|
19
|
+
# upon the OS, the Installer will install additional language packs to
|
20
|
+
# support these locales.
|
21
|
+
<% if @obj.nil? || @obj.supported.nil? -%>
|
22
|
+
#locale.supported = ['en_IN', 'en_GB']
|
23
|
+
<% else -%>
|
24
|
+
locale.supported = <%= @obj.supported.to_s %>
|
25
|
+
<% end -%>
|
26
|
+
|
27
|
+
<% if @obj.nil? -%>
|
28
|
+
#end
|
29
|
+
<% else -%>
|
30
|
+
end
|
31
|
+
<% end -%>
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
# Define Network Options for this OS
|
3
|
+
<% if @obj.nil? -%>
|
4
|
+
#os.<%= @name -%> do |net|
|
5
|
+
<% else -%>
|
6
|
+
os.<%= @name -%> do |net|
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# The Name of the Network interface. This is mandatory, even though it is
|
10
|
+
# only useful for some Operating Systems.
|
11
|
+
<% if @obj.nil? || @obj.interface.nil? -%>
|
12
|
+
#net.interface = 'eth0'
|
13
|
+
<% else -%>
|
14
|
+
net.interface = '<%= @obj.interface -%>'
|
15
|
+
<% end -%>
|
16
|
+
|
17
|
+
# The type of the Network. This can be a combination of the following.
|
18
|
+
# PackerFiles::Core::Network::IPV4 => Specifies a IPV4 network.
|
19
|
+
# PackerFiles::Core::Network::IPV6 => Specifies a IPV6 network.
|
20
|
+
# PackerFiles::Core::Network::STATIC => Specifies a Static network.
|
21
|
+
<% if @obj.nil? || @obj.type.nil? -%>
|
22
|
+
#net.type = PackerFiles::Core::Network::IPV4
|
23
|
+
<% else -%>
|
24
|
+
<% value = '' -%>
|
25
|
+
<% if (@obj.type & PackerFiles::Core::Network::IPV4) > 0 -%>
|
26
|
+
<% value += 'PackerFiles::Core::Network::IPV4' -%>
|
27
|
+
<% elsif (@obj.type & PackerFiles::Core::Network::IPV6) > 0 -%>
|
28
|
+
<% value += 'PackerFiles::Core::Network::IPV6' -%>
|
29
|
+
<% end -%>
|
30
|
+
<% if (@obj.type & PackerFiles::Core::Network::STATIC) > 0 -%>
|
31
|
+
<% value += ' | PackerFiles::Core::Network::STATIC' -%>
|
32
|
+
<% end -%>
|
33
|
+
net.type = <%= value %>
|
34
|
+
<% end -%>
|
35
|
+
|
36
|
+
# Static IP address for the interface. Useful only of you set the type as Static.
|
37
|
+
<% if @obj.nil? || @obj.ip.nil? -%>
|
38
|
+
#net.ip = '10.10.10.10'
|
39
|
+
<% else -%>
|
40
|
+
net.ip = '<%= @obj.ip -%>'
|
41
|
+
<% end -%>
|
42
|
+
|
43
|
+
# Static network mask for the interface. Useful only of you set the type as Static.
|
44
|
+
<% if @obj.nil? || @obj.mask.nil? -%>
|
45
|
+
#net.mask = '255.0.0.0'
|
46
|
+
<% else -%>
|
47
|
+
net.mask = '<%= @obj.mask -%>'
|
48
|
+
<% end -%>
|
49
|
+
|
50
|
+
# Static Gateway address for the interface. Useful only of you set the type as Static.
|
51
|
+
<% if @obj.nil? || @obj.gateway.nil? -%>
|
52
|
+
#net.gateway = '10.10.10.11'
|
53
|
+
<% else -%>
|
54
|
+
net.gateway = '<%= @obj.gateway -%>'
|
55
|
+
<% end -%>
|
56
|
+
|
57
|
+
# Static DNS servers for the interface. Useful only of you set the type as Static.
|
58
|
+
<% if @obj.nil? || @obj.dns.nil? -%>
|
59
|
+
#net.dns = ['10.10.10.10', '20.10.10.10']
|
60
|
+
<% else -%>
|
61
|
+
net.dns = <%= @obj.dns.to_s %>
|
62
|
+
<% end -%>
|
63
|
+
|
64
|
+
<% if @obj.nil? -%>
|
65
|
+
#end
|
66
|
+
<% else -%>
|
67
|
+
end
|
68
|
+
<% end -%>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# Define Packages for this OS to be installed during OS Installation.
|
3
|
+
<% if @obj.nil? -%>
|
4
|
+
#os.<%= @name -%> do |pkg|
|
5
|
+
<% else -%>
|
6
|
+
os.<%= @name -%> do |pkg|
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# List of Packages that needs to be installed. Notice the "+=" as
|
10
|
+
# this construct always adds to the default packages particular to
|
11
|
+
# the given OS.
|
12
|
+
<% if @obj.nil? || @obj.list.nil? -%>
|
13
|
+
#pkg.list += ['open-ssh-server']
|
14
|
+
<% else -%>
|
15
|
+
pkg.list += <%= @obj.list.to_s %>
|
16
|
+
<% end -%>
|
17
|
+
|
18
|
+
<% if @obj.nil? -%>
|
19
|
+
#end
|
20
|
+
<% else -%>
|
21
|
+
end
|
22
|
+
<% end -%>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
# Define TimeZone for this OS
|
3
|
+
<% if @obj.nil? -%>
|
4
|
+
#os.<%= @name -%> do |timezone|
|
5
|
+
<% else -%>
|
6
|
+
os.<%= @name -%> do |timezone|
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# Should the OS use UTC. By default this is true.
|
10
|
+
<% if @obj.nil? || @obj.utc.nil? -%>
|
11
|
+
#timezone.utc = true
|
12
|
+
<% else -%>
|
13
|
+
timezone.utc = <%= @obj.utc %>
|
14
|
+
<% end -%>
|
15
|
+
|
16
|
+
# Specify the timezone for this OS. If you do not want to specify
|
17
|
+
# it be sure to enable the auto option to discover the time zone
|
18
|
+
# automatically based on the host IP address.
|
19
|
+
<% if @obj.nil? || @obj.zone.nil? -%>
|
20
|
+
#timezone.zone = 'US/Eastern'
|
21
|
+
<% else -%>
|
22
|
+
timezone.zone = '<%= @obj.zone -%>'
|
23
|
+
<% end -%>
|
24
|
+
|
25
|
+
# Set this to true, if you want timezone to be automatic.
|
26
|
+
<% if @obj.nil? || @obj.auto.nil? -%>
|
27
|
+
#timezone.auto = false
|
28
|
+
<% else -%>
|
29
|
+
timezone.auto = <%= @obj.auto %>
|
30
|
+
<% end -%>
|
31
|
+
|
32
|
+
<% if @obj.nil? -%>
|
33
|
+
#end
|
34
|
+
<% else -%>
|
35
|
+
end
|
36
|
+
<% end -%>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
# Define Initial User for this OS
|
3
|
+
<% if @obj.nil? -%>
|
4
|
+
#os.<%= @name -%> do |user|
|
5
|
+
<% else -%>
|
6
|
+
os.<%= @name -%> do |user|
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
# User Login ID. This parameter is mandatory.
|
10
|
+
<% if @obj.nil? || @obj.login.nil? -%>
|
11
|
+
#user.login = 'login-id'
|
12
|
+
<% else -%>
|
13
|
+
user.login = '<%= @obj.login -%>'
|
14
|
+
<% end -%>
|
15
|
+
|
16
|
+
# User Full name . This parameter is mandatory.
|
17
|
+
<% if @obj.nil? || @obj.name.nil? -%>
|
18
|
+
#user.name = 'User Full Name'
|
19
|
+
<% else -%>
|
20
|
+
user.name = '<%= @obj.name -%>'
|
21
|
+
<% end -%>
|
22
|
+
|
23
|
+
# User Password . This parameter is mandatory.
|
24
|
+
<% if @obj.nil? || @obj.password.nil? -%>
|
25
|
+
#user.password = 'PASSWORD-CHANGE-ME'
|
26
|
+
<% else -%>
|
27
|
+
user.password = '<%= @obj.password -%>'
|
28
|
+
<% end -%>
|
29
|
+
|
30
|
+
# User ID . This parameter is Optional.
|
31
|
+
<% if @obj.nil? || @obj.uid.nil? -%>
|
32
|
+
#user.uid = 1000
|
33
|
+
<% else -%>
|
34
|
+
user.uid = <%= @obj.uid %>
|
35
|
+
<% end -%>
|
36
|
+
|
37
|
+
# Groups to which the user belongs to. This is an optional setting.
|
38
|
+
<% if @obj.nil? || @obj.groups.nil? -%>
|
39
|
+
#user.groups = []
|
40
|
+
<% else -%>
|
41
|
+
user.groups = <%= @obj.groups.to_s %>
|
42
|
+
<% end -%>
|
43
|
+
|
44
|
+
<% if @obj.nil? -%>
|
45
|
+
#end
|
46
|
+
<% else -%>
|
47
|
+
end
|
48
|
+
<% end -%>
|
@@ -0,0 +1,116 @@
|
|
1
|
+
# Requires
|
2
|
+
require 'Core/CDImage'
|
3
|
+
require 'Core/Exceptions'
|
4
|
+
require 'Virtual/Hypervisors'
|
5
|
+
require 'Provision/Provisioners'
|
6
|
+
require 'Utils/Generator'
|
7
|
+
require 'Utils/TypeAccessor'
|
8
|
+
|
9
|
+
module PackerFiles
|
10
|
+
|
11
|
+
# The Builder class is used as the base for building OS classes
|
12
|
+
# that generate all the files required for Packer to work properly for
|
13
|
+
# a given OS
|
14
|
+
class Builder < Utils::TypeAccessor
|
15
|
+
|
16
|
+
# attr_accessor for output directory
|
17
|
+
attr_accessor :OutDir
|
18
|
+
|
19
|
+
# Type accessors for mandatory common objects
|
20
|
+
type_accessor Core::CDImage
|
21
|
+
type_accessor Virtual::Hypervisors
|
22
|
+
|
23
|
+
# Type accessor for optional Provisioners.
|
24
|
+
type_accessor Provisioners, 'Provision', true
|
25
|
+
|
26
|
+
# Versions supported by this class
|
27
|
+
def self.versions
|
28
|
+
[]
|
29
|
+
end
|
30
|
+
|
31
|
+
# Name of this class as exposed to others
|
32
|
+
def name
|
33
|
+
self.class.name.gsub('PackerFiles::','')
|
34
|
+
end
|
35
|
+
|
36
|
+
# Name of the http directory
|
37
|
+
def http_dir
|
38
|
+
File.join(@OutDir, 'http')
|
39
|
+
end
|
40
|
+
|
41
|
+
# Name of the top level JSON file
|
42
|
+
def packer_json_file
|
43
|
+
rel = self.CDImage.release
|
44
|
+
arch = self.CDImage.arch
|
45
|
+
file = self.name.gsub('::', '-') + "-#{rel}-#{arch}.json"
|
46
|
+
File.join(@OutDir, file)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Base class function that needs to be called first to handle
|
50
|
+
# parameter validation.
|
51
|
+
def Generate
|
52
|
+
if @OutDir.nil?
|
53
|
+
raise ArgumentError.new('Need to provide output directory')
|
54
|
+
end
|
55
|
+
|
56
|
+
# Track through all the accessors in the ancestry tree and check
|
57
|
+
# if non-optional type accessors are missing.
|
58
|
+
index = self.class.ancestors.index(Builder)
|
59
|
+
ancestors = self.class.ancestors.slice(0, index + 1 )
|
60
|
+
ancestors.each do |klass|
|
61
|
+
hash = klass.type_accessors
|
62
|
+
next if hash.nil?
|
63
|
+
hash.each_pair do |func, type_data|
|
64
|
+
opt = type_data.last
|
65
|
+
obj = self.method(func).call
|
66
|
+
raise Utils::MissingAccessor.new(func, self.name) if obj.nil? && !opt
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Normalize CD Image by calling the cd image hook of the derived class.
|
71
|
+
cd_image_hook
|
72
|
+
self.CDImage.normalize
|
73
|
+
|
74
|
+
# Call Hook for derived classes to add their functionality.
|
75
|
+
generate_hook
|
76
|
+
|
77
|
+
# Generate Packer File
|
78
|
+
generate_packer_file
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
# Generate the Various Packer File components
|
83
|
+
private
|
84
|
+
def generate_packer_file
|
85
|
+
|
86
|
+
# Manage various packer file components via the generator
|
87
|
+
gen = Utils::Generator.new
|
88
|
+
|
89
|
+
# handle hypervisors
|
90
|
+
self.Hypervisors.convert(gen, self)
|
91
|
+
|
92
|
+
# handle provisioners
|
93
|
+
self.Provision.convert(gen, self) if !self.Provision.nil?
|
94
|
+
|
95
|
+
# Finally generate the JSON for packer
|
96
|
+
gen.create_json(packer_json_file)
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
# Various hook functions
|
101
|
+
def generate_hook; end
|
102
|
+
def cd_image_hook; end
|
103
|
+
def vbox_converter_hook(gen); end
|
104
|
+
def vmware_converter_hook(gen); end
|
105
|
+
def kvm_converter_hook(gen); end
|
106
|
+
def boot_command; end
|
107
|
+
def shutdown_command; end
|
108
|
+
def guest_os_type; end
|
109
|
+
def vmware_guest_os_type; end
|
110
|
+
def vmware_guest_os_flavor; end
|
111
|
+
def run_command_as_root; end
|
112
|
+
def enable_root_for_user; end
|
113
|
+
def disable_root_for_user; end
|
114
|
+
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# Requires
|
2
|
+
require 'uri'
|
3
|
+
require 'open-uri'
|
4
|
+
require "Core/CDImage"
|
5
|
+
require "Core/Exceptions"
|
6
|
+
require "Utils/AutoZone"
|
7
|
+
|
8
|
+
# An implementation for CDImage which lists all available CentOS CD Mirrors
|
9
|
+
module PackerFiles
|
10
|
+
module CentOS
|
11
|
+
class CD < Core::CDImageImpl
|
12
|
+
|
13
|
+
# Index URL which contains all the CentOS Download mirror list
|
14
|
+
@@index = 'http://www.centos.org/download/full-mirrorlist.csv'
|
15
|
+
|
16
|
+
# Override method for getting the ISO name
|
17
|
+
def get_iso_name_pattern
|
18
|
+
'CentOS-@release@.*-@arch@.*-DVD1.*.iso'
|
19
|
+
end
|
20
|
+
|
21
|
+
# Override method for getting checksums
|
22
|
+
def get_check_sum_pattern
|
23
|
+
'md5sum.txt'
|
24
|
+
end
|
25
|
+
|
26
|
+
# Override method for checksum type
|
27
|
+
def get_check_sum_type
|
28
|
+
'md5'
|
29
|
+
end
|
30
|
+
|
31
|
+
# Override method for getting index URLs.
|
32
|
+
def index_urls
|
33
|
+
mirrors = get_mirrors
|
34
|
+
geo = get_matched_mirror_lines(mirrors)
|
35
|
+
http = geo.map{|m| m[4].gsub('"', '')}
|
36
|
+
http.map{|m| URI::join(m, '@release@/', 'isos/', '@arch@/').to_s}
|
37
|
+
end
|
38
|
+
|
39
|
+
# Read the full mirror list CSV file and convert it into a searchable
|
40
|
+
# array.
|
41
|
+
private
|
42
|
+
def get_mirrors
|
43
|
+
content = open(@@index) {|f| f.read}
|
44
|
+
top_arr = content.split("\n")
|
45
|
+
top_arr.map {|line| line.split(",")}
|
46
|
+
end
|
47
|
+
|
48
|
+
# Get matched mirror entries, given a country code and region code
|
49
|
+
private
|
50
|
+
def get_matched_mirror_lines(mirrors)
|
51
|
+
json = Utils::AutoZone.new.JSON
|
52
|
+
country_code = json['country_code']
|
53
|
+
country_name = json['country']
|
54
|
+
region_code = json['region_code']
|
55
|
+
|
56
|
+
# Check if country code matches and if it does, then try to
|
57
|
+
# match region code as well.
|
58
|
+
cc = mirrors.select {|m| m[0] == '"' + country_code + '"'}
|
59
|
+
if !cc.empty?
|
60
|
+
region = cc.select {|m| m[1] == '"' + region_code + '"'}
|
61
|
+
return region if !region.empty?
|
62
|
+
return cc
|
63
|
+
end
|
64
|
+
|
65
|
+
# Country code does not match. Try matching country name
|
66
|
+
cn = mirrors.select {|m| m[1] == '"' + country_name + '"'}
|
67
|
+
return cn if !cn.empty?
|
68
|
+
|
69
|
+
# OK. even that is not working. Let us try matching country name
|
70
|
+
# on the first element
|
71
|
+
cp = mirrors.select {|m| m[0] == '"' + country_name + '"'}
|
72
|
+
if cp.empty?
|
73
|
+
raise Core::EmptyArrayException.new('No Mirror for CentOS?')
|
74
|
+
else
|
75
|
+
return cp
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Requires
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
# OS class that handles details for generating Kickstart files for CentOS
|
5
|
+
# Servers.
|
6
|
+
module PackerFiles
|
7
|
+
module CentOS
|
8
|
+
|
9
|
+
class Kickstart
|
10
|
+
|
11
|
+
# Constructor. The Kickstart file name is the name of the file
|
12
|
+
# that will be written to.
|
13
|
+
def initialize(filename)
|
14
|
+
@kickstart = filename
|
15
|
+
create_file
|
16
|
+
end
|
17
|
+
|
18
|
+
# Serializes the given object and write out the content
|
19
|
+
# in the output file.
|
20
|
+
def convert(obj, os_name)
|
21
|
+
file = erb_file(obj, os_name)
|
22
|
+
content = PackerFiles.evaluate_erb(file, { "obj" => obj })
|
23
|
+
add_content(content)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Evaluate a partially specified file name (should be in the Gem's
|
27
|
+
# file list though) and add the content to the @kickstart file
|
28
|
+
def eval_file(file_name, hash)
|
29
|
+
erb_file = PackerFiles.DirPath(file_name).first
|
30
|
+
content = PackerFiles.evaluate_erb(erb_file, hash)
|
31
|
+
add_content(content)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Given an object, figure out the class name and return back the correct
|
35
|
+
# erb file name.
|
36
|
+
private
|
37
|
+
def erb_file(obj, os_name)
|
38
|
+
|
39
|
+
erb_file = File.join(os_name, obj.class.name.gsub(/.*::/,'') + '_erb.rb')
|
40
|
+
erb_path = PackerFiles.DirPath(erb_file)
|
41
|
+
|
42
|
+
if erb_path.nil? || erb_path.empty?
|
43
|
+
raise RuntimeError.new("Template Path #{erb_file} does not exist")
|
44
|
+
end
|
45
|
+
return erb_path.first
|
46
|
+
end
|
47
|
+
|
48
|
+
# Create a new file with no content
|
49
|
+
private
|
50
|
+
def create_file
|
51
|
+
basename = File.dirname(@kickstart)
|
52
|
+
FileUtils.mkdir_p(basename) if !Dir.exist?(basename)
|
53
|
+
File.open(@kickstart, 'w') {|f| f.write ''}
|
54
|
+
end
|
55
|
+
|
56
|
+
# Add content to the preseed file
|
57
|
+
private
|
58
|
+
def add_content(content)
|
59
|
+
File.open(@kickstart, 'a') {|f| f.write(content) }
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|