[yoga] Ensure get_requests_for_local_unit doesn't fail on incomplete relation
This is a rebuild/make sync for charms to pickup the fix in charmhelpers to fix any inadvertant accesses of ['ca'] in the relation data before it is available from vault in the certificates relation. Fix in charmhelpers is in [1]. [1] https://github.com/juju/charm-helpers/pull/827 Closes-Bug: #2028683 Change-Id: Ie984047ddd89fd3ed4976b9927b1ae59d58c31e1
This commit is contained in:
@@ -414,18 +414,27 @@ def get_requests_for_local_unit(relation_name=None):
|
||||
is_legacy_request = set(sent).intersection(legacy_keys)
|
||||
for unit in related_units(rid):
|
||||
data = relation_get(rid=rid, unit=unit)
|
||||
if data.get(raw_certs_key):
|
||||
bundles.append({
|
||||
'ca': data['ca'],
|
||||
'chain': data.get('chain'),
|
||||
'certs': json.loads(data[raw_certs_key])})
|
||||
elif is_legacy_request:
|
||||
bundles.append({
|
||||
'ca': data['ca'],
|
||||
'chain': data.get('chain'),
|
||||
'certs': {sent['common_name']:
|
||||
{'cert': data.get(local_name + '.server.cert'),
|
||||
'key': data.get(local_name + '.server.key')}}})
|
||||
# Note: Bug#2028683 - data may not be available if the certificates
|
||||
# relation hasn't been populated by the providing charm. If no 'ca'
|
||||
# in the data then don't attempt the bundle at all.
|
||||
if data.get('ca'):
|
||||
if data.get(raw_certs_key):
|
||||
bundles.append({
|
||||
'ca': data['ca'],
|
||||
'chain': data.get('chain'),
|
||||
'certs': json.loads(data[raw_certs_key])
|
||||
})
|
||||
elif is_legacy_request:
|
||||
bundles.append({
|
||||
'ca': data['ca'],
|
||||
'chain': data.get('chain'),
|
||||
'certs': {
|
||||
sent['common_name']: {
|
||||
'cert': data.get(local_name + '.server.cert'),
|
||||
'key': data.get(local_name + '.server.key')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return bundles
|
||||
|
||||
|
||||
@@ -2562,14 +2562,18 @@ class OVSDPDKDeviceContext(OSContextGenerator):
|
||||
:rtype: List[int]
|
||||
"""
|
||||
cores = []
|
||||
ranges = cpulist.split(',')
|
||||
for cpu_range in ranges:
|
||||
if "-" in cpu_range:
|
||||
cpu_min_max = cpu_range.split('-')
|
||||
cores += range(int(cpu_min_max[0]),
|
||||
int(cpu_min_max[1]) + 1)
|
||||
else:
|
||||
cores.append(int(cpu_range))
|
||||
if cpulist and re.match(r"^[0-9,\-^]*$", cpulist):
|
||||
ranges = cpulist.split(',')
|
||||
for cpu_range in ranges:
|
||||
if "-" in cpu_range:
|
||||
cpu_min_max = cpu_range.split('-')
|
||||
cores += range(int(cpu_min_max[0]),
|
||||
int(cpu_min_max[1]) + 1)
|
||||
elif "^" in cpu_range:
|
||||
cpu_rm = cpu_range.split('^')
|
||||
cores.remove(int(cpu_rm[1]))
|
||||
else:
|
||||
cores.append(int(cpu_range))
|
||||
return cores
|
||||
|
||||
def _numa_node_cores(self):
|
||||
@@ -2588,36 +2592,32 @@ class OVSDPDKDeviceContext(OSContextGenerator):
|
||||
|
||||
def cpu_mask(self):
|
||||
"""Get hex formatted CPU mask
|
||||
|
||||
The mask is based on using the first config:dpdk-socket-cores
|
||||
cores of each NUMA node in the unit.
|
||||
:returns: hex formatted CPU mask
|
||||
:rtype: str
|
||||
"""
|
||||
return self.cpu_masks()['dpdk_lcore_mask']
|
||||
|
||||
def cpu_masks(self):
|
||||
"""Get hex formatted CPU masks
|
||||
|
||||
The mask is based on using the first config:dpdk-socket-cores
|
||||
cores of each NUMA node in the unit, followed by the
|
||||
next config:pmd-socket-cores
|
||||
|
||||
:returns: Dict of hex formatted CPU masks
|
||||
:rtype: Dict[str, str]
|
||||
"""
|
||||
num_lcores = config('dpdk-socket-cores')
|
||||
pmd_cores = config('pmd-socket-cores')
|
||||
lcore_mask = 0
|
||||
pmd_mask = 0
|
||||
num_cores = config('dpdk-socket-cores')
|
||||
mask = 0
|
||||
for cores in self._numa_node_cores().values():
|
||||
for core in cores[:num_lcores]:
|
||||
lcore_mask = lcore_mask | 1 << core
|
||||
for core in cores[num_lcores:][:pmd_cores]:
|
||||
pmd_mask = pmd_mask | 1 << core
|
||||
return {
|
||||
'pmd_cpu_mask': format(pmd_mask, '#04x'),
|
||||
'dpdk_lcore_mask': format(lcore_mask, '#04x')}
|
||||
for core in cores[:num_cores]:
|
||||
mask = mask | 1 << core
|
||||
return format(mask, '#04x')
|
||||
|
||||
@classmethod
|
||||
def pmd_cpu_mask(cls):
|
||||
"""Get hex formatted pmd CPU mask
|
||||
|
||||
The mask is based on config:pmd-cpu-set.
|
||||
:returns: hex formatted CPU mask
|
||||
:rtype: str
|
||||
"""
|
||||
mask = 0
|
||||
cpu_list = cls._parse_cpu_list(config('pmd-cpu-set'))
|
||||
if cpu_list:
|
||||
for core in cpu_list:
|
||||
mask = mask | 1 << core
|
||||
return format(mask, '#x')
|
||||
|
||||
def socket_memory(self):
|
||||
"""Formatted list of socket memory configuration per socket.
|
||||
@@ -2696,6 +2696,7 @@ class OVSDPDKDeviceContext(OSContextGenerator):
|
||||
ctxt['device_whitelist'] = self.device_whitelist()
|
||||
ctxt['socket_memory'] = self.socket_memory()
|
||||
ctxt['cpu_mask'] = self.cpu_mask()
|
||||
ctxt['pmd_cpu_mask'] = self.pmd_cpu_mask()
|
||||
return ctxt
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user