summaryrefslogtreecommitdiff
path: root/kpov_judge/create_disk_images.py
diff options
context:
space:
mode:
authorgasperfele@fri1.uni-lj.si <gasperfele@fri1.uni-lj.si@5cf9fbd1-b2bc-434c-b4b7-e852f4f63414>2015-01-29 15:43:14 +0000
committergasperfele@fri1.uni-lj.si <gasperfele@fri1.uni-lj.si@5cf9fbd1-b2bc-434c-b4b7-e852f4f63414>2015-01-29 15:43:14 +0000
commitbb25ec3904bfc5063555a418b3c6d36d162d764b (patch)
treeed775237061a7e917990f0374335677e9cca0629 /kpov_judge/create_disk_images.py
parent89e68727b38147fa7e5d42f67791557a3ef7121b (diff)
Added most of the required functions for faking guestfs over ssh
git-svn-id: https://svn.lusy.fri.uni-lj.si/kpov-public-svn/kpov-public@250 5cf9fbd1-b2bc-434c-b4b7-e852f4f63414
Diffstat (limited to 'kpov_judge/create_disk_images.py')
-rwxr-xr-xkpov_judge/create_disk_images.py140
1 files changed, 95 insertions, 45 deletions
diff --git a/kpov_judge/create_disk_images.py b/kpov_judge/create_disk_images.py
index d36ff90..1f5f643 100755
--- a/kpov_judge/create_disk_images.py
+++ b/kpov_judge/create_disk_images.py
@@ -15,56 +15,103 @@ import pyssh
import paramiko
class SSHGuestFs():
- def __init__(hostname, username, password):
-s = pxssh.pxssh()
- hostname = raw_input('hostname: ')
- username = raw_input('username: ')
- password = getpass.getpass('password: ')
- s.login (hostname, username, password)
- s.sendline ('uptime')
- self.conn = pxssh.open(hostname, username, password)
- def chmod(self, mode, path)
- self.conn.
+ def __init__(hostname, path, username, password):
+ return_results = {}
+ client = paramiko.SSHClient()
+ client.load_system_host_keys()
+ client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ client.connect(hostname, username=username, password=password)
+ self.conn = client
+ self.mountdir = path
+ def chmod(self, mode, path):
+ self.conn.exec_command('chmod {} "{}"'.format(mode, os.path.join(self.mountdir, path)))
def chown(self, owner, group, path)
- pass
- def command(self, arguments)
- pass
- def cp(self, src, dest)
- pass
- def cp_a(self, src, dest)
- pass
- def cp_r(self, src, dest)
- pass
- def dd(self, src, dest)
- pass
- def df(self)
- pass
- def download(self)
- pass
+ self.conn.exec_command('chown {}.{} "{}"'.format(owner, group, os.path.join(self.mountdir, path))
+ def command(self, arguments):
+ self.conn.exec_command(arguments)
+ def cp(self, src, dest):
+ src = os.path.join(self.mountdir, src)
+ dst = os.path.join(self.mountdir, dst)
+ self.conn.exec_command('cp "{}" "{}"'.format(src, dest))
+ def cp_a(self, src, dest):
+ src = os.path.join(self.mountdir, src)
+ dst = os.path.join(self.mountdir, dst)
+ self.conn.exec_command('cp -a "{}" "{}"'.format(src, dest))
+ def cp_r(self, src, dest):
+ src = os.path.join(self.mountdir, src)
+ dst = os.path.join(self.mountdir, dst)
+ self.conn.exec_command('cp -r "{}" "{}"'.format(src, dest))
+ def dd(self, src, dest):
+ src = os.path.join(self.mountdir, src)
+ dst = os.path.join(self.mountdir, dst)
+ self.conn.exec_command('dd if="{}" of="{}"'.format(src, dest))
+ def df(self):
+ stdin, stdout, stderr = self.conn.exec_command('df')
+ return stdin.read()
+ def download(self, remotefilename, filename):
+ path = os.path.join(self.mountdir, remotefilename)
+ stdin, stdout, stderr = self.conn.exec_command('dd if="{}"'.format(path))
+ with open(filename, 'w') as f:
+ while data = stdin.read(4096):
+ f.write(data)
+ def download_offset (self, remotefilename, filename, offset, size):
+ path = os.path.join(self.mountdir, remotefilename)
+ stdin, stdout, stderr = self.conn.exec_command('dd bs=1 skip={} count={} if="{}"'.format(
+ offset, size ,path))
+ with open(filename, 'w') as f:
+ while data = stdin.read(4096):
+ f.write(data)
def du(self, path)
- pass
+ path = os.path.join(self.mountdir, path)
+ stdin, stdout, stderr = self.conn.exec_command('du "{}"'.format(path))
+ return stdin.read()
def equal(self, file1, file2)
+ src = os.path.join(self.mountdir, src)
+ dst = os.path.join(self.mountdir, dst)
pass
def file(self, path)
- pass
+ path = os.path.join(self.mountdir, path)
+ stdin, stdout, stderr = self.conn.exec_command('file "{}"'.format(path))
+ return stdin.read()
def getxattrs(self, path)
pass
+ #path = os.path.join(self.mountdir, path)
+ #stdin, stdout, stderr = self.conn.exec_command('du "{}"'.format(path))
+ #return stdin.read()
def mv (self, src, dest):
- pass
+ src = os.path.join(self.mountdir, src)
+ dst = os.path.join(self.mountdir, dst)
+ self.conn.exec_command('mv "{}" "{}"'.format(src, dest))
+ def mkdir (self, path):
+ path = os.path.join(self.mountdir, path)
+ sftp_client = self.conn.open_sftp()
+ sftp_client.mkdir(path)
def read_file (self, path):
- pass
+ path = os.path.join(self.mountdir, path)
+ sftp_client = self.conn.open_sftp()
+ f = sftp_client.file(path, mode='r', bufsize=-1)
+ s = f.read()
+ f.close()
+ return s
def readdir (self, dir):
- pass
+ path = os.path.join(self.mountdir, path)
+ sftp_client = self.conn.open_sftp()
+ return sftp_client.listdir(path)
def readlink (self, path):
- pass
+ path = os.path.join(self.mountdir, path)
+ stdin, stdout, stderr = self.conn.exec_command('readlink "{}"'.format(path))
+ return stdin.read()
def rename (self, oldpath, newpath):
- pass
+ return self.mv(oldpath, newpath)
def rm (self, path):
- pass
+ path = os.path.join(self.mountdir, path)
+ stdin, stdout, stderr = self.conn.exec_command('rm "{}"'.format(path))
def rm_rf (self, path):
- pass
+ path = os.path.join(self.mountdir, path)
+ stdin, stdout, stderr = self.conn.exec_command('rm -rf "{}"'.format(path))
def rmdir (self, path):
- pass
+ path = os.path.join(self.mountdir, path)
+ stdin, stdout, stderr = self.conn.exec_command('rmdir "{}"'.format(path))
def setxattr (self, xattr, val, vallen, path):
pass
def write (self, path, content):
@@ -74,8 +121,11 @@ s = pxssh.pxssh()
See also "g.write_append".
"""
- self._check_not_closed ()
- r = libguestfsmod.write (self._o, path, content)
+ path = os.path.join(self.mountdir, path)
+ sftp_client = self.conn.open_sftp()
+ f = sftp_client.file(path, mode='w', bufsize=-1)
+ f.write(content)
+ f.close()
return r
def write_append (self, path, content):
@@ -84,13 +134,11 @@ s = pxssh.pxssh()
See also "g.write".
"""
- self._check_not_closed ()
- r = libguestfsmod.write_append (self._o, path, content)
- return r
-
- def write_file (self, path, content, size):
-
-# The external cmp(1) program is used for the comparison.
+ path = os.path.join(self.mountdir, path)
+ sftp_client = self.conn.open_sftp()
+ f = sftp_client.file(path, mode='a', bufsize=-1)
+ f.write(content)
+ f.close()
def get_prepare_disks(db, task_id):
prepare_disks_source = db.prepare_disks.find_one({'task_id':task_id})['source']
@@ -134,7 +182,9 @@ def publish_snapshot(d):
else:
url = settings.STUDENT_DISK_URL + d
return url
-
+
+
+
if __name__ == '__main__':
if len(sys.argv) != 1:
print "Usage: {0}"