summaryrefslogtreecommitdiff
path: root/cloudinit/sources/helpers/vmware/imc/config.py
blob: 8b2deb654add11c1dbb3f1308f62d0637731c4c8 (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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Copyright (C) 2015 Canonical Ltd.
# Copyright (C) 2015 VMware Inc.
#
# Author: Sankar Tanguturi <stanguturi@vmware.com>
#
# This file is part of cloud-init. See LICENSE file for license information.


from cloudinit.sources.helpers.vmware.imc.nic import Nic


class Config:
    """
    Stores the Contents specified in the Customization
    Specification file.
    """

    CUSTOM_SCRIPT = "CUSTOM-SCRIPT|SCRIPT-NAME"
    DNS = "DNS|NAMESERVER|"
    DOMAINNAME = "NETWORK|DOMAINNAME"
    HOSTNAME = "NETWORK|HOSTNAME"
    MARKERID = "MISC|MARKER-ID"
    PASS = "PASSWORD|-PASS"
    RESETPASS = "PASSWORD|RESET"
    SUFFIX = "DNS|SUFFIX|"
    TIMEZONE = "DATETIME|TIMEZONE"
    UTC = "DATETIME|UTC"
    POST_GC_STATUS = "MISC|POST-GC-STATUS"
    DEFAULT_RUN_POST_SCRIPT = "MISC|DEFAULT-RUN-POST-CUST-SCRIPT"
    CLOUDINIT_META_DATA = "CLOUDINIT|METADATA"
    CLOUDINIT_USER_DATA = "CLOUDINIT|USERDATA"

    def __init__(self, configFile):
        self._configFile = configFile

    @property
    def host_name(self):
        """Return the hostname."""
        return self._configFile.get(Config.HOSTNAME, None)

    @property
    def domain_name(self):
        """Return the domain name."""
        return self._configFile.get(Config.DOMAINNAME, None)

    @property
    def timezone(self):
        """Return the timezone."""
        return self._configFile.get(Config.TIMEZONE, None)

    @property
    def utc(self):
        """Retrieves whether to set time to UTC or Local."""
        return self._configFile.get(Config.UTC, None)

    @property
    def admin_password(self):
        """Return the root password to be set."""
        return self._configFile.get(Config.PASS, None)

    @property
    def name_servers(self):
        """Return the list of DNS servers."""
        res = []
        cnt = self._configFile.get_count_with_prefix(Config.DNS)
        for i in range(1, cnt + 1):
            key = Config.DNS + str(i)
            res.append(self._configFile[key])

        return res

    @property
    def dns_suffixes(self):
        """Return the list of DNS Suffixes."""
        res = []
        cnt = self._configFile.get_count_with_prefix(Config.SUFFIX)
        for i in range(1, cnt + 1):
            key = Config.SUFFIX + str(i)
            res.append(self._configFile[key])

        return res

    @property
    def nics(self):
        """Return the list of associated NICs."""
        res = []
        nics = self._configFile["NIC-CONFIG|NICS"]
        for nic in nics.split(","):
            res.append(Nic(nic, self._configFile))

        return res

    @property
    def reset_password(self):
        """Retreives if the root password needs to be reset."""
        resetPass = self._configFile.get(Config.RESETPASS, "no")
        resetPass = resetPass.lower()
        if resetPass not in ("yes", "no"):
            raise ValueError("ResetPassword value should be yes/no")
        return resetPass == "yes"

    @property
    def marker_id(self):
        """Returns marker id."""
        return self._configFile.get(Config.MARKERID, None)

    @property
    def custom_script_name(self):
        """Return the name of custom (pre/post) script."""
        return self._configFile.get(Config.CUSTOM_SCRIPT, None)

    @property
    def post_gc_status(self):
        """Return whether to post guestinfo.gc.status VMX property."""
        postGcStatus = self._configFile.get(Config.POST_GC_STATUS, "no")
        postGcStatus = postGcStatus.lower()
        if postGcStatus not in ("yes", "no"):
            raise ValueError("PostGcStatus value should be yes/no")
        return postGcStatus == "yes"

    @property
    def default_run_post_script(self):
        """
        Return enable-custom-scripts default value if enable-custom-scripts
        is absent in VM Tools configuration
        """
        defaultRunPostScript = self._configFile.get(
            Config.DEFAULT_RUN_POST_SCRIPT, "no"
        )
        defaultRunPostScript = defaultRunPostScript.lower()
        if defaultRunPostScript not in ("yes", "no"):
            raise ValueError("defaultRunPostScript value should be yes/no")
        return defaultRunPostScript == "yes"

    @property
    def meta_data_name(self):
        """Return the name of cloud-init meta data."""
        return self._configFile.get(Config.CLOUDINIT_META_DATA, None)

    @property
    def user_data_name(self):
        """Return the name of cloud-init user data."""
        return self._configFile.get(Config.CLOUDINIT_USER_DATA, None)


# vi: ts=4 expandtab