Example #1
0
def get_kickstart_network_data(ifcfg,
                               nm_client,
                               network_data_class,
                               root_path=""):
    """Get kickstart data from ifcfg object.

    :param ifcfg: ifcfg file object
    :type ifcfg: IfcfgFile
    :param nm_client: instance of NetworkManager client
    :type nm_client: NM.Client
    :param network_data_class: pykickstart network command data class
    :type: pykickstart BaseData
    :param root_path: optional root path for ifcfg files to be updated
    :type root_path: str
    :returns: network_data object corresponding to the ifcfg object
    :rtype: network_data_class object instance
    """
    ifcfg.read()
    kwargs = {}

    # no network command for non-virtual device slaves
    if ifcfg.get("TYPE") not in ("Bond",
                                 "Team") and ifcfg.get("DEVICETYPE") != "Team":
        if ifcfg.get("MASTER") or ifcfg.get("TEAM_MASTER") or ifcfg.get(
                "BRIDGE"):
            return None

    # no support for wireless
    if ifcfg.get("TYPE") == "Wireless":
        return None

    # ipv4 and ipv6
    if ifcfg.get("ONBOOT") and ifcfg.get("ONBOOT") == "no":
        kwargs["onboot"] = False
    if ifcfg.get('MTU') and ifcfg.get('MTU') != "0":
        kwargs["mtu"] = ifcfg.get('MTU')
    # ipv4
    if not ifcfg.get('BOOTPROTO'):
        kwargs["noipv4"] = True
    else:
        if util.lowerASCII(ifcfg.get('BOOTPROTO')) == 'dhcp':
            kwargs["bootProto"] = "dhcp"
            if ifcfg.get('DHCPCLASS'):
                kwargs["dhcpclass"] = ifcfg.get('DHCPCLASS')
        elif ifcfg.get('IPADDR'):
            kwargs["bootProto"] = "static"
            kwargs["ip"] = ifcfg.get('IPADDR')
            netmask = ifcfg.get('NETMASK')
            prefix = ifcfg.get('PREFIX')
            if not netmask and prefix:
                netmask = prefix2netmask(int(prefix))
            if netmask:
                kwargs["netmask"] = netmask
            # note that --gateway is common for ipv4 and ipv6
            if ifcfg.get('GATEWAY'):
                kwargs["gateway"] = ifcfg.get('GATEWAY')
        elif ifcfg.get('IPADDR0'):
            kwargs["bootProto"] = "static"
            kwargs["ip"] = ifcfg.get('IPADDR0')
            prefix = ifcfg.get('PREFIX0')
            if prefix:
                netmask = prefix2netmask(int(prefix))
                kwargs["netmask"] = netmask
            # note that --gateway is common for ipv4 and ipv6
            if ifcfg.get('GATEWAY0'):
                kwargs["gateway"] = ifcfg.get('GATEWAY0')

    # ipv6
    if not ifcfg.get('IPV6INIT') or ifcfg.get('IPV6INIT') == "no":
        kwargs["noipv6"] = True
    else:
        if ifcfg.get('IPV6_AUTOCONF') in ("yes", ""):
            kwargs["ipv6"] = "auto"
        else:
            if ifcfg.get('IPV6ADDR'):
                kwargs["ipv6"] = ifcfg.get('IPV6ADDR')
                if ifcfg.get('IPV6_DEFAULTGW') \
                        and ifcfg.get('IPV6_DEFAULTGW') != "::":
                    kwargs["ipv6gateway"] = ifcfg.get('IPV6_DEFAULTGW')
            if ifcfg.get('DHCPV6C') == "yes":
                kwargs["ipv6"] = "dhcp"

    # ipv4 and ipv6
    dnsline = ''
    for key in ifcfg.info.keys():
        if util.upperASCII(key).startswith('DNS'):
            if dnsline == '':
                dnsline = ifcfg.get(key)
            else:
                dnsline += "," + ifcfg.get(key)
    if dnsline:
        kwargs["nameserver"] = dnsline

    if ifcfg.get("ETHTOOL_OPTS"):
        kwargs["ethtool"] = ifcfg.get("ETHTOOL_OPTS")

    if ifcfg.get("ESSID"):
        kwargs["essid"] = ifcfg.get("ESSID")

    # hostname
    if ifcfg.get("DHCP_HOSTNAME"):
        kwargs["hostname"] = ifcfg.get("DHCP_HOSTNAME")

    iface = ifcfg.get("DEVICE")
    if not iface:
        hwaddr = ifcfg.get("HWADDR")
        if hwaddr:
            iface = get_iface_from_hwaddr(nm_client, hwaddr)
    if iface:
        kwargs["device"] = iface

    # bonding
    # FIXME: dracut has only BOND_OPTS
    if ifcfg.get("BONDING_MASTER") == "yes" or ifcfg.get("TYPE") == "Bond":
        slaves = sorted(
            get_slaves_from_ifcfgs(
                nm_client,
                "MASTER",
                [ifcfg.get("DEVICE"), ifcfg.get("UUID")],
                root_path=root_path))
        if slaves:
            kwargs["bondslaves"] = ",".join(iface for iface, uuid in slaves)
        bondopts = ifcfg.get("BONDING_OPTS")
        if bondopts:
            sep = ","
            if sep in bondopts:
                sep = ";"
            kwargs["bondopts"] = sep.join(bondopts.split())

    # vlan
    if ifcfg.get("VLAN") == "yes" or ifcfg.get("TYPE") == "Vlan":
        physdev = ifcfg.get("PHYSDEV")
        if len(physdev) == NM_CONNECTION_UUID_LENGTH:
            physdev = get_iface_from_connection(nm_client, physdev)
        kwargs["device"] = physdev
        kwargs["vlanid"] = ifcfg.get("VLAN_ID")
        interface_name = ifcfg.get("DEVICE")
        default_name = default_ks_vlan_interface_name(kwargs["device"],
                                                      kwargs["vlanid"])
        if interface_name and interface_name != default_name:
            kwargs["interfacename"] = interface_name

    # bridging
    if ifcfg.get("TYPE") == "Bridge":
        slaves = sorted(
            get_slaves_from_ifcfgs(
                nm_client,
                "BRIDGE",
                [ifcfg.get("DEVICE"), ifcfg.get("UUID")],
                root_path=root_path))
        if slaves:
            kwargs["bridgeslaves"] = ",".join(iface for iface, uuid in slaves)

        bridgeopts = ifcfg.get("BRIDGING_OPTS").replace('_', '-').split()
        if ifcfg.get("STP"):
            bridgeopts.append("%s=%s" % ("stp", ifcfg.get("STP")))
        if ifcfg.get("DELAY"):
            bridgeopts.append("%s=%s" % ("forward-delay", ifcfg.get("DELAY")))
        if bridgeopts:
            kwargs["bridgeopts"] = ",".join(bridgeopts)

    nd = network_data_class(**kwargs)

    # teaming
    if ifcfg.get("TYPE") == "Team" or ifcfg.get("DEVICETYPE") == "Team":
        slaves = sorted(
            get_slaves_from_ifcfgs(
                nm_client,
                "TEAM_MASTER",
                [ifcfg.get("DEVICE"), ifcfg.get("UUID")],
                root_path=root_path))
        for iface, uuid in slaves:
            team_port_cfg = get_team_port_config_from_connection(
                nm_client, uuid)
            nd.teamslaves.append((iface, team_port_cfg))
        teamconfig = get_team_config_from_connection(nm_client,
                                                     ifcfg.get("UUID"))
        if teamconfig:
            nd.teamconfig = teamconfig
    return nd
Example #2
0
def get_kickstart_network_data(ifcfg, nm_client, network_data_class, root_path=""):
    """Get kickstart data from ifcfg object.

    :param ifcfg: ifcfg file object
    :type ifcfg: IfcfgFile
    :param nm_client: instance of NetworkManager client
    :type nm_client: NM.Client
    :param network_data_class: pykickstart network command data class
    :type: pykickstart BaseData
    :param root_path: optional root path for ifcfg files to be updated
    :type root_path: str
    :returns: network_data object corresponding to the ifcfg object
    :rtype: network_data_class object instance
    """
    ifcfg.read()
    kwargs = {}

    # no network command for non-virtual device slaves
    if ifcfg.get("TYPE") not in ("Bond", "Team") and ifcfg.get("DEVICETYPE") != "Team":
        if ifcfg.get("MASTER") or ifcfg.get("TEAM_MASTER") or ifcfg.get("BRIDGE"):
            return None

    # no support for wireless
    if ifcfg.get("TYPE") == "Wireless":
        return None

    # ipv4 and ipv6
    if ifcfg.get("ONBOOT") and ifcfg.get("ONBOOT") == "no":
        kwargs["onboot"] = False
    if ifcfg.get('MTU') and ifcfg.get('MTU') != "0":
        kwargs["mtu"] = ifcfg.get('MTU')
    # ipv4
    if not ifcfg.get('BOOTPROTO'):
        kwargs["noipv4"] = True
    else:
        if util.lowerASCII(ifcfg.get('BOOTPROTO')) == 'dhcp':
            kwargs["bootProto"] = "dhcp"
            if ifcfg.get('DHCPCLASS'):
                kwargs["dhcpclass"] = ifcfg.get('DHCPCLASS')
        elif ifcfg.get('IPADDR'):
            kwargs["bootProto"] = "static"
            kwargs["ip"] = ifcfg.get('IPADDR')
            netmask = ifcfg.get('NETMASK')
            prefix = ifcfg.get('PREFIX')
            if not netmask and prefix:
                netmask = prefix2netmask(int(prefix))
            if netmask:
                kwargs["netmask"] = netmask
            # note that --gateway is common for ipv4 and ipv6
            if ifcfg.get('GATEWAY'):
                kwargs["gateway"] = ifcfg.get('GATEWAY')
        elif ifcfg.get('IPADDR0'):
            kwargs["bootProto"] = "static"
            kwargs["ip"] = ifcfg.get('IPADDR0')
            prefix = ifcfg.get('PREFIX0')
            if prefix:
                netmask = prefix2netmask(int(prefix))
                kwargs["netmask"] = netmask
            # note that --gateway is common for ipv4 and ipv6
            if ifcfg.get('GATEWAY0'):
                kwargs["gateway"] = ifcfg.get('GATEWAY0')

    # ipv6
    if not ifcfg.get('IPV6INIT') or ifcfg.get('IPV6INIT') == "no":
        kwargs["noipv6"] = True
    else:
        if ifcfg.get('IPV6_AUTOCONF') in ("yes", ""):
            kwargs["ipv6"] = "auto"
        else:
            if ifcfg.get('IPV6ADDR'):
                kwargs["ipv6"] = ifcfg.get('IPV6ADDR')
                if ifcfg.get('IPV6_DEFAULTGW') \
                        and ifcfg.get('IPV6_DEFAULTGW') != "::":
                    kwargs["ipv6gateway"] = ifcfg.get('IPV6_DEFAULTGW')
            if ifcfg.get('DHCPV6C') == "yes":
                kwargs["ipv6"] = "dhcp"

    # ipv4 and ipv6
    dnsline = ''
    for key in ifcfg.info.keys():
        if util.upperASCII(key).startswith('DNS'):
            if dnsline == '':
                dnsline = ifcfg.get(key)
            else:
                dnsline += "," + ifcfg.get(key)
    if dnsline:
        kwargs["nameserver"] = dnsline

    if ifcfg.get("ETHTOOL_OPTS"):
        kwargs["ethtool"] = ifcfg.get("ETHTOOL_OPTS")

    if ifcfg.get("ESSID"):
        kwargs["essid"] = ifcfg.get("ESSID")

    # hostname
    if ifcfg.get("DHCP_HOSTNAME"):
        kwargs["hostname"] = ifcfg.get("DHCP_HOSTNAME")

    iface = ifcfg.get("DEVICE")
    if not iface:
        hwaddr = ifcfg.get("HWADDR")
        if hwaddr:
            iface = get_iface_from_hwaddr(nm_client, hwaddr)
    if iface:
        kwargs["device"] = iface

    # bonding
    # FIXME: dracut has only BOND_OPTS
    if ifcfg.get("BONDING_MASTER") == "yes" or ifcfg.get("TYPE") == "Bond":
        slaves = sorted(get_slaves_from_ifcfgs(nm_client,
                                               "MASTER",
                                               [ifcfg.get("DEVICE"), ifcfg.get("UUID")],
                                               root_path=root_path))
        if slaves:
            kwargs["bondslaves"] = ",".join(iface for iface, uuid in slaves)
        bondopts = ifcfg.get("BONDING_OPTS")
        if bondopts:
            sep = ","
            if sep in bondopts:
                sep = ";"
            kwargs["bondopts"] = sep.join(bondopts.split())

    # vlan
    if ifcfg.get("VLAN") == "yes" or ifcfg.get("TYPE") == "Vlan":
        physdev = ifcfg.get("PHYSDEV")
        if len(physdev) == NM_CONNECTION_UUID_LENGTH:
            physdev = get_iface_from_connection(nm_client, physdev)
        kwargs["device"] = physdev
        kwargs["vlanid"] = ifcfg.get("VLAN_ID")
        interface_name = ifcfg.get("DEVICE")
        if interface_name and interface_name != default_ks_vlan_interface_name(kwargs["device"], kwargs["vlanid"]):
            kwargs["interfacename"] = interface_name

    # bridging
    if ifcfg.get("TYPE") == "Bridge":
        slaves = sorted(get_slaves_from_ifcfgs(nm_client,
                                               "BRIDGE",
                                               [ifcfg.get("DEVICE"), ifcfg.get("UUID")],
                                               root_path=root_path))
        if slaves:
            kwargs["bridgeslaves"] = ",".join(iface for iface, uuid in slaves)

        bridgeopts = ifcfg.get("BRIDGING_OPTS").replace('_', '-').split()
        if ifcfg.get("STP"):
            bridgeopts.append("%s=%s" % ("stp", ifcfg.get("STP")))
        if ifcfg.get("DELAY"):
            bridgeopts.append("%s=%s" % ("forward-delay", ifcfg.get("DELAY")))
        if bridgeopts:
            kwargs["bridgeopts"] = ",".join(bridgeopts)

    nd = network_data_class(**kwargs)

    # teaming
    if ifcfg.get("TYPE") == "Team" or ifcfg.get("DEVICETYPE") == "Team":
        slaves = sorted(get_slaves_from_ifcfgs(nm_client,
                                               "TEAM_MASTER",
                                               [ifcfg.get("DEVICE"), ifcfg.get("UUID")],
                                               root_path=root_path))
        for iface, uuid in slaves:
            team_port_cfg = get_team_port_config_from_connection(nm_client, uuid)
            nd.teamslaves.append((iface, team_port_cfg))
        teamconfig = get_team_config_from_connection(nm_client, ifcfg.get("UUID"))
        if teamconfig:
            nd.teamconfig = teamconfig
    return nd