beaker-hostgenerator 1.18.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +9 -0
- data/.github/workflows/release.yml +1 -1
- data/.github/workflows/test.yml +30 -9
- data/.rubocop.yml +30 -0
- data/.rubocop_todo.yml +665 -0
- data/CHANGELOG.md +30 -0
- data/Gemfile +10 -2
- data/README.md +28 -28
- data/Rakefile +13 -6
- data/beaker-hostgenerator.gemspec +9 -7
- data/lib/beaker-hostgenerator/abs_support.rb +5 -5
- data/lib/beaker-hostgenerator/cli.rb +21 -21
- data/lib/beaker-hostgenerator/data.rb +366 -978
- data/lib/beaker-hostgenerator/exceptions.rb +5 -3
- data/lib/beaker-hostgenerator/generator.rb +2 -1
- data/lib/beaker-hostgenerator/hypervisor/docker.rb +6 -23
- data/lib/beaker-hostgenerator/hypervisor/hcloud.rb +1 -2
- data/lib/beaker-hostgenerator/hypervisor/vmpooler.rb +1 -5
- data/lib/beaker-hostgenerator/hypervisor.rb +0 -2
- data/lib/beaker-hostgenerator/parser.rb +17 -18
- data/lib/beaker-hostgenerator/roles.rb +1 -2
- data/lib/beaker-hostgenerator/util.rb +1 -5
- data/lib/beaker-hostgenerator/version.rb +1 -1
- metadata +38 -37
- data/bin/genconfig2 +0 -14
@@ -1,7 +1,9 @@
|
|
1
1
|
module BeakerHostGenerator
|
2
2
|
module Exceptions
|
3
|
-
class Error < RuntimeError
|
4
|
-
|
5
|
-
class
|
3
|
+
class Error < RuntimeError; end
|
4
|
+
|
5
|
+
class InvalidNodeSpecError < BeakerHostGenerator::Exceptions::Error; end
|
6
|
+
|
7
|
+
class SafeEarlyExit < SystemExit; end
|
6
8
|
end
|
7
9
|
end
|
@@ -13,7 +13,7 @@ module BeakerHostGenerator
|
|
13
13
|
# specification and optional configuration.
|
14
14
|
#
|
15
15
|
# @param layout [String] The raw hosts specification user input.
|
16
|
-
# For example `"
|
16
|
+
# For example `"centos9-64m-redhat7-64a"`.
|
17
17
|
# @param options [Hash] Global, optional configuration such as the default
|
18
18
|
# hypervisor or OS info version.
|
19
19
|
#
|
@@ -32,6 +32,7 @@ module BeakerHostGenerator
|
|
32
32
|
if nodeid[ostype] == 1 and ostype != nil
|
33
33
|
raise "Error: no nodes generated for #{ostype}"
|
34
34
|
end
|
35
|
+
|
35
36
|
ostype = token
|
36
37
|
next
|
37
38
|
end
|
@@ -27,31 +27,14 @@ module BeakerHostGenerator
|
|
27
27
|
base_config['image'] = "amd64/#{base_config['image']}"
|
28
28
|
end
|
29
29
|
|
30
|
-
docker_commands = []
|
31
|
-
|
32
30
|
case node_info['ostype']
|
33
31
|
when /^ubuntu/
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
extra_packages_to_install = case node_info['ostype']
|
42
|
-
when /1404/
|
43
|
-
['apt-transport-https']
|
44
|
-
when /1604/
|
45
|
-
['locales']
|
46
|
-
else
|
47
|
-
['locales', 'iproute2', 'gnupg']
|
48
|
-
end
|
49
|
-
|
50
|
-
docker_commands << "apt-get install -y net-tools wget #{extra_packages_to_install.join(' ')}"
|
51
|
-
docker_commands << 'locale-gen en_US.UTF-8'
|
52
|
-
docker_commands << 'echo LANG=en_US.UTF-8 > /etc/default/locale'
|
53
|
-
|
54
|
-
base_config['docker_image_commands'] = docker_commands
|
32
|
+
base_config['docker_image_commands'] = [
|
33
|
+
'cp /bin/true /sbin/agetty',
|
34
|
+
'apt-get install -y net-tools wget locales iproute2 gnupg',
|
35
|
+
'locale-gen en_US.UTF-8',
|
36
|
+
'echo LANG=en_US.UTF-8 > /etc/default/locale',
|
37
|
+
]
|
55
38
|
end
|
56
39
|
|
57
40
|
return base_generate_node(node_info, base_config, bhg_version, :docker)
|
@@ -3,7 +3,6 @@ require 'beaker-hostgenerator/hypervisor'
|
|
3
3
|
|
4
4
|
module BeakerHostGenerator
|
5
5
|
module Hypervisor
|
6
|
-
|
7
6
|
class Hcloud < BeakerHostGenerator::Hypervisor::Interface
|
8
7
|
include BeakerHostGenerator::Data
|
9
8
|
|
@@ -13,7 +12,7 @@ module BeakerHostGenerator
|
|
13
12
|
os, version = node_info['ostype'].split(/(\D+)/).reject!(&:empty?)
|
14
13
|
base_config['image'] = case os
|
15
14
|
when 'ubuntu'
|
16
|
-
"#{os}-#{version[0, 2]}.#{version[2,2]}"
|
15
|
+
"#{os}-#{version[0, 2]}.#{version[2, 2]}"
|
17
16
|
when 'centos'
|
18
17
|
version.to_i == 7 ? "#{os}-#{version}" : "#{os}-stream-#{version}"
|
19
18
|
else
|
@@ -10,7 +10,7 @@ module BeakerHostGenerator
|
|
10
10
|
# default global configuration keys
|
11
11
|
def global_config
|
12
12
|
{
|
13
|
-
'pooling_api' => 'https://vmpooler-prod.k8s.infracore.puppet.net/'
|
13
|
+
'pooling_api' => 'https://vmpooler-prod.k8s.infracore.puppet.net/',
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
@@ -35,10 +35,6 @@ module BeakerHostGenerator
|
|
35
35
|
base_config['template'] ||= "#{node_info['ostype'].sub('ubuntu', 'ubuntu-')}-#{arch}" if arch
|
36
36
|
end
|
37
37
|
|
38
|
-
# Some vmpooler/vsphere platforms have special requirements.
|
39
|
-
# We munge the node host config here if that is necessary.
|
40
|
-
fixup_node base_config
|
41
|
-
|
42
38
|
return base_config
|
43
39
|
end
|
44
40
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module BeakerHostGenerator
|
2
|
-
|
3
2
|
# Defines an Interface for the implementation of a hypervisor, and provides
|
4
3
|
# a static module function `create(node_info, options)` for instantiating
|
5
4
|
# the appropriate hypervisor implementation.
|
@@ -13,7 +12,6 @@ module BeakerHostGenerator
|
|
13
12
|
# Generator will instantiate the appropriate hypervisor via
|
14
13
|
# `BeakerHostGenerator::Hypervisor.create`.
|
15
14
|
module Hypervisor
|
16
|
-
|
17
15
|
# Static factory method to instantiate the appropriate hypervisor for the
|
18
16
|
# given node. If no hypervisor is specified in the node info, then the
|
19
17
|
# hypervisor specified in the options will be created. If the hypervisor is
|
@@ -15,7 +15,6 @@ module BeakerHostGenerator
|
|
15
15
|
# into tokens via `tokenize_layout`, and then for each token you would call
|
16
16
|
# `is_ostype_token?` and/or `parse_node_info_token`.
|
17
17
|
module Parser
|
18
|
-
|
19
18
|
# Parses a single node definition into the following components:
|
20
19
|
#
|
21
20
|
# * bits Uppercase-only alphanumeric
|
@@ -63,7 +62,7 @@ module BeakerHostGenerator
|
|
63
62
|
# * agent
|
64
63
|
# * database
|
65
64
|
#
|
66
|
-
NODE_REGEX
|
65
|
+
NODE_REGEX = /\A(?<bits>[A-Z0-9]+|\d+)((?<arbitrary_roles>([[:lower:]_]*|\,)*)\.)?(?<roles>[uacldfm]*)(?<host_settings>\{[[:print:]]*\})?\Z/
|
67
66
|
|
68
67
|
module_function
|
69
68
|
|
@@ -86,25 +85,25 @@ module BeakerHostGenerator
|
|
86
85
|
# which are used to define arbitrary key-values on a node.
|
87
86
|
#
|
88
87
|
# @param spec [String] Well-formatted string specification of the hosts to
|
89
|
-
# generate. For example `"
|
88
|
+
# generate. For example `"centos9-64m-debian11-64a"`.
|
90
89
|
# @returns [Array<String>] Input string split into substrings suitable for
|
91
90
|
# processing by the generator. For example
|
92
|
-
# `["
|
91
|
+
# `["centos9", "64m", "debian11", "64a"]`.
|
93
92
|
def tokenize_layout(layout_spec)
|
94
93
|
# Here we allow dashes in certain parts of the spec string
|
95
|
-
# i.e. "
|
94
|
+
# i.e. "centos9-64m{hostname=foo-bar}-debian11-64"
|
96
95
|
# by first replacing all occurrences of - with | that exist within
|
97
96
|
# the braces {...}.
|
98
97
|
#
|
99
98
|
# So we'd end up with:
|
100
|
-
# "
|
99
|
+
# "centos9-64m{hostname=foo|bar}-debian11-64"
|
101
100
|
#
|
102
101
|
# Which we can then simply split on - into:
|
103
|
-
# ["
|
102
|
+
# ["centos9", "64m{hostname=foo|bar}", "debian11", "64"]
|
104
103
|
#
|
105
104
|
# And then finally turn the | back into - now that we've
|
106
105
|
# properly decomposed the spec string:
|
107
|
-
# ["
|
106
|
+
# ["centos9", "64m{hostname=foo-bar}", "debian11", "64"]
|
108
107
|
#
|
109
108
|
# NOTE we've specifically chosen to use the pipe character |
|
110
109
|
# due to its unlikely occurrence in the user input string.
|
@@ -124,8 +123,8 @@ module BeakerHostGenerator
|
|
124
123
|
tokens.map { |t| t.gsub('|', '-') }
|
125
124
|
end
|
126
125
|
|
127
|
-
# Tests if a string token represents an OS platform (i.e. "
|
128
|
-
# "
|
126
|
+
# Tests if a string token represents an OS platform (i.e. "centos9" or
|
127
|
+
# "debian11") and not another part of the host specification like the
|
129
128
|
# architecture bit (i.e. "32" or "64").
|
130
129
|
#
|
131
130
|
# This is used when parsing the host generator input string to determine
|
@@ -133,7 +132,7 @@ module BeakerHostGenerator
|
|
133
132
|
# host for a current platform.
|
134
133
|
#
|
135
134
|
# @param [String] token A piece of the host generator input that might refer
|
136
|
-
# to an OS platform. For example `"
|
135
|
+
# to an OS platform. For example `"centos9"` or `"debian11"`.
|
137
136
|
#
|
138
137
|
# @param [Integer] bhg_version The version of OS info to use when testing
|
139
138
|
# for whether the token represent an OS platform.
|
@@ -169,7 +168,7 @@ module BeakerHostGenerator
|
|
169
168
|
node_info = NODE_REGEX.match(token)
|
170
169
|
|
171
170
|
if node_info
|
172
|
-
node_info = Hash[
|
171
|
+
node_info = Hash[node_info.names.zip(node_info.captures)]
|
173
172
|
else
|
174
173
|
raise BeakerHostGenerator::Exceptions::InvalidNodeSpecError.new,
|
175
174
|
"Invalid node_info token: #{token}"
|
@@ -209,7 +208,6 @@ module BeakerHostGenerator
|
|
209
208
|
#
|
210
209
|
# @returns [Hash{String=>String|Array|Hash}] The host_settings string as a map.
|
211
210
|
def settings_string_to_map(host_settings)
|
212
|
-
|
213
211
|
stringscan = StringScanner.new(host_settings)
|
214
212
|
object = nil
|
215
213
|
object_depth = []
|
@@ -253,8 +251,6 @@ module BeakerHostGenerator
|
|
253
251
|
next
|
254
252
|
end
|
255
253
|
|
256
|
-
|
257
|
-
|
258
254
|
if blob == ']' or blob == '}'
|
259
255
|
object_depth.pop
|
260
256
|
current_depth = current_depth.pred
|
@@ -265,7 +261,8 @@ module BeakerHostGenerator
|
|
265
261
|
# corresponding data structure, add it to the object depth, and
|
266
262
|
# then change the current depth
|
267
263
|
if blob[-2] == '='
|
268
|
-
raise Beaker::HostGenerator::Exceptions::InvalidNodeSpecError unless blob.end_with?('{','[')
|
264
|
+
raise Beaker::HostGenerator::Exceptions::InvalidNodeSpecError unless blob.end_with?('{', '[')
|
265
|
+
|
269
266
|
if blob[-1] == '{'
|
270
267
|
current_object[blob[0..-3]] = {}
|
271
268
|
else
|
@@ -278,8 +275,10 @@ module BeakerHostGenerator
|
|
278
275
|
|
279
276
|
if blob[-1] == '}'
|
280
277
|
raise Beaker::HostGenerator::Exceptions::InvalidNodeSpecError if blob.count('=') != 1
|
278
|
+
|
281
279
|
key_pair = blob[0..-2].split('=')
|
282
280
|
raise Beaker::HostGenerator::Exceptions::InvalidNodeSpecError if key_pair.size != 2
|
281
|
+
|
283
282
|
key_pair.each do |element|
|
284
283
|
raise Beaker::HostGenerator::Exceptions::InvalidNodeSpecError if element.empty?
|
285
284
|
end
|
@@ -297,6 +296,7 @@ module BeakerHostGenerator
|
|
297
296
|
if current_type == Hash
|
298
297
|
key_pair = blob[0..-2].split('=')
|
299
298
|
raise Beaker::HostGenerator::Exceptions::InvalidNodeSpecError if key_pair.size != 2
|
299
|
+
|
300
300
|
key_pair.each do |element|
|
301
301
|
raise Beaker::HostGenerator::Exceptions::InvalidNodeSpecError if element.empty?
|
302
302
|
end
|
@@ -317,10 +317,9 @@ module BeakerHostGenerator
|
|
317
317
|
end
|
318
318
|
|
319
319
|
object
|
320
|
-
rescue Exception
|
320
|
+
rescue Exception
|
321
321
|
raise BeakerHostGenerator::Exceptions::InvalidNodeSpecError,
|
322
322
|
"Malformed host settings: #{host_settings}"
|
323
323
|
end
|
324
|
-
|
325
324
|
end
|
326
325
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module BeakerHostGenerator
|
2
2
|
module Roles
|
3
|
-
|
4
3
|
ROLES = {
|
5
4
|
'a' => 'agent',
|
6
5
|
'u' => 'ca',
|
@@ -14,7 +13,7 @@ module BeakerHostGenerator
|
|
14
13
|
CM_CONFIG = { 'main' => {
|
15
14
|
'dns_alt_names' => 'puppet',
|
16
15
|
'environmentpath' => '/etc/puppetlabs/puppet/environments',
|
17
|
-
}
|
16
|
+
},
|
18
17
|
}
|
19
18
|
|
20
19
|
ROLE_CONFIG = {
|
@@ -11,10 +11,6 @@ module BeakerHostGenerator
|
|
11
11
|
BeakerHostGenerator::Data.pe_dir(version)
|
12
12
|
end
|
13
13
|
|
14
|
-
def fixup_node(cfg)
|
15
|
-
BeakerHostGenerator::Data.fixup_node(cfg)
|
16
|
-
end
|
17
|
-
|
18
14
|
def dump_hosts(hosts, path)
|
19
15
|
vmpooler_hypervisor = BeakerHostGenerator::Hypervisor::Vmpooler.new
|
20
16
|
config = {}
|
@@ -34,7 +30,7 @@ module BeakerHostGenerator
|
|
34
30
|
end
|
35
31
|
end
|
36
32
|
|
37
|
-
def get_platforms(hypervisor_type='vmpooler', bhg_version=0)
|
33
|
+
def get_platforms(hypervisor_type = 'vmpooler', bhg_version = 0)
|
38
34
|
BeakerHostGenerator::Data.get_platforms(bhg_version)
|
39
35
|
end
|
40
36
|
|
metadata
CHANGED
@@ -1,47 +1,40 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker-hostgenerator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Branan Purvine-Riley
|
8
8
|
- Wayne Warren
|
9
9
|
- Nate Wolfe
|
10
|
+
- Vox Pupuli
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date:
|
14
|
+
date: 2023-04-28 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
+
name: fakefs
|
17
18
|
requirement: !ruby/object:Gem::Requirement
|
18
19
|
requirements:
|
19
20
|
- - ">="
|
20
21
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
version: '0'
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: rspec
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
22
|
+
version: '0.6'
|
23
|
+
- - "<"
|
34
24
|
- !ruby/object:Gem::Version
|
35
25
|
version: '3.0'
|
36
26
|
type: :development
|
37
27
|
prerelease: false
|
38
28
|
version_requirements: !ruby/object:Gem::Requirement
|
39
29
|
requirements:
|
40
|
-
- - "
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0.6'
|
33
|
+
- - "<"
|
41
34
|
- !ruby/object:Gem::Version
|
42
35
|
version: '3.0'
|
43
36
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
37
|
+
name: minitest
|
45
38
|
requirement: !ruby/object:Gem::Requirement
|
46
39
|
requirements:
|
47
40
|
- - ">="
|
@@ -55,25 +48,19 @@ dependencies:
|
|
55
48
|
- !ruby/object:Gem::Version
|
56
49
|
version: '0'
|
57
50
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
51
|
+
name: pry
|
59
52
|
requirement: !ruby/object:Gem::Requirement
|
60
53
|
requirements:
|
61
|
-
- - "
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '0.6'
|
64
|
-
- - "<"
|
54
|
+
- - "~>"
|
65
55
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
56
|
+
version: '0.10'
|
67
57
|
type: :development
|
68
58
|
prerelease: false
|
69
59
|
version_requirements: !ruby/object:Gem::Requirement
|
70
60
|
requirements:
|
71
|
-
- - "
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '0.6'
|
74
|
-
- - "<"
|
61
|
+
- - "~>"
|
75
62
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
63
|
+
version: '0.10'
|
77
64
|
- !ruby/object:Gem::Dependency
|
78
65
|
name: rake
|
79
66
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,21 +76,21 @@ dependencies:
|
|
89
76
|
- !ruby/object:Gem::Version
|
90
77
|
version: '13.0'
|
91
78
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
79
|
+
name: rspec
|
93
80
|
requirement: !ruby/object:Gem::Requirement
|
94
81
|
requirements:
|
95
82
|
- - "~>"
|
96
83
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0
|
84
|
+
version: '3.0'
|
98
85
|
type: :development
|
99
86
|
prerelease: false
|
100
87
|
version_requirements: !ruby/object:Gem::Requirement
|
101
88
|
requirements:
|
102
89
|
- - "~>"
|
103
90
|
- !ruby/object:Gem::Version
|
104
|
-
version: '0
|
91
|
+
version: '3.0'
|
105
92
|
- !ruby/object:Gem::Dependency
|
106
|
-
name:
|
93
|
+
name: rspec-its
|
107
94
|
requirement: !ruby/object:Gem::Requirement
|
108
95
|
requirements:
|
109
96
|
- - ">="
|
@@ -130,6 +117,20 @@ dependencies:
|
|
130
117
|
- - ">="
|
131
118
|
- !ruby/object:Gem::Version
|
132
119
|
version: '0'
|
120
|
+
- !ruby/object:Gem::Dependency
|
121
|
+
name: yard
|
122
|
+
requirement: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
type: :development
|
128
|
+
prerelease: false
|
129
|
+
version_requirements: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
133
134
|
- !ruby/object:Gem::Dependency
|
134
135
|
name: deep_merge
|
135
136
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,10 +150,9 @@ description: |
|
|
149
150
|
its first positional argument and use that to generate a Beaker host
|
150
151
|
configuration file.
|
151
152
|
email:
|
152
|
-
-
|
153
|
+
- pmc@voxpupuli.org
|
153
154
|
executables:
|
154
155
|
- beaker-hostgenerator
|
155
|
-
- genconfig2
|
156
156
|
extensions: []
|
157
157
|
extra_rdoc_files: []
|
158
158
|
files:
|
@@ -161,6 +161,8 @@ files:
|
|
161
161
|
- ".github/workflows/test.yml"
|
162
162
|
- ".gitignore"
|
163
163
|
- ".rspec"
|
164
|
+
- ".rubocop.yml"
|
165
|
+
- ".rubocop_todo.yml"
|
164
166
|
- ".simplecov"
|
165
167
|
- CHANGELOG.md
|
166
168
|
- CODEOWNERS
|
@@ -172,7 +174,6 @@ files:
|
|
172
174
|
- Rakefile
|
173
175
|
- beaker-hostgenerator.gemspec
|
174
176
|
- bin/beaker-hostgenerator
|
175
|
-
- bin/genconfig2
|
176
177
|
- lib/beaker-hostgenerator.rb
|
177
178
|
- lib/beaker-hostgenerator/abs_support.rb
|
178
179
|
- lib/beaker-hostgenerator/cli.rb
|
@@ -202,7 +203,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
202
203
|
requirements:
|
203
204
|
- - ">="
|
204
205
|
- !ruby/object:Gem::Version
|
205
|
-
version: '
|
206
|
+
version: '2.7'
|
206
207
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
208
|
requirements:
|
208
209
|
- - ">="
|
data/bin/genconfig2
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
|
3
|
-
lib_dir = File.expand_path(File.dirname(File.dirname(__FILE__)), 'lib')
|
4
|
-
$LOAD_PATH.unshift(lib_dir)
|
5
|
-
|
6
|
-
require 'beaker-hostgenerator'
|
7
|
-
|
8
|
-
$stderr.puts("Warning: 'genconfig2' is deprecated and will be removed in beaker-hostgenerator 1.x\n\n")
|
9
|
-
|
10
|
-
begin
|
11
|
-
cli = BeakerHostGenerator::CLI.new
|
12
|
-
cli.execute!
|
13
|
-
rescue BeakerHostGenerator::Exceptions::SafeEarlyExit
|
14
|
-
end
|