Fix the ifup so that if a list of devices is provided

then each interface is brought up individually instead
of using the '--all' which isn't on rhel. The default
debian behavior will be to use this still though as it
overrides the new bring up interfaces function for this
case.
This commit is contained in:
Joshua Harlow 2012-09-19 18:40:20 -07:00
parent 634164137b
commit 02fe019367
5 changed files with 23 additions and 16 deletions

View File

@ -34,12 +34,6 @@ from cloudinit import log as logging
from cloudinit import ssh_util
from cloudinit import util
# TODO(harlowja): Make this via config??
IFACE_ACTIONS = {
'up': ['ifup', '--all'],
'down': ['ifdown', '--all'],
}
LOG = logging.getLogger(__name__)
@ -134,10 +128,10 @@ class Distro(object):
def apply_network(self, settings, bring_up=True):
# Write it out
self._write_network(settings)
dev_names = self._write_network(settings)
# Now try to bring them up
if bring_up:
return self._interface_action('up')
return self._bring_up_interfaces(dev_names)
return False
@abc.abstractmethod
@ -189,13 +183,11 @@ class Distro(object):
util.write_file(self._paths.join(False, "/etc/hosts"),
contents, mode=0644)
def _interface_action(self, action):
if action not in IFACE_ACTIONS:
raise NotImplementedError("Unknown interface action %s" % (action))
cmd = IFACE_ACTIONS[action]
def _bring_up_interface(self, device_name):
cmd = ['ifup', device_name]
LOG.debug("Attempting to run bring up interface %s using command %s",
device_name, cmd)
try:
LOG.debug("Attempting to run %s interface action using command %s",
action, cmd)
(_out, err) = util.subp(cmd)
if len(err):
LOG.warn("Running %s resulted in stderr output: %s", cmd, err)
@ -204,6 +196,15 @@ class Distro(object):
util.logexc(LOG, "Running interface command %s failed", cmd)
return False
def _bring_up_interfaces(self, device_names):
am_failed = 0
for d in device_names:
if not self._bring_up_interface(d):
am_failed += 1
if am_failed == 0:
return True
return False
def isuser(self, name):
try:
if pwd.getpwnam(name):

View File

@ -56,6 +56,12 @@ class Distro(distros.Distro):
def _write_network(self, settings):
net_fn = self._paths.join(False, "/etc/network/interfaces")
util.write_file(net_fn, settings)
return []
def _bring_up_interfaces(self, device_names):
if not device_names:
device_names = ['--all']
return distros.Distro._bring_up_interfaces(self, device_names)
def set_hostname(self, hostname):
out_fn = self._paths.join(False, "/etc/hostname")

View File

@ -28,5 +28,4 @@ LOG = logging.getLogger(__name__)
class Distro(rhel.Distro):
distro_name = 'fedora'
default_user = 'ec2-user'

View File

@ -88,6 +88,7 @@ class Distro(distros.Distro):
# Make the intermediate format as the rhel format...
nameservers = []
searchservers = []
dev_names = entries.keys()
for (dev, info) in entries.iteritems():
net_fn = NETWORK_FN_TPL % (dev)
net_ro_fn = self._paths.join(True, net_fn)
@ -127,6 +128,7 @@ class Distro(distros.Distro):
util.write_file(net_rw_fn, w_contents, 0644)
if nameservers or searchservers:
self._write_resolve(nameservers, searchservers)
return dev_names
def set_hostname(self, hostname):
out_fn = self._paths.join(False, '/etc/sysconfig/network')

View File

@ -29,7 +29,6 @@ LOG = logging.getLogger(__name__)
class Distro(debian.Distro):
distro_name = 'ubuntu'
default_user = 'ubuntu'
default_user_groups = ("adm,audio,cdrom,dialout,floppy,video,"
"plugdev,dip,netdev,sudo")