diff options
| -rw-r--r-- | cloudinit/distros/__init__.py | 29 | ||||
| -rw-r--r-- | cloudinit/distros/debian.py | 11 | ||||
| -rw-r--r-- | cloudinit/distros/fedora.py | 1 | ||||
| -rw-r--r-- | cloudinit/distros/rhel.py | 2 | ||||
| -rw-r--r-- | cloudinit/distros/ubuntu.py | 1 | 
5 files changed, 28 insertions, 16 deletions
diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index 612d44af..549c1612 100644 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -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): diff --git a/cloudinit/distros/debian.py b/cloudinit/distros/debian.py index 5b4aa9f8..88f4e978 100644 --- a/cloudinit/distros/debian.py +++ b/cloudinit/distros/debian.py @@ -56,6 +56,17 @@ 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 ['all'] + +    def _bring_up_interfaces(self, device_names): +        use_all = False +        for d in device_names: +            if d == 'all': +                use_all = True +        if use_all: +            return distros.Distro._bring_up_interface(self, '--all') +        else: +            return distros.Distro._bring_up_interfaces(self, device_names)      def set_hostname(self, hostname):          out_fn = self._paths.join(False, "/etc/hostname") diff --git a/cloudinit/distros/fedora.py b/cloudinit/distros/fedora.py index e7092dd8..f65a820d 100644 --- a/cloudinit/distros/fedora.py +++ b/cloudinit/distros/fedora.py @@ -28,5 +28,4 @@ LOG = logging.getLogger(__name__)  class Distro(rhel.Distro): -    distro_name = 'fedora'      default_user = 'ec2-user' diff --git a/cloudinit/distros/rhel.py b/cloudinit/distros/rhel.py index ec4dc2cc..0e451b02 100644 --- a/cloudinit/distros/rhel.py +++ b/cloudinit/distros/rhel.py @@ -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') diff --git a/cloudinit/distros/ubuntu.py b/cloudinit/distros/ubuntu.py index 22f8c2c5..4e697f82 100644 --- a/cloudinit/distros/ubuntu.py +++ b/cloudinit/distros/ubuntu.py @@ -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")  | 
