diff options
Diffstat (limited to 'kpov_judge/tasks/smb_nfs/task.py')
-rw-r--r-- | kpov_judge/tasks/smb_nfs/task.py | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/kpov_judge/tasks/smb_nfs/task.py b/kpov_judge/tasks/smb_nfs/task.py deleted file mode 100644 index 6d1e51d..0000000 --- a/kpov_judge/tasks/smb_nfs/task.py +++ /dev/null @@ -1,138 +0,0 @@ -# kpov_util should be imported by add_assignment.py - -# TODO: dokoncaj! -instructions = { - 'si': '''\ -<p> -Postavi dva navidezna računalnika: <em>simpleArbiterDhcp</em> in <em>FileServer</em>. - -<p> -Poskrbi, da bo imenik <code>{{NFS_MOUNT}}</code> na <em>FileServer</em> dostopen prek NFS in prek SMB kot imenik v skupni rabi <code>{{SMB_SHARENAME}}</code>. Ime strežnika SMB nastavite na <code>{{FILESERVER_NAME}}</code>. - -<p> -<em>SimpleArbiterDhcp</em> naj ima prek NFS pravico pisati po imeniku. -''', - 'en': '''\ -<p> -Set up two virtual computers: <em>simpleArbiterDhcp</em> and <em>FileServer</em>. - -<p> -Make sure that the directory <code>{{NFS_MOUNT}}</code> on <em>FileServer</em> is accessible over NFS and over SMB under the sharename <code>{{SMB_SHARENAME}}</code>. Set the SMB server name to <code>{{FILESERVER_NAME}}</code>. - -<p> -<em>SimpleArbiterDhcp</em> should have write access to <code>{{NFS_MOUNT}}</code> over NFS. -''', -} - -computers = { - 'FileServer': { - 'disks': [ - { 'name': 'student-fileserver', - }, - ], - 'network_interfaces': [{'network': 'net1'}], - 'flavor': 'm1.tiny', - 'config_drive': False - - }, - 'SimpleArbiter': { - 'disks': [ - { 'name': 'simpleArbiterDhcpGW', - }, - ], - 'network_interfaces': [{'network': 'net1'}, {'network': 'test-net'}], - 'flavor': 'm1.tiny', - 'config_drive': False - } -} - -networks = { 'net1': {'public': False}, 'test-net': {'public': True} } - -params_meta = { - 'FILESERVER_IP': {'descriptions': {'si': 'IP streznika'}, 'w': True, 'public':True, 'type': 'IP', 'generated': False}, - 'FILESERVER_NAME': {'descriptions': {'si': 'Ime streznika'}, 'w': False, 'public':True, 'type': 'hostname', 'generated': True}, - 'SMB_SHARENAME': {'descriptions': {'si': 'Ime imenika v skupni rabi prek SMB', 'en': 'SMB sharename'}, 'w': False, 'public':True, 'type': 'filename', 'generated': True}, - 'NFS_MOUNT': {'descriptions': {'si': 'Imenik, dostopen prek NFS'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True}, - 'SHARED_FILENAME': {'descriptions': {'si': 'Iskana datoteka'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True}, - 'SHARED_CONTENT': {'descriptions': {'si': 'Vsebina iskane datoteke'}, 'w': False, 'public': False, 'type': 'short', 'generated': True}, - 'SHARED_FILE_SEED': {'descriptions': {'si': 'Dodatni podatek za testiranje'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True}, -} - -def task(FILESERVER_IP, FILESERVER_NAME, NFS_MOUNT, SMB_SHARENAME, SHARED_FILE_SEED): - import pexpect - import random - # TODO: (polz) Try using pexpect instead of subprocess, it's much nicer. - # Tabela vseh mountov. - # Samo mounti na streznik. - results = dict() - results['mount'] = pexpect.run('mount') - results['try_mount_nfs'] = pexpect.run('sudo mount -t nfs {}:/{} /mnt/nfs'.format( - FILESERVER_IP, NFS_MOUNT)) - results['try_mount_smb'] = pexpect.run( - 'sudo mount -t cifs //{}/{} /mnt/smb -o ip={},guest'.format( - FILESERVER_NAME, SMB_SHARENAME, FILESERVER_IP)) - results['mount_after'] = pexpect.run('mount') - results['ls_smbmount'] = pexpect.run('ls /mnt/smb') - results['ls_nfs'] = pexpect.run('ls /mnt/nfs') - r = random.Random(SHARED_FILE_SEED) - testfile = kpov_util.fname_gen(r) - teststring = kpov_util.alnum_gen(r, 200) - with open('/mnt/nfs/{}'.format(testfile),'w') as f: - f.write(teststring) - results['filestr'] = pexpect.run( - 'cat /mnt/smb/{}'.format(testfile)) - results['filels'] = pexpect.run( - 'ls /mnt/smb/'.format(testfile)) - pexpect.run('rm /mnt/nfs/{}'.format(testfile)) - results['filels_later'] = pexpect.run('ls /mnt/smb') - pexpect.run("sudo umount /mnt/nfs") - pexpect.run("sudo umount /mnt/smb") - return results - -def gen_params(user_id, params_meta): - d = kpov_util.default_gen(user_id, params_meta) - r = random.Random(user_id) - d['FILESERVER_NAME'] = kpov_util.hostname_gen(r) - d['SMB_SHARENAME'] = kpov_util.hostname_gen(r) - d['NFS_MOUNT'] = "/srv/nfs/" + kpov_util.fname_gen(r, False) - d['SHARED_FILENAME'] = kpov_util.fname_gen(r) - d['SHARED_CONTENT'] = kpov_util.fortune(r, 4096) - d['SHARED_FILE_SEED'] = kpov_util.alnum_gen(r, 42) - return d - -def task_check(results, params): - score = 0 - hints = [] - r = random.Random(params['SHARED_FILE_SEED']) - testfile = kpov_util.fname_gen(r) - teststring = kpov_util.alnum_gen(r, 200) - # no need to check results['mount'] or results['try_mount_nfs'] - # or results['try_mount_smb'] - if results['mount_after'].find('//{}/{} on /mnt/smb type cifs'.format( - params['FILESERVER_NAME'], params['SMB_SHARENAME'])) >= 0: - score += 2 - if results['mount_after'].find('{}:{} on /mnt/nfs type nfs'.format( - params['FILESERVER_IP'], params['NFS_MOUNT'])) >= 0: - score += 2 - if results['ls_smbmount'].find(params['SHARED_FILENAME']) >= 0: - score += 1 - if results['ls_nfs'].find(params['SHARED_FILENAME']) >= 0: - score += 1 - if results['filestr'] == teststring: - score += 2 - filels_later = set(results['filels_later'].split()) - filels = set(results['filels'].split()) - if "".join(filels - filels_later).find(testfile) >= 0: - score += 2 - return score, hints - -def prepare_disks(templates, task_params, global_params): - d = templates['student-fileserver'] - d.mkdir("/srv/nfs") - d.mkdir(task_params['NFS_MOUNT']) - d.write(task_params['NFS_MOUNT'] + "/" + task_params["SHARED_FILENAME"], - task_params["SHARED_CONTENT"]) - d = templates['simpleArbiterDhcpGW'] - d.mkdir('/mnt/nfs') - d.mkdir('/mnt/smb') - write_default_config(templates['simpleArbiterDhcpGW'], global_params) |