Source code for nuka.hosts.vagrant

# -*- coding: utf-8 -*-
import subprocess
import sys

from nuka.hosts.base import Host
import nuka


[docs]class Vagrant(Host): """A host configured using ``vagrant ssh-config``""" def __init__(self, **kwargs): kwargs['hostname'] = 'default' super().__init__(**kwargs) self.port = None self.config_file = '/tmp/nuka_vagrant' try: subprocess.check_call( 'vagrant ssh-config > ' + self.config_file, shell=True) except subprocess.CalledProcessError: print('VM is down. Please run vagrant up...') sys.exit(1) def wraps_command_line(self, cmd, **kwargs): ssh_user = kwargs.get('switch_ssh_user') if ssh_user is None: # we use the main user account switch_user = kwargs.get('switch_user') or 'root' if switch_user != 'root': if switch_user != self.vars['user']: # we have to use sudo args = (switch_user, cmd) if self.use_sudo: cmd = '{sudo} -u {0} {1}'.format(*args, **nuka.config) else: cmd = '{su} -c "{1}" {0}'.format(*args, **nuka.config) elif self.use_sudo: cmd = '{sudo} {0}'.format(cmd, **nuka.config) if ssh_user is None: ssh_user = self.vars['user'] ssh_cmd = ['ssh', '-F', self.config_file] ssh_cmd.extend(nuka.config['ssh']['options'] + ['-l', ssh_user]) if self.port: ssh_cmd.extend(['-p', self.port]) ssh_cmd.extend([self.hostname, cmd]) return ssh_cmd