def handle(self, *args, **options):
        hostname = options.get('hostname')
        if not hostname:
            raise CommandError("--hostname is a required argument")

        try:
            path = tempfile.mkdtemp(prefix='awx_isolated_ssh',
                                    dir=settings.AWX_PROOT_BASE_PATH)
            args = [
                'ansible', 'all', '-i', '{},'.format(hostname), '-u',
                settings.AWX_ISOLATED_USERNAME, '-T5', '-m', 'shell', '-a',
                'ansible-runner --version', '-vvv'
            ]
            if all([
                    getattr(settings, 'AWX_ISOLATED_KEY_GENERATION', False) is
                    True,
                    getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', None)
            ]):
                ssh_key_path = os.path.join(path, '.isolated')
                ssh_auth_sock = os.path.join(path, 'ssh_auth.sock')
                run.open_fifo_write(ssh_key_path,
                                    settings.AWX_ISOLATED_PRIVATE_KEY)
                args = run.wrap_args_with_ssh_agent(args, ssh_key_path,
                                                    ssh_auth_sock)
            try:
                print(' '.join(args))
                subprocess.check_call(args)
            except subprocess.CalledProcessError as e:
                sys.exit(e.returncode)
        finally:
            shutil.rmtree(path)
Example #2
0
 def run_pexpect(cls, pexpect_args, *args, **kw):
     isolated_ssh_path = None
     try:
         if all([
             getattr(settings, 'AWX_ISOLATED_KEY_GENERATION', False) is True,
             getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', None)
         ]):
             isolated_ssh_path = tempfile.mkdtemp(prefix='awx_isolated', dir=settings.AWX_PROOT_BASE_PATH)
             os.chmod(isolated_ssh_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
             isolated_key = os.path.join(isolated_ssh_path, '.isolated')
             ssh_sock = os.path.join(isolated_ssh_path, '.isolated_ssh_auth.sock')
             run.open_fifo_write(isolated_key, settings.AWX_ISOLATED_PRIVATE_KEY)
             pexpect_args = run.wrap_args_with_ssh_agent(pexpect_args, isolated_key, ssh_sock, silence_ssh_add=True)
         return run.run_pexpect(pexpect_args, *args, **kw)
     finally:
         if isolated_ssh_path:
             shutil.rmtree(isolated_ssh_path)