Merge "add a new funtion to return IP address(es) of a host machine"
This commit is contained in:
commit
1ebf2098c6
@ -24,6 +24,8 @@ import traceback
|
||||
|
||||
from oslo_concurrency import processutils as putils
|
||||
from oslo_log import log as logging
|
||||
from oslo_utils import netutils
|
||||
import psutil
|
||||
|
||||
from os_brick import exception
|
||||
from os_brick.i18n import _
|
||||
@ -62,6 +64,37 @@ class LightOSConnector(base.BaseLinuxConnector):
|
||||
self.message_queue = message_queue
|
||||
self.DISCOVERY_DIR_PATH = '/etc/discovery-client/discovery.d/'
|
||||
|
||||
@staticmethod
|
||||
def get_ip_addresses():
|
||||
"""Find all IPs for the host machine, return list of IP addresses."""
|
||||
def get_ip_addresses_psutil():
|
||||
ip_addresses = []
|
||||
for interface, snics in psutil.net_if_addrs().items():
|
||||
for snic in snics:
|
||||
# Collect each (interface, address) tuple
|
||||
ip_addresses.append((interface, snic.address))
|
||||
return ip_addresses
|
||||
|
||||
loop_back = ['lo']
|
||||
ips = []
|
||||
is_ipv6_enabled = netutils.is_ipv6_enabled()
|
||||
iface_with_ips = get_ip_addresses_psutil()
|
||||
for iface_ip_tuple in iface_with_ips:
|
||||
iface = iface_ip_tuple[0]
|
||||
ip = iface_ip_tuple[1]
|
||||
if iface in loop_back:
|
||||
continue
|
||||
if ip == "":
|
||||
continue
|
||||
if is_ipv6_enabled and netutils.is_valid_ipv6(ip):
|
||||
parts = ip.split("%")
|
||||
ip = parts[0]
|
||||
ips.append(ip)
|
||||
|
||||
elif netutils.is_valid_ipv4(ip):
|
||||
ips.append(ip)
|
||||
return ips
|
||||
|
||||
@staticmethod
|
||||
def get_connector_properties(root_helper, *args, **kwargs):
|
||||
"""The LightOS connector properties."""
|
||||
@ -71,6 +104,9 @@ class LightOSConnector(base.BaseLinuxConnector):
|
||||
execute=kwargs.get('execute'))
|
||||
hostnqn = utils.get_host_nqn()
|
||||
found_dsc = lightos_connector.find_dsc()
|
||||
host_ips = lightos_connector.get_ip_addresses()
|
||||
LOG.info('Current host hostNQN %s and IP(s) are %s ', hostnqn,
|
||||
host_ips)
|
||||
|
||||
if not found_dsc:
|
||||
LOG.debug('LIGHTOS: did not find dsc, continuing anyway.')
|
||||
@ -80,6 +116,7 @@ class LightOSConnector(base.BaseLinuxConnector):
|
||||
hostnqn, found_dsc)
|
||||
props['nqn'] = hostnqn
|
||||
props['found_dsc'] = found_dsc
|
||||
props['host_ips'] = host_ips
|
||||
else:
|
||||
LOG.debug('LIGHTOS: no hostnqn found.')
|
||||
|
||||
|
@ -18,6 +18,8 @@ import queue
|
||||
from unittest import mock
|
||||
from unittest.mock import mock_open
|
||||
|
||||
import psutil
|
||||
|
||||
from os_brick import exception
|
||||
from os_brick.initiator.connectors import lightos
|
||||
from os_brick.initiator import linuxscsi
|
||||
@ -26,6 +28,9 @@ from os_brick.tests.initiator import test_connector
|
||||
from os_brick import utils
|
||||
|
||||
FAKE_NQN = "nqn.fake.qnq"
|
||||
FAKE_HOST_IPS = [
|
||||
"1234:5678:9abc:def0:1234:5678:9abc:def0",
|
||||
"1234:5678:0:42::8a2e:370:7334", '172.17.0.1']
|
||||
|
||||
FAKE_LIGHTOS_CLUSTER_NODES = {
|
||||
"nodes": [
|
||||
@ -80,13 +85,16 @@ class LightosConnectorTestCase(test_connector.ConnectorTestCase):
|
||||
lightos_nodes=lightos_nodes
|
||||
)
|
||||
|
||||
@mock.patch.object(lightos.LightOSConnector, 'get_ip_addresses',
|
||||
return_value=FAKE_HOST_IPS)
|
||||
@mock.patch.object(utils, 'get_host_nqn',
|
||||
return_value=FAKE_NQN)
|
||||
@mock.patch.object(lightos.LightOSConnector, 'find_dsc',
|
||||
return_value=True)
|
||||
def test_get_connector_properties(self, mock_nqn, mock_dsc):
|
||||
def test_get_connector_properties(self, mock_nqn, mock_dsc, mock_host_ips):
|
||||
props = self.connector.get_connector_properties(None)
|
||||
expected_props = {"nqn": FAKE_NQN, "found_dsc": True}
|
||||
expected_props = {"nqn": FAKE_NQN, "found_dsc": True,
|
||||
"host_ips": FAKE_HOST_IPS}
|
||||
self.assertEqual(expected_props, props)
|
||||
|
||||
@mock.patch.object(lightos.http.client.HTTPConnection, "request",
|
||||
@ -202,6 +210,28 @@ class LightosConnectorTestCase(test_connector.ConnectorTestCase):
|
||||
self.assertEqual(self.connector.extend_volume(connection_properties),
|
||||
NUM_BLOCKS_IN_GIB * BLOCK_SIZE)
|
||||
|
||||
def mock_net_if_addr():
|
||||
class MockSnicAdd:
|
||||
def __init__(self, address):
|
||||
self.address = address
|
||||
|
||||
return {
|
||||
'lo': [
|
||||
MockSnicAdd(address='127.0.0.1'),
|
||||
MockSnicAdd(address='::1')
|
||||
],
|
||||
'wlp0s20f3': [
|
||||
MockSnicAdd(address=FAKE_HOST_IPS[2]),
|
||||
MockSnicAdd(address=FAKE_HOST_IPS[1]),
|
||||
MockSnicAdd(address=f'{FAKE_HOST_IPS[0]}%wlp0s20f3')
|
||||
]
|
||||
}
|
||||
|
||||
@mock.patch.object(psutil, 'net_if_addrs', new=mock_net_if_addr)
|
||||
def test_get_ips(self):
|
||||
self.assertEqual(sorted(self.connector.get_ip_addresses()),
|
||||
sorted(FAKE_HOST_IPS))
|
||||
|
||||
def test_monitor_message_queue_delete(self):
|
||||
message_queue = queue.Queue()
|
||||
connection = {"uuid": "123"}
|
||||
|
@ -15,3 +15,4 @@ oslo.utils>=6.0.0 # Apache-2.0
|
||||
requests>=2.25.1 # Apache-2.0
|
||||
tenacity>=6.3.1 # Apache-2.0
|
||||
os-win>=5.7.0 # Apache-2.0
|
||||
psutil>=5.7.2 # BSD
|
||||
|
Loading…
Reference in New Issue
Block a user