summaryrefslogtreecommitdiff
path: root/extensions/virtualbox-ssh.write
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/virtualbox-ssh.write')
-rwxr-xr-xextensions/virtualbox-ssh.write42
1 files changed, 23 insertions, 19 deletions
diff --git a/extensions/virtualbox-ssh.write b/extensions/virtualbox-ssh.write
index 774f2b4f..95643a4a 100755
--- a/extensions/virtualbox-ssh.write
+++ b/extensions/virtualbox-ssh.write
@@ -24,22 +24,23 @@ See file virtualbox-ssh.write.help for documentation
'''
-import cliapp
import os
import re
+import subprocess
import sys
-import time
import tempfile
+import time
import urlparse
-import morphlib.writeexts
+import writeexts
-class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
+class VirtualBoxPlusSshWriteExtension(writeexts.WriteExtension):
def process_args(self, args):
if len(args) != 2:
- raise cliapp.AppException('Wrong number of command line args')
+ raise writeexts.ExtensionError(
+ 'Wrong number of command line args')
temp_root, location = args
ssh_host, vm_name, vdi_path = self.parse_location(location)
@@ -59,7 +60,7 @@ class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
except BaseException:
sys.stderr.write('Error deploying to VirtualBox')
os.remove(raw_disk)
- cliapp.ssh_runcmd(ssh_host, ['rm', '-f', vdi_path])
+ writeexts.ssh_runcmd(ssh_host, ['rm', '-f', vdi_path])
raise
else:
os.remove(raw_disk)
@@ -72,11 +73,12 @@ class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
x = urlparse.urlparse(location)
if x.scheme != 'vbox+ssh':
- raise cliapp.AppException(
+ raise writeexts.ExtensionError(
'URL schema must be vbox+ssh in %s' % location)
m = re.match('^/(?P<guest>[^/]+)(?P<path>/.+)$', x.path)
if not m:
- raise cliapp.AppException('Cannot parse location %s' % location)
+ raise writeexts.ExtensionError(
+ 'Cannot parse location %s' % location)
return x.netloc, m.group('guest'), m.group('path')
def transfer_and_convert_to_vdi(self, raw_disk, ssh_host, vdi_path):
@@ -85,17 +87,18 @@ class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
self.status(msg='Transfer disk and convert to VDI')
st = os.lstat(raw_disk)
- xfer_hole_path = morphlib.util.get_data_path('xfer-hole')
- recv_hole = morphlib.util.get_data('recv-hole')
+ # TODO: Something!
+ xfer_hole_path = writeexts.get_data_path('xfer-hole')
+ recv_hole = writeexts.get_data('recv-hole')
ssh_remote_cmd = [
'sh', '-c', recv_hole,
'dummy-argv0', 'vbox', vdi_path, str(st.st_size),
]
- cliapp.runcmd(
+ subprocess.check_call(
['python', xfer_hole_path, raw_disk],
- ['ssh', ssh_host] + map(cliapp.shell_quote, ssh_remote_cmd),
+ ['ssh', ssh_host] + map(writeexts.shell_quote, ssh_remote_cmd),
stdout=None, stderr=None)
def virtualbox_version(self, ssh_host):
@@ -107,7 +110,8 @@ class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
# tuple is more reliable than a string and more convenient than
# comparing against the major, minor and patch numbers directly
self.status(msg='Checking version of remote VirtualBox')
- build_id = cliapp.ssh_runcmd(ssh_host, ['VBoxManage', '--version'])
+ build_id = writeexts.ssh_runcmd(ssh_host,
+ ['VBoxManage', '--version'])
version_string = re.match(r"^([0-9\.]+).*$", build_id.strip()).group(1)
return tuple(int(s or '0') for s in version_string.split('.'))
@@ -163,17 +167,17 @@ class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
for command in commands:
argv = ['VBoxManage'] + command
- cliapp.ssh_runcmd(ssh_host, argv)
+ writeexts.ssh_runcmd(ssh_host, argv)
def get_host_interface(self, ssh_host):
host_ipaddr = os.environ.get('HOST_IPADDR')
netmask = os.environ.get('NETMASK')
if host_ipaddr is None:
- raise cliapp.AppException('HOST_IPADDR was not given')
+ raise writeexts.ExtensionError('HOST_IPADDR was not given')
if netmask is None:
- raise cliapp.AppException('NETMASK was not given')
+ raise writeexts.ExtensionError('NETMASK was not given')
# 'VBoxManage list hostonlyifs' retrieves a list with the hostonly
# interfaces on the host. For each interface, the following lines
@@ -187,7 +191,7 @@ class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
# The following command tries to retrieve the hostonly interface
# name (e.g. vboxnet0) associated with the given ip address.
iface = None
- lines = cliapp.ssh_runcmd(ssh_host,
+ lines = writeexts.ssh_runcmd(ssh_host,
['VBoxManage', 'list', 'hostonlyifs']).splitlines()
for i, v in enumerate(lines):
if host_ipaddr in v:
@@ -195,12 +199,12 @@ class VirtualBoxPlusSshWriteExtension(morphlib.writeexts.WriteExtension):
break
if iface is None:
- iface = cliapp.ssh_runcmd(ssh_host,
+ iface = writeexts.ssh_runcmd(ssh_host,
['VBoxManage', 'hostonlyif', 'create'])
# 'VBoxManage hostonlyif create' shows the name of the
# created hostonly interface inside single quotes
iface = iface[iface.find("'") + 1 : iface.rfind("'")]
- cliapp.ssh_runcmd(ssh_host,
+ writeexts.ssh_runcmd(ssh_host,
['VBoxManage', 'hostonlyif',
'ipconfig', iface,
'--ip', host_ipaddr,