)]}'
{"specs/approved/ngs-structured-cli-drivers.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6a45b47f9be73a8254b946c591d54a6bfa92592f","unresolved":true,"context_lines":[{"line_number":89,"context_line":"Build a lightweight ``SshCommandSwitch`` base class that provides"},{"line_number":90,"context_line":"SSH command execution via ``libssh`` (through ``ssh-python``)"},{"line_number":91,"context_line":"without interactive shell handling. Then migrate the SONiC and"},{"line_number":92,"context_line":"Cumulus NVUE drivers to use it."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"SshCommandSwitch Base Class"},{"line_number":95,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c928b162_d4b306f3","line":92,"updated":"2026-07-23 10:14:02.000000000","message":"And actually the OVS driver too?","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c06fefc5749cdab6dba16b7f81423080bb70cde9","unresolved":true,"context_lines":[{"line_number":89,"context_line":"Build a lightweight ``SshCommandSwitch`` base class that provides"},{"line_number":90,"context_line":"SSH command execution via ``libssh`` (through ``ssh-python``)"},{"line_number":91,"context_line":"without interactive shell handling. Then migrate the SONiC and"},{"line_number":92,"context_line":"Cumulus NVUE drivers to use it."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"SshCommandSwitch Base Class"},{"line_number":95,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"34a17a6e_71d86030","line":92,"in_reply_to":"c928b162_d4b306f3","updated":"2026-07-23 20:27:38.000000000","message":"... yeah you actually could.","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6a45b47f9be73a8254b946c591d54a6bfa92592f","unresolved":true,"context_lines":[{"line_number":199,"context_line":"  rely on shell features (pipes, redirections) that assume an"},{"line_number":200,"context_line":"  interactive shell context. For example, the SONiC ACL write"},{"line_number":201,"context_line":"  uses a pipeline: ``echo | base64 -d | gunzip \u003e file``. Since"},{"line_number":202,"context_line":"  exec channels execute commands directly without a login shell,"},{"line_number":203,"context_line":"  some command sequences may need to be restructured into"},{"line_number":204,"context_line":"  discrete steps (e.g., write a file, then load it). This is"},{"line_number":205,"context_line":"  expected to be straightforward but requires per-command"}],"source_content_type":"text/x-rst","patch_set":1,"id":"849b1f74_91913a9e","line":202,"updated":"2026-07-23 10:14:02.000000000","message":"Can always do `sh -c \"...\"`","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c06fefc5749cdab6dba16b7f81423080bb70cde9","unresolved":true,"context_lines":[{"line_number":199,"context_line":"  rely on shell features (pipes, redirections) that assume an"},{"line_number":200,"context_line":"  interactive shell context. For example, the SONiC ACL write"},{"line_number":201,"context_line":"  uses a pipeline: ``echo | base64 -d | gunzip \u003e file``. Since"},{"line_number":202,"context_line":"  exec channels execute commands directly without a login shell,"},{"line_number":203,"context_line":"  some command sequences may need to be restructured into"},{"line_number":204,"context_line":"  discrete steps (e.g., write a file, then load it). This is"},{"line_number":205,"context_line":"  expected to be straightforward but requires per-command"}],"source_content_type":"text/x-rst","patch_set":1,"id":"437d635d_373fd6ea","line":202,"in_reply_to":"849b1f74_91913a9e","updated":"2026-07-23 20:27:38.000000000","message":"great callout!","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6a45b47f9be73a8254b946c591d54a6bfa92592f","unresolved":true,"context_lines":[{"line_number":213,"context_line":"* **SONiC output parsing** -- SONiC\u0027s ``show`` commands produce"},{"line_number":214,"context_line":"  text tables in multiple formats across versions. The existing"},{"line_number":215,"context_line":"  driver handles three different output formats with regex"},{"line_number":216,"context_line":"  parsing. The new driver inherits this complexity."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Distributed Locking"},{"line_number":219,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"69976721_22473f2f","line":216,"updated":"2026-07-23 10:14:02.000000000","message":"We can consider existing libraries: https://ttp.readthedocs.io/en/latest/Writing%20templates/How%20to%20parse%20text%20tables.html","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7399fe1070bdb20a4f073596f841661cae970d1b","unresolved":true,"context_lines":[{"line_number":213,"context_line":"* **SONiC output parsing** -- SONiC\u0027s ``show`` commands produce"},{"line_number":214,"context_line":"  text tables in multiple formats across versions. The existing"},{"line_number":215,"context_line":"  driver handles three different output formats with regex"},{"line_number":216,"context_line":"  parsing. The new driver inherits this complexity."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Distributed Locking"},{"line_number":219,"context_line":"~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1c6a2a8f_2a5cc894","line":216,"in_reply_to":"69976721_22473f2f","updated":"2026-07-23 20:28:30.000000000","message":"For the most part, I think its all been single line \"hunting\" for values, but its been a while since I\u0027ve looked at some of that code.\n\nReally we\u0027re trying to just identify enough to figure out if we need to re-apply config, or not.","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"02c22290becadb5c0bf0e7442d6e878ed946ff75","unresolved":true,"context_lines":[{"line_number":242,"context_line":"Alternatives"},{"line_number":243,"context_line":"------------"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"**Use gNMI for SONiC.** SONiC supports the gNMI Set RPC for"},{"line_number":246,"context_line":"configuration, including transactional semantics with"},{"line_number":247,"context_line":"checkpoint/rollback. However, gNMI adoption for configuration"},{"line_number":248,"context_line":"management (as opposed to telemetry) remains limited across the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9c7f3e18_fa66b5b1","line":245,"range":{"start_line":245,"start_character":15,"end_line":245,"end_character":20},"updated":"2026-07-23 11:06:05.000000000","message":"SONiC\u0027s Management framework does have RESTCONF interface, there is also some OpenConfig YANG support - but I found it limited when testing. I have a series of changes adding RESTCONF as an alternative to NETCONF - the patch series use OpenConfig YANG and was tested against Cisco NXOS.\n\nAnother alternative may be adding SONiC specific yang model python classes from: https://github.com/sonic-net/sonic-buildimage/tree/master/src/sonic-yang-models/yang-models (I think an LLM pointed at the existing openconfig as learning material should be able to do a pretty good job.)\n\n\n[1] https://review.opendev.org/q/topic:%22restconf%22","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c06fefc5749cdab6dba16b7f81423080bb70cde9","unresolved":true,"context_lines":[{"line_number":242,"context_line":"Alternatives"},{"line_number":243,"context_line":"------------"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"**Use gNMI for SONiC.** SONiC supports the gNMI Set RPC for"},{"line_number":246,"context_line":"configuration, including transactional semantics with"},{"line_number":247,"context_line":"checkpoint/rollback. However, gNMI adoption for configuration"},{"line_number":248,"context_line":"management (as opposed to telemetry) remains limited across the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"6f6b4b06_e319cf3c","line":245,"range":{"start_line":245,"start_character":15,"end_line":245,"end_character":20},"in_reply_to":"9c7f3e18_fa66b5b1","updated":"2026-07-23 20:27:38.000000000","message":"I guess the question ends up being if restconf would make more sense or not.\n\nI think in the end I\u0027d like a delineated model where we have base classes, and we have flavor of drivers which we know worked when we created them, which is the same bar we\u0027ve held submissions to for years. I sort of want to avoid a single driver we hope just works, but as a starting point it might make sense.","commit_id":"78dc1934d443960c5a68c96c7bcfd3d6e0907965"}]}
