1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
|
require 'beaker-hostgenerator/generator'
require 'beaker-hostgenerator/hypervisor'
require 'beaker-hostgenerator/roles'
require 'beaker-hostgenerator/version'
require 'beaker-hostgenerator/abs_support'
require 'optparse'
require 'yaml'
module BeakerHostGenerator
class CLI
include BeakerHostGenerator::Data
attr_reader :options
def initialize(argv = ARGV.dup)
@options = {
list_platforms_and_roles: false,
disable_default_role: false,
disable_role_config: false,
osinfo_version: 0,
hypervisor: 'vmpooler',
}
argv.push('--help') if argv.empty?
optparse = OptionParser.new do |opts|
opts.banner = <<-eos
Usage: beaker-hostgenerator [options] <layout>
where <layout> takes the following form:
<platform>-<arch>[[<arbitrary-roles>,[...]].]<roles>[{<arbitrary-settings>,[...]}][-<arch>[[<arbitrary-roles>,[...]].]<roles>[{<arbitrary-settings>,[...]}]][-<layout>]
examples:
centos6-64mdca-32a
1 CentOS 6 64 bit node with roles = master, database, agent, dashboard
1 CentOS 6 32 bit node with roles = agent
debian8-64m-32ad-32ac-centos6-64a
1 Debian 8 64 bit node with roles = master
1 Debian 8 32 bit node with roles = agent, database
1 Debian 8 32 bit node with roles = agent, dashboard
1 CentOS 6 64 bit node with roles = agent
debian8-64m-windows8-64a
1 Debian 8 64 bit node with roles = master
1 Windows 8 64 bit node with roles = agent
example with arbitrary roles:
centos6-32compile_master,another_role.ma
1 CentOS 6 32 bit node with roles = master, agent, compile_master, another_role
example with arbitrary host settings:
centos6-64m{hypervisor=none\\,hostname=static1\\,my-key=my-value}-32a
1 CentOS 6 64 bit node with roles = master, hypervisor = none, node name = static1, and my-key = my-value
1 CentOS 6 32 bit node with roles = agent and the default hypervisor
example of a list within arbitrary host settings:
centos6-64m{hostname=static1\\,disks=[8,16],my-list=[my-value1]}-32a
1 CentOS 6 64 bit node with roles = master, node name = static1 and lists:
disks:
- 8
- 16
my-list:
- my-value1
1 CentOS 6 32 bit node with roles = agent and the default hypervisor
Generally, it is expected that beaker-hostgenerator output will be redirected to a file, for example:
beaker-hostgenerator centos6-64ma > host.cfg
This can then be used in a Beaker call instead of a static Beaker config.
eos
opts.on('-l',
'--list',
'List beaker-hostgenerator supported platforms, roles, and hypervisors. ' <<
'Does not produce host config.') do
@options[:list_supported_values] = true
end
opts.on('--templates-only',
'Generate a reduced output including only the templates from each host.') do
@options[:templates_only] = true
end
opts.on('-t',
'--hypervisor HYPERVISOR',
'Set beaker-hostgenerator default hypervisor. ') do |h|
@options[:hypervisor] = h
end
opts.on('--pe_upgrade_dir UPGRADE_PATH',
'Explicitly set pe_upgrade_dir attribute on generated hosts. ') do |p|
@options[:pe_upgrade_dir] = p
end
opts.on('--pe_upgrade_ver UPGRADE_VERSION',
'Explicitly set pe_upgrade_ver attribute on generated hosts. ') do |p|
@options[:pe_upgrade_ver] = p
end
opts.on('--pe_dir PATH',
'Explicitly set pe_dir attribute on generated hosts. ') do |p|
@options[:pe_dir] = p
end
opts.on('--pe_ver VERSION',
'Explicitly set pe_ver attribute on generated hosts. ') do |p|
@options[:pe_ver] = p
end
opts.on('--disable-role-config',
"Do not include role-specific configuration.") do
@options[:disable_role_config] = true
end
opts.on('--disable-default-role',
"Do not include the default 'agent' role.") do
@options[:disable_default_role] = true
end
opts.on('--osinfo-version MAJOR_VERSION',
"Use OSINFO for specified beaker-hostgenerator version. " <<
"Allows early access to future version of OSINFO data structure " <<
"used to generate host configs.") do |version|
version = version.to_i
if not [0, 1].include? version
raise "Invalid beaker-hostgenerator version: #{version}"
end
@options[:osinfo_version] = version
end
opts.on('--global-config KEYVALUE_STRING',
"General configuration settings to be included as-is in the " <<
"CONFIG section. Value should be in the form '{key=value,...}'.") do |p|
@options[:global_config] = p
end
opts.on('-h',
'--help',
'Display command help.') do
@options[:help] = opts.to_s
end
opts.on('-v',
'--version',
'Display beaker-hostgenerator version number.') do
@options[:version] = true
end
end
optparse.parse!(argv)
@layout = argv[0]
end
def execute
if @options[:help]
@options[:help] # Value is help text string
elsif @options[:version]
BeakerHostGenerator::Version::STRING
elsif @options[:list_supported_values]
supported_values_help_text
elsif @options[:templates_only]
require 'json'
config = BeakerHostGenerator::Generator.new.generate(@layout, @options)
templates = BeakerHostGenerator::AbsSupport.extract_templates(config)
templates.to_json
else
config = BeakerHostGenerator::Generator.new.generate(@layout, @options)
config.to_yaml
end
end
def execute!
puts execute
end
private
# Builds help text with a human-readable listing of all supported values
# for the following: platforms, architectures, roles, and hypervisors.
def supported_values_help_text
result = "valid beaker-hostgenerator platforms:\n"
platforms = get_platforms(@options[:osinfo_version])
platforms.each do |k|
result << " #{k}\n"
end
result << "\n\n"
result << "valid beaker-hostgenerator architectures:\n"
result << " 32 => 32-bit OS\n"
result << " 64 => 64-bit OS\n"
result << " 6432 => 64-bit OS with 32-bit Puppet (Windows Only)\n"
result << " POWER => power or powerpc OS (AIX, Huawei, Redhat, SLES and Ubuntu only)\n"
result << " SPARC => sparc OS (Solaris only)\n"
result << " S390X => s390x OS (RedHat and SLES only)\n"
result << "\n\n"
result << "built-in beaker-hostgenerator host roles:\n"
BeakerHostGenerator::Roles::ROLES.each do |k,v|
result << " #{k} => #{v}\n"
end
result << "\n\n"
result << "built-in beaker-hostgenerator hypervisors:\n"
BeakerHostGenerator::Hypervisor.builtin_hypervisors().keys.each do |k|
result << " #{k}\n"
end
result
end
end
end
|