diff --git a/cr_module/bmc.py b/cr_module/bmc.py index 62ad8ce..f1af3a6 100644 --- a/cr_module/bmc.py +++ b/cr_module/bmc.py @@ -214,7 +214,7 @@ def get_bmc_info_generic(redfish_url): ip_addresses_string = None ip_addresses = [*network_inventory.ipv4_addresses, *network_inventory.ipv6_addresses] if len(ip_addresses) > 0: - ip_addresses_string = "/".join(ip_addresses) + ip_addresses_string = ", ".join(ip_addresses) duplex = autoneg = None if network_inventory.full_duplex is not None: diff --git a/cr_module/nic.py b/cr_module/nic.py index 00d2544..b182cb6 100644 --- a/cr_module/nic.py +++ b/cr_module/nic.py @@ -29,23 +29,45 @@ def get_network_interfaces(): def get_interface_ip_addresses(interface_data, protocol_type): + list_of_addresses = list() + def format_and_add_ip_address(address_data): + address_to_add: str = address_data.get("Address") + + if address_to_add is None or address_to_add in ['', '::', '0.0.0.0']: + return + + prefix_len = None + + # get IPv4 prefix length from subnet mask + if '.' in address_to_add and address_data.get("SubnetMask") is not None: + # noinspection PyBroadException + try: + prefix_len = sum(bin(int(x)).count('1') for x in address_data.get("SubnetMask").split('.')) + except Exception: + pass + + if ':' in address_to_add and address_data.get("PrefixLength") is not None: + address_to_add = address_to_add.lower() + prefix_len = address_data.get("PrefixLength") + + if prefix_len is not None: + list_of_addresses.append(f"{address_to_add}/{prefix_len}") + else: + list_of_addresses.append(address_to_add) + ip_addresses = grab(interface_data, protocol_type) # Cisco if isinstance(ip_addresses, dict): - if ip_addresses.get("Address") is not None: - list_of_addresses.append(ip_addresses.get("Address")) + format_and_add_ip_address(ip_addresses) if isinstance(ip_addresses, list): for ip_address in ip_addresses: - if ip_address.get("Address") is not None: - list_of_addresses.append(ip_address.get("Address")) - - list_of_addresses = list(set(list_of_addresses)) + format_and_add_ip_address(ip_address) - return [address for address in list_of_addresses if address not in ['', '::', '0.0.0.0']] + return list(set(list_of_addresses)) def format_interface_addresses(addresses): @@ -686,7 +708,7 @@ def add_port_status(port_inventory_item): ip_addresses_string = None ip_addresses = [*port_inventory_item.ipv4_addresses, *port_inventory_item.ipv6_addresses] if len(ip_addresses) > 0: - ip_addresses_string = "/".join(ip_addresses) + ip_addresses_string = ", ".join(ip_addresses) duplex = autoneg = None if port_inventory_item.full_duplex is not None: