#!/usr/bin/env python # -*- coding: utf-8 -*- # kpov_random_helpers should be imported by add_assignment.py # TODO: dokoncaj! instructions = { 'si':u""" Postavi dva navidezna računalnika (simpleArbiterDhcp in FileServer). Na SimpleArbiterDhcp poišči imenik Mapa ter preberi pot NFS_POT ter ime imenika v skupni rabi SAMBA_SHARE. Skopiraj datoteke iz imenika Mapa, na FileServer. Poskrbi, da bo imenik z datotekami dostopen prek NFS v imeniku NFS_POT in prek SMB na imeniku v skupni rabi SAMBA_SHARE. SimpleArbiterDhcp naj ima prek NFS pravico pisati po imeniku. NFS_POT je pot do nekega imenika in je za vsakega studenta drugacna. Ustvari mapo in poskrbi da bo dostopna prek protokolov NFS in SMB. Vanj skopiraj datoteke iz imenika MAPA (ta mapa naj vsebuje datoteko z imenom SHARED_FILENAME in vsebino SHARED_FILENAME_CONETENT), ki bosta za vsakega studenta drugacni. Naloga za studenta, ki pise gen_params() in params_meta je da nazreba opisane parametre. V task() napisi zaporedje ukazov, ki bodo preverili, ali je student res postavil delujoca streznika NFS in SMB in ali je nanju postavil datoteko SHARED_FILENAME. Vecina logike te funkcije gre v task_check. Izpis teh rezultatov spravi v results. Naloga student, ki pise task_check(results, params) je da napise funkcijo, ki pregleda ustvarjeni results in pove, ali je student opravil nalogo v skladu z navodili. """, 'en':u""" Set up two virtual computers (simpleArbiterDhcp and FileServer). On SimpleArbiterDhcp find directory Mapa, read path NFS_POT and name of directory in shared folder SAMBA_SHARE. Copy files from directory Mapa to FileServer. Make sure that the directory with files will be available over NFS (which is in directory NFS_POT) and over SMB, on directory in shared folder SAMBA_SHARE. SimpleArbiterDhcp should have the right to write in directory, using NFS. """ } computers = { 'FileServer': { 'disks': [ { 'name': 'FileServer', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, # 'parts': [],# no parts, no mounting. #} ], 'network_interfaces': [{'network': 'net1'}], 'flavor': 'm1.tiny', 'config_drive': False }, 'SimpleArbiter': { 'disks': [ { 'name': 'simpleArbiterDhcp', # attempt automount }, #{ 'name': 'CDROM', # 'options': {'readonly': True}, # 'parts': [{'dev': 'b1', 'path': '/cdrom'}], #}, ], 'network_interfaces': [{'network': 'net1'}, {'network': 'test-net'}], 'flavor': 'm1.tiny', 'config_drive': False } } networks = { 'net1': {'public': False}, 'test-net': {'public': True} } params_meta = { 'FILESERVER_NAME': {'descriptions': {'si': 'Ime streznika'}, 'w': False, 'public':True, 'type': 'hostname', 'generated': True}, 'SMB_SHARENAME': {'descriptions': {'si': 'Imenik v skupni rabi'}, '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': 'Ime datoteke, ki je deljena'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True}, 'SHARED_FILENAME_CONTENT': {'descriptions': {'si': 'Vsebina datoteke'}, 'w': False, 'public': True, 'type': 'filename', 'generated': True}, } def task(FILESERVER_NAME, NFS_MOUNT, SHARED_FILENAME, SHARED_FILENAME_CONTENT): import subprocess import pexpect # Naslov, na katerem se nahaja streznik. address = FILESERVER_NAME # TODO: (polz) Try using pexpect instead of subprocess, it's much nicer. # Tabela vseh mountov. mounts = subprocess.check_output("mount").split("\n") # Samo mounti na streznik. srvmounts = [] results['try_mount_nfs'] = pexpect.run('sudo mount -t nfs {}:/{} /mnt/nfs'.format( FILESERVER_NAME, NFS_MOUNT)) results['try_mount_smb'] = pexpect.run('sudo mount -t cifs //{}/{} /mnt/smb'.format( FILESERVER_NAME, SMB_SHARENAME)) results['ls_smbmount'] = pexpect.run('ls /mnt/smb') results['ls_nfs'] = pexpect.run('ls /mnt/nfs') testfile = kpov_random_helpers.filename_gen() pexpect.run('echo "HHAHAHA" > /mnt/nfs/{}'.format(filename_gen)) # Mounti so v formatu: # ["//SMB_NAME/ on NFS_MOUNT type cifs (rw)", ... ] # example: ["//192.168.1.92/srv/samba on /mnt/samba type cifs (rw)", ... ] # Seznam mora imeti vnos za NFS in SMB, morata biti obesena na pravo pot in (rw) # ++ PIKE za namountan SMB/NFS # TODO: (polz) prej ali slej tole kodo premaknite v task_check, v results pa porinite # le mounts (npr. results['mounts'] = mounts #for m in srvmounts: # Dobimo pot, filesystem in pravice iz mounta: # split = m.split() # pot = split[2] # fstype = split[4] #mogoče bomo kaj rabli? # pravice = split[5] # Preverimo če je namountano na pravilen direktorij: # if pot == NFS_MOUNT: # ++PIKE za pravo pot # Pregledamo datoteke v temu direktoriju: # ls = subprocess.check_output(["ls", pot]).split() # Preverimo ce je v imeniku datoteka: # if SHARED_FILENAME in ls: # Če je, primerjamo vsebino: # cat = subprocess.check_output(["cat", pot+"/"+SHARED_FILENAME]) # if cat == SHARED_FILENAME_CONTENT: # DING DING DING PLUS PIKE ZA PRAVO VSEBINO # pass # if pravice == "(rw)": # BONUS PIKE ZA READ/WRITE PRAVICE # pass # Samo delno stestirano! #results = "test" return results def gen_params(user_id, params_meta): return kpov_random_helpers.default_gen(user_id, params_meta) def task_check(results, params): score = 0 names = [] for key in results.keys(): names.append(key) for i in range(len(names)): if results[names[i]] is params[names[i]]: score = score + 1 return score """ import re score = -9 if results['NM_nslookup'].find('Server:\t\t{0}\r'.format(params['DNS_NM'])) > -1: score += 3 if results['static_nslookup'].find('Server:\t\t{0}\r'.format(params['DNS_static'])) > -1: score += 3 if re.search(r'eth0 +802-.*connected', results['NM_nmcli']): score += 2 if not re.search(r'eth0 +802-.*connected', results['static_nmcli']): score += 2 score = 0 return score """ def prepare_disks(templates, params): # d = templates['simpleArbiterDhcp'] # Asistent je pocasnela :D pass