summaryrefslogtreecommitdiff
path: root/cloudinit/sources/helpers/vmware/imc/nic.py
blob: b90a5640994f04cca09fa9f34fc68ea30ef6a846 (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
from cloudinit.sources.helpers.vmware.imc.boot_proto import BootProto


class Nic:
    def __init__(self, name, configFile):
        self._name = name
        self._configFile = configFile

    def _get(self, what):
        return self._configFile.get(self.name + what, None)

    def _getCnt(self, prefix):
        return self._configFile.getCnt(self.name + prefix)

    @property
    def name(self):
        return self._name

    @property
    def mac(self):
        return self._get('|MACADDR').lower()

    @property
    def bootProto(self):
        return self._get('|BOOTPROTO').lower()

    @property
    def ipv4(self):
        # TODO implement NONE
        if self.bootProto == BootProto.STATIC:
            return StaticIpv4Conf(self)

        return DhcpIpv4Conf(self)

    @property
    def ipv6(self):
        # TODO implement NONE
        cnt = self._getCnt("|IPv6ADDR|")

        if cnt != 0:
            return StaticIpv6Conf(self)

        return DhcpIpv6Conf(self)


class DhcpIpv4Conf:
    def __init__(self, nic):
        self._nic = nic


class StaticIpv4Addr:
    def __init__(self, nic):
        self._nic = nic

    @property
    def ip(self):
        return self._nic._get('|IPADDR')

    @property
    def netmask(self):
        return self._nic._get('|NETMASK')

    @property
    def gateway(self):
        return self._nic._get('|GATEWAY')


class StaticIpv4Conf(DhcpIpv4Conf):
    @property
    def addrs(self):
        return [StaticIpv4Addr(self._nic)]


class DhcpIpv6Conf:
    def __init__(self, nic):
        self._nic = nic


class StaticIpv6Addr:
    def __init__(self, nic, index):
        self._nic = nic
        self._index = index

    @property
    def ip(self):
        return self._nic._get("|IPv6ADDR|" + str(self._index))

    @property
    def prefix(self):
        return self._nic._get("|IPv6NETMASK|" + str(self._index))

    @property
    def gateway(self):
        return self._nic._get("|IPv6GATEWAY|" + str(self._index))


class StaticIpv6Conf(DhcpIpv6Conf):
    @property
    def addrs(self):
        cnt = self._nic._getCnt("|IPv6ADDR|")

        res = []

        for i in range(1, cnt + 1):
            res.append(StaticIpv6Addr(self._nic, i))

        return res