)]}'
{".zuul.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c7e18c10371498e159be38035b03c58080965d30","unresolved":true,"context_lines":[{"line_number":51,"context_line":"    required-projects: *base_required_projects"},{"line_number":52,"context_line":"    vars: \u0026cyborg_grenade_vars"},{"line_number":53,"context_line":"      \u003c\u003c: *cyborg_base_vars"},{"line_number":54,"context_line":"      grenade_devstack_localrc:"},{"line_number":55,"context_line":"        shared:"},{"line_number":56,"context_line":"          ENABLE_PCI_SIM: false"},{"line_number":57,"context_line":"    irrelevant-files: *base_irrelevant_files"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"fef66491_86f80f3d","line":54,"updated":"2026-09-17 14:44:44.000000000","message":"note i will likely change this agains later in the cycle\n\nthe skip level job will need this disabled but normal job cna move to having it enbaled.","commit_id":"a2c8085cc89464913daaf069e82c01615dcd422c"}],"/COMMIT_MSG":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"3218d7a203843c62a2ea9cff9df71141eb21d1ab","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     48e1616d (Merge \"Refactor device_state sentinel handling and Device object\")"},{"line_number":2,"context_line":"Author:     Sean Mooney \u003cwork@seanmooney.info\u003e"},{"line_number":3,"context_line":"AuthorDate: 2026-09-07 12:56:10 +0000"},{"line_number":4,"context_line":"Commit:     Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"94957c7d_b690485a","line":1,"updated":"2026-09-07 13:54:26.000000000","message":"The permanent commit history reads \u0027use seperate config for cyborg agent\u0027 and \u0027db creds aviable\u0027; \u0027seperate\u0027 should be \u0027separate\u0027 and \u0027aviable\u0027 should be \u0027available\u0027. Meaning remains obvious, but the subject-line typo will be copied into release/changelog tooling that derives notes from subject lines.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Impact**: Minor reduction in quality and searchability of the permanent change history; subject typos propagate to generated release notes.\n\n**Recommendation**:\nAmend the subject to \u0027use separate config for cyborg agent\u0027 and fix \u0027aviable\u0027 to \u0027available\u0027 before merge.","commit_id":"812e2694b6019ab4add1bdbed6b4dff9b4bcb2cd"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"189237d5d5480984b71cf83b5602abf9fd79f6b6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     48e1616d (Merge \"Refactor device_state sentinel handling and Device object\")"},{"line_number":2,"context_line":"Author:     Sean Mooney \u003cwork@seanmooney.info\u003e"},{"line_number":3,"context_line":"AuthorDate: 2026-09-07 12:56:10 +0000"},{"line_number":4,"context_line":"Commit:     Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"e2cb57ae_d9fc4285","line":1,"updated":"2026-09-07 17:58:48.000000000","message":"The closing line of the commit message states \u0027This change updates devstack to deploy with a seperate config.\u0027 The word \u0027separate\u0027 is misspelled. The intended meaning is obvious, so this is a suggestion-level quality defect in the permanent change history.\n\n**Severity**: SUGGESTION | **Confidence**: 0.95\n\n**Impact**: Minor quality defect in the permanent git history; no ambiguity about the change\u0027s intent and no behavioral effect.\n\n**Recommendation**:\nAmend the commit message to read \u0027separate\u0027 before merge.","commit_id":"ba813eac65dad1020a5afe2ffdf3e581067ec8bb"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"aa911387ceb3f0e43c65605cd110ff29c02b5183","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e0651f49_de9f0813","updated":"2026-09-08 04:42:52.000000000","message":"Overall looks good.\n\nteim-ci warning:\n```\nconfigure_cyborg() calls configure_cyborg_common() whenever \u0027is_service_enabled cyborg\u0027 is true. DevStack\u0027s is_service_enabled prefix matching makes this true on multinode subnodes where only cyborg-agent runs, and configure_cyborg_common() unconditionally writes \u0027database connection \u003curl\u003e\u0027 (with DB credentials) plus RPC credentials into $CYBORG_CONF. After this change nothing on such a subnode consumes cyborg.conf, yet it is still generated with valid database credentials, only partially fulfilling the commit\u0027s stated goal that compute nodes not hold Cyborg database access. Impact: Multinode CI subnodes (cyborg-tempest-py3, grenade jobs) still ship a readable /etc/cyborg/cyborg.conf with live database credentials even though no process consumes it; the defense-in-depth and CI-detection goals of the change remain partially defeated, and stale credentials accumulate on compute nodes. Recommendation: Gate the database (and other API/conductor-only) settings so they are not written on agent-only nodes: e.g., move \u0027iniset $CYBORG_CONF database connection ...\u0027 out of configure_cyborg_common into configure_cyborg_api/conductor, or skip writing $CYBORG_CONF entirely when neither cyborg-api nor cyborg-cond is enabled (keeping configure_cyborg_dirs).\n```\nIt is valid.\n\nOn compute node, we have both\n- https://99fa19882f5b577dc674-da3822d63841e990242061d65cb4e6c4.ssl.cf2.rackcdn.com/openstack/be39e62a41d543b4b90994169b4f5f2c/compute1/logs/etc/cyborg/cyborg-agent_conf.txt\n\n- https://99fa19882f5b577dc674-da3822d63841e990242061d65cb4e6c4.ssl.cf2.rackcdn.com/openstack/be39e62a41d543b4b90994169b4f5f2c/compute1/logs/etc/cyborg/cyborg_conf.txt\n\nFor multinode job, we should avoid generating the cyborg_conf on the compute node.","commit_id":"0e3dfc18d21349954d23a3f55c6c5fab36bd0f78"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"17dcf67855fe56d621fff732a9426612ca44fb11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"09feed34_ded30690","in_reply_to":"283f5cc8_23235903","updated":"2026-09-17 11:37:13.000000000","message":"Done","commit_id":"0e3dfc18d21349954d23a3f55c6c5fab36bd0f78"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"318aa070185366c010f635a431a05f7809f93079","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"283f5cc8_23235903","in_reply_to":"e0651f49_de9f0813","updated":"2026-09-17 11:37:05.000000000","message":"yep we shoudl","commit_id":"0e3dfc18d21349954d23a3f55c6c5fab36bd0f78"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"403083fc1d0da16cb40a5bd50229c64e62c511a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d9b52f48_aadca813","updated":"2026-09-18 12:19:53.000000000","message":"Yes, now we have seperate cyborg agent conf https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_a75/openstack/a75ab586e8204a84b26032b765a28b5d/compute1/logs/etc/cyborg/cyborg-agent_conf.txt","commit_id":"a2c8085cc89464913daaf069e82c01615dcd422c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bb62538abbc4a0a4aff6c18c7f965fd1e2c1055","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"aea95a2c_c61f0b56","updated":"2026-09-17 14:43:00.000000000","message":"ill leave this open for feedback for a few days and likley merge early next week","commit_id":"a2c8085cc89464913daaf069e82c01615dcd422c"}],"devstack/lib/cyborg":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"3218d7a203843c62a2ea9cff9df71141eb21d1ab","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Configure auth"},{"line_number":138,"context_line":"    configure_keystoneauth $CYBORG_AGENT_CONF cyborg placement"},{"line_number":139,"context_line":"    configure_keystone_authtoken_middleware $CYBORG_AGENTCONF cyborg"},{"line_number":140,"context_line":"    # this one is needed for lookup of Cyborg API endpoint via Keystone"},{"line_number":141,"context_line":"    # FIXME(sean-k-mooney) why? cybrog should never call itself via the rest api."},{"line_number":142,"context_line":"    # copy this for now and see if we can delete this later"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"7f7e31b5_1f20b2a3","line":139,"updated":"2026-09-07 13:54:26.000000000","message":"The new call uses $CYBORG_AGENTCONF (missing underscore), but only $CYBORG_AGENT_CONF is ever defined (devstack/settings:16 and grep across the repo). Under devstack\u0027s word splitting the undefined name expands away, so configure_keystone_authtoken_middleware receives \u0027cyborg\u0027 as the config-file argument and no project argument. iniset/ini_has_option then operate on a bogus path (file named \u0027cyborg\u0027 in the devstack cwd) instead of the agent config file, which fails under stack.sh\u0027s errexit or silently miswrites configuration.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Impact**: Any devstack run with cyborg-agent enabled (the default in devstack/settings) either aborts stack.sh when iniset hits the invalid empty/misdirected file path, or writes the keystone_authtoken section to a stray file, leaving the agent config without its intended middleware auth settings. This will break the project\u0027s own tempest/grenade gate jobs.\n\n**Priority**: Before merge\n**Recommendation**:\nChange $CYBORG_AGENTCONF to $CYBORG_AGENT_CONF. Also consider whether a non-HTTP process like cyborg-agent needs keystone_authtoken middleware config at all; the FIXME in the same patch questions why the agent talks to Keystone this way, so dropping the call may be the smaller correct fix.","commit_id":"812e2694b6019ab4add1bdbed6b4dff9b4bcb2cd"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"3218d7a203843c62a2ea9cff9df71141eb21d1ab","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    configure_keystoneauth $CYBORG_AGENT_CONF cyborg placement"},{"line_number":139,"context_line":"    configure_keystone_authtoken_middleware $CYBORG_AGENTCONF cyborg"},{"line_number":140,"context_line":"    # this one is needed for lookup of Cyborg API endpoint via Keystone"},{"line_number":141,"context_line":"    # FIXME(sean-k-mooney) why? cybrog should never call itself via the rest api."},{"line_number":142,"context_line":"    # copy this for now and see if we can delete this later"},{"line_number":143,"context_line":"    configure_auth_for service_catalog $CYBORG_AGENT_CONF"},{"line_number":144,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":1,"id":"8f908300_4346b8d0","line":141,"updated":"2026-09-07 13:54:26.000000000","message":"The new comments added by this patch read \u0027cybrog should never call itself via the rest api\u0027 (lib/cyborg:141) and \u0027we may want to find our endpoitn id\u0027 (lib/cyborg:198), misspelling the project\u0027s own name and \u0027endpoint\u0027.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Impact**: Minor: misspelling the service name in explanatory comments slightly reduces readability and greppability of the FIXME once someone works on it.\n\n**Recommendation**:\nFix \u0027cybrog\u0027 to \u0027cyborg\u0027 and \u0027endpoitn\u0027 to \u0027endpoint\u0027 in both FIXME blocks added by this change.","commit_id":"812e2694b6019ab4add1bdbed6b4dff9b4bcb2cd"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"189237d5d5480984b71cf83b5602abf9fd79f6b6","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    iniset $CYBORG_CONF keystone region_name $REGION_NAME"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    # this one is needed for lookup of Cyborg API endpoint via Keystone"},{"line_number":196,"context_line":"    # FIXME(sean-k-mooney) why? cybrog should never call itself via the rest api."},{"line_number":197,"context_line":"    # we should look at deleting this or the code that depend on it."},{"line_number":198,"context_line":"    # we may want to find our endpoitn id for unified limits but we should not need"},{"line_number":199,"context_line":"    # this in general."}],"source_content_type":"application/octet-stream","patch_set":3,"id":"1413b7ec_6f34e956","line":196,"updated":"2026-09-07 17:58:48.000000000","message":"The FIXME block this change adds above \u0027configure_auth_for service_catalog\u0027 contains three misspellings: \u0027cybrog\u0027 (cyborg), \u0027the code that depend on it\u0027 (depends), and \u0027endpoitn\u0027 (endpoint).\n\n**Severity**: SUGGESTION | **Confidence**: 0.95\n\n**Impact**: Reduces readability of a tracking comment that future work will rely on; meaning remains clear and there is no runtime effect.\n\n**Recommendation**:\nCorrect to \u0027cyborg\u0027, \u0027depends\u0027 (or \u0027dependent\u0027), and \u0027endpoint\u0027 in the added comment lines before merge.","commit_id":"ba813eac65dad1020a5afe2ffdf3e581067ec8bb"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d1614115ffe5931d62724e4ba2e970e5bdd9ab29","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    iniset $CYBORG_CONF keystone region_name $REGION_NAME"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    # this one is needed for lookup of Cyborg API endpoint via Keystone"},{"line_number":196,"context_line":"    # FIXME(sean-k-mooney) why? cybrog should never call itself via the rest api."},{"line_number":197,"context_line":"    # we should look at deleting this or the code that depend on it."},{"line_number":198,"context_line":"    # we may want to find our endpoitn id for unified limits but we should not need"},{"line_number":199,"context_line":"    # this in general."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"dc0d87b8_a7ec1e3d","line":196,"updated":"2026-09-07 18:56:44.000000000","message":"The FIXME comment block added to configure_cyborg_conductor() misspells \u0027cyborg\u0027 as \u0027cybrog\u0027 and \u0027endpoint\u0027 as \u0027endpoitn\u0027, reducing the clarity of the permanent in-code record explaining why the service_catalog auth block is retained.\n\n**Severity**: SUGGESTION | **Confidence**: 0.95\n\n**Impact**: Minor: newly written explanatory comment text that will live in the tree is harder to read and grep (e.g., searching for \u0027cyborg\u0027 misses the FIXME).\n\n**Recommendation**:\nFix the two misspellings (\u0027cybrog\u0027 -\u003e \u0027cyborg\u0027, \u0027endpoitn\u0027 -\u003e \u0027endpoint\u0027) in the new comment block.","commit_id":"0e3dfc18d21349954d23a3f55c6c5fab36bd0f78"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"318aa070185366c010f635a431a05f7809f93079","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    iniset $CYBORG_CONF keystone region_name $REGION_NAME"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    # this one is needed for lookup of Cyborg API endpoint via Keystone"},{"line_number":196,"context_line":"    # FIXME(sean-k-mooney) why? cybrog should never call itself via the rest api."},{"line_number":197,"context_line":"    # we should look at deleting this or the code that depend on it."},{"line_number":198,"context_line":"    # we may want to find our endpoitn id for unified limits but we should not need"},{"line_number":199,"context_line":"    # this in general."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"1a0f6822_0dc10f0d","line":196,"in_reply_to":"64037a4d_56f0d7c3","updated":"2026-09-17 11:37:05.000000000","message":"i do that alot","commit_id":"0e3dfc18d21349954d23a3f55c6c5fab36bd0f78"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"aa911387ceb3f0e43c65605cd110ff29c02b5183","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    iniset $CYBORG_CONF keystone region_name $REGION_NAME"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    # this one is needed for lookup of Cyborg API endpoint via Keystone"},{"line_number":196,"context_line":"    # FIXME(sean-k-mooney) why? cybrog should never call itself via the rest api."},{"line_number":197,"context_line":"    # we should look at deleting this or the code that depend on it."},{"line_number":198,"context_line":"    # we may want to find our endpoitn id for unified limits but we should not need"},{"line_number":199,"context_line":"    # this in general."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"64037a4d_56f0d7c3","line":196,"in_reply_to":"dc0d87b8_a7ec1e3d","updated":"2026-09-08 04:42:52.000000000","message":"It is valid.\n\nIf you respin the patch, feel free to address it.","commit_id":"0e3dfc18d21349954d23a3f55c6c5fab36bd0f78"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"3c2bd6f2ac7870da342176e9e377189d3a66638b","unresolved":false,"context_lines":[{"line_number":271,"context_line":"# start_cyborg_agent() - Used by start_cyborg()."},{"line_number":272,"context_line":"# Starts Cyborg agent."},{"line_number":273,"context_line":"function start_cyborg_agent {"},{"line_number":274,"context_line":"    run_process cyborg-agent \"$CYBORG_BIN_DIR/cyborg-agent --config-file\u003d$CYBORG_AGENT_CONF\""},{"line_number":275,"context_line":"}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"# stop_cyborg() - Stop running processes"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"d2d6b4db_c8beb924","line":274,"updated":"2026-09-17 11:49:37.000000000","message":"start_cyborg_agent now launches the agent with --config-file\u003d$CYBORG_AGENT_CONF (/etc/cyborg/cyborg-agent.conf), and cyborg-agent.conf is only created by configure_cyborg_agent, which is reached solely via configure_cyborg during the plugin\u0027s stack/post-config phase. Grenade upgrades never run that phase: devstack/upgrade/upgrade.sh sources the new settings and lib/cyborg, runs install_cyborg and the DB migrations, and then calls start_cyborg without ever invoking configure_cyborg. The base deployment ran the old plugin code, so at upgrade time /etc/cyborg/cyborg-agent.conf does not exist and no agent configuration (enabled drivers, Keystone/Placement auth, RPC transport) is generated.\n\n**Severity**: HIGH | **Confidence**: 0.85\n\n**Impact**: Both gated upgrade jobs (cyborg-grenade and cyborg-grenade-skip-level-always) fail after this change: the agent is started with a nonexistent explicit config file, which oslo.config rejects at startup, and even if the missing file were tolerated the agent would come up with no enabled drivers, no Keystone/Placement credentials, and no RPC transport_url, so ensure_services_started cyborg-api cyborg-cond cyborg-agent (upgrade.sh:109) fails and the supported upgrade path is broken for every subsequent run.\n\n**Priority**: Before merge\n**Recommendation**:\nGenerate the agent configuration in devstack/upgrade/upgrade.sh before start_cyborg: after install_cyborg, call configure_cyborg_dirs plus configure_cyborg_agent (or simply configure_cyborg) when is_service_enabled cyborg-agent, so /etc/cyborg/cyborg-agent.conf exists with drivers, auth, and RPC settings before the agent is started and awaited.","commit_id":"24f3c354517cf964ec3011403190f5648df841dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7cc27f1b6ca8494603c0778f38a6b463de113087","unresolved":true,"context_lines":[{"line_number":271,"context_line":"# start_cyborg_agent() - Used by start_cyborg()."},{"line_number":272,"context_line":"# Starts Cyborg agent."},{"line_number":273,"context_line":"function start_cyborg_agent {"},{"line_number":274,"context_line":"    run_process cyborg-agent \"$CYBORG_BIN_DIR/cyborg-agent --config-file\u003d$CYBORG_AGENT_CONF\""},{"line_number":275,"context_line":"}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"# stop_cyborg() - Stop running processes"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"d032475b_63620c6b","line":274,"in_reply_to":"6dcd909a_b82b1828","updated":"2026-09-17 12:55:52.000000000","message":"just to be extra clear the job was \"succseful\" but the agent died https://zuul.opendev.org/t/openstack/build/4e141f64b85448b39f8e76eddd4854af/log/controller/logs/screen-cyborg-agent.txt#863  becasue the config file was missing","commit_id":"24f3c354517cf964ec3011403190f5648df841dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bb62538abbc4a0a4aff6c18c7f965fd1e2c1055","unresolved":false,"context_lines":[{"line_number":271,"context_line":"# start_cyborg_agent() - Used by start_cyborg()."},{"line_number":272,"context_line":"# Starts Cyborg agent."},{"line_number":273,"context_line":"function start_cyborg_agent {"},{"line_number":274,"context_line":"    run_process cyborg-agent \"$CYBORG_BIN_DIR/cyborg-agent --config-file\u003d$CYBORG_AGENT_CONF\""},{"line_number":275,"context_line":"}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"# stop_cyborg() - Stop running processes"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"d445b8fa_901ea080","line":274,"in_reply_to":"d032475b_63620c6b","updated":"2026-09-17 14:43:00.000000000","message":"Done https://zuul.opendev.org/t/openstack/build/c897c138aad04e338a2d44a02a548136/log/controller/logs/screen-cyborg-agent.txt\n\nno more crash after upgrade","commit_id":"24f3c354517cf964ec3011403190f5648df841dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"929f30f4a5455c3905478eb07d572c3323d4a74c","unresolved":true,"context_lines":[{"line_number":271,"context_line":"# start_cyborg_agent() - Used by start_cyborg()."},{"line_number":272,"context_line":"# Starts Cyborg agent."},{"line_number":273,"context_line":"function start_cyborg_agent {"},{"line_number":274,"context_line":"    run_process cyborg-agent \"$CYBORG_BIN_DIR/cyborg-agent --config-file\u003d$CYBORG_AGENT_CONF\""},{"line_number":275,"context_line":"}"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"# stop_cyborg() - Stop running processes"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"6dcd909a_b82b1828","line":274,"in_reply_to":"d2d6b4db_c8beb924","updated":"2026-09-17 12:54:03.000000000","message":"this is valid im fixing it locally now","commit_id":"24f3c354517cf964ec3011403190f5648df841dd"}],"devstack/lib/pci_sim":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"189237d5d5480984b71cf83b5602abf9fd79f6b6","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    [[ -f $CYBORG_AGENT_CONF ]] || die $LINENO \"CYBORG_AGENT_CONF does not exist: $CYBORG_AGENT_CONF\""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    current_drivers\u003d$(iniget \"$CYBORG_CONF_FILE\" agent enabled_drivers || true)"},{"line_number":308,"context_line":"    # Enable the generic PCI driver without dropping any other accelerator"},{"line_number":309,"context_line":"    # drivers the local DevStack environment already requested."},{"line_number":310,"context_line":"    if [[ -z $current_drivers ]]; then"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"fae2587f_5ea61e0b","line":307,"updated":"2026-09-07 17:58:48.000000000","message":"The change deletes the local CYBORG_CONF_FILE default in configure_pci_sim_cyborg and moves all writes to $CYBORG_AGENT_CONF, but the read at devstack/lib/pci_sim:307 still targets \"$CYBORG_CONF_FILE\". After this change CYBORG_CONF_FILE is defined nowhere (devstack/settings only uses it as an optional legacy override when computing CYBORG_CONF), so iniget receives an empty path, fails, and \u0027|| true\u0027 masks the error, leaving current_drivers always empty. The -z branch then runs \u0027iniset \"$CYBORG_AGENT_CONF\" agent enabled_drivers pci_driver\u0027, replacing the value configure_cyborg_agent already wrote from CYBORG_ENABLED_DRIVERS (default fake_driver) instead of appending to it.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Impact**: In every devstack deployment with pci_sim enabled, the agent config\u0027s enabled_drivers ends up as \u0027pci_driver\u0027 alone; the drivers already requested (default fake_driver, or any operator-configured CYBORG_ENABLED_DRIVERS) are silently dropped. This contradicts the function\u0027s own documented intent of enabling pci_driver \u0027without dropping any other accelerator drivers the local DevStack environment already requested\u0027 and can disable unrelated accelerator discovery in CI and developer setups.\n\n**Priority**: Before merge\n**Recommendation**:\nChange devstack/lib/pci_sim:307 to read the same file the function now writes: current_drivers\u003d$(iniget \"$CYBORG_AGENT_CONF\" agent enabled_drivers || true).","commit_id":"ba813eac65dad1020a5afe2ffdf3e581067ec8bb"}],"devstack/settings":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"3218d7a203843c62a2ea9cff9df71141eb21d1ab","unresolved":false,"context_lines":[{"line_number":13,"context_line":"CYBORG_STATE_PATH\u003d/var/lib/cyborg"},{"line_number":14,"context_line":"CYBORG_CONF_DIR\u003d${CYBORG_CONF_DIR:-/etc/cyborg}"},{"line_number":15,"context_line":"CYBORG_CONF\u003d${CYBORG_CONF:-${CYBORG_CONF_FILE:-$CYBORG_CONF_DIR/cyborg.conf}}"},{"line_number":16,"context_line":"CYBORG_AGENT_CONF\u003d${CYBORG_AGENT_CONF:-$CYBORG_CONF_DIR/cyborg.conf}"},{"line_number":17,"context_line":"CYBORG_API_PASTE_INI\u003d$CYBORG_CONF_DIR/api-paste.ini"},{"line_number":18,"context_line":"CYBORG_POLICY_JSON\u003d$CYBORG_CONF_DIR/policy.yaml"},{"line_number":19,"context_line":"CYBORG_SERVICE_HOST\u003d${CYBORG_SERVICE_HOST:-$SERVICE_HOST}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"364029a6_496f69af","line":16,"updated":"2026-09-07 13:54:26.000000000","message":"The commit states devstack should deploy the agent with a separate config so CI detects agent DB access. But devstack/settings:16 sets CYBORG_AGENT_CONF\u003d${CYBORG_AGENT_CONF:-$CYBORG_CONF_DIR/cyborg.conf}, the identical default path as CYBORG_CONF, and no job or playbook overrides it (checked .zuul.yaml base vars, srbac job vars, and playbooks/). With defaults, configure_cyborg_common still writes the database connection string into the file the agent now reads via --config-file\u003d$CYBORG_AGENT_CONF.\n\n**Severity**: HIGH | **Confidence**: 0.85\n\n**Impact**: The stated goal is not achieved: the agent continues to run with the database connection string available, so CI still cannot detect violations of the no-DB-access-from-compute-node rule the change was written to catch. The change is behaviorally inert by default (aside from the CF-001 typo).\n\n**Priority**: Before merge\n**Recommendation**:\nDefault CYBORG_AGENT_CONF to $CYBORG_CONF_DIR/cyborg-agent.conf (keeping the env override for operators) so configure_cyborg_agent writes a genuinely separate file, and verify iniset creates it under the existing CYBORG_CONF_DIR.","commit_id":"812e2694b6019ab4add1bdbed6b4dff9b4bcb2cd"}]}
