mirror of
https://github.com/ceph/ceph
synced 2025-01-20 01:51:34 +00:00
Merge pull request #45710 from rkachach/fix_issue_55132
mgr/cephadm: fixing public network conf parsing Reviewed-by: Adam King <adking@redhat.com>
This commit is contained in:
commit
52c35c4a78
@ -4368,6 +4368,7 @@ def check_subnet(subnets: str) -> Tuple[int, List[int], str]:
|
||||
subnet_list = subnets.split(',')
|
||||
for subnet in subnet_list:
|
||||
# ensure the format of the string is as expected address/netmask
|
||||
subnet = subnet.strip()
|
||||
if not re.search(r'\/\d+$', subnet):
|
||||
rc = 1
|
||||
errors.append(f'{subnet} is not in CIDR format (address/netmask)')
|
||||
@ -4466,7 +4467,11 @@ def prepare_mon_addresses(
|
||||
logger.debug('Base mon IP is %s, final addrv is %s' % (base_ip, addr_arg))
|
||||
|
||||
mon_network = None
|
||||
if not ctx.skip_mon_network:
|
||||
cp = read_config(ctx.config)
|
||||
if cp.has_option('global', 'public_network'):
|
||||
mon_network = cp.get('global', 'public_network')
|
||||
|
||||
if mon_network is None and not ctx.skip_mon_network:
|
||||
# make sure IP is configured locally, and then figure out the
|
||||
# CIDR network
|
||||
errmsg = f'Cannot infer CIDR network for mon IP `{base_ip}`'
|
||||
@ -4489,18 +4494,21 @@ def prepare_mon_addresses(
|
||||
|
||||
|
||||
def prepare_cluster_network(ctx: CephadmContext) -> Tuple[str, bool]:
|
||||
cluster_network = ''
|
||||
ipv6_cluster_network = False
|
||||
# the cluster network may not exist on this node, so all we can do is
|
||||
# validate that the address given is valid ipv4 or ipv6 subnet
|
||||
if ctx.cluster_network:
|
||||
rc, versions, err_msg = check_subnet(ctx.cluster_network)
|
||||
cp = read_config(ctx.config)
|
||||
cluster_network = ctx.cluster_network
|
||||
if cluster_network is None and cp.has_option('global', 'cluster_network'):
|
||||
cluster_network = cp.get('global', 'cluster_network')
|
||||
|
||||
if cluster_network:
|
||||
rc, versions, err_msg = check_subnet(cluster_network)
|
||||
if rc:
|
||||
raise Error(f'Invalid --cluster-network parameter: {err_msg}')
|
||||
cluster_network = ctx.cluster_network
|
||||
ipv6_cluster_network = True if 6 in versions else False
|
||||
else:
|
||||
logger.info('- internal network (--cluster-network) has not '
|
||||
logger.info('Internal network (--cluster-network) has not '
|
||||
'been provided, OSD replication will default to '
|
||||
'the public_network')
|
||||
|
||||
|
@ -1949,3 +1949,35 @@ class TestSNMPGateway:
|
||||
with pytest.raises(Exception) as e:
|
||||
c = cd.get_container(ctx, fsid, 'snmp-gateway', 'daemon_id')
|
||||
assert str(e.value) == 'not a valid snmp version: V1'
|
||||
|
||||
def test_ipv4_subnet(self):
|
||||
rc, v, msg = cd.check_subnet('192.168.1.0/24')
|
||||
assert rc == 0 and v[0] == 4
|
||||
|
||||
def test_ipv4_subnet_list(self):
|
||||
rc, v, msg = cd.check_subnet('192.168.1.0/24,10.90.90.0/24')
|
||||
assert rc == 0 and not msg
|
||||
|
||||
def test_ipv4_subnet_list_with_spaces(self):
|
||||
rc, v, msg = cd.check_subnet('192.168.1.0/24, 10.90.90.0/24 ')
|
||||
assert rc == 0 and not msg
|
||||
|
||||
def test_ipv4_subnet_badlist(self):
|
||||
rc, v, msg = cd.check_subnet('192.168.1.0/24,192.168.1.1')
|
||||
assert rc == 1 and msg
|
||||
|
||||
def test_ipv4_subnet_mixed(self):
|
||||
rc, v, msg = cd.check_subnet('192.168.100.0/24,fe80::/64')
|
||||
assert rc == 0 and v == [4,6]
|
||||
|
||||
def test_ipv6_subnet(self):
|
||||
rc, v, msg = cd.check_subnet('fe80::/64')
|
||||
assert rc == 0 and v[0] == 6
|
||||
|
||||
def test_subnet_mask_missing(self):
|
||||
rc, v, msg = cd.check_subnet('192.168.1.58')
|
||||
assert rc == 1 and msg
|
||||
|
||||
def test_subnet_mask_junk(self):
|
||||
rc, v, msg = cd.check_subnet('wah')
|
||||
assert rc == 1 and msg
|
||||
|
Loading…
Reference in New Issue
Block a user