Blame cloudinit/net/freebsd.py

Packit Service 751c4a
# This file is part of cloud-init. See LICENSE file for license information.
Packit Service 751c4a
Packit Service 751c4a
from cloudinit import log as logging
Packit Service 751c4a
import cloudinit.net.bsd
Packit Service 751c4a
from cloudinit import subp
Packit Service 751c4a
from cloudinit import util
Packit Service 751c4a
Packit Service 751c4a
LOG = logging.getLogger(__name__)
Packit Service 751c4a
Packit Service 751c4a
Packit Service 751c4a
class Renderer(cloudinit.net.bsd.BSDRenderer):
Packit Service 751c4a
Packit Service 751c4a
    def __init__(self, config=None):
Packit Service 751c4a
        self._route_cpt = 0
Packit Service 751c4a
        super(Renderer, self).__init__()
Packit Service 751c4a
Packit Service 751c4a
    def rename_interface(self, cur_name, device_name):
Packit Service 751c4a
        self.set_rc_config_value('ifconfig_%s_name' % cur_name, device_name)
Packit Service 751c4a
Packit Service 751c4a
    def write_config(self):
Packit Service 751c4a
        for device_name, v in self.interface_configurations.items():
Packit Service 751c4a
            if isinstance(v, dict):
Packit Service 751c4a
                self.set_rc_config_value(
Packit Service 751c4a
                    'ifconfig_' + device_name,
Packit Service 751c4a
                    v.get('address') + ' netmask ' + v.get('netmask'))
Packit Service 751c4a
            else:
Packit Service 751c4a
                self.set_rc_config_value('ifconfig_' + device_name, 'DHCP')
Packit Service 751c4a
Packit Service 751c4a
    def start_services(self, run=False):
Packit Service 751c4a
        if not run:
Packit Service 751c4a
            LOG.debug("freebsd generate postcmd disabled")
Packit Service 751c4a
            return
Packit Service 751c4a
Packit Service 751c4a
        subp.subp(['service', 'netif', 'restart'], capture=True)
Packit Service 751c4a
        # On FreeBSD 10, the restart of routing and dhclient is likely to fail
Packit Service 751c4a
        # because
Packit Service 751c4a
        # - routing: it cannot remove the loopback route, but it will still set
Packit Service 751c4a
        #   up the default route as expected.
Packit Service 751c4a
        # - dhclient: it cannot stop the dhclient started by the netif service.
Packit Service 751c4a
        # In both case, the situation is ok, and we can proceed.
Packit Service 751c4a
        subp.subp(['service', 'routing', 'restart'], capture=True, rcs=[0, 1])
Packit Service 751c4a
Packit Service 751c4a
        for dhcp_interface in self.dhcp_interfaces():
Packit Service 751c4a
            subp.subp(['service', 'dhclient', 'restart', dhcp_interface],
Packit Service 751c4a
                      rcs=[0, 1],
Packit Service 751c4a
                      capture=True)
Packit Service 751c4a
Packit Service 751c4a
    def set_route(self, network, netmask, gateway):
Packit Service 751c4a
        if network == '0.0.0.0':
Packit Service 751c4a
            self.set_rc_config_value('defaultrouter', gateway)
Packit Service 751c4a
        else:
Packit Service 751c4a
            route_name = 'route_net%d' % self._route_cpt
Packit Service 751c4a
            route_cmd = "-route %s/%s %s" % (network, netmask, gateway)
Packit Service 751c4a
            self.set_rc_config_value(route_name, route_cmd)
Packit Service 751c4a
            self._route_cpt += 1
Packit Service 751c4a
Packit Service 751c4a
Packit Service 751c4a
def available(target=None):
Packit Service 751c4a
    return util.is_FreeBSD()