diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-04-11 12:29:32 +0000 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-04-14 14:11:58 +0000 |
commit | 0328bdbf7c3d2def974ca3279fe8732f6f8fa968 (patch) | |
tree | c68abac8ca88a9ce6a21c6ad8649e78600e6e98b /kvm.check | |
parent | faa30c752633303baf53cf61de5bae42f43f6ab0 (diff) | |
download | definitions-0328bdbf7c3d2def974ca3279fe8732f6f8fa968.tar.gz |
deploy: Check SSH connection for KVM deployment before starting
Slight duplication is necessary, but it's only a few lines. We could
move the duplicated code into the base class in 'morphlib.writeexts' if
there was more duplication.
Diffstat (limited to 'kvm.check')
-rwxr-xr-x | kvm.check | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -17,11 +17,16 @@ '''Preparatory checks for Morph 'kvm' write extension''' import cliapp +import re +import urlparse import morphlib.writeexts class KvmPlusSshCheckExtension(morphlib.writeexts.WriteExtension): + + location_pattern = '^/(?P<guest>[^/]+)(?P<path>/.+)$' + def process_args(self, args): if len(args) != 1: raise cliapp.AppException('Wrong number of command line args') @@ -32,4 +37,28 @@ class KvmPlusSshCheckExtension(morphlib.writeexts.WriteExtension): 'Use the `ssh-rsync` write extension to deploy upgrades to an ' 'existing remote system.') + location = args[0] + ssh_host, vm_name, vm_path = self.check_and_parse_location(location) + + try: + cliapp.ssh_runcmd(ssh_host, ['true']) + except cliapp.AppException: + raise cliapp.AppException('Unable to SSH to %s' % ssh_host) + + def check_and_parse_location(self, location): + '''Check and parse the location argument to get relevant data.''' + + x = urlparse.urlparse(location) + + if x.scheme != 'kvm+ssh': + raise cliapp.AppException( + 'URL schema must be kvm+ssh in %s' % location) + + m = re.match(self.location_pattern, x.path) + if not m: + raise cliapp.AppException('Cannot parse location %s' % location) + + return x.netloc, m.group('guest'), m.group('path') + + KvmPlusSshCheckExtension().run() |