curtin/net: overhaul of eni rendering to handle mixed ipv4/ipv6 configs
To ensure complete ipv4/ipv6 support for advanced and stacked configurations update how curtin.net renders /etc/network/interfaces for different releases (precise -> yakkety). ifupdown has subtle issues with various networking features and curtin needs to ensure consistent behavior.
- Propery handle emitting the 'auto' control tag for stacked interfaces, like vlans over bonds - Workaround LP:1609367 by rendering ifupdown hooks to handle the various cases. This works generically in all ubuntu releases - Add vmtests for mtu settings - Drop the use of ipv4 alias interfaces (eth0:1, eth0:2) and instead just add additional e/n/i stanzas. ifupdown already uses iproute2's /sbin/ip which supports adding additional ip addresses to an interface without the use of the v4-only interface alias structure. This provides consistent behavior for all types of interfaces (physical, vlan, bonds, and stacked interfaces) across all releases. Two side-effects: 1) users can no longer `ifdown eth0:1` to remove a single ip address from an interface; if down eth0 will take _all_ ip addresses on that interface. 2) ifconfig output only shows *one* ipv4 address, so users will need to use /sbin/ip addr show <interface> to see all ip addresses assigned to an interface. - Add vmtests for alias settings - Restructure all of the common network testcases into a single class TestNetworkTestBaseAbs, all varients testing network inherit from this class and override only the config file and any special case test-cases and file collection - Global replace of testcase use of 'with open' and instead use load_collect_file() - Fix falsepositive uefi and multipath test this replacement exposed. - Add ip_a_to_dict parser for `/sbin/ip a` output - drop ifconfig_a parser