beaker-hostgenerator 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +4 -0
  3. data/HISTORY.md +233 -2
  4. data/README.md +50 -11
  5. data/beaker-hostgenerator.gemspec +2 -2
  6. data/lib/beaker-hostgenerator.rb +0 -1
  7. data/lib/beaker-hostgenerator/cli.rb +38 -26
  8. data/lib/beaker-hostgenerator/data.rb +960 -35
  9. data/lib/beaker-hostgenerator/generator.rb +57 -97
  10. data/lib/beaker-hostgenerator/hypervisor.rb +97 -0
  11. data/lib/beaker-hostgenerator/hypervisor/none.rb +17 -0
  12. data/lib/beaker-hostgenerator/hypervisor/vmpooler.rb +32 -0
  13. data/lib/beaker-hostgenerator/parser.rb +199 -0
  14. data/lib/beaker-hostgenerator/roles.rb +21 -14
  15. data/lib/beaker-hostgenerator/util.rb +10 -29
  16. data/lib/beaker-hostgenerator/version.rb +1 -1
  17. data/spec/beaker-hostgenerator/generator_spec.rb +73 -109
  18. data/spec/beaker-hostgenerator/parser_spec.rb +84 -0
  19. data/test/fixtures/default/cisconx-64a +1 -1
  20. data/test/fixtures/default/windows10ent-32d +22 -0
  21. data/test/fixtures/default/windows10ent-64f +22 -0
  22. data/test/fixtures/default/windows10pro-64m +22 -0
  23. data/test/fixtures/default/windows2003-6432d +22 -0
  24. data/test/fixtures/default/windows2003-64c +22 -0
  25. data/test/fixtures/default/windows2003r2-32f +22 -0
  26. data/test/fixtures/default/windows2003r2-6432aulcdfm +27 -0
  27. data/test/fixtures/default/windows2003r2-64m +22 -0
  28. data/test/fixtures/default/windows2008-6432u +22 -0
  29. data/test/fixtures/default/windows2008-64a +21 -0
  30. data/test/fixtures/default/windows2008r2-6432c +22 -0
  31. data/test/fixtures/default/windows2008r2-64l +22 -0
  32. data/test/fixtures/default/windows2012-6432f +22 -0
  33. data/test/fixtures/default/windows2012-64d +22 -0
  34. data/test/fixtures/default/windows2012r2-6432aulcdfm +27 -0
  35. data/test/fixtures/default/windows2012r2-64m +22 -0
  36. data/test/fixtures/default/windows7-64a +21 -0
  37. data/test/fixtures/default/windows8-64u +22 -0
  38. data/test/fixtures/default/windows81-64l +22 -0
  39. data/test/fixtures/default/windowsvista-64c +22 -0
  40. data/test/fixtures/multiplatform/arista4-32a-windows10pro-64-arista4-32aulcdfm +47 -0
  41. data/test/fixtures/multiplatform/centos4-32u-windows10ent-64-centos4-32m +43 -0
  42. data/test/fixtures/multiplatform/centos4-64l-windows10ent-32-centos4-64f +43 -0
  43. data/test/fixtures/multiplatform/centos5-32c-windowsvista-64-centos5-32d +43 -0
  44. data/test/fixtures/multiplatform/centos5-64d-windows81-64-centos5-64c +43 -0
  45. data/test/fixtures/multiplatform/centos6-32f-windows8-64-centos6-32l +43 -0
  46. data/test/fixtures/multiplatform/centos6-64m-windows7-64-centos6-64u +43 -0
  47. data/test/fixtures/multiplatform/centos7-64aulcdfm-windows2012r2-6432-centos7-64a +47 -0
  48. data/test/fixtures/multiplatform/cisconx-64a-windows2012r2-64-cisconx-64aulcdfm +53 -0
  49. data/test/fixtures/multiplatform/ciscoxr-64u-windows2012-6432-ciscoxr-64m +43 -0
  50. data/test/fixtures/multiplatform/cumulus25-64l-windows2012-64-cumulus25-64f +43 -0
  51. data/test/fixtures/multiplatform/debian6-32c-windows2008r2-6432-debian6-32d +43 -0
  52. data/test/fixtures/multiplatform/debian6-64d-windows2008r2-64-debian6-64c +43 -0
  53. data/test/fixtures/multiplatform/debian7-32f-windows2008-6432-debian7-32l +43 -0
  54. data/test/fixtures/multiplatform/debian7-64m-windows2008-64-debian7-64u +43 -0
  55. data/test/fixtures/multiplatform/debian8-32aulcdfm-windows2003r2-6432-debian8-32a +47 -0
  56. data/test/fixtures/multiplatform/debian8-64a-windows2003r2-64-debian8-64aulcdfm +47 -0
  57. data/test/fixtures/multiplatform/debian9-32u-windows2003r2-32-debian9-32m +43 -0
  58. data/test/fixtures/multiplatform/debian9-64l-windows2003-6432-debian9-64f +43 -0
  59. data/test/fixtures/multiplatform/fedora14-32l-solaris11-64-fedora14-32f +42 -0
  60. data/test/fixtures/multiplatform/fedora19-32c-solaris11-32-fedora19-32d +42 -0
  61. data/test/fixtures/multiplatform/fedora19-64d-solaris10-64-fedora19-64c +42 -0
  62. data/test/fixtures/multiplatform/fedora20-32f-solaris10-32-fedora20-32l +42 -0
  63. data/test/fixtures/multiplatform/fedora20-64m-sles12-64-fedora20-64u +42 -0
  64. data/test/fixtures/multiplatform/fedora21-32aulcdfm-sles11-64-fedora21-32a +46 -0
  65. data/test/fixtures/multiplatform/fedora21-64a-sles11-32-fedora21-64aulcdfm +46 -0
  66. data/test/fixtures/multiplatform/fedora22-32u-sles10-64-fedora22-32m +42 -0
  67. data/test/fixtures/multiplatform/fedora22-64l-sles10-32-fedora22-64f +42 -0
  68. data/test/fixtures/multiplatform/fedora23-32c-scientific7-64-fedora23-32d +42 -0
  69. data/test/fixtures/multiplatform/fedora23-64d-scientific6-64-fedora23-64c +42 -0
  70. data/test/fixtures/multiplatform/opensuse11-32f-scientific6-32-opensuse11-32l +42 -0
  71. data/test/fixtures/multiplatform/opensuse11-64m-scientific5-64-opensuse11-64u +42 -0
  72. data/test/fixtures/multiplatform/oracle5-32c-windows2003-64-oracle5-32d +43 -0
  73. data/test/fixtures/multiplatform/oracle5-64d-ubuntu1604-64-oracle5-64c +42 -0
  74. data/test/fixtures/multiplatform/oracle6-32f-ubuntu1604-32-oracle6-32l +42 -0
  75. data/test/fixtures/multiplatform/oracle6-64m-ubuntu1510-64-oracle6-64u +42 -0
  76. data/test/fixtures/multiplatform/oracle7-64aulcdfm-ubuntu1510-32-oracle7-64a +46 -0
  77. data/test/fixtures/multiplatform/osx1010-64u-ubuntu1504-32-osx1010-64m +42 -0
  78. data/test/fixtures/multiplatform/osx1011-64l-ubuntu1404-64-osx1011-64f +42 -0
  79. data/test/fixtures/multiplatform/osx109-64a-ubuntu1504-64-osx109-64aulcdfm +46 -0
  80. data/test/fixtures/multiplatform/redhat4-32c-ubuntu1404-32-redhat4-32d +42 -0
  81. data/test/fixtures/multiplatform/redhat4-64d-ubuntu1204-64-redhat4-64c +42 -0
  82. data/test/fixtures/multiplatform/redhat5-32f-ubuntu1204-32-redhat5-32l +42 -0
  83. data/test/fixtures/multiplatform/redhat5-64m-ubuntu1004-64-redhat5-64u +42 -0
  84. data/test/fixtures/multiplatform/redhat6-32aulcdfm-ubuntu1004-32-redhat6-32a +46 -0
  85. data/test/fixtures/multiplatform/redhat6-64a-solaris112-64-redhat6-64aulcdfm +46 -0
  86. data/test/fixtures/multiplatform/redhat7-64u-solaris112-32-redhat7-64m +42 -0
  87. data/test/fixtures/multiplatform/scientific5-32aulcdfm-scientific5-32-scientific5-32a +46 -0
  88. data/test/fixtures/multiplatform/scientific5-64a-opensuse11-64-scientific5-64aulcdfm +46 -0
  89. data/test/fixtures/multiplatform/scientific6-32u-opensuse11-32-scientific6-32m +42 -0
  90. data/test/fixtures/multiplatform/scientific6-64l-fedora23-64-scientific6-64f +42 -0
  91. data/test/fixtures/multiplatform/scientific7-64c-fedora23-32-scientific7-64d +42 -0
  92. data/test/fixtures/multiplatform/sles10-32d-fedora22-64-sles10-32c +42 -0
  93. data/test/fixtures/multiplatform/sles10-64f-fedora22-32-sles10-64l +42 -0
  94. data/test/fixtures/multiplatform/sles11-32m-fedora21-64-sles11-32u +42 -0
  95. data/test/fixtures/multiplatform/sles11-64aulcdfm-fedora21-32-sles11-64a +46 -0
  96. data/test/fixtures/multiplatform/sles12-64a-fedora20-64-sles12-64aulcdfm +46 -0
  97. data/test/fixtures/multiplatform/solaris10-32u-fedora20-32-solaris10-32m +42 -0
  98. data/test/fixtures/multiplatform/solaris10-64l-fedora19-64-solaris10-64f +42 -0
  99. data/test/fixtures/multiplatform/solaris11-32c-fedora19-32-solaris11-32d +42 -0
  100. data/test/fixtures/multiplatform/solaris11-64d-fedora14-32-solaris11-64c +42 -0
  101. data/test/fixtures/multiplatform/solaris112-32f-redhat7-64-solaris112-32l +42 -0
  102. data/test/fixtures/multiplatform/solaris112-64m-redhat6-64-solaris112-64u +42 -0
  103. data/test/fixtures/multiplatform/ubuntu1004-32aulcdfm-redhat6-32-ubuntu1004-32a +46 -0
  104. data/test/fixtures/multiplatform/ubuntu1004-64a-redhat5-64-ubuntu1004-64aulcdfm +46 -0
  105. data/test/fixtures/multiplatform/ubuntu1204-32u-redhat5-32-ubuntu1204-32m +42 -0
  106. data/test/fixtures/multiplatform/ubuntu1204-64l-redhat4-64-ubuntu1204-64f +42 -0
  107. data/test/fixtures/multiplatform/ubuntu1404-32c-redhat4-32-ubuntu1404-32d +42 -0
  108. data/test/fixtures/multiplatform/ubuntu1404-64d-osx1011-64-ubuntu1404-64c +42 -0
  109. data/test/fixtures/multiplatform/ubuntu1504-32f-osx1010-64-ubuntu1504-32l +42 -0
  110. data/test/fixtures/multiplatform/ubuntu1504-64m-osx109-64-ubuntu1504-64u +42 -0
  111. data/test/fixtures/multiplatform/ubuntu1510-32aulcdfm-oracle7-64-ubuntu1510-32a +46 -0
  112. data/test/fixtures/multiplatform/ubuntu1510-64a-oracle6-64-ubuntu1510-64aulcdfm +46 -0
  113. data/test/fixtures/multiplatform/ubuntu1604-32u-oracle6-32-ubuntu1604-32m +42 -0
  114. data/test/fixtures/multiplatform/ubuntu1604-64l-oracle5-64-ubuntu1604-64f +42 -0
  115. data/test/fixtures/multiplatform/windows10ent-32d-centos4-64-windows10ent-32c +44 -0
  116. data/test/fixtures/multiplatform/windows10ent-64f-centos4-32-windows10ent-64l +44 -0
  117. data/test/fixtures/multiplatform/windows10pro-64m-arista4-32-windows10pro-64u +44 -0
  118. data/test/fixtures/multiplatform/windows2003-6432d-debian9-64-windows2003-6432c +44 -0
  119. data/test/fixtures/multiplatform/windows2003-64c-oracle5-32-windows2003-64d +44 -0
  120. data/test/fixtures/multiplatform/windows2003r2-32f-debian9-32-windows2003r2-32l +44 -0
  121. data/test/fixtures/multiplatform/windows2003r2-6432aulcdfm-debian8-32-windows2003r2-6432a +48 -0
  122. data/test/fixtures/multiplatform/windows2003r2-64m-debian8-64-windows2003r2-64u +44 -0
  123. data/test/fixtures/multiplatform/windows2008-6432u-debian7-32-windows2008-6432m +44 -0
  124. data/test/fixtures/multiplatform/windows2008-64a-debian7-64-windows2008-64aulcdfm +48 -0
  125. data/test/fixtures/multiplatform/windows2008r2-6432c-debian6-32-windows2008r2-6432d +44 -0
  126. data/test/fixtures/multiplatform/windows2008r2-64l-debian6-64-windows2008r2-64f +44 -0
  127. data/test/fixtures/multiplatform/windows2012-6432f-ciscoxr-64-windows2012-6432l +44 -0
  128. data/test/fixtures/multiplatform/windows2012-64d-cumulus25-64-windows2012-64c +44 -0
  129. data/test/fixtures/multiplatform/windows2012r2-6432aulcdfm-centos7-64-windows2012r2-6432a +48 -0
  130. data/test/fixtures/multiplatform/windows2012r2-64m-cisconx-64-windows2012r2-64u +47 -0
  131. data/test/fixtures/multiplatform/windows7-64a-centos6-64-windows7-64aulcdfm +48 -0
  132. data/test/fixtures/multiplatform/windows8-64u-centos6-32-windows8-64m +44 -0
  133. data/test/fixtures/multiplatform/windows81-64l-centos5-64-windows81-64f +44 -0
  134. data/test/fixtures/multiplatform/windowsvista-64c-centos5-32-windowsvista-64d +44 -0
  135. data/test/fixtures/osinfo-version-0/cisconx-64a +1 -1
  136. data/test/fixtures/osinfo-version-0/windows10ent-32d +22 -0
  137. data/test/fixtures/osinfo-version-0/windows10ent-64f +22 -0
  138. data/test/fixtures/osinfo-version-0/windows10pro-64m +22 -0
  139. data/test/fixtures/osinfo-version-0/windows2003-6432d +22 -0
  140. data/test/fixtures/osinfo-version-0/windows2003-64c +22 -0
  141. data/test/fixtures/osinfo-version-0/windows2003r2-32f +22 -0
  142. data/test/fixtures/osinfo-version-0/windows2003r2-6432aulcdfm +27 -0
  143. data/test/fixtures/osinfo-version-0/windows2003r2-64m +22 -0
  144. data/test/fixtures/osinfo-version-0/windows2008-6432u +22 -0
  145. data/test/fixtures/osinfo-version-0/windows2008-64a +21 -0
  146. data/test/fixtures/osinfo-version-0/windows2008r2-6432c +22 -0
  147. data/test/fixtures/osinfo-version-0/windows2008r2-64l +22 -0
  148. data/test/fixtures/osinfo-version-0/windows2012-6432f +22 -0
  149. data/test/fixtures/osinfo-version-0/windows2012-64d +22 -0
  150. data/test/fixtures/osinfo-version-0/windows2012r2-6432aulcdfm +27 -0
  151. data/test/fixtures/osinfo-version-0/windows2012r2-64m +22 -0
  152. data/test/fixtures/osinfo-version-0/windows7-64a +21 -0
  153. data/test/fixtures/osinfo-version-0/windows8-64u +22 -0
  154. data/test/fixtures/osinfo-version-0/windows81-64l +22 -0
  155. data/test/fixtures/osinfo-version-0/windowsvista-64c +22 -0
  156. data/test/fixtures/osinfo-version-1/cisconx-64a +1 -1
  157. data/test/fixtures/osinfo-version-1/windows10ent-32d +22 -0
  158. data/test/fixtures/osinfo-version-1/windows10ent-64f +22 -0
  159. data/test/fixtures/osinfo-version-1/windows10pro-64m +22 -0
  160. data/test/fixtures/osinfo-version-1/windows2003-6432d +22 -0
  161. data/test/fixtures/osinfo-version-1/windows2003-64c +22 -0
  162. data/test/fixtures/osinfo-version-1/windows2003r2-32f +22 -0
  163. data/test/fixtures/osinfo-version-1/windows2003r2-6432aulcdfm +27 -0
  164. data/test/fixtures/osinfo-version-1/windows2003r2-64m +22 -0
  165. data/test/fixtures/osinfo-version-1/windows2008-6432u +22 -0
  166. data/test/fixtures/osinfo-version-1/windows2008-64a +21 -0
  167. data/test/fixtures/osinfo-version-1/windows2008r2-6432c +22 -0
  168. data/test/fixtures/osinfo-version-1/windows2008r2-64l +22 -0
  169. data/test/fixtures/osinfo-version-1/windows2012-6432f +22 -0
  170. data/test/fixtures/osinfo-version-1/windows2012-64d +22 -0
  171. data/test/fixtures/osinfo-version-1/windows2012r2-6432aulcdfm +27 -0
  172. data/test/fixtures/osinfo-version-1/windows2012r2-64m +22 -0
  173. data/test/fixtures/osinfo-version-1/windows7-64a +21 -0
  174. data/test/fixtures/osinfo-version-1/windows8-64u +22 -0
  175. data/test/fixtures/osinfo-version-1/windows81-64l +22 -0
  176. data/test/fixtures/osinfo-version-1/windowsvista-64c +22 -0
  177. data/test/fixtures/per-host-settings/arbitrary-settings.yaml +57 -0
  178. data/test/fixtures/per-host-settings/every-hypervisor.yaml +30 -0
  179. data/test/fixtures/per-host-settings/malformed-input.yaml +5 -0
  180. data/test/test_stdout.rb +2 -2
  181. data/test/util/generator_helpers.rb +12 -4
  182. metadata +167 -6
  183. data/lib/beaker-hostgenerator/data/vmpooler.rb +0 -467
  184. data/lib/beaker-hostgenerator/generator/vmpooler.rb +0 -59
  185. data/test/test_util.rb +0 -26
@@ -1,22 +1,29 @@
1
- require 'beaker-hostgenerator/data'
2
- require 'beaker-hostgenerator/data/vmpooler'
3
- require 'deep_merge'
4
-
5
1
  module BeakerHostGenerator
6
- class Roles
2
+ module Roles
7
3
 
8
- def initialize
9
- end
4
+ ROLES = {
5
+ 'a' => 'agent',
6
+ 'u' => 'ca',
7
+ 'l' => 'classifier',
8
+ 'c' => 'dashboard',
9
+ 'd' => 'database',
10
+ 'f' => 'frictionless',
11
+ 'm' => 'master',
12
+ }
10
13
 
11
- def compile_master
12
- return {
13
- 'frictionless_options' => {
14
- 'main' => {
15
- 'dns_alt_names' => 'puppet',
16
- 'environmentpath' => '/etc/puppetlabs/puppet/environments',
17
- }
14
+ ROLE_CONFIG = {
15
+ 'compile_master' => {
16
+ 'main' => {
17
+ 'dns_alt_names' => 'puppet',
18
+ 'environmentpath' => '/etc/puppetlabs/puppet/environments',
18
19
  }
19
20
  }
21
+ }
22
+
23
+ module_function
24
+
25
+ def get_role_config(role)
26
+ ROLE_CONFIG[role] || {}
20
27
  end
21
28
  end
22
29
  end
@@ -1,36 +1,25 @@
1
1
  require 'beaker-hostgenerator/data'
2
- require 'beaker-hostgenerator/data/vmpooler'
2
+ require 'beaker-hostgenerator/roles'
3
+ require 'beaker-hostgenerator/hypervisor/vmpooler'
3
4
  require 'deep_merge'
4
5
 
5
6
  module BeakerHostGenerator
6
7
  module Utils
7
- include BeakerHostGenerator::Data
8
- include BeakerHostGenerator::Data::Vmpooler
8
+ module_function
9
9
 
10
10
  def pe_dir(version, family)
11
- # If our version is the same as our family, we're installing a
12
- # released version. Use the archive path. Otherwise, we want to use
13
- # the development build path.
14
- if version && family
15
- if version == family
16
- return "http://enterprise.delivery.puppetlabs.net/archives/releases/#{family}/"
17
- else
18
- return "http://enterprise.delivery.puppetlabs.net/#{family}/ci-ready"
19
- end
20
- end
11
+ BeakerHostGenerator::Data.pe_dir(version, family)
21
12
  end
22
13
 
23
14
  def fixup_node(cfg)
24
- # PE 2.8 doesn't exist for EL 4. We use 2.0 instead.
25
- if cfg['platform'] =~ /el-4/ and pe_version =~ /2\.8/
26
- cfg['pe_ver'] = "2.0.3"
27
- end
15
+ BeakerHostGenerator::Data.fixup_node(cfg)
28
16
  end
29
17
 
30
18
  def dump_hosts(hosts, path)
19
+ vmpooler_hypervisor = BeakerHostGenerator::Hypervisor::Vmpooler.new
31
20
  config = {}
32
- config.deep_merge! BASE_CONFIG
33
- config.deep_merge! VMPOOLER_CONFIG
21
+ config.deep_merge! BeakerHostGenerator::Data.BASE_CONFIG
22
+ config['CONFIG'].deep_merge! vmpooler_hypervisor.global_config()
34
23
 
35
24
  hosts.each do |host|
36
25
  config['HOSTS'][host.node_name] = {
@@ -46,19 +35,11 @@ module BeakerHostGenerator
46
35
  end
47
36
 
48
37
  def get_platforms(hypervisor_type='vmpooler', bhg_version=0)
49
- case hypervisor_type
50
- when /vmpooler/
51
- osinfo = BeakerHostGenerator::Data::Vmpooler.get_osinfo(bhg_version)
52
- else
53
- raise "Invalid hypervisor #{hypervisor_type}"
54
- end
55
- return osinfo
38
+ BeakerHostGenerator::Data.get_platforms(bhg_version)
56
39
  end
57
40
 
58
41
  def get_roles
59
- return BeakerHostGenerator::Data::ROLES
42
+ BeakerHostGenerator::Roles.ROLES
60
43
  end
61
-
62
- module_function :get_roles, :get_platforms, :dump_hosts, :fixup_node, :pe_dir
63
44
  end
64
45
  end
@@ -1,5 +1,5 @@
1
1
  module BeakerHostGenerator
2
2
  module Version
3
- STRING = '0.5.0'
3
+ STRING = '0.6.0'
4
4
  end
5
5
  end
@@ -6,125 +6,89 @@ require 'beaker-hostgenerator'
6
6
  require 'util/generator_helpers'
7
7
 
8
8
  module BeakerHostGenerator
9
- describe Generator do
10
- let(:options) {
11
- {
12
- list_platforms_and_roles: false,
13
- disable_default_role: false,
14
- disable_role_config: false,
15
- hypervisor: 'vmpooler',
16
- }
17
- }
18
- let(:generator) { BeakerHostGenerator::Generator.new(options) }
9
+ describe Generator do
10
+ let(:generator) { BeakerHostGenerator::Generator.new }
19
11
 
20
- describe '__generate_host_roles' do
21
- it 'Generates a list of roles' do
22
- {
23
- {
24
- "roles" => "aulcdfm",
25
- "arbitrary_roles" => [],
26
- } => [
27
- 'agent',
28
- 'ca',
29
- 'classifier',
30
- 'dashboard',
31
- 'database',
32
- 'frictionless',
33
- 'master',
34
- ],
35
- {
36
- "roles" => "a",
37
- "arbitrary_roles" => ["meow","hello","compile_master"],
38
- } => [
39
- 'agent',
40
- 'meow',
41
- 'hello',
42
- 'compile_master',
43
- ],
44
- {
45
- "roles" => "",
46
- "arbitrary_roles" => ["compile_master"],
47
- } => [
48
- 'compile_master'
49
- ],
50
- {
51
- "roles" => "",
52
- "arbitrary_roles" => [],
53
- } => [],
54
- }.each do |node_info, roles|
55
- expect( generator.__generate_host_roles(node_info) ).to eq( roles )
56
- end
57
- end
12
+ describe 'get_host_roles' do
13
+ it 'Expands default roles and merges in arbitrary roles' do
14
+ {
15
+ {
16
+ "roles" => "aulcdfm",
17
+ "arbitrary_roles" => [],
18
+ } => [
19
+ 'agent',
20
+ 'ca',
21
+ 'classifier',
22
+ 'dashboard',
23
+ 'database',
24
+ 'frictionless',
25
+ 'master',
26
+ ],
27
+ {
28
+ "roles" => "a",
29
+ "arbitrary_roles" => ["meow","hello","compile_master"],
30
+ } => [
31
+ 'agent',
32
+ 'meow',
33
+ 'hello',
34
+ 'compile_master',
35
+ ],
36
+ {
37
+ "roles" => "",
38
+ "arbitrary_roles" => ["compile_master"],
39
+ } => [
40
+ 'compile_master'
41
+ ],
42
+ {
43
+ "roles" => "",
44
+ "arbitrary_roles" => [],
45
+ } => [],
46
+ }.each do |node_info, roles|
47
+ expect( generator.get_host_roles(node_info) ).to eq( roles )
58
48
  end
49
+ end
50
+ end
59
51
 
60
- describe '__parse_node_info_token' do
61
-
62
- it 'Raises InvalidNodeSpecError for invalid tokens.' do
63
- expect{ generator.__parse_node_info_token("64compile_master") }.to \
64
- raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
65
- end
66
-
67
- it 'Supports no roles in the spec.' do
68
- node_info = generator.__parse_node_info_token("64")
69
- expect( node_info ).to eq({
70
- "roles" => "",
71
- "arbitrary_roles" => [],
72
- "bits" => "64",
73
- })
74
- end
75
-
76
- it 'Supports the use of arbitrary roles.' do
77
- node_info = generator.__parse_node_info_token("64compile_master,ca,blah.mad")
78
- expect( node_info ).to eq({
79
- "roles" => "mad",
80
- "arbitrary_roles" => ["compile_master", "ca", "blah"],
81
- "bits" => "64",
82
- })
83
- end
52
+ shared_examples "fixtures" do |fixture_hash|
53
+ arguments = fixture_hash["arguments_string"]
54
+ it "beaker-hostgenerator #{arguments}" do
55
+ arguments = arguments.split
56
+ STDERR.reopen("stderr.txt", "w")
57
+ fixture_hash['environment_variables'].each do |key, value|
58
+ ENV[key] = value
59
+ end
84
60
 
85
- context 'When using arbitrary roles'do
86
- it 'Fails without a role-type delimiter (a period)' do
87
- expect{ generator.__parse_node_info_token("64compile_master,ca,blah") }.to \
88
- raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
89
- end
90
- it 'It supports no static roles.' do
91
- node_info = generator.__parse_node_info_token("64compile_master,ca,blah.")
92
- expect( node_info ).to eq({
93
- "roles" => "",
94
- "arbitrary_roles" => ["compile_master", "ca", "blah"],
95
- "bits" => "64",
96
- })
97
- end
61
+ cli = BeakerHostGenerator::CLI.new(arguments)
62
+ if fixture_hash['expected_exception']
63
+ # Turn fully-qualified classname string into actual Class object.
64
+ # We have to manually descend into each Module that makes up the
65
+ # fully-qualified path to the error class.
66
+ qualified_classname = fixture_hash['expected_exception'].split('::')
67
+ expected_class = qualified_classname.reduce(Object) do |accum, e|
68
+ accum.const_get(e)
98
69
  end
70
+ expect { cli.execute }.to raise_error(expected_class)
71
+ else
72
+ test_hash = YAML.load(cli.execute)
73
+ expect(test_hash).to eq(fixture_hash['expected_hash'])
99
74
  end
100
75
 
101
- shared_examples "fixtures" do |fixture_hash|
102
- arguments = fixture_hash["arguments_string"]
103
- it "beaker-hostgenerator #{arguments}" do
104
- arguments = arguments.split
105
- STDERR.reopen("stderr.txt", "w")
106
- fixture_hash['environment_variables'].each do |key, value|
107
- ENV[key] = value
108
- end
109
- cli = BeakerHostGenerator::CLI.new(arguments)
110
- test_hash = YAML.load(cli.execute)
111
- fixture_hash['environment_variables'].each_key do |key|
112
- ENV[key] = nil
113
- end
114
- expect(test_hash).to eq(fixture_hash["expected_hash"])
115
- end
76
+ fixture_hash['environment_variables'].each_key do |key|
77
+ ENV[key] = nil
116
78
  end
79
+ end
80
+ end
117
81
 
118
- context "Fixtures" do
119
- Find.find 'test/fixtures' do |f|
120
- context "#{f}" do
121
- if File.directory?(f)
122
- next
123
- end
124
- include_examples "fixtures", YAML.load_file(f)
125
- end
82
+ context "Fixtures" do
83
+ Find.find 'test/fixtures' do |f|
84
+ context "#{f}" do
85
+ if File.directory?(f)
86
+ next
126
87
  end
88
+ include_examples "fixtures", YAML.load_file(f)
127
89
  end
128
-
129
90
  end
91
+ end
92
+
93
+ end
130
94
  end
@@ -0,0 +1,84 @@
1
+ require 'beaker-hostgenerator/parser'
2
+
3
+ module BeakerHostGenerator
4
+ describe Parser do
5
+ include BeakerHostGenerator::Parser
6
+
7
+ describe 'parse_node_info_token' do
8
+
9
+ it 'Raises InvalidNodeSpecError for invalid tokens.' do
10
+ expect { parse_node_info_token("64compile_master") }.
11
+ to raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
12
+ end
13
+
14
+ it 'Supports no roles in the spec.' do
15
+ expect( parse_node_info_token("64") ).
16
+ to eq({
17
+ "roles" => "",
18
+ "arbitrary_roles" => [],
19
+ "bits" => "64",
20
+ "host_settings" => {}
21
+ })
22
+ end
23
+
24
+ it 'Supports the use of arbitrary roles.' do
25
+ expect( parse_node_info_token("64compile_master,ca,blah.mad") ).
26
+ to eq({
27
+ "roles" => "mad",
28
+ "arbitrary_roles" => ["compile_master", "ca", "blah"],
29
+ "bits" => "64",
30
+ "host_settings" => {}
31
+ })
32
+ end
33
+
34
+ context 'When using arbitrary roles' do
35
+
36
+ it 'Fails without a role-type delimiter (a period)' do
37
+ expect { parse_node_info_token("64compile_master,ca,blah") }.
38
+ to raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
39
+ end
40
+
41
+ it 'It supports no static roles.' do
42
+ expect( parse_node_info_token("64compile_master,ca,blah.") ).
43
+ to eq({
44
+ "roles" => "",
45
+ "arbitrary_roles" => ["compile_master", "ca", "blah"],
46
+ "bits" => "64",
47
+ "host_settings" => {}
48
+ })
49
+ end
50
+ end
51
+
52
+ context 'When using arbitrary host settings' do
53
+ it 'Supports arbitrary whitespace' do
54
+ expect( parse_node_info_token("64{ k1=v1, k2=v2, k3 = v3 , k4 =v4 }") ).
55
+ to eq({
56
+ "roles" => "",
57
+ "arbitrary_roles" => [],
58
+ "bits" => "64",
59
+ "host_settings" => {
60
+ "k1" => "v1",
61
+ "k2" => "v2",
62
+ "k3" => "v3",
63
+ "k4" => "v4"
64
+ }
65
+ })
66
+ end
67
+
68
+ it 'Raises InvalidNodeSpecError for malformed key-value pairs' do
69
+ expect { parse_node_info_token("64{foo=bar=baz}") }.
70
+ to raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
71
+
72
+ expect { parse_node_info_token("64{foo=}") }.
73
+ to raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
74
+
75
+ expect { parse_node_info_token("64{=bar}") }.
76
+ to raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
77
+
78
+ expect { parse_node_info_token("64{=}") }.
79
+ to raise_error(BeakerHostGenerator::Exceptions::InvalidNodeSpecError)
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -10,10 +10,10 @@ expected_hash:
10
10
  pe_upgrade_ver:
11
11
  hypervisor: vmpooler
12
12
  platform: cisco_nexus-7-x86_64
13
- template: cisco-nxos-9k-x86_64
14
13
  vrf: management
15
14
  ssh:
16
15
  user: beaker
16
+ template: cisco-nxos-9k-x86_64
17
17
  roles:
18
18
  - agent
19
19
  CONFIG:
@@ -0,0 +1,22 @@
1
+ ---
2
+ arguments_string: windows10ent-32d
3
+ environment_variables: {}
4
+ expected_hash:
5
+ HOSTS:
6
+ windows10ent-32-1:
7
+ pe_dir:
8
+ pe_ver:
9
+ pe_upgrade_dir:
10
+ pe_upgrade_ver:
11
+ hypervisor: vmpooler
12
+ platform: windows-10ent-32
13
+ ruby_arch: x86
14
+ template: win-10-ent-i386
15
+ roles:
16
+ - agent
17
+ - database
18
+ CONFIG:
19
+ nfs_server: none
20
+ consoleport: 443
21
+ pooling_api: http://vmpooler.delivery.puppetlabs.net/
22
+ expected_exception:
@@ -0,0 +1,22 @@
1
+ ---
2
+ arguments_string: windows10ent-64f
3
+ environment_variables: {}
4
+ expected_hash:
5
+ HOSTS:
6
+ windows10ent-64-1:
7
+ pe_dir:
8
+ pe_ver:
9
+ pe_upgrade_dir:
10
+ pe_upgrade_ver:
11
+ hypervisor: vmpooler
12
+ platform: windows-10ent-64
13
+ ruby_arch: x64
14
+ template: win-10-ent-x86_64
15
+ roles:
16
+ - agent
17
+ - frictionless
18
+ CONFIG:
19
+ nfs_server: none
20
+ consoleport: 443
21
+ pooling_api: http://vmpooler.delivery.puppetlabs.net/
22
+ expected_exception: