summaryrefslogtreecommitdiff
path: root/cloudinit/net/openbsd.py
blob: d87d8a4f5f839b5226b19dc8b889c853689b1a23 (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
# This file is part of cloud-init. See LICENSE file for license information.

from cloudinit import log as logging
from cloudinit import subp
from cloudinit import util
import cloudinit.net.bsd

LOG = logging.getLogger(__name__)


class Renderer(cloudinit.net.bsd.BSDRenderer):

    def write_config(self):
        for device_name, v in self.interface_configurations.items():
            if_file = 'etc/hostname.{}'.format(device_name)
            fn = subp.target_path(self.target, if_file)
            if device_name in self.dhcp_interfaces():
                content = 'dhcp\n'
            elif isinstance(v, dict):
                try:
                    content = "inet {address} {netmask}".format(
                        address=v['address'],
                        netmask=v['netmask']
                    )
                except KeyError:
                    LOG.error(
                        "Invalid static configuration for %s",
                        device_name)
                mtu = v.get("mtu")
                if mtu:
                    content += (' mtu %d' % mtu)
                content += "\n"
            util.write_file(fn, content)

    def start_services(self, run=False):
        if not self._postcmds:
            LOG.debug("openbsd generate postcmd disabled")
            return
        subp.subp(['pkill', 'dhclient'], capture=True, rcs=[0, 1])
        subp.subp(['route', 'del', 'default'], capture=True, rcs=[0, 1])
        subp.subp(['route', 'flush', 'default'], capture=True, rcs=[0, 1])
        subp.subp(['sh', '/etc/netstart'], capture=True)

    def set_route(self, network, netmask, gateway):
        if network == '0.0.0.0':
            if_file = 'etc/mygate'
            fn = subp.target_path(self.target, if_file)
            content = gateway + '\n'
            util.write_file(fn, content)


def available(target=None):
    return util.is_OpenBSD()