diff options
Diffstat (limited to 'kpov_judge/tasks')
-rw-r--r-- | kpov_judge/tasks/dhcp_dns_predefined_ip/task.py | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/kpov_judge/tasks/dhcp_dns_predefined_ip/task.py b/kpov_judge/tasks/dhcp_dns_predefined_ip/task.py index 5c215fd..01a9941 100644 --- a/kpov_judge/tasks/dhcp_dns_predefined_ip/task.py +++ b/kpov_judge/tasks/dhcp_dns_predefined_ip/task.py @@ -5,8 +5,10 @@ instructions = { 'si':u""" -Ustvari tri navidezne računalnike. Za enega (SimpleArbiter) uporabi sliko diska simpleArbiterGW. Na drugega (DHCP_server) postavi strežnika -DHCP in DNS. Poskrbi, da bo preostali računalnik (DHCP_client) dobil naslov {Client_IP}. +Ustvari tri navidezne računalnike. Za enega (SimpleArbiter) uporabi sliko diska simpleArbiterGW. +Na drugega (DHCP_server) postavi strežnika DHCP in DNS. Za gateway uporabi IP naslov simple arbiterja. +Poskrbi, da bo preostali računalnik (DHCP_client) dobil naslov {Client_IP}. + Poskrbi, da bo DNS strežnik za domeno test.net vrnil naslov {HOSTNAME_X_IP}. DHCP_server naj za DNS strežnik uporabi {DNS_NM}. DHCP_client naj za DNS strežnik uporabi {DNS_static}. @@ -66,10 +68,10 @@ params_meta = { '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}, 'HOSTNAME_X_IP': {'descriptions': {'si': 'Naslov HOSTNAME_X'}, 'w': False, 'public':True, 'type': 'IP', 'generated': True}, - 'Client_IP': {'descriptions': {'si': 'Naslov za DHCP_Client'}, 'w': False, 'public':True, 'type': 'IP', 'generated': True}, + 'Client_IP': {'descriptions': {'si': 'Naslov za DHCP_Client'}, 'w': False, 'public':True, 'type': 'IP', 'generated': True}, } -def task(IP_NM, DNS_NM, IP_static, DNS_static, HOSTNAME_X_IP, Client_IP): +def task(IP_NM, DNS_NM, IP_static, DNS_static, HOSTNAME_X_IP, Client_IP, MAC_BOOT): from pexpect import pxssh import pexpect results = dict() @@ -81,18 +83,20 @@ def task(IP_NM, DNS_NM, IP_static, DNS_static, HOSTNAME_X_IP, Client_IP): sB.login(IP_static, peer_user, peer_passwd) # sA # make sure NM is not handling eth0 - sA.sendline('nmcli -c no d') + sA.sendline('nmcli -c no d') sA.prompt() results['NM_nmcli'] = sA.before results['NM_nslookup'] = sA.run('nslookup www.arnes.si') # sB # check whether NM is handling eth0 - sB.sendline('nmcli -c no d') + sB.sendline('nmcli -c no d') sB.prompt() results['static_nmcli'] = sB.before results['static_nslookup'] = sB.run('nslookup www.arnes.si') - # test the DNS server - results['NM_dns_test'] = sA.run('nslookup test.net 127.0.0.1') + # test the DNS server + results['NM_dns_test'] = sA.run('nslookup test.net 127.0.0.1') + # test DHCP + results['client_ip'] = sB.run('ifconfig') sA.logout() sB.logout() return results @@ -115,25 +119,43 @@ def task_check(results, params): if results['NM_nslookup'].find('Server:\t\t{0}\r'.format(params['DNS_NM'])) > -1: score += 2 else: - hint += ["NM DNS wrong"] + hints += ["NM DNS wrong"] if results['static_nslookup'].find('Server:\t\t{0}\r'.format(params['DNS_static'])) > -1: score += 2 else: - hint += ["Static DNS wrong"] - if re.search(r'e(th0|np0s3|ns3) +ethernet +connected', results['NM_nmcli']): + hints += ["Static DNS wrong"] + if re.search(r'e(th0|np0s3|ns3) +ethernet +connected', results['NM_nmcli']): score += 2 else: hints += ['nmcli incorrect'] - if re.search(r'e(th0|np0s3|ns3) +ethernet +unmanaged', results['static_nmcli']): + if re.search(r'e(th0|np0s3|ns3) +ethernet +unmanaged', results['static_nmcli']): score += 2 else: hints += ['nmcli on malibrez incorrect'] - if results['NM_dns_test'].find('Address: {0}'.format(params['HOSTNAME_X_IP'])) > -1: - score += 2 - else: - hints += ['DNS query wrong'] + if results['client_ip'].find('inet {0}'.format(params['Client_IP'])) > -1: + score += 1 + else: + hints += ['DHCP_Client DHCP incorrect'] + if results['NM_dns_test'].find('Address: {0}'.format(params['HOSTNAME_X_IP'])) > -1: + score += 1 + else: + hints += ['DNS query wrong'] return score, hints def prepare_disks(templates, task_params, global_params): + d = templates['simpleArbiterGW'] + s = """auto lo +iface lo inet loopback + +auto ens3 +iface ens3 inet dhcp + +auto enp0s3 +iface enp0s3 inet dhcp + +auto enp0s8 +iface enp0s8 inet dhcp +""" + d.write("/etc/network/interfaces", s) write_default_config(templates['simpleArbiterGW'], global_params) |