Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 179 lines (159 sloc) 6.044 kB
#!/usr/bin/env python
# Copyright (C) 2010,2011 Chris Lalancette <clalance@redhat.com>
# Copyright (C) 2012 Chris Lalancette <clalancette@gmail.com>
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation;
# version 2.1 of the License.
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import sys
import getopt
import os
import logging
import time
import oz.TDL
import oz.GuestFactory
import oz.ozutil
def usage():
print("Usage: oz-install [OPTIONS] <tdl>")
print(" OPTIONS:")
print(" -a <auto>\tUse the guest configuration tool from <auto> instead")
print("\t\tof using the hard-coded one. This is useful if you want to pass")
print("\t\ta custom kickstart/preseed/sif/etc for installation")
print(" -c <config>\tGet config from <config> (default is /etc/oz/oz.cfg)")
print(" -d <level>\tTurn up logging level. The levels are:")
print("\t\t\t0 - errors only (this is the default)")
print("\t\t\t1 - errors and warnings")
print("\t\t\t2 - errors, warnings, and information")
print("\t\t\t3 - all messages")
print("\t\t\t4 - all messages, prepended with the level and classname")
print(" -f\t\tForce download of installation media even if already cached")
print(" -g\t\tGenerate the ICICLE after installation")
print(" -h\t\tPrint this help message")
print(" -i <icicle>\tWrite the ICICLE to <icicle> (only valid with -g)")
print(" -p\t\tCleanup old guests with the same name before installation")
print(" -s <disk>\tWrite the output to <disk> (default is the TDL name tag)")
print(" -t <timeout>\tWait <timeout> seconds for installation, rather than the default")
print(" -u\t\tAfter installation, do the customization")
print(" -x <xmlfile>\tWrite libvirt XML to <xmlfile>")
print(" Currently supported architectures are:")
print(" i386, x86_64")
print(" Currently supported distros are:")
oz.GuestFactory.distrolist()
sys.exit(1)
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], 'a:c:d:fghi:ps:t:ux:',
['auto', 'config', 'debug', 'force-download',
'generate-icicle', 'help', 'icicle',
'cleanup', 'disk', 'timeout', 'customize',
'xmlfile'])
except getopt.GetoptError as err:
print(str(err))
usage()
loglevel = logging.ERROR
logformat = "%(message)s"
force_download = False
config_file = None
generate_icicle = False
filename = None
customize = False
cleanup = False
auto = None
timeout = None
icicle_file = None
output_disk = None
for o, a in opts:
if o in ("-a", "--auto"):
auto = a
elif o in ("-c", "--config"):
config_file = a
elif o in ("-d", "--debug"):
try:
d_int = int(a)
except ValueError:
usage()
if d_int == 0:
loglevel = logging.ERROR
elif d_int == 1:
loglevel = logging.WARNING
elif d_int == 2:
loglevel = logging.INFO
elif d_int == 3:
loglevel = logging.DEBUG
elif d_int >= 4:
loglevel = logging.DEBUG
logformat = logging.BASIC_FORMAT
elif o in ("-f", "--force-download"):
force_download = True
elif o in ("-g", "--generate-icicle"):
generate_icicle = True
elif o in ("-h", "--help"):
usage()
elif o in ("-i", "--icicle"):
icicle_file = a
elif o in ("-p", "--cleanup"):
cleanup = True
elif o in ("-s", "--disk"):
output_disk = a
elif o in ("-t", "--timeout"):
timeout = int(a)
elif o in ("-u", "--customize"):
customize = True
elif o in ("-x", "--xmlfile"):
filename = a
else:
assert False, "unhandled option"
if len(args) != 1:
usage()
if not generate_icicle and icicle_file is not None:
print("The -i option must be combined with the -g option")
sys.exit(3)
try:
config = oz.ozutil.parse_config(config_file)
logging.basicConfig(level=loglevel, format=logformat)
tdl = oz.TDL.TDL(open(args[0], 'r').read())
guest = oz.GuestFactory.guest_factory(tdl, config, auto, output_disk)
if cleanup:
guest.cleanup_old_guest()
else:
guest.check_for_guest_conflict()
try:
guest.generate_install_media(force_download)
try:
guest.generate_diskimage(size=guest.disksize, force=force_download)
libvirt_xml = guest.install(timeout, force_download)
except:
guest.cleanup_old_guest()
raise
finally:
guest.cleanup_install()
if customize and generate_icicle:
print(guest.customize_and_generate_icicle(libvirt_xml))
elif customize:
guest.customize(libvirt_xml)
elif generate_icicle:
icicle_xml = guest.generate_icicle(libvirt_xml)
if icicle_file is None:
print(icicle_xml)
else:
open(icicle_file, 'w').write(icicle_xml)
print("ICICLE XML was written to " + icicle_file)
if filename is None:
filename = guest.name + time.strftime("%b_%d_%Y-%H:%M:%S")
open(filename, 'w').write(libvirt_xml)
print("Libvirt XML was written to " + filename)
except Exception as exc:
if loglevel > logging.DEBUG:
print("")
print("ERROR: %s" % (str(exc)))
print("")
print("(use -d3 to get the full backtrace)")
print("")
else:
raise
Jump to Line
Something went wrong with that request. Please try again.