reading from /sys/class/net/eth0/carriers raises IOError if interface is down

Bug #1646919 reported by Lars Kellogg-Stedman
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
cloud-init
New
Undecided
Unassigned

Bug Description

If an interface is "down", reading from several of the sysfs files for that interface will return EINVAL, which causes Python to raise an IOError like this:

Dec 02 18:11:09 citest.novalocal cloud-init[413]: [CLOUDINIT] util.py[DEBUG]: failed stage init-local
                                                  Traceback (most recent call last):
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 521, in status_wr
apper
                                                      ret = functor(name, args)
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/cmd/main.py", line 265, in main_init
                                                      init.apply_network_config(bring_up=not args.local)
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 631, in apply_netwo
rk_config
                                                      netcfg, src = self._find_networking_config()
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/stages.py", line 628, in _find_netwo
rking_config
                                                      return (net.generate_fallback_config(), "fallback")
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/net/__init__.py", line 146, in gener
ate_fallback_config
                                                      carrier = int(sys_netdev_info(interface, 'carrier'))
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/net/__init__.py", line 119, in sys_n
etdev_info
                                                      data = util.load_file(fname)
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 1268, in load_file
                                                      pipe_in_out(ifh, ofh, chunk_cb=read_cb)
                                                    File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 1311, in pipe_in_out
                                                      data = in_fh.read(chunk_size)
                                                  IOError: [Errno 22] Invalid argument

The code calling sys_netdev_info should catch IOError as well as OSError.

A simple reproducer is:

  # ip link set eth0 down
  # cat /sys/class/net/eth0/carrier
  cat: /sys/class/net/eth0/carrier: Invalid argument

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.