)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"4f1a6a6d3b49a0c0ce6e0a810e3032a32ba183d1","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2023-08-29 11:49:11 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ironic parameter rework and default NTP server"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I2ef63233eae661ed056bfa215b2875f44e0b6134"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"80e4bca8_a46132d9","line":8,"updated":"2023-08-29 12:12:31.000000000","message":"Could you add a paragraph about the reason for this change?","commit_id":"a9588aaf84819b746fe94c5810865bc7ef7472fc"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"9fd8b57dfbf233fa6b1501e8985915df6c55f121","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2023-08-29 11:49:11 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ironic parameter rework and default NTP server"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I2ef63233eae661ed056bfa215b2875f44e0b6134"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1204f568_dc7ae4c5","line":8,"in_reply_to":"80e4bca8_a46132d9","updated":"2023-09-08 15:55:22.000000000","message":"Done","commit_id":"a9588aaf84819b746fe94c5810865bc7ef7472fc"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":35264,"name":"Alex Welsh","email":"alex@stackhpc.com","username":"alex-welsh"},"change_message_id":"9b16e104139e9c70aaf2acb8a49b37d8078de292","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a1f9e4f0_382a8e14","updated":"2023-08-29 10:53:22.000000000","message":"Please add a releasenote","commit_id":"a9588aaf84819b746fe94c5810865bc7ef7472fc"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"b6487d63fdcf491ff84061aa2cdaca9629f53d31","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"500fc017_45d6745d","updated":"2023-09-26 16:11:26.000000000","message":"Please also update the ironic section in the docs: https://docs.openstack.org/kolla-ansible/latest/reference/bare-metal/ironic-guide.html. It\u0027s in doc/source/reference/bare-metal/ironic-guide.rst.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"62200f18e465e3c306b1acaa82dd192186b63ef0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3e529358_11828717","in_reply_to":"500fc017_45d6745d","updated":"2025-11-21 16:53:30.000000000","message":"Done","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"62200f18e465e3c306b1acaa82dd192186b63ef0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"c28b7533_99b4530f","updated":"2025-11-21 16:53:30.000000000","message":"I\u0027ve stripped this down a bit in the hope of getting it merge. It\u0027s an important component of Ironic deploy. Thanks for the original patch Hollie.","commit_id":"a887f48d42ff97af8373ec1893b0b9058b364c68"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"6ab431cc74654eb6f6bd8320200999d667e44a49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"f93a26b1_4923f300","updated":"2026-03-16 11:25:53.000000000","message":"It looks fine for the default case. I see:\n\n```\n[pxe]\nkernel_append_params \u003d nofb nomodeset vga\u003dnormal console\u003dtty0 console\u003dttyS0,115200n8\n```","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"}],"ansible/roles/ironic/defaults/main.yml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"4f1a6a6d3b49a0c0ce6e0a810e3032a32ba183d1","unresolved":true,"context_lines":[{"line_number":286,"context_line":"ironic_http_url: \"http://{{ ironic_http_interface_address | put_address_in_context(\u0027url\u0027) }}:{{ ironic_http_port }}\""},{"line_number":287,"context_line":"ironic_enable_rolling_upgrade: \"yes\""},{"line_number":288,"context_line":"ironic_upgrade_skip_wait_check: false"},{"line_number":289,"context_line":"ironic_inspector_kernel_cmdline_extras: []"},{"line_number":290,"context_line":"ironic_inspector_pxe_filter: \"{% if enable_neutron | bool %}dnsmasq{% else %}noop{% endif %}\""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"903ac227_ff92ba07","side":"PARENT","line":289,"updated":"2023-08-29 12:12:31.000000000","message":"We need to continue to support this variable name for backward compatibility. You can either keep the same naming scheme or use this as a default for your new variable:\n\nironic_inspector_kernel_params_extras: \"{{ ironic_inspector_kernel_params_extras }}\"","commit_id":"6af17540711f624510aa9684dba26bcad1431e55"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"9fd8b57dfbf233fa6b1501e8985915df6c55f121","unresolved":false,"context_lines":[{"line_number":286,"context_line":"ironic_http_url: \"http://{{ ironic_http_interface_address | put_address_in_context(\u0027url\u0027) }}:{{ ironic_http_port }}\""},{"line_number":287,"context_line":"ironic_enable_rolling_upgrade: \"yes\""},{"line_number":288,"context_line":"ironic_upgrade_skip_wait_check: false"},{"line_number":289,"context_line":"ironic_inspector_kernel_cmdline_extras: []"},{"line_number":290,"context_line":"ironic_inspector_pxe_filter: \"{% if enable_neutron | bool %}dnsmasq{% else %}noop{% endif %}\""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"f41bf88a_b714525e","side":"PARENT","line":289,"in_reply_to":"903ac227_ff92ba07","updated":"2023-09-08 15:55:22.000000000","message":"Done","commit_id":"6af17540711f624510aa9684dba26bcad1431e55"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"4f1a6a6d3b49a0c0ce6e0a810e3032a32ba183d1","unresolved":true,"context_lines":[{"line_number":352,"context_line":"  - \"nomodeset\""},{"line_number":353,"context_line":"  - \"vga\u003dnormal\""},{"line_number":354,"context_line":"  - \"console\u003dtty0\""},{"line_number":355,"context_line":"  - \"console\u003dttyS0,115200n8\""},{"line_number":356,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":357,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":358,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bb832800_888fc20a","line":355,"updated":"2023-08-29 12:12:31.000000000","message":"s/115200n8/{{ ironic_console_serial_speed }}/","commit_id":"a9588aaf84819b746fe94c5810865bc7ef7472fc"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"9fd8b57dfbf233fa6b1501e8985915df6c55f121","unresolved":false,"context_lines":[{"line_number":352,"context_line":"  - \"nomodeset\""},{"line_number":353,"context_line":"  - \"vga\u003dnormal\""},{"line_number":354,"context_line":"  - \"console\u003dtty0\""},{"line_number":355,"context_line":"  - \"console\u003dttyS0,115200n8\""},{"line_number":356,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":357,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":358,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"b94214ad_e62ee1d1","line":355,"in_reply_to":"bb832800_888fc20a","updated":"2023-09-08 15:55:22.000000000","message":"Done","commit_id":"a9588aaf84819b746fe94c5810865bc7ef7472fc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a63fa9532d75416060ad1ce7ffce9a17bf575278","unresolved":true,"context_lines":[{"line_number":354,"context_line":"  - \"vga\u003dnormal\""},{"line_number":355,"context_line":"  - \"console\u003dtty0\""},{"line_number":356,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":357,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":358,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":359,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"1210b376_767f8d31","line":357,"range":{"start_line":357,"start_character":4,"end_line":357,"end_character":48},"updated":"2023-09-08 15:54:13.000000000","message":"what will serve NTP here?","commit_id":"0e816fcfe248f99a5da20fa4dcb290592798b6cc"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"f9618afb67c7ce071cbbcce1118ec9f1c13cecbb","unresolved":true,"context_lines":[{"line_number":354,"context_line":"  - \"vga\u003dnormal\""},{"line_number":355,"context_line":"  - \"console\u003dtty0\""},{"line_number":356,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":357,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":358,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":359,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7c666e6a_48434134","line":357,"range":{"start_line":357,"start_character":4,"end_line":357,"end_character":48},"in_reply_to":"1210b376_767f8d31","updated":"2023-09-11 08:31:46.000000000","message":"NTP should be served by chrony right?","commit_id":"0e816fcfe248f99a5da20fa4dcb290592798b6cc"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"14480b6f3f74a10f22663fea5654fcce5fcbf394","unresolved":true,"context_lines":[{"line_number":354,"context_line":"  - \"vga\u003dnormal\""},{"line_number":355,"context_line":"  - \"console\u003dtty0\""},{"line_number":356,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":357,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":358,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":359,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9a8788a2_294e860b","line":357,"range":{"start_line":357,"start_character":4,"end_line":357,"end_character":48},"in_reply_to":"14799ec6_dd160dcd","updated":"2023-09-11 09:13:32.000000000","message":"Would it be a good idea to change that script to only check for chronyd and deprecate ntpd or only use it as a fallback?","commit_id":"0e816fcfe248f99a5da20fa4dcb290592798b6cc"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"62200f18e465e3c306b1acaa82dd192186b63ef0","unresolved":false,"context_lines":[{"line_number":354,"context_line":"  - \"vga\u003dnormal\""},{"line_number":355,"context_line":"  - \"console\u003dtty0\""},{"line_number":356,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":357,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":358,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":359,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5012492f_0f3816e5","line":357,"range":{"start_line":357,"start_character":4,"end_line":357,"end_character":48},"in_reply_to":"4a9d5b63_f37c6219","updated":"2025-11-21 16:53:30.000000000","message":"Done","commit_id":"0e816fcfe248f99a5da20fa4dcb290592798b6cc"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"b14e83fc27e87f40561609704d036016f8c53ef5","unresolved":true,"context_lines":[{"line_number":354,"context_line":"  - \"vga\u003dnormal\""},{"line_number":355,"context_line":"  - \"console\u003dtty0\""},{"line_number":356,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":357,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":358,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":359,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"4a9d5b63_f37c6219","line":357,"range":{"start_line":357,"start_character":4,"end_line":357,"end_character":48},"in_reply_to":"7aa965da_c098b741","updated":"2023-09-12 10:58:11.000000000","message":"Hopefully the latest patchset addresses this. It is still overriding default kernel options, perhaps it would be better to append the ipa-ntp-server variable after defaults?","commit_id":"0e816fcfe248f99a5da20fa4dcb290592798b6cc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"d8aa4be3e9108831fefbddc1ae41dda832a11a47","unresolved":true,"context_lines":[{"line_number":354,"context_line":"  - \"vga\u003dnormal\""},{"line_number":355,"context_line":"  - \"console\u003dtty0\""},{"line_number":356,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":357,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":358,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":359,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"14799ec6_dd160dcd","line":357,"range":{"start_line":357,"start_character":4,"end_line":357,"end_character":48},"in_reply_to":"7c666e6a_48434134","updated":"2023-09-11 08:35:23.000000000","message":"kolla-ansible does not deploy chrony, prechecks only check for running ntpd daemon and synchronised time, which does not imply that it\u0027s serving time for Ironic nodes via network (https://github.com/openstack/kolla-ansible/blob/master/ansible/roles/prechecks/tasks/timesync_checks.yml)","commit_id":"0e816fcfe248f99a5da20fa4dcb290592798b6cc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"0e3d7146a97ea5a832e55d54daba11dd30a5e0d8","unresolved":true,"context_lines":[{"line_number":354,"context_line":"  - \"vga\u003dnormal\""},{"line_number":355,"context_line":"  - \"console\u003dtty0\""},{"line_number":356,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":357,"context_line":"  - \"ipa-ntp-server\u003d{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":358,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":359,"context_line":"ironic_pxe_append_params: \"{{ ( ironic_pxe_append_params_default + ironic_pxe_append_params_extras ) | join(\u0027 \u0027) }}\""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7aa965da_c098b741","line":357,"range":{"start_line":357,"start_character":4,"end_line":357,"end_character":48},"in_reply_to":"9a8788a2_294e860b","updated":"2023-09-11 09:27:27.000000000","message":"That\u0027s not related, I just meant you can\u0027t assume that chronyd (or anything else) on the controllers will serve NTP service for Ironic baremetal nodes.\nKolla-Ansible is not Kayobe - and probably most operators use Kolla-Ansible without Kayobe.\nWe should rather introduce a var like ironic_ntp_server and allow people to set this (without overriding the whole kernel params list).\nWe could probably also not set a default value for that and not add ipa-ntp-server by default (if the variable is unset/None/empty).","commit_id":"0e816fcfe248f99a5da20fa4dcb290592798b6cc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"210a7e710e8aeff0f7a2be271026dfe2c6a8aba6","unresolved":true,"context_lines":[{"line_number":312,"context_line":"ironic_prometheus_exporter_data_dir: \"/var/lib/ironic-prometheus-exporter/data\""},{"line_number":313,"context_line":"ironic_prometheus_exporter_sensor_data_interval: 30"},{"line_number":314,"context_line":"ironic_prometheus_exporter_sensor_data_undeployed_nodes: \"true\""},{"line_number":315,"context_line":"ironic_ntp_server: \"{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":316,"context_line":"ironic_enable_ntp_precheck: true"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"cce98acd_555e4580","line":315,"updated":"2023-09-25 07:36:36.000000000","message":"This still assumes there\u0027s an NTP server on the controller nodes - and since NTP is UDP wait_for will not help","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"62200f18e465e3c306b1acaa82dd192186b63ef0","unresolved":false,"context_lines":[{"line_number":312,"context_line":"ironic_prometheus_exporter_data_dir: \"/var/lib/ironic-prometheus-exporter/data\""},{"line_number":313,"context_line":"ironic_prometheus_exporter_sensor_data_interval: 30"},{"line_number":314,"context_line":"ironic_prometheus_exporter_sensor_data_undeployed_nodes: \"true\""},{"line_number":315,"context_line":"ironic_ntp_server: \"{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":316,"context_line":"ironic_enable_ntp_precheck: true"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"570a3bc2_71bc7fbf","line":315,"in_reply_to":"cce98acd_555e4580","updated":"2025-11-21 16:53:30.000000000","message":"I\u0027ve changed the patch so that the setting is off by default, and people can opt in if they want to.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"8885f55ec294dca96021dff6c5d34c068aba4d32","unresolved":true,"context_lines":[{"line_number":368,"context_line":"####################"},{"line_number":369,"context_line":"# Kernel Parameters"},{"line_number":370,"context_line":"####################"},{"line_number":371,"context_line":"ironic_pxe_append_params_default:"},{"line_number":372,"context_line":"  - \"nofb\""},{"line_number":373,"context_line":"  - \"nomodeset\""},{"line_number":374,"context_line":"  - \"vga\u003dnormal\""}],"source_content_type":"text/x-yaml","patch_set":35,"id":"d34f8a04_ce718a48","line":371,"updated":"2025-12-15 17:46:04.000000000","message":"We need to set [redfish]/kernel_append_params, and ilo/kernel_append_params in a similar fashion. Would it make sense to have one variable without pxe in the name that sets them all?\n\nI don\u0027t know if you will need to customise them on a per driver level (redfish vs ilo vs pxe), but I suggest we start with a common set and add extra variables as and when the need presents itself.","commit_id":"4b8d228840327b206ffa5bc487a7cffde11ba416"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"c02a778577b260018073bec471dfb7a80b9a88be","unresolved":false,"context_lines":[{"line_number":368,"context_line":"####################"},{"line_number":369,"context_line":"# Kernel Parameters"},{"line_number":370,"context_line":"####################"},{"line_number":371,"context_line":"ironic_pxe_append_params_default:"},{"line_number":372,"context_line":"  - \"nofb\""},{"line_number":373,"context_line":"  - \"nomodeset\""},{"line_number":374,"context_line":"  - \"vga\u003dnormal\""}],"source_content_type":"text/x-yaml","patch_set":35,"id":"8d3a4577_ce28586a","line":371,"in_reply_to":"d34f8a04_ce718a48","updated":"2026-03-13 16:31:58.000000000","message":"I\u0027ve split it up as requested. In another change we could manage the other sections. I can\u0027t think of any reason why they would need to be different, apart from serial ports, but that could apply to the pxe driver too.","commit_id":"4b8d228840327b206ffa5bc487a7cffde11ba416"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"785e6a1a5e94081cc146eee6f1c5747c70cee545","unresolved":true,"context_lines":[{"line_number":374,"context_line":"  - \"vga\u003dnormal\""},{"line_number":375,"context_line":"  - \"console\u003dtty0\""},{"line_number":376,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":377,"context_line":"  - \"{% if ironic_ntp_server is defined %}ipa-ntp-server\u003d{{ ironic_ntp_server }}{% endif %}\""},{"line_number":378,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":379,"context_line":"ironic_pxe_append_params: \"{{ (ironic_pxe_append_params_default + ironic_pxe_append_params_extras) | select() | join(\u0027 \u0027) }}\""}],"source_content_type":"text/x-yaml","patch_set":35,"id":"c83d81fc_9b275220","line":377,"updated":"2025-12-15 18:11:24.000000000","message":"nit: I think the more common pattern is to define the variable as an empty string.","commit_id":"4b8d228840327b206ffa5bc487a7cffde11ba416"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"c02a778577b260018073bec471dfb7a80b9a88be","unresolved":false,"context_lines":[{"line_number":374,"context_line":"  - \"vga\u003dnormal\""},{"line_number":375,"context_line":"  - \"console\u003dtty0\""},{"line_number":376,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":377,"context_line":"  - \"{% if ironic_ntp_server is defined %}ipa-ntp-server\u003d{{ ironic_ntp_server }}{% endif %}\""},{"line_number":378,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":379,"context_line":"ironic_pxe_append_params: \"{{ (ironic_pxe_append_params_default + ironic_pxe_append_params_extras) | select() | join(\u0027 \u0027) }}\""}],"source_content_type":"text/x-yaml","patch_set":35,"id":"3fe902c4_44e6a2e6","line":377,"in_reply_to":"c83d81fc_9b275220","updated":"2026-03-13 16:31:58.000000000","message":"sorted","commit_id":"4b8d228840327b206ffa5bc487a7cffde11ba416"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b9abc249ee6600965a03675d111d8d73d940b902","unresolved":true,"context_lines":[{"line_number":367,"context_line":"# NTP"},{"line_number":368,"context_line":"############"},{"line_number":369,"context_line":"# If set, pass this NTP server via the kernel command line to IPA"},{"line_number":370,"context_line":"ironic_ntp_server:"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"####################"},{"line_number":373,"context_line":"# Kernel Parameters"}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5aa3b645_17ca3827","line":370,"updated":"2026-03-16 11:56:51.000000000","message":"We use the convention of \"\" in Kolla-Ansible","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"b5436b454d6cba662f0a15fef0a4867cb6685d47","unresolved":false,"context_lines":[{"line_number":367,"context_line":"# NTP"},{"line_number":368,"context_line":"############"},{"line_number":369,"context_line":"# If set, pass this NTP server via the kernel command line to IPA"},{"line_number":370,"context_line":"ironic_ntp_server:"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"####################"},{"line_number":373,"context_line":"# Kernel Parameters"}],"source_content_type":"text/x-yaml","patch_set":36,"id":"2060296f_326d6944","line":370,"in_reply_to":"5aa3b645_17ca3827","updated":"2026-03-16 12:20:22.000000000","message":"Done","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b9abc249ee6600965a03675d111d8d73d940b902","unresolved":true,"context_lines":[{"line_number":380,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":381,"context_line":"  - \"{% if ironic_ntp_server is not none and ironic_ntp_server | length \u003e 0 %}ipa-ntp-server\u003d{{ ironic_ntp_server }}{% endif %}\""},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"ironic_pxe_append_params_default: \"{{ ironic_append_params_default }}\""},{"line_number":384,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":385,"context_line":"ironic_pxe_append_params: \"{{ (ironic_pxe_append_params_default + ironic_pxe_append_params_extras) | select() | join(\u0027 \u0027) }}\""}],"source_content_type":"text/x-yaml","patch_set":36,"id":"cbb92096_f682cbbc","line":383,"updated":"2026-03-16 11:56:51.000000000","message":"ironic_kernel_append_params_default ? (pxe_append_params is a deprecated name and I wouldn\u0027t like to use it)","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"b5436b454d6cba662f0a15fef0a4867cb6685d47","unresolved":false,"context_lines":[{"line_number":380,"context_line":"  - \"console\u003dttyS0,{{ ironic_console_serial_speed }}\""},{"line_number":381,"context_line":"  - \"{% if ironic_ntp_server is not none and ironic_ntp_server | length \u003e 0 %}ipa-ntp-server\u003d{{ ironic_ntp_server }}{% endif %}\""},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"ironic_pxe_append_params_default: \"{{ ironic_append_params_default }}\""},{"line_number":384,"context_line":"ironic_pxe_append_params_extras: []"},{"line_number":385,"context_line":"ironic_pxe_append_params: \"{{ (ironic_pxe_append_params_default + ironic_pxe_append_params_extras) | select() | join(\u0027 \u0027) }}\""}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5d02964d_ee82186b","line":383,"in_reply_to":"cbb92096_f682cbbc","updated":"2026-03-16 12:20:22.000000000","message":"Thanks, fair point.","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"}],"ansible/roles/ironic/tasks/precheck.yml":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"210a7e710e8aeff0f7a2be271026dfe2c6a8aba6","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"8db3fff7_8d81f3f0","line":53,"updated":"2023-09-25 07:36:36.000000000","message":"Isn\u0027t NTP UDP?","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"b6487d63fdcf491ff84061aa2cdaca9629f53d31","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"889b14b7_96b8ee4a","line":53,"in_reply_to":"2ebccf36_ea33141c","updated":"2023-09-26 16:11:26.000000000","message":"Yes it is, and unfortunately wait_for only works with TCP currently.\n\nIt\u0027s a bit tricky to check this, given that there\u0027s no guarantee which NTP client is installed. It\u0027s also not guaranteed that the controller has access to the same NTP server as the BM node.\n\nAnother option that could work is checking for a listening port using ss, something like:\n\n  ss -nulp \u0027( sport \u003d :123 and src \u003d \u003cIP\u003e )\u0027\n\nThis would only make sense in the default case where the controller is the NTP server. We could check this using ansible_facts.all_ipv{4,6}_addresses.\n\nDoes it make sense?","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"62200f18e465e3c306b1acaa82dd192186b63ef0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"d87a45b6_f5d2d9e4","line":53,"in_reply_to":"79e5127d_762a8b36","updated":"2025-11-21 16:53:30.000000000","message":"Done","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"249207a67b56c970045290d1b5f6cc1e65a875bc","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"d79872bd_f2e13ac5","line":53,"in_reply_to":"889b14b7_96b8ee4a","updated":"2023-10-19 13:30:15.000000000","message":"ansible_facts.all_ipv4_addresses doesn\u0027t contain 0.0.0.0 so it\u0027s unlikely to pick up the NTP server which in my experience listens on 0.0.0.0:123.\n\nNetstat should pick up all addresses a port is listening on by default though right? I\u0027m not really sure why we would need to use all_ipv4_addresses in this case.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"7e19b034485504993fa916bb7c0c158f0187a854","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"2ebccf36_ea33141c","line":53,"in_reply_to":"8db3fff7_8d81f3f0","updated":"2023-09-25 08:07:32.000000000","message":"yep, UDP only port 123","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"25e97225772cb2cf86c46a3c410aa2334da71128","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"f4d46662_8837fe3a","line":53,"in_reply_to":"d79872bd_f2e13ac5","updated":"2023-11-02 11:06:49.000000000","message":"Listening on 0.0.0.0 just means it listens on all local IPv4 addresses. It can\u0027t be used as a destination address.\n\nWhat I was trying to say is that we could disable the precheck in the case that the specified NTP server IP is not one of the host\u0027s IPs. This might not always work though - a hostname would not be picked up for example. Perhaps we don\u0027t need to be too clever if we document it.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"840bd619063ed527f0350d0c6c02e4f025f99950","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"79e5127d_762a8b36","line":53,"in_reply_to":"e00cbc0a_fca072d5","updated":"2024-02-07 13:53:00.000000000","message":"Precheck is currently disabled as CI is failing to find any running NTP servers on any interface. This does pass in Kayobe though so it should work as intended when an NTP server is configured properly in Kolla-Ansible.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"71242871e0b4d42cdb9bb7a0915a104979839706","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    - inventory_hostname in groups[\u0027ironic-http\u0027]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"- name: Checking active port for Ironic NTP server"},{"line_number":53,"context_line":"  wait_for:"},{"line_number":54,"context_line":"    host: \"{{ ironic_ntp_server }}\""},{"line_number":55,"context_line":"    port: \"123\""},{"line_number":56,"context_line":"    connect_timeout: 1"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"e00cbc0a_fca072d5","line":53,"in_reply_to":"f4d46662_8837fe3a","updated":"2023-12-20 11:25:18.000000000","message":"I\u0027ll add a notice to the documentation for disabling the pre-check manually in the hostname case.\n\nI\u0027ve added a task to check whether the ironic_ntp_server is in the host IPs, please let me know if this needs updating.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"25e97225772cb2cf86c46a3c410aa2334da71128","unresolved":true,"context_lines":[{"line_number":87,"context_line":"  when: not ironic_dnsmasq_dhcp_ranges is sequence"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- name: Gather facts on listening ports"},{"line_number":90,"context_line":"  listen_ports_facts:"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"- name: Ensure Ironic NTP server is listening"},{"line_number":93,"context_line":"  assert:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"0906c45e_4a33dd0f","line":90,"updated":"2023-11-02 11:06:49.000000000","message":"Please add the condition to this task as well.","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"71242871e0b4d42cdb9bb7a0915a104979839706","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  when: not ironic_dnsmasq_dhcp_ranges is sequence"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- name: Gather facts on listening ports"},{"line_number":90,"context_line":"  listen_ports_facts:"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"- name: Ensure Ironic NTP server is listening"},{"line_number":93,"context_line":"  assert:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"f02f34cb_0e84a2ff","line":90,"in_reply_to":"0906c45e_4a33dd0f","updated":"2023-12-20 11:25:18.000000000","message":"Done","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"25e97225772cb2cf86c46a3c410aa2334da71128","unresolved":true,"context_lines":[{"line_number":95,"context_line":"      - ansible_facts.udp_listen | map(attribute\u003d\u0027port\u0027) is contains (123)"},{"line_number":96,"context_line":"    fail_msg: \"No listening NTP servers were found\""},{"line_number":97,"context_line":"    success_msg: \"A listening NTP server was found\""},{"line_number":98,"context_line":"  when: ironic_enable_ntp_precheck"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"dcfe5381_ee6d9236","line":98,"updated":"2023-11-02 11:06:49.000000000","message":"Booleans usually need a \u0027| bool\u0027 filter to catch \"no\" (which would otherwise be true).","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"71242871e0b4d42cdb9bb7a0915a104979839706","unresolved":false,"context_lines":[{"line_number":95,"context_line":"      - ansible_facts.udp_listen | map(attribute\u003d\u0027port\u0027) is contains (123)"},{"line_number":96,"context_line":"    fail_msg: \"No listening NTP servers were found\""},{"line_number":97,"context_line":"    success_msg: \"A listening NTP server was found\""},{"line_number":98,"context_line":"  when: ironic_enable_ntp_precheck"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"2370daba_dea47074","line":98,"in_reply_to":"dcfe5381_ee6d9236","updated":"2023-12-20 11:25:18.000000000","message":"Done","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":32553,"name":"Sven Kieske","email":"sven_oss@posteo.de","username":"skieske"},"change_message_id":"dcfa30c5bdb8a06c9f2c72e96a7db351beedd5cb","unresolved":true,"context_lines":[{"line_number":93,"context_line":"- name: Ensure Ironic NTP server is listening"},{"line_number":94,"context_line":"  assert:"},{"line_number":95,"context_line":"    that:"},{"line_number":96,"context_line":"      - ansible_facts.udp_listen | map(attribute\u003d\u0027port\u0027) is contains (123)"},{"line_number":97,"context_line":"    fail_msg: \"No listening NTP servers were found\""},{"line_number":98,"context_line":"    success_msg: \"A listening NTP server was found\""},{"line_number":99,"context_line":"  when: ironic_enable_ntp_precheck | bool"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"416734cd_ea843b0c","line":96,"range":{"start_line":96,"start_character":7,"end_line":96,"end_character":74},"updated":"2023-12-20 11:10:21.000000000","message":"shouldn\u0027t we also ensure that it\u0027s listening on the correct interface, not just on any interface?","commit_id":"fa4afeb959fdbe5a9ba6be6f5e9b6d0d16d86ec8"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"840bd619063ed527f0350d0c6c02e4f025f99950","unresolved":true,"context_lines":[{"line_number":93,"context_line":"- name: Ensure Ironic NTP server is listening"},{"line_number":94,"context_line":"  assert:"},{"line_number":95,"context_line":"    that:"},{"line_number":96,"context_line":"      - ansible_facts.udp_listen | map(attribute\u003d\u0027port\u0027) is contains (123)"},{"line_number":97,"context_line":"    fail_msg: \"No listening NTP servers were found\""},{"line_number":98,"context_line":"    success_msg: \"A listening NTP server was found\""},{"line_number":99,"context_line":"  when: ironic_enable_ntp_precheck | bool"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"e9dbc1c9_af0ccc43","line":96,"range":{"start_line":96,"start_character":7,"end_line":96,"end_character":74},"in_reply_to":"416734cd_ea843b0c","updated":"2024-02-07 13:53:00.000000000","message":"I\u0027m not sure the listen_ports_facts module has this functionality.","commit_id":"fa4afeb959fdbe5a9ba6be6f5e9b6d0d16d86ec8"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"5833b9681bf7337aeeb27352dd802969cc83993e","unresolved":false,"context_lines":[{"line_number":93,"context_line":"- name: Ensure Ironic NTP server is listening"},{"line_number":94,"context_line":"  assert:"},{"line_number":95,"context_line":"    that:"},{"line_number":96,"context_line":"      - ansible_facts.udp_listen | map(attribute\u003d\u0027port\u0027) is contains (123)"},{"line_number":97,"context_line":"    fail_msg: \"No listening NTP servers were found\""},{"line_number":98,"context_line":"    success_msg: \"A listening NTP server was found\""},{"line_number":99,"context_line":"  when: ironic_enable_ntp_precheck | bool"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"f7e861c1_79f2a322","line":96,"range":{"start_line":96,"start_character":7,"end_line":96,"end_character":74},"in_reply_to":"e9dbc1c9_af0ccc43","updated":"2026-03-13 16:34:48.000000000","message":"I agree - I\u0027ve removed the check in the interest of getting it merged.","commit_id":"fa4afeb959fdbe5a9ba6be6f5e9b6d0d16d86ec8"}],"ansible/roles/ironic/templates/inspector.ipxe.j2":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"4f1a6a6d3b49a0c0ce6e0a810e3032a32ba183d1","unresolved":true,"context_lines":[{"line_number":13,"context_line":":inspector_ipa"},{"line_number":14,"context_line":":retry_boot"},{"line_number":15,"context_line":"imgfree"},{"line_number":16,"context_line":"kernel --timeout 30000 {{ ironic_http_url }}/ironic-agent.kernel ipa-inspection-callback-url\u003d{{ ironic_inspector_internal_endpoint }}/v1/continue systemd.journald.forward_to_console\u003dyes BOOTIF\u003d${mac} initrd\u003dironic-agent.initramfs {{ ironic_inspector_kernel_cmdline_extras | join(\u0027 \u0027) }} || goto retry_boot"},{"line_number":17,"context_line":"initrd --timeout 30000 {{ ironic_http_url }}/ironic-agent.initramfs || goto retry_boot"},{"line_number":18,"context_line":"boot"}],"source_content_type":"text/x-jinja2","patch_set":1,"id":"89cbef79_fc445308","side":"PARENT","line":16,"updated":"2023-08-29 12:12:31.000000000","message":"We\u0027ve lost BOOTIF","commit_id":"6af17540711f624510aa9684dba26bcad1431e55"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"9fd8b57dfbf233fa6b1501e8985915df6c55f121","unresolved":false,"context_lines":[{"line_number":13,"context_line":":inspector_ipa"},{"line_number":14,"context_line":":retry_boot"},{"line_number":15,"context_line":"imgfree"},{"line_number":16,"context_line":"kernel --timeout 30000 {{ ironic_http_url }}/ironic-agent.kernel ipa-inspection-callback-url\u003d{{ ironic_inspector_internal_endpoint }}/v1/continue systemd.journald.forward_to_console\u003dyes BOOTIF\u003d${mac} initrd\u003dironic-agent.initramfs {{ ironic_inspector_kernel_cmdline_extras | join(\u0027 \u0027) }} || goto retry_boot"},{"line_number":17,"context_line":"initrd --timeout 30000 {{ ironic_http_url }}/ironic-agent.initramfs || goto retry_boot"},{"line_number":18,"context_line":"boot"}],"source_content_type":"text/x-jinja2","patch_set":1,"id":"78856f53_25329df2","side":"PARENT","line":16,"in_reply_to":"89cbef79_fc445308","updated":"2023-09-08 15:55:22.000000000","message":"Done","commit_id":"6af17540711f624510aa9684dba26bcad1431e55"}],"ansible/roles/ironic/templates/ironic.conf.j2":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b9abc249ee6600965a03675d111d8d73d940b902","unresolved":true,"context_lines":[{"line_number":178,"context_line":"deploy_logs_collect \u003d always"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"[pxe]"},{"line_number":181,"context_line":"kernel_append_params \u003d {{ ironic_pxe_append_params }}"},{"line_number":182,"context_line":"tftp_root \u003d /var/lib/ironic/tftpboot"},{"line_number":183,"context_line":"tftp_master_path \u003d /var/lib/ironic/master_images"},{"line_number":184,"context_line":"tftp_server \u003d {{ api_interface_address }}"}],"source_content_type":"text/x-jinja2","patch_set":36,"id":"cde71d06_4c7e97d4","line":181,"updated":"2026-03-16 11:56:51.000000000","message":"ditto","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"b5436b454d6cba662f0a15fef0a4867cb6685d47","unresolved":false,"context_lines":[{"line_number":178,"context_line":"deploy_logs_collect \u003d always"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"[pxe]"},{"line_number":181,"context_line":"kernel_append_params \u003d {{ ironic_pxe_append_params }}"},{"line_number":182,"context_line":"tftp_root \u003d /var/lib/ironic/tftpboot"},{"line_number":183,"context_line":"tftp_master_path \u003d /var/lib/ironic/master_images"},{"line_number":184,"context_line":"tftp_server \u003d {{ api_interface_address }}"}],"source_content_type":"text/x-jinja2","patch_set":36,"id":"79b86e1d_72fd744e","line":181,"in_reply_to":"cde71d06_4c7e97d4","updated":"2026-03-16 12:20:22.000000000","message":"Done","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"}],"doc/source/reference/bare-metal/ironic-guide.rst":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"25e97225772cb2cf86c46a3c410aa2334da71128","unresolved":true,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":".. code-block:: yaml"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    ironic_ntp_server:"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"You can also disable the Ironic NTP Precheck which by default is enabled"},{"line_number":120,"context_line":"and checks for NTP servers listening on the controller node on port 123."}],"source_content_type":"text/x-rst","patch_set":10,"id":"d9fe5f3d_18134954","line":117,"updated":"2023-11-02 11:06:49.000000000","message":"Please provide an example value","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"71242871e0b4d42cdb9bb7a0915a104979839706","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":".. code-block:: yaml"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    ironic_ntp_server:"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"You can also disable the Ironic NTP Precheck which by default is enabled"},{"line_number":120,"context_line":"and checks for NTP servers listening on the controller node on port 123."}],"source_content_type":"text/x-rst","patch_set":10,"id":"5aa93527_9df18d44","line":117,"in_reply_to":"d9fe5f3d_18134954","updated":"2023-12-20 11:25:18.000000000","message":"Done","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":32553,"name":"Sven Kieske","email":"sven_oss@posteo.de","username":"skieske"},"change_message_id":"9cbb30c0941ba7c7936efb0fcdaac2283fa4bd40","unresolved":true,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Configure Ironic Python Agent NTP server (optional)"},{"line_number":110,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":111,"context_line":"Ironic assumes the controllers serves NTP in it\u0027s default configuration,"},{"line_number":112,"context_line":"you can change the NTP server Ironic Python Agent uses by changing"},{"line_number":113,"context_line":"``ironic_ntp_server`` in ``/etc/kolla/globals.yml``"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"6e146181_da9ac447","line":111,"range":{"start_line":111,"start_character":31,"end_line":111,"end_character":37},"updated":"2023-12-22 17:16:28.000000000","message":"nit: serve","commit_id":"32af259690eec31ec6ed1c01521ae9054f137908"},{"author":{"_account_id":32553,"name":"Sven Kieske","email":"sven_oss@posteo.de","username":"skieske"},"change_message_id":"743d95044c0930d9171cf9a9dc2729735045bb17","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Configure Ironic Python Agent NTP server (optional)"},{"line_number":110,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":111,"context_line":"Ironic assumes the controllers serves NTP in it\u0027s default configuration,"},{"line_number":112,"context_line":"you can change the NTP server Ironic Python Agent uses by changing"},{"line_number":113,"context_line":"``ironic_ntp_server`` in ``/etc/kolla/globals.yml``"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"6d880009_28d7c48e","line":111,"range":{"start_line":111,"start_character":31,"end_line":111,"end_character":37},"in_reply_to":"6e146181_da9ac447","updated":"2024-02-03 10:48:23.000000000","message":"Done","commit_id":"32af259690eec31ec6ed1c01521ae9054f137908"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b9abc249ee6600965a03675d111d8d73d940b902","unresolved":true,"context_lines":[{"line_number":151,"context_line":"The Ironic Python Agent requires that the system clock is set correctly for"},{"line_number":152,"context_line":"the heartbeat mechanism to work. One way of achieving this is to pass"},{"line_number":153,"context_line":"the address of an NTP server via the kernel commandline, which is then"},{"line_number":154,"context_line":"used to set the system clock when IPA first starts. This is not a hard"},{"line_number":155,"context_line":"requirement, and you may use other methods. For example DHCP, or functionality"},{"line_number":156,"context_line":"built into the BMC."},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":36,"id":"46cba6f5_d8f3e43f","line":154,"updated":"2026-03-16 11:56:51.000000000","message":"I usually found it to be too late or unreliable - setting ntp server via dnsmasq was more successful on my side","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"b5436b454d6cba662f0a15fef0a4867cb6685d47","unresolved":false,"context_lines":[{"line_number":151,"context_line":"The Ironic Python Agent requires that the system clock is set correctly for"},{"line_number":152,"context_line":"the heartbeat mechanism to work. One way of achieving this is to pass"},{"line_number":153,"context_line":"the address of an NTP server via the kernel commandline, which is then"},{"line_number":154,"context_line":"used to set the system clock when IPA first starts. This is not a hard"},{"line_number":155,"context_line":"requirement, and you may use other methods. For example DHCP, or functionality"},{"line_number":156,"context_line":"built into the BMC."},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":36,"id":"a5e04603_458ceeac","line":154,"in_reply_to":"46cba6f5_d8f3e43f","updated":"2026-03-16 12:20:22.000000000","message":"Hmm, interesting. I haven\u0027t come across that yet.\n\nThis section is marked as optional and refers to the other methods.","commit_id":"16c5266b5aa3e21237a2c74851d7864437756f67"}],"releasenotes/notes/ironic-parameter-ntp-rework-672efa37e5cc918f.yaml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"b6487d63fdcf491ff84061aa2cdaca9629f53d31","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a new \u0027Kernel Parameters\u0027 section to Ironic defaults.yml and"},{"line_number":5,"context_line":"    adds a default configuration for Ironic Python Agent (IPA) NTP server."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"dbdb9d8e_a25c523f","line":5,"updated":"2023-09-26 16:11:26.000000000","message":"This reno should include an upgrade section that states that when ironic is enabled, by default the controller is expected to serve NTP on the internal API network, and that this should be accessible to the bare metal provisioning network.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"62200f18e465e3c306b1acaa82dd192186b63ef0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a new \u0027Kernel Parameters\u0027 section to Ironic defaults.yml and"},{"line_number":5,"context_line":"    adds a default configuration for Ironic Python Agent (IPA) NTP server."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"c8d5f95c_9f7c7126","line":5,"in_reply_to":"bcca5f78_fc42fda8","updated":"2025-11-21 16:53:30.000000000","message":"Done","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9c0e6b338cf2b3eb53ccdce711f58b4b5c3310e0","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a new \u0027Kernel Parameters\u0027 section to Ironic defaults.yml and"},{"line_number":5,"context_line":"    adds a default configuration for Ironic Python Agent (IPA) NTP server."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"bcca5f78_fc42fda8","line":5,"in_reply_to":"dbdb9d8e_a25c523f","updated":"2023-09-26 16:18:53.000000000","message":"It should also include a deprecations section with an entry for the ironic_inspector_kernel_cmdline_extras variable.","commit_id":"6e27076c69b99658c99308028caa9ff87b37d5bf"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"25e97225772cb2cf86c46a3c410aa2334da71128","unresolved":true,"context_lines":[{"line_number":11,"context_line":"    instead use the replacement ironic_inspector_kernel_params_extras variable."},{"line_number":12,"context_line":"upgrade:"},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    In default configurations the controller should be serving NTP on the"},{"line_number":15,"context_line":"    internal network, and should be accessible on the baremetal provisioning"},{"line_number":16,"context_line":"    network."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"78f40fd2_8e59e234","line":14,"updated":"2023-11-02 11:06:49.000000000","message":"These notes will all be in separate sections so need to stand on their own. Please add some context - this is for deployments using Ironic. Also please provide info on what to do if the default does not work for you.","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":36238,"name":"Hollie Hutchinson","display_name":"Hollie Hutchinson","email":"hollie@stackhpc.com","username":"assumptions"},"change_message_id":"71242871e0b4d42cdb9bb7a0915a104979839706","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    instead use the replacement ironic_inspector_kernel_params_extras variable."},{"line_number":12,"context_line":"upgrade:"},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    In default configurations the controller should be serving NTP on the"},{"line_number":15,"context_line":"    internal network, and should be accessible on the baremetal provisioning"},{"line_number":16,"context_line":"    network."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"a5e2b6b1_0abbf38e","line":14,"in_reply_to":"78f40fd2_8e59e234","updated":"2023-12-20 11:25:18.000000000","message":"Think this should be good now. Please let me know if I should clarify some things in the upgrade section further.","commit_id":"cd972c5c9d5710edffc2f7b82c6c1c7f27647944"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"2c96040318665a38b66c94667726ca1280d68d41","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds explicit support for passing through the `ipa-ntp-server` setting"},{"line_number":5,"context_line":"    via the kernel commandline to the Ironic Python Agent."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    You can now also use `ironic_pxe_append_params_extras` to provide"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"2251c977_c9c524a7","line":4,"range":{"start_line":4,"start_character":50,"end_line":4,"end_character":66},"updated":"2025-12-15 15:43:54.000000000","message":"Please use double backticks.","commit_id":"0493040d7dd63d7f8d5b13809077f0cfa4f47eac"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"d3e42cbed2196e6e4bd085e0ab6a8a91d303ded9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds explicit support for passing through the `ipa-ntp-server` setting"},{"line_number":5,"context_line":"    via the kernel commandline to the Ironic Python Agent."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    You can now also use `ironic_pxe_append_params_extras` to provide"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"9b9ac044_3dc0592a","line":4,"range":{"start_line":4,"start_character":50,"end_line":4,"end_character":66},"in_reply_to":"2251c977_c9c524a7","updated":"2025-12-15 15:46:04.000000000","message":"Done","commit_id":"0493040d7dd63d7f8d5b13809077f0cfa4f47eac"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"2c96040318665a38b66c94667726ca1280d68d41","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Adds explicit support for passing through the `ipa-ntp-server` setting"},{"line_number":5,"context_line":"    via the kernel commandline to the Ironic Python Agent."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    You can now also use `ironic_pxe_append_params_extras` to provide"},{"line_number":8,"context_line":"    additional arguments to the kernel command line when booting the Ironic"},{"line_number":9,"context_line":"    Python Agent."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"da03b2c2_b80bddbb","line":7,"range":{"start_line":7,"start_character":25,"end_line":7,"end_character":58},"updated":"2025-12-15 15:43:54.000000000","message":"Please use double backticks.","commit_id":"0493040d7dd63d7f8d5b13809077f0cfa4f47eac"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"d3e42cbed2196e6e4bd085e0ab6a8a91d303ded9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds explicit support for passing through the `ipa-ntp-server` setting"},{"line_number":5,"context_line":"    via the kernel commandline to the Ironic Python Agent."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    You can now also use `ironic_pxe_append_params_extras` to provide"},{"line_number":8,"context_line":"    additional arguments to the kernel command line when booting the Ironic"},{"line_number":9,"context_line":"    Python Agent."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"613e300b_0b043dbb","line":7,"range":{"start_line":7,"start_character":25,"end_line":7,"end_character":58},"in_reply_to":"da03b2c2_b80bddbb","updated":"2025-12-15 15:46:04.000000000","message":"Done","commit_id":"0493040d7dd63d7f8d5b13809077f0cfa4f47eac"}]}
