Improve logging in the dnsmasq DHCP provider
Currently, it logs a lot of entries without context, which won't be readable when several nodes are deployed at the same time, nor when someone greps for a node UUID. Make fewer log entries and add node UUID for context. While here, modernize the code a bit. Change-Id: I3a840e47a09e77a9f8d35a7cf400c4bdd4111f91
This commit is contained in:
parent
b44d16a155
commit
40edeed615
@ -50,35 +50,41 @@ class DnsmasqDHCPApi(base.BaseDHCP):
|
|||||||
node = task.node
|
node = task.node
|
||||||
macs = set(self._pxe_enabled_macs(task.ports))
|
macs = set(self._pxe_enabled_macs(task.ports))
|
||||||
|
|
||||||
opt_file = self._opt_file_path(node)
|
|
||||||
tag = node.driver_internal_info.get('dnsmasq_tag')
|
tag = node.driver_internal_info.get('dnsmasq_tag')
|
||||||
if not tag:
|
if not tag:
|
||||||
tag = uuidutils.generate_uuid()
|
tag = uuidutils.generate_uuid()
|
||||||
node.set_driver_internal_info('dnsmasq_tag', tag)
|
node.set_driver_internal_info('dnsmasq_tag', tag)
|
||||||
node.save()
|
node.save()
|
||||||
|
|
||||||
LOG.debug('Writing to %s:', opt_file)
|
option_entries = []
|
||||||
|
|
||||||
|
for option in options:
|
||||||
|
try:
|
||||||
|
option_entries.append(
|
||||||
|
f'tag:{tag},{option["opt_name"]},{option["opt_value"]}')
|
||||||
|
except KeyError as missing:
|
||||||
|
LOG.warning('Ignoring option %(opt)s for node %(node)s: '
|
||||||
|
'missing %(missing)s',
|
||||||
|
{'opt': option, 'node': node.uuid,
|
||||||
|
'missing': missing})
|
||||||
|
|
||||||
|
opt_file = self._opt_file_path(node)
|
||||||
|
LOG.debug('Writing DHCP options for node %(node)s to %(dest)s: '
|
||||||
|
'%(opts)s', {'node': node.uuid, 'dest': opt_file,
|
||||||
|
'opts': '; '.join(option_entries)})
|
||||||
with open(opt_file, 'w') as f:
|
with open(opt_file, 'w') as f:
|
||||||
# Apply each option by tag
|
f.write('\n'.join(option_entries) + '\n')
|
||||||
for option in options:
|
|
||||||
entry = 'tag:{tag},{opt_name},{opt_value}\n'.format(
|
|
||||||
tag=tag,
|
|
||||||
opt_name=option.get('opt_name'),
|
|
||||||
opt_value=option.get('opt_value'),
|
|
||||||
)
|
|
||||||
LOG.debug(entry)
|
|
||||||
f.write(entry)
|
|
||||||
|
|
||||||
for mac in macs:
|
for mac in macs:
|
||||||
|
# Tag each address with the unique uuid scoped to
|
||||||
|
# this node and DHCP transaction
|
||||||
host_file = self._host_file_path(mac)
|
host_file = self._host_file_path(mac)
|
||||||
LOG.debug('Writing to %s:', host_file)
|
entry = f'{mac},set:{tag},set:ironic'
|
||||||
|
LOG.debug('Writing DHCP host file for node %(node)s to %(dest)s: '
|
||||||
|
'%(entry)s', {'node': node.uuid, 'dest': host_file,
|
||||||
|
'entry': entry})
|
||||||
with open(host_file, 'w') as f:
|
with open(host_file, 'w') as f:
|
||||||
# Tag each address with the unique uuid scoped to
|
f.write(entry + '\n')
|
||||||
# this node and DHCP transaction
|
|
||||||
entry = '{mac},set:{tag},set:ironic\n'.format(
|
|
||||||
mac=mac, tag=tag)
|
|
||||||
LOG.debug(entry)
|
|
||||||
f.write(entry)
|
|
||||||
|
|
||||||
def _opt_file_path(self, node):
|
def _opt_file_path(self, node):
|
||||||
return os.path.join(CONF.dnsmasq.dhcp_optsdir,
|
return os.path.join(CONF.dnsmasq.dhcp_optsdir,
|
||||||
@ -131,15 +137,20 @@ class DnsmasqDHCPApi(base.BaseDHCP):
|
|||||||
macs = set(self._pxe_enabled_macs(task.ports))
|
macs = set(self._pxe_enabled_macs(task.ports))
|
||||||
for mac in macs:
|
for mac in macs:
|
||||||
host_file = self._host_file_path(mac)
|
host_file = self._host_file_path(mac)
|
||||||
|
entry = f'{mac},ignore'
|
||||||
|
LOG.debug('Writing DHCP host file for node %(node)s to %(dest)s: '
|
||||||
|
'%(entry)s', {'node': node.uuid, 'dest': host_file,
|
||||||
|
'entry': entry})
|
||||||
with open(host_file, 'w') as f:
|
with open(host_file, 'w') as f:
|
||||||
entry = '{mac},ignore\n'.format(mac=mac)
|
f.write(entry + '\n')
|
||||||
f.write(entry)
|
|
||||||
|
|
||||||
# Deleting the file containing dhcp-option won't remove the rules from
|
# Deleting the file containing dhcp-option won't remove the rules from
|
||||||
# dnsmasq but no requests will be tagged with the dnsmasq_tag uuid so
|
# dnsmasq but no requests will be tagged with the dnsmasq_tag uuid so
|
||||||
# these rules will not apply.
|
# these rules will not apply.
|
||||||
opt_file = self._opt_file_path(node)
|
opt_file = self._opt_file_path(node)
|
||||||
if os.path.exists(opt_file):
|
if os.path.exists(opt_file):
|
||||||
|
LOG.debug('Removing DHCP options file for node %(node)s at '
|
||||||
|
'%(dest)s', {'node': node.uuid, 'dest': opt_file})
|
||||||
os.remove(opt_file)
|
os.remove(opt_file)
|
||||||
|
|
||||||
def supports_ipxe_tag(self):
|
def supports_ipxe_tag(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user