#!/usr/bin/env python # -*- coding: utf-8 -*- # kpov_random_helpers should be imported by add_assignment.py instructions = { 'si':u""" Postavi dva navidezna računalnika - SimpleArbiter z diska SimpleArbiterVPN ter VPNClient, ki jima nastavite pravilne mrežne nastavitve (medsebojna povezava in povezava na splet). Na oba računalnika namestite OpenVPN in program za nadzor nad virtualnimi napravami (s katerim kreirate napravo tap). Strežnik SimpleArbiterVPN naj generira skupno skrivnost (*.key), ki jo na VPNCLient uporabite skupaj z konfiguracijsko datoteko za OpenVPN povezavo. Nato poskrbite, da bo VPNClient na navideznem omrežju prek NFS omogočil dostop do imenika /home/test/IME_IMENIKA, pri čemer IME_IMENIKA preberite na SimpleArbiter. V ta imenik skopirajte datoteke, ki so prek SMB dostopne na SimpleArbiter. """ } computers = { 'maliNetworkManager': { 'disks': [ { 'name': 'maliNetworkManager', }, #{ 'name': 'CDROM', # 'options':{'readonly': True}, # 'parts': [],# no parts, no mounting. #} ], 'network_interfaces': [{'network': 'net1'}], 'flavor': 'm1.tiny', 'config_drive': False }, 'maliBrezNetworkManager': { 'disks': [ { 'name': 'maliBrezNetworkManager', }, #{ '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 = { 'IP_NM': { 'descriptions': { 'si': 'Naslov maliNetworkManager' }, 'w': False, 'public': True, 'type': 'IP', 'generated': True }, 'DNS_NM': { 'descriptions': { 'si': 'DNS za maliNetworkManager' }, 'w': False, 'public': True, 'type': 'IP', 'generated': True }, 'IP_static': { 'descriptions': { 'si': 'Naslov maliBrezNetworkManager' }, 'w': False, 'public': True, 'type': 'IP', 'generated': True }, 'DNS_static': { 'descriptions': { 'si': 'DNS za maliBrezNetworkManager' }, 'w': False, 'public': True, 'type': 'IP', 'generated': True }, } def task(IP_NM, DNS_NM, IP_static, DNS_static): import pxssh import pexpect results = dict() peer_user = 'student' peer_passwd = 'vaje' sA = pxssh.pxssh() sB = pxssh.pxssh() sA.login(IP_NM, peer_user, peer_passwd) sB.login(IP_static, peer_user, peer_passwd) # sA # make sure NM is not handling eth0 results['NM_nmcli'] = sA.run('nmcli d') results['NM_nslookup'] = sA.run('nslookup www.arnes.si') # sB # check whether NM is handling eth0 results['static_nmcli'] = sB.run('nmcli d') results['static_nslookup'] = sB.run('nslookup www.arnes.si') sA.logout() sB.logout() return results def gen_params(user_id, params_meta): alpha = "abcdefghijklmnoprstuvzxyqw" alphaupp = "ABCDEFGHIJKLMNOPRSTUVZQWXY" alpha2 = ['$','?','!',"%","&"] alpha3 = ['IT','DH','JF','PO','LZ'] temp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") hash = "" for x in temp: for i in x: if int(i)<5: hash+=random.choice(alpha)+alpha2[int(i)] else: hash+=random.choice(alphaupp)+alpha3[int(i)-5] hash+=":"+temp params = dict() r = random.Random(user_id) # IP_NM, DNS_NM, IP_static, DNS_static) dns_servers = ['193.2.1.66', '193.2.1.72', '8.8.8.8', '8.8.4.4', '208.67.222.222', '208.67.220.220'] net = kpov_random_helpers.IPv4_subnet_gen(r, '172.23.128.0/18', 24) params['DNS_NM'] = r.choice(dns_servers) params['IP_NM'], params['IP_static'] = kpov_random_helpers.IPv4_addr_gen(r, net, 2) params['DNS_static'] = r.choice(dns_servers) params[user_id] = hash return params def task_check(results, params): 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'] guestmount -a d -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt pass