diff options
author | Szilard Cserey <szilard.cserey@ericsson.com> | 2015-04-14 15:47:45 +0200 |
---|---|---|
committer | Szilard Cserey <szilard.cserey@ericsson.com> | 2015-04-28 10:01:04 +0200 |
commit | 9c2b6848566a0b80bb44f27cca155a240d69f061 (patch) | |
tree | 5081686f09c3c4662f6b807a196a28cb4acab67a /fuel/deploy/cloud_deploy/ssh_client.py | |
parent | e2b2d46756213fde3bca42a49b04e6a1e8792498 (diff) |
Automatic Deployment
- node discovery
- refactoring to support multiple shelves
- configure nodes and interfaces
- provisioning
- deployment
- extending with autodeployment scripts from libvirt prototype
JIRA: [BGS-2] Create Fuel deployment scrip
Signed-off-by: Szilard Cserey <szilard.cserey@ericsson.com>
Change-Id: Ic48f93594914d5bef6c9de34d87434c7cd567198
Diffstat (limited to 'fuel/deploy/cloud_deploy/ssh_client.py')
-rw-r--r-- | fuel/deploy/cloud_deploy/ssh_client.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/fuel/deploy/cloud_deploy/ssh_client.py b/fuel/deploy/cloud_deploy/ssh_client.py new file mode 100644 index 0000000..b9aad6c --- /dev/null +++ b/fuel/deploy/cloud_deploy/ssh_client.py @@ -0,0 +1,56 @@ +import paramiko +from cloud import common + +TIMEOUT = 600 +LOG = common.LOG + +class SSHClient(object): + + def __init__(self, host, username, password): + self.host = host + self.username = username + self.password = password + self.client = None + + def open(self, timeout=TIMEOUT): + self.client = paramiko.SSHClient() + self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + self.client.connect(self.host, username=self.username, + password=self.password, timeout=timeout) + + def close(self): + if self.client is not None: + self.client.close() + self.client = None + + def execute(self, command, sudo=False, timeout=TIMEOUT): + if sudo and self.username != 'root': + command = "sudo -S -p '' %s" % command + stdin, stdout, stderr = self.client.exec_command(command, + timeout=timeout) + if sudo: + stdin.write(self.password + '\n') + stdin.flush() + return ''.join(''.join(stderr.readlines()) + + ''.join(stdout.readlines())) + + def run(self, command): + transport = self.client.get_transport() + transport.set_keepalive(1) + chan = transport.open_session() + chan.exec_command(command) + + while not chan.exit_status_ready(): + if chan.recv_ready(): + data = chan.recv(1024) + while data: + print data + data = chan.recv(1024) + + if chan.recv_stderr_ready(): + error_buff = chan.recv_stderr(1024) + while error_buff: + print error_buff + error_buff = chan.recv_stderr(1024) + exit_status = chan.recv_exit_status() + LOG.debug('Exit status %s' % exit_status)
\ No newline at end of file |