|
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()
|