summaryrefslogtreecommitdiff
path: root/tasks/set_ip_static_dhcp/task.py
blob: 5f18d5deffe859c559a3f4685bcafee6ee5bee60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# SPDX-License-Identifier: AGPL-3.0-or-later

# kpov_util should be imported by add_assignment.py

instructions = {
    'si': '''\
<p>
Ustvari tri navidezne računalnike. Za prvega uporabi sliko diska <em>simpleArbiterDhcpGW</em>, za drugega sliko diska
<em>maliNetworkManager</em>, za tretjega sliko diska <em>maliBrezNetworkManager</em>. Računalnike imenujmo enako kot slike diska.

<p>
Na <em>maliBrezNetworkManager</em> poskrbi, da NetworkManager ne bo več skrbel za omrežni vmesnik, temveč bosta delovala ukaza <code>ifup</code> in <code>ifdown</code>.

<p>
Na <em>maliNetworkManager</em> nastavi naslov IP <code>{{IP_NM}}</code> ter DNS <code>{{DNS_NM}}</code>.

<p>
Na <em>maliBrezNetworkManager</em> nastavi naslov IP <code>{{IP_static}}</code> ter DNS <code>{{DNS_static}}</code>.
''',
    'en': '''\
<p>
Create three virtual machines. Use <em>simpleArbiterDhcpGW</em> as the disk image for the first, <em>maliNetworkManager</em> as the disk image for the second, and <em>maliBrezNetworkManager</em> for the third. The virtual machine names can match the disks.

<p>
Make sure that on <em> maliBrezNetworkManager</em> <code>ifup</code> and <code>ifdown</code> can be used to configure the network and that NetworkManager, while still installed, will not manage the network interface. The IP should be <code>{{IP_static}}</code> and the computer should  use the server <code>{{DNS_static}}</code> for DNS.

<p>
On <em>maliNetworkManager</em>, set the IP address to <code>{{IP_NM}}</code> and use <code>{{DNS_NM}}</code> for DNS.
''',
}

computers = {
    'maliNetworkManager': {
        'disks': [
            {   'name': 'maliNetworkManager',
            },
        ],
        'network_interfaces': [{'network': 'net1'}],
        'flavor': 'm1.tiny',
        'config_drive': False

    },
    'maliBrezNetworkManager': {
        'disks': [
            {   'name': 'maliBrezNetworkManager',
            },
        ],
        '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 = {
    'IP_NM': {'descriptions': {'si': 'Naslov maliNetworkManager', 'en': 'IP address for maliNetworkManager'}, 'w': False, 'public':True, 'type': 'IP', 'generated': True},
    'DNS_NM': {'descriptions': {'si': 'DNS za maliNetworkManager', 'en': 'DNS for maliNetworkManager'}, 'w': False, 'public':True, 'type': 'IP', 'generated': True},
    'IP_static': {'descriptions': {'si': 'Naslov maliBrezNetworkManager', 'en': 'IP address for maliBrezNetworkManager'}, 'w': False, 'public': True, 'type': 'IP', 'generated': True},
    'DNS_static': {'descriptions': {'si': 'DNS za maliBrezNetworkManager', 'en':'DNS for maliBrezNetworkManager'}, 'w': False, 'public': True, 'type': 'IP', 'generated': True},
}

def task(IP_NM, DNS_NM, IP_static, DNS_static):
    import collections

    tests = (
        ('nmcli', 'nmcli -c no d'),
        ('nslookup', 'nslookup www.arnes.si'),
    )

    results = collections.defaultdict(str)
    for name, host in [('nm', IP_NM), ('static', IP_static)]:
        host_results = kpov_util.ssh_test(host, 'student', 'vaje', tests)
        for key, value in host_results.items():
            results[key+'-'+name] = value
    return results
    
def gen_params(user_id, params_meta):
    params = dict()
    r = random.Random(user_id)
    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_util.IPv4_subnet_gen(r, '10.94.96.0/19', 25)
    params['DNS_NM'] = r.choice(dns_servers)
    params['IP_NM'], params['IP_static'] = kpov_util.IPv4_addr_gen(r, net, 2)
    params['DNS_static'] = r.choice(dns_servers)
    return params

def task_check(results, params):
    import re
    score = 0
    hints = []
    if results['ssh-nm'] is True:
        score += 1
    else:
        hints += ['mali ssh failed: ' + results['ssh-nm']]
    if results['ssh-static'] is True:
        score += 1
    else:
        hints += ['malibrez ssh failed: ' + results['ssh-static']]
    if params['DNS_NM'] in results['nslookup-nm']:
        score += 2
    else:
        hints += ['NM nslookup incorrect']
    if params['DNS_static'] in results['nslookup-static']:
        score += 2
    else:
        hints += ['static nslookup incorrect']
    if re.search(r'e(th0|np0s3|ns3) +ethernet +connected', results['nmcli-nm']):
        score += 2
    else:
        hints += ['nmcli incorrect']
    if re.search(r'e(th0|np0s3|ns3) +ethernet +unmanaged', results['nmcli-static']):
        score += 2
    else:
        hints += ['nmcli on malibrez incorrect']
    return score, hints

def prepare_disks(templates, task_params, global_params):
    write_default_config(templates['simpleArbiterDhcpGW'], global_params)