From 4b73931351dea14bfba5ca20ac51600fb2748db2 Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Sun, 15 Jul 2012 11:54:39 -0400 Subject: [PATCH] misc code cleanup, don't pass parameters to the connection object we can already get from Runner --- lib/ansible/runner/__init__.py | 63 ++++++++++--------- lib/ansible/runner/connection/__init__.py | 24 ++----- lib/ansible/runner/connection/local.py | 2 +- lib/ansible/runner/connection/paramiko_ssh.py | 2 +- lib/ansible/runner/connection/ssh.py | 2 +- 5 files changed, 43 insertions(+), 50 deletions(-) diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index d2e784ccfe..ba932e61c3 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -134,10 +134,16 @@ class Runner(object): inventory : inventory object, if host_list is not provided """ + # -- handle various parameters that need checking/mangling + if setup_cache is None: setup_cache = collections.defaultdict(dict) + if type(module_args) not in [str, unicode, dict]: + raise errors.AnsibleError("module_args must be a string or dict: %s" % self.module_args) + if basedir is None: basedir = os.getcwd() + self.basedir = basedir if callbacks is None: callbacks = ans_callbacks.DefaultRunnerCallbacks() @@ -145,9 +151,12 @@ class Runner(object): self.generated_jid = str(random.randint(0, 999999999999)) - self.sudo_user = sudo_user self.transport = transport - self.connector = connection.Connection(self, self.transport, self.sudo_user) + + if self.transport == 'ssh' and remote_pass: + raise errors.AnsibleError("SSH transport does not support passwords, only keys or agents") + if self.transport == 'local': + self.remote_user = pwd.getpwuid(os.geteuid())[0] if inventory is None: self.inventory = ansible.inventory.Inventory(host_list) @@ -156,35 +165,31 @@ class Runner(object): if module_vars is None: module_vars = {} - - self.setup_cache = setup_cache - self.conditional = conditional - self.module_path = module_path - self.module_name = module_name - self.forks = int(forks) - self.pattern = pattern - self.module_args = module_args - self.module_vars = module_vars - self.timeout = timeout - self.verbose = verbose - self.remote_user = remote_user - self.remote_pass = remote_pass - self.remote_port = remote_port + + # -- save constructor parameters for later use + + self.sudo_user = sudo_user + self.connector = connection.Connection(self) + self.setup_cache = setup_cache + self.conditional = conditional + self.module_path = module_path + self.module_name = module_name + self.forks = int(forks) + self.pattern = pattern + self.module_args = module_args + self.module_vars = module_vars + self.timeout = timeout + self.verbose = verbose + self.remote_user = remote_user + self.remote_pass = remote_pass + self.remote_port = remote_port self.private_key_file = private_key_file - self.background = background - self.basedir = basedir - self.sudo = sudo - self.sudo_pass = sudo_pass - self.is_playbook = is_playbook - - if self.transport == 'local': - self.remote_user = pwd.getpwuid(os.geteuid())[0] - - if type(self.module_args) not in [str, unicode, dict]: - raise errors.AnsibleError("module_args must be a string or dict: %s" % self.module_args) - if self.transport == 'ssh' and self.remote_pass: - raise errors.AnsibleError("SSH transport does not support passwords, only keys or agents") + self.background = background + self.sudo = sudo + self.sudo_pass = sudo_pass + self.is_playbook = is_playbook + # ensure we're using unique tmp paths random.seed() # ***************************************************** diff --git a/lib/ansible/runner/connection/__init__.py b/lib/ansible/runner/connection/__init__.py index 5a6ee7938f..180ac7f7d4 100644 --- a/lib/ansible/runner/connection/__init__.py +++ b/lib/ansible/runner/connection/__init__.py @@ -18,17 +18,6 @@ ################################################ -import warnings -import traceback -import os -import time -import re -import shutil -import subprocess -import pipes -import socket -import random - import local import paramiko_ssh import ssh @@ -36,19 +25,18 @@ import ssh class Connection(object): ''' Handles abstract connections to remote hosts ''' - def __init__(self, runner, transport,sudo_user): + def __init__(self, runner): self.runner = runner - self.transport = transport - self.sudo_user = sudo_user def connect(self, host, port=None): conn = None - if self.transport == 'local': + transport = self.runner.transport + if transport == 'local': conn = local.LocalConnection(self.runner, host) - elif self.transport == 'paramiko': + elif transport == 'paramiko': conn = paramiko_ssh.ParamikoConnection(self.runner, host, port) - elif self.transport == 'ssh': - conn = ssh.SSHConnection(self.runner, host, port) + elif transport == 'ssh': + conn = SSHConnection(self.runner, host, port) if conn is None: raise Exception("unsupported connection type") return conn.connect() diff --git a/lib/ansible/runner/connection/local.py b/lib/ansible/runner/connection/local.py index b126118512..ef736787ed 100644 --- a/lib/ansible/runner/connection/local.py +++ b/lib/ansible/runner/connection/local.py @@ -43,7 +43,7 @@ class LocalConnection(object): return self - def exec_command(self, cmd, tmp_path,sudo_user,sudoable=False): + def exec_command(self, cmd, tmp_path, sudo_user, sudoable=False): ''' run a command on the local host ''' if self.runner.sudo and sudoable: cmd = "sudo -s %s" % cmd diff --git a/lib/ansible/runner/connection/paramiko_ssh.py b/lib/ansible/runner/connection/paramiko_ssh.py index b8bbe95e8b..9ef979cd6c 100644 --- a/lib/ansible/runner/connection/paramiko_ssh.py +++ b/lib/ansible/runner/connection/paramiko_ssh.py @@ -92,7 +92,7 @@ class ParamikoConnection(object): self.ssh = self._get_conn() return self - def exec_command(self, cmd, tmp_path,sudo_user,sudoable=False): + def exec_command(self, cmd, tmp_path, sudo_user, sudoable=False): ''' run a command on the remote host ''' bufsize = 4096 diff --git a/lib/ansible/runner/connection/ssh.py b/lib/ansible/runner/connection/ssh.py index 2d0f15e8bf..1ae5a7e4aa 100644 --- a/lib/ansible/runner/connection/ssh.py +++ b/lib/ansible/runner/connection/ssh.py @@ -56,7 +56,7 @@ class SSHConnection(object): return self - def exec_command(self, cmd, tmp_path,sudo_user,sudoable=False): + def exec_command(self, cmd, tmp_path, sudo_user,sudoable=False): ''' run a command on the remote host ''' ssh_cmd = ["ssh", "-tt", "-q"] + self.common_args + [self.host]