summaryrefslogtreecommitdiff
path: root/extensions/pxeboot.write
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/pxeboot.write')
-rw-r--r--extensions/pxeboot.write57
1 files changed, 29 insertions, 28 deletions
diff --git a/extensions/pxeboot.write b/extensions/pxeboot.write
index 3a12ebcc..20e4f6bd 100644
--- a/extensions/pxeboot.write
+++ b/extensions/pxeboot.write
@@ -19,10 +19,7 @@ import tempfile
import textwrap
import urlparse
-import cliapp
-
-import morphlib
-
+import writeexts
def _int_to_quad_dot(i):
return '.'.join((
@@ -143,7 +140,7 @@ def grouper(iterable, n, fillvalue=None):
return itertools.izip_longest(*args, fillvalue=fillvalue)
-class PXEBoot(morphlib.writeexts.WriteExtension):
+class PXEBoot(writeexts.WriteExtension):
@contextlib.contextmanager
def _vlan(self, interface, vlan):
viface = '%s.%s' % (interface, vlan)
@@ -224,12 +221,13 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
@contextlib.contextmanager
def _remote_tempdir(self, hostname, template):
persist = os.environ.get('PXE_INSTALLER') in ('no', 'False')
- td = cliapp.ssh_runcmd(hostname, ['mktemp', '-d', template]).strip()
+ td = writeexts.ssh_runcmd(
+ hostname, ['mktemp', '-d', template]).strip()
try:
yield td
finally:
if not persist:
- cliapp.ssh_runcmd(hostname, ['find', td, '-delete'])
+ writeexts.ssh_runcmd(hostname, ['find', td, '-delete'])
def _serve_tftpd(self, sock, host, port, interface, tftproot):
self.settings.progname = 'tftp server'
@@ -333,26 +331,27 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
def _remote_copy(self, hostname, src, dst):
persist = os.environ.get('PXE_INSTALLER') in ('no', 'False')
with open(src, 'r') as f:
- cliapp.ssh_runcmd(hostname,
- ['install', '-D', '-m644', '/proc/self/fd/0',
- dst], stdin=f, stdout=None, stderr=None)
+ writeexts.ssh_runcmd(hostname,
+ ['install', '-D', '-m644',
+ '/proc/self/fd/0', dst],
+ stdin=f, stdout=None, stderr=None)
try:
yield
finally:
if not persist:
- cliapp.ssh_runcmd(hostname, ['rm', dst])
+ writeexts.ssh_runcmd(hostname, ['rm', dst])
@contextlib.contextmanager
def _remote_symlink(self, hostname, src, dst):
persist = os.environ.get('PXE_INSTALLER') in ('no', 'False')
- cliapp.ssh_runcmd(hostname,
- ['ln', '-s', '-f', src, dst],
- stdin=None, stdout=None, stderr=None)
+ writeexts.ssh_runcmd(hostname,
+ ['ln', '-s', '-f', src, dst],
+ stdin=None, stdout=None, stderr=None)
try:
yield
finally:
if not persist:
- cliapp.ssh_runcmd(hostname, ['rm', '-f', dst])
+ writeexts.ssh_runcmd(hostname, ['rm', '-f', dst])
@contextlib.contextmanager
def remote_kernel(self, rootfs, tftp_url, macaddr):
@@ -361,7 +360,7 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
if os.path.exists(kernel_path):
break
else:
- raise cliapp.AppException('Failed to locate kernel')
+ raise writeexts.ExtensionError('Failed to locate kernel')
url = urlparse.urlsplit(tftp_url)
basename = '{}-kernel'.format(_normalise_macaddr(macaddr))
target_path = os.path.join(url.path, basename)
@@ -376,7 +375,8 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
yield
fdt_abs_path = os.path.join(rootfs, fdt_rel_path)
if not fdt_abs_path:
- raise cliapp.AppException('Failed to locate Flattened Device Tree')
+ raise writeexts.ExtensionError(
+ 'Failed to locate Flattened Device Tree')
url = urlparse.urlsplit(tftp_url)
basename = '{}-fdt'.format(_normalise_macaddr(macaddr))
target_path = os.path.join(url.path, basename)
@@ -389,14 +389,14 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
nfsroot = target_ip + ':' + rootfs
self.status(msg='Exporting %(nfsroot)s as local nfsroot',
nfsroot=nfsroot)
- cliapp.runcmd(['exportfs', '-o', 'ro,insecure,no_root_squash',
- nfsroot])
+ subprocess.check_call(['exportfs', '-o', 'ro,insecure,no_root_squash',
+ nfsroot])
try:
yield
finally:
self.status(msg='Removing %(nfsroot)s from local nfsroots',
nfsroot=nfsroot)
- cliapp.runcmd(['exportfs', '-u', nfsroot])
+ subprocess.check_call(['exportfs', '-u', nfsroot])
@contextlib.contextmanager
def remote_nfsroot(self, rootfs, rsync_url, macaddr):
@@ -407,9 +407,10 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
as tempdir:
nfsroot = urlparse.urlunsplit((url.scheme, url.netloc, tempdir,
url.query, url.fragment))
- cliapp.runcmd(['rsync', '-asSPH', '--delete', rootfs, nfsroot],
- stdin=None, stdout=open(os.devnull, 'w'),
- stderr=None)
+ subprocess.check_call(['rsync', '-asSPH', '--delete',
+ rootfs, nfsroot],
+ stdin=None, stdout=open(os.devnull, 'w'),
+ stderr=None)
yield os.path.join(os.path.basename(tempdir),
os.path.basename(rootfs))
@@ -517,8 +518,8 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
def get_interface_ip(self, interface):
ip_addresses = []
- info = cliapp.runcmd(['ip', '-o', '-f', 'inet',
- 'addr', 'show', interface]).rstrip('\n')
+ info = subprocess.check_output(['ip', '-o', '-f', 'inet', 'addr',
+ 'show', interface]).rstrip('\n')
if info:
tokens = collections.deque(info.split()[1:])
ifname = tokens.popleft()
@@ -535,8 +536,8 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
else:
continue
if not ip_addresses:
- raise cliapp.AppException('Interface %s has no addresses'
- % interface)
+ raise writeexts.ExtensionError('Interface %s has no addresses'
+ % interface)
if len(ip_addresses) > 1:
warnings.warn('Interface %s has multiple addresses, '
'using first (%s)' % (interface, ip_addresses[0]))
@@ -750,6 +751,6 @@ class PXEBoot(morphlib.writeexts.WriteExtension):
self.wait_for_target_to_install()
self.ipmi_reboot_target()
else:
- cliapp.AppException('Invalid PXEBOOT_MODE: %s' % mode)
+ writeexts.ExtensionError('Invalid PXEBOOT_MODE: %s' % mode)
PXEBoot().run()