)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"07772a41528f9bcdf7858f4243f3c07d042c1d1c","unresolved":true,"context_lines":[{"line_number":16,"context_line":"the infrastructure DNS posture once per backend and have the driver"},{"line_number":17,"context_line":"apply it to every SVM it manages:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* netapp_dns_domains      - up to 6 DNS search domains."},{"line_number":20,"context_line":"* netapp_dns_nameservers  - up to 3 DNS server IPs (IPv4 or IPv6)."},{"line_number":21,"context_line":"* netapp_dns_hosts        - optional hostname:ip fallbacks for the SVM"},{"line_number":22,"context_line":"                            local-hosts table (supports shared IPs via"},{"line_number":23,"context_line":"                            \"host1,host2,...:ip\" shorthand)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"6b9204cb_f9a207e0","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":65},"updated":"2026-05-19 15:57:31.000000000","message":"Are these ONTAP limitations?","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"e7fccc68d6aafa2b6c7203f586520d39c7e64326","unresolved":false,"context_lines":[{"line_number":16,"context_line":"the infrastructure DNS posture once per backend and have the driver"},{"line_number":17,"context_line":"apply it to every SVM it manages:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* netapp_dns_domains      - up to 6 DNS search domains."},{"line_number":20,"context_line":"* netapp_dns_nameservers  - up to 3 DNS server IPs (IPv4 or IPv6)."},{"line_number":21,"context_line":"* netapp_dns_hosts        - optional hostname:ip fallbacks for the SVM"},{"line_number":22,"context_line":"                            local-hosts table (supports shared IPs via"},{"line_number":23,"context_line":"                            \"host1,host2,...:ip\" shorthand)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"95d2d249_994ea8e7","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":65},"in_reply_to":"369fde92_70ec804f","updated":"2026-05-20 17:07:58.000000000","message":"Okay then somehow this should come out that the limitations are from ONTAP and not enforced by driver.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"164697acd87cc7395e8032421b3010fdfb49cfbe","unresolved":false,"context_lines":[{"line_number":16,"context_line":"the infrastructure DNS posture once per backend and have the driver"},{"line_number":17,"context_line":"apply it to every SVM it manages:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* netapp_dns_domains      - up to 6 DNS search domains."},{"line_number":20,"context_line":"* netapp_dns_nameservers  - up to 3 DNS server IPs (IPv4 or IPv6)."},{"line_number":21,"context_line":"* netapp_dns_hosts        - optional hostname:ip fallbacks for the SVM"},{"line_number":22,"context_line":"                            local-hosts table (supports shared IPs via"},{"line_number":23,"context_line":"                            \"host1,host2,...:ip\" shorthand)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"369fde92_70ec804f","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":65},"in_reply_to":"6b9204cb_f9a207e0","updated":"2026-05-20 13:47:50.000000000","message":"Yes Anoop.\n\nInfo from ONTAP docs:\ndomains\t\ndns_domains[\nexample: List [ \"example.com\", \"example2.example3.com\" ]\nmaxItems: 6\n\nservers\t\nname_servers[\nexample: List [ \"10.224.65.20\", \"2001:db08:a0b:12f0::1\" ]\nmaxItems: 3","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e18e761fe5c13b60aebf183532d996633b29e7a8","unresolved":true,"context_lines":[{"line_number":38,"context_line":"  implements it to walk every share server it owns and reconcile the"},{"line_number":39,"context_line":"  SVM\u0027s DNS config and local-hosts table against manila.conf, with"},{"line_number":40,"context_line":"  per-SVM failure isolation."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Assisted-By: Claude Code Opus 4.7"},{"line_number":43,"context_line":"Change-Id: I99924a7e44fffbdd2d736194d46411a5b6c8ce07"},{"line_number":44,"context_line":"Signed-off-by: Saikumar Pulluri \u003csaikumar1016@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2bcbe6a6_bc24c7bb","line":41,"updated":"2026-05-20 22:31:34.000000000","message":"Closes-Bug?","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  implements it to walk every share server it owns and reconcile the"},{"line_number":39,"context_line":"  SVM\u0027s DNS config and local-hosts table against manila.conf, with"},{"line_number":40,"context_line":"  per-SVM failure isolation."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Assisted-By: Claude Code Opus 4.7"},{"line_number":43,"context_line":"Change-Id: I99924a7e44fffbdd2d736194d46411a5b6c8ce07"},{"line_number":44,"context_line":"Signed-off-by: Saikumar Pulluri \u003csaikumar1016@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"551ae3bb_c87e3c72","line":41,"in_reply_to":"2bcbe6a6_bc24c7bb","updated":"2026-05-25 20:00:47.000000000","message":"Added this bug: https://bugs.launchpad.net/manila/+bug/2147659","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0233a67a2bf919c12d43b8ac81a875e9b25866d1","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[NetApp] Add DNS Configuration for SVMs in DHSS\u003dTrue Mode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A NetApp ONTAP multi-SVM share-server is a freshly created SVM"},{"line_number":10,"context_line":"with no DNS name-service unless a security service is attached."},{"line_number":11,"context_line":"SVMs that need to resolve infrastructure hostnames (e.g. a"},{"line_number":12,"context_line":"Barbican KMS endpoint for share encryption) therefore had no"},{"line_number":13,"context_line":"working resolver and share creation failed out-of-the-box."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Introduce three per-backend options that let operators declare"},{"line_number":16,"context_line":"the infrastructure DNS posture once and have the driver apply"},{"line_number":17,"context_line":"it to every SVM it manages:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  netapp_dns_domains      up to 6 search domains"},{"line_number":20,"context_line":"  netapp_dns_nameservers  up to 3 server IPs (v4 or v6)"},{"line_number":21,"context_line":"  netapp_dns_hosts        optional hostname:ip local-host"},{"line_number":22,"context_line":"                          fallbacks (supports the"},{"line_number":23,"context_line":"                          \"host1,host2,...:ip\" shorthand)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"On SVM create the driver applies these before any security"},{"line_number":26,"context_line":"service is joined so that AD/LDAP DNS merges on top of the"},{"line_number":27,"context_line":"infra DNS rather than overwriting it. On the periodic reconcile"},{"line_number":28,"context_line":"and on security-service add/replace, the driver reconciles each"},{"line_number":29,"context_line":"SVM to the union of manila.conf and the SVM\u0027s security-service"},{"line_number":30,"context_line":"DNS, so an edit on either owner converges without transiently"},{"line_number":31,"context_line":"wiping the other. ONTAP\u0027s per-SVM caps (6 domains, 3 servers)"},{"line_number":32,"context_line":"are validated up-front so a cap overflow returns InvalidInput"},{"line_number":33,"context_line":"instead of half-creating an SVM."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Closes-Bug: #2147659"},{"line_number":36,"context_line":"Assisted-By: Claude Code Opus 4.7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"a12fa58f_dd8fe097","line":33,"range":{"start_line":9,"start_character":0,"end_line":33,"end_character":32},"updated":"2026-06-01 21:47:44.000000000","message":"Can simplify:\n\n\n\n```suggestion\nNetApp ONTAP SVMs created in DHSS\u003dTrue mode have no DNS\nname-service unless a security service is attached. This\nbreaks share creation when the SVM needs to resolve\ninfrastructure hostnames (e.g. a Barbican KMS endpoint).\n\nAdd netapp_dns_domains, netapp_dns_nameservers, and\nnetapp_dns_hosts config options so operators can provide\ninfrastructure DNS to every SVM managed by the backend.\nInfra DNS is applied at SVM creation before security\nservices, so AD/LDAP DNS merges on top rather than\noverwriting. DNS is reconciled on service restart and\nsecurity-service updates to the union of both owners\u0027\ncurrent values.\n\n```","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[NetApp] Add DNS Configuration for SVMs in DHSS\u003dTrue Mode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A NetApp ONTAP multi-SVM share-server is a freshly created SVM"},{"line_number":10,"context_line":"with no DNS name-service unless a security service is attached."},{"line_number":11,"context_line":"SVMs that need to resolve infrastructure hostnames (e.g. a"},{"line_number":12,"context_line":"Barbican KMS endpoint for share encryption) therefore had no"},{"line_number":13,"context_line":"working resolver and share creation failed out-of-the-box."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Introduce three per-backend options that let operators declare"},{"line_number":16,"context_line":"the infrastructure DNS posture once and have the driver apply"},{"line_number":17,"context_line":"it to every SVM it manages:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  netapp_dns_domains      up to 6 search domains"},{"line_number":20,"context_line":"  netapp_dns_nameservers  up to 3 server IPs (v4 or v6)"},{"line_number":21,"context_line":"  netapp_dns_hosts        optional hostname:ip local-host"},{"line_number":22,"context_line":"                          fallbacks (supports the"},{"line_number":23,"context_line":"                          \"host1,host2,...:ip\" shorthand)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"On SVM create the driver applies these before any security"},{"line_number":26,"context_line":"service is joined so that AD/LDAP DNS merges on top of the"},{"line_number":27,"context_line":"infra DNS rather than overwriting it. On the periodic reconcile"},{"line_number":28,"context_line":"and on security-service add/replace, the driver reconciles each"},{"line_number":29,"context_line":"SVM to the union of manila.conf and the SVM\u0027s security-service"},{"line_number":30,"context_line":"DNS, so an edit on either owner converges without transiently"},{"line_number":31,"context_line":"wiping the other. ONTAP\u0027s per-SVM caps (6 domains, 3 servers)"},{"line_number":32,"context_line":"are validated up-front so a cap overflow returns InvalidInput"},{"line_number":33,"context_line":"instead of half-creating an SVM."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Closes-Bug: #2147659"},{"line_number":36,"context_line":"Assisted-By: Claude Code Opus 4.7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9ecd22d1_499ae0be","line":33,"range":{"start_line":9,"start_character":0,"end_line":33,"end_character":32},"in_reply_to":"a12fa58f_dd8fe097","updated":"2026-06-02 13:29:53.000000000","message":"Done.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0233a67a2bf919c12d43b8ac81a875e9b25866d1","unresolved":true,"context_lines":[{"line_number":33,"context_line":"instead of half-creating an SVM."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Closes-Bug: #2147659"},{"line_number":36,"context_line":"Assisted-By: Claude Code Opus 4.7"},{"line_number":37,"context_line":"Change-Id: I99924a7e44fffbdd2d736194d46411a5b6c8ce07"},{"line_number":38,"context_line":"Signed-off-by: Saikumar Pulluri \u003csaikumar1016@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5e4eee3a_a684b9c0","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":33},"updated":"2026-06-01 21:47:44.000000000","message":"I didn\u0027t use Opus 4.7, i used Opus 4.6","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":true,"context_lines":[{"line_number":33,"context_line":"instead of half-creating an SVM."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Closes-Bug: #2147659"},{"line_number":36,"context_line":"Assisted-By: Claude Code Opus 4.7"},{"line_number":37,"context_line":"Change-Id: I99924a7e44fffbdd2d736194d46411a5b6c8ce07"},{"line_number":38,"context_line":"Signed-off-by: Saikumar Pulluri \u003csaikumar1016@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"e703ee51_b2ccdb1a","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":33},"in_reply_to":"5e4eee3a_a684b9c0","updated":"2026-06-02 13:29:53.000000000","message":"Added both and also a co-author field! I think it makes sense to add. Please see if this works.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2e453e13adb2e31cec1f900a8f49a1fe09417b7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e7276f2c_88e65ab5","updated":"2026-05-14 12:02:00.000000000","message":"Thanks Sai for working on this, I have added few comments, please take a look.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"01edf636_fc584de9","updated":"2026-05-14 22:23:56.000000000","message":"Thanks for working on this change. Please take a look at the comments inline","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"07772a41528f9bcdf7858f4243f3c07d042c1d1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"62721175_e5073fe1","updated":"2026-05-19 15:57:31.000000000","message":"Provided some comments. And inline with some of the other comments on this patch. We need to relook at how to reconcile the DNS config for all types of share servers we may encounter.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"50989a95_99e85e2a","updated":"2026-05-17 14:32:09.000000000","message":"Thank you so much for the comments @gawasthi2010@gmail.com and @ces.eduardo98@gmail.com.\n\nAddressed possible comments and answered few queries. \n\nPlease take a look at the replies and respond accordingly. Thanks once again.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c3e7657032f25662747eb4297bdb4dd3ac0142ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"93e26979_cdd61a3a","updated":"2026-05-27 20:33:19.000000000","message":"Okay, this latest iteration is significantly over-engineered. LLMs can run amok on stuff and go write a bunch of spaghetti code - this may be fine for proof-of-concept systems, but fail a number of criteria in critical software systems, especially ones that are maintained by open source communities. Here\u0027s where, you as a responsible open source contributor should guide your AI tool to avoid slop. It looks bad on you, and causes more work for people reviewing and maintaining the code base. We\u0027re tolerant of AI generated code, but, definitely not tolerant of creating technical debt on ourselves to read, understand and maintain the garbage it is capable of generating.\n\nPlease rework this. \n\nAside from the code, the documentation here is excessive too; why would docstrings for internal methods need to be essays? the code comments are explaining \"what\" instead of \"why\". This needs a significant rewrite focused on conciseness before it can merge. \n\nAs a beginner in OpenStack, a past PTL told me to code like the guy that reads my code knows where I live. I don\u0027t want to know where you live, but I sure don\u0027t want you to have to struggle to maintain this yourself.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"bc2f505fcc2fdbb44639bec703fcaceaa89aa170","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"971a323c_38f0fca8","updated":"2026-05-28 10:28:28.000000000","message":"Thanks @ces.eduardo98@gmail.com for your review comments, as Sai is not available I have incorporated the review comments. One comment I kept Open, we can discuss this further and based on our discussion we can make the require changes.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c1027565_25744c08","updated":"2026-05-25 20:00:47.000000000","message":"Thanks everyone for the reviews so far — the feedback has really helped tighten this patch. Appreciate all the reviews!!\n\nI\u0027ve captured a summary of what was exercised across Master and Flamingo DevStack here:\nhttps://paste.opendev.org/show/bcCh14KKPEmOK5Muf07Q/\n\nIn addition to the infra-DNS scenarios above, I also ran a combined infra-DNS + security-service (Active Directory) matrix to confirm the two paths interact correctly and remain independent where they should. Across TC1–TC28(refer the link below), every scenario reachable in our lab was exercised live end-to-end on DevStack; the remaining cases (SS-replace flows and LDAP-attach immediate-push) are covered by dedicated unit tests in test_lib_multi_svm.py. The per-row live / regression / UT split is called out in the paste: https://paste.opendev.org/show/bVFph3C18XA023MQkUKe/\n\nPlease do take another look at the code and approve — happy to address any further comments. Thanks again!","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6023a0885ed8a78decea55c3f79c00dcfbe0dfb7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"48bd0098_ffa72348","updated":"2026-05-26 13:49:12.000000000","message":"Thanks for working on the updates. I\u0027m still going through the changes as it is a lot and became a bit painful to read everything.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41813ade34c22e099b5ecfbfea748f9c263fd53c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6aa726f1_0ee21133","updated":"2026-06-01 06:59:47.000000000","message":"I had an LLM rewrite this change, preserving the core logic but cutting unnecessary fluff. The result is +922 lines vs the original +2883 (68% reduction). All features are intact: infra DNS on SVM create, local-hosts fallbacks, reconciliation on restart and SS updates, and caps pre-flight checks. What was cut: \n\n- essay-length docstrings, \n- duplicate logic, \n- per-share-create DNS reconciliation (redundant with SVM create and restart paths), \n- cluster-wide ICMP probes before adding local-host entries, \n- triplicated cap-check logic, and\n- overlap detection logging that fires every reconcile pass forever.\n\n  https://review.opendev.org/c/openstack/manila/+/990877\n\nPS3 sits on top of 988254 so you can diff the two directly.\nPS1 (or PS2) will show you the commit compared to base.","commit_id":"85b087e23b88c8f3a456e9bbc0bddd57a0e32cc2"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"b0d2dbc6ca364fd6bd5743e5d628cdd351bdb853","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"79c53b73_b103ddbd","in_reply_to":"6aa726f1_0ee21133","updated":"2026-06-01 20:17:42.000000000","message":"Thank you so much @gouthampravi@gmail.com , updated the code from the patch: https://review.opendev.org/c/openstack/manila/+/990877\nPlease do take a look. If this works, please approve. \n\nTested below workflows for infra DNS tests, all good here. Testing info is captured here: https://paste.opendev.org/show/bIVyDfBSGbF5HIyxndIS/\nTC1: Create an encrypted share with all DNS options\nTC2: Update all DNS configs options, restart manila services and check vserver\nTC3: Remove an entry from all DNS configs options, restart manila services and check vserver\nTC4: Delete all shares, update DNS confs, restart manila services and check vserver\nTC5: Create a new share and check vserver\nTC6: Create an unencrypted share with all DNS config options on different network and same backend stanza\nTC7: Remove an entry from all DNS configs options and check both vservers\nTC8: Update all DNS configs options and check both vservers\nTC9: Delete all shares and share servers\n\nTested below w.r.t infra DNS and security services, and went well here as well. Testing info is captured here: https://paste.opendev.org/show/bBlXENhnCoii9wbE0HCc/\nTC10: Create a share with infra DNS and Security Services\nTC11: Remove entries from infra DNS values\nTC12: Update infra DNS entries\nTC13: Reject SS replace when AD domain changes; SS-owned DNS entries stay intact.\n\nTested on Master Devstack. \nONTAP version: 9.17.1","commit_id":"85b087e23b88c8f3a456e9bbc0bddd57a0e32cc2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4d327cc2245f144583ae51f4f5da78346adebedd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1a6c5b4e_6f8f0d60","updated":"2026-06-02 11:33:23.000000000","message":"Please address the comments.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9fd455bc8fe578c57f992fb6a93d75d25ed3c9d9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d8beadae_ead92596","updated":"2026-06-02 12:06:38.000000000","message":"Thanks for re-uploading the change. I do agree with Goutham that this was overengineered and also tried to convey through the other reviews that this needed to be simplified.\n\n@gouthampravi@gmail.com thank you for providing a less complicated alternative. And thanks for testing it, @saikumar1016@gmail.com. I don\u0027t have further comments other than what is already being pointed out, so happy to merge it when comments are fixed.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0233a67a2bf919c12d43b8ac81a875e9b25866d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ef6da53d_d1a4108a","updated":"2026-06-01 21:47:44.000000000","message":"Thanks for refreshing the change and testing it. I\u0027ve some more comments, please take a look.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"de6de900261558b00bae03d8d272c33b10d08cfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"05a8ecb9_90a8c235","updated":"2026-06-02 01:53:59.000000000","message":"and the pylint failure seems relevant","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fbdf15c2_ce7ab6f8","in_reply_to":"d8beadae_ead92596","updated":"2026-06-02 13:29:53.000000000","message":"Thank you Carlos. Addressed all the comments, please do take look!!","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6a264a4f8221989b0f8e69e4e813047264f29799","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9fcab4ca_fa9eb7a6","updated":"2026-06-02 14:02:37.000000000","message":"LGTM ..!","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"bc50ca6106738db40be6d9ffba38ff2e40b3965b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"54d6b1d3_a4ad2ab7","updated":"2026-06-02 14:44:50.000000000","message":"LGTM, thank you!","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b1b448a8d97283532c2c2340bbd77a6bbac58fba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ee945f47_db55951f","updated":"2026-06-02 21:15:34.000000000","message":"Let\u0027s get this in. Thanks for the hard work to get this in shape, folks.","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7f365200_c639de92","updated":"2026-06-02 13:29:53.000000000","message":"Thank you so much everyone for the prompt reviews and suggestions!! I have addressed all the latest comments, please do take a look and approve. The major code change in this patch set is https://review.opendev.org/c/openstack/manila/+/988254/comment/2708fdc6_51234279/ so tested scenarios w.r.t these changes and added results. Thanks once again!!","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"f293707dc817dfd435443544d3eebc7b8f47d7e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c03558ce_17b41d67","updated":"2026-06-02 13:41:29.000000000","message":"Thanks for addressing the comments Sai. The code changes look good to me.","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a4ad6371aacc83e8bf97d6e74a702607d7105a8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"19d07c59_cee0eca5","updated":"2026-06-02 18:56:38.000000000","message":"Would like @maurice.escher@sap.com and/or @kinpaa@gmail.com to take a look.. this looks good to go","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"027658755c766582ed5de7f1f9a2a8590a5323e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d37f6a50_dd007204","updated":"2026-06-10 12:55:26.000000000","message":"lgtm, I\u0027m only wondering if we reached a CAP on domains or servers - we would only notice when the first share with security service is being created, which could be quite late.\n\nE.g. ONTAP_DNS_DOMAINS_CAP \u003d 6, if we configure exactly 6 in the config then the service would start up normally, but each share creation with security service setting domain would fail.\nMaybe this can be improved by allowing only 5 for the infra, so that at least 1 is left? Or maybe a warning during driver init if 6 is set, so the operator can know early that all security services cannot specify a dns domain in that setup...","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"34d6c1eb0a68662c0acc839665d72907e19e68bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"41c3b2b7_eb15e951","in_reply_to":"d37f6a50_dd007204","updated":"2026-06-12 06:01:49.000000000","message":"Agreed. We can do it in a future patch Maurice. Its a good point.","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"}],"doc/source/admin/netapp_cluster_mode_driver.rst":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6023a0885ed8a78decea55c3f79c00dcfbe0dfb7","unresolved":true,"context_lines":[{"line_number":133,"context_line":"- cDOT supports only flat and VLAN network segmentation types."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Configuring infrastructure DNS for SVMs (DHSS\u003dTrue)"},{"line_number":136,"context_line":"---------------------------------------------------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"In ``driver_handles_share_servers\u003dTrue`` mode the driver creates a fresh"},{"line_number":139,"context_line":"SVM per share server. Newly created SVMs do not inherit any DNS"}],"source_content_type":"text/x-rst","patch_set":3,"id":"458dcf4f_bb6bac47","line":136,"updated":"2026-05-26 13:49:12.000000000","message":"Thank you for adding this as docs.\n\nThis section is a bit wordy and reads like generated text. If we sum the amount of lines, it\u0027s almost 100% addition compared to what already exists. Can we shrink this only to what is necessary? 😬","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"bc2f505fcc2fdbb44639bec703fcaceaa89aa170","unresolved":true,"context_lines":[{"line_number":133,"context_line":"- cDOT supports only flat and VLAN network segmentation types."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Configuring infrastructure DNS for SVMs (DHSS\u003dTrue)"},{"line_number":136,"context_line":"---------------------------------------------------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"In ``driver_handles_share_servers\u003dTrue`` mode the driver creates a fresh"},{"line_number":139,"context_line":"SVM per share server. Newly created SVMs do not inherit any DNS"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ed5bcfa0_21e210b8","line":136,"in_reply_to":"458dcf4f_bb6bac47","updated":"2026-05-28 10:28:28.000000000","message":"I agree with Carlos. Even I think we should not add DNS-related information here. Ideally, we should add only the major feature details in this section. The appropriate place to add these details is in the NetApp documentation (https://netapp-openstack-dev.github.io/openstack-docs/draft/ch_manila.html).","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"- cDOT supports only flat and VLAN network segmentation types."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Configuring infrastructure DNS for SVMs (DHSS\u003dTrue)"},{"line_number":136,"context_line":"---------------------------------------------------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"In ``driver_handles_share_servers\u003dTrue`` mode the driver creates a fresh"},{"line_number":139,"context_line":"SVM per share server. Newly created SVMs do not inherit any DNS"}],"source_content_type":"text/x-rst","patch_set":3,"id":"6ef06ab2_ae8295a5","line":136,"in_reply_to":"5a8f7a0c_8fcf6ce2","updated":"2026-06-02 13:29:53.000000000","message":"It\u0027s now updated to minimal number of lines! Resolving this comment. Thank you Carlos/Gireesh.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"14149139ef68e2e4cff41516a4481b2244dffed2","unresolved":true,"context_lines":[{"line_number":133,"context_line":"- cDOT supports only flat and VLAN network segmentation types."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Configuring infrastructure DNS for SVMs (DHSS\u003dTrue)"},{"line_number":136,"context_line":"---------------------------------------------------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"In ``driver_handles_share_servers\u003dTrue`` mode the driver creates a fresh"},{"line_number":139,"context_line":"SVM per share server. Newly created SVMs do not inherit any DNS"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a8f7a0c_8fcf6ce2","line":136,"in_reply_to":"c7f6f948_66ab1147","updated":"2026-05-29 10:00:00.000000000","message":"@ces.eduardo98@gmail.com, I have changes the content. Could you please take a look.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"a9adb13e3afb4bbf26b3426fd23e9b6d6b13891c","unresolved":true,"context_lines":[{"line_number":133,"context_line":"- cDOT supports only flat and VLAN network segmentation types."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Configuring infrastructure DNS for SVMs (DHSS\u003dTrue)"},{"line_number":136,"context_line":"---------------------------------------------------"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"In ``driver_handles_share_servers\u003dTrue`` mode the driver creates a fresh"},{"line_number":139,"context_line":"SVM per share server. Newly created SVMs do not inherit any DNS"}],"source_content_type":"text/x-rst","patch_set":3,"id":"c7f6f948_66ab1147","line":136,"in_reply_to":"ed5bcfa0_21e210b8","updated":"2026-05-28 12:02:12.000000000","message":"\u003e Even I think we should not add DNS-related information here. \n\nHonestly I think we should add something, but we should not go into much details as this change currently is doing in the upstream docs and keep the more detailed version in the NetApp documentation.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"}],"manila/share/driver.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"773c640c_496a6cd7","line":2904,"updated":"2026-05-14 22:23:56.000000000","message":"What about making this part of ensure shares, specially considering that ensure_shares can also be called from the API - which is good in case the driver is capable of doing some fancy reloading from the configs. Also, another reason is that this will help us backporting this change, as it won\u0027t introduce new driver interfaces.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"30b31b9bc01102c72d8bb3dbef33553ff59cca23","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"9142aec7_a5d216a2","line":2904,"in_reply_to":"1dc92188_8c03605e","updated":"2026-05-19 13:28:50.000000000","message":"I agree with the approach and it is inline with what Gireesh and I suggested. We should keep this to the driver to help making it backportable","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c19518d1e79951a771de56ebee61bf526716db89","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"da8762a0_9f616411","line":2904,"in_reply_to":"3e53c273_7c877f3b","updated":"2026-05-20 22:20:40.000000000","message":"Are these comments written by some LLM? \n\nSure i\u0027m aligned.. but i\u0027m also loathe to read these walls of text..","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"deef5d430059c104e3c63c47e3d4457d7ad4e1aa","unresolved":false,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"c26b784b_f19dbbc2","line":2904,"in_reply_to":"5cca80c5_2adbf3a2","updated":"2026-05-21 12:17:48.000000000","message":"I am agree with @ces.eduardo98@gmail.com point. This is make sense to add the DNS entry during first share creation if share server is empty.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"e7fccc68d6aafa2b6c7203f586520d39c7e64326","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e53c273_7c877f3b","line":2904,"in_reply_to":"5cca80c5_2adbf3a2","updated":"2026-05-20 17:07:58.000000000","message":"Okay. I am aligned with the approach of doing it during the first share creation.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6ccdd5a9a648a6c3546201ca1dadc4cfe54a034e","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ddfa226_4fd847b8","line":2904,"in_reply_to":"65cafb5d_47a02b0f","updated":"2026-05-20 13:08:56.000000000","message":"Chiming in on the empty share servers. I think there are no major issues with it, considering this piece on the reply by Sai:\n\n\u003e Net result: the manila/share/driver.py and manila/share/manager.py changes go away, everything stays inside the NetApp driver, and the patch is backportable. The one corner case is SVMs with zero shares — they won\u0027t reconcile until a share lands on them — but they have no consumers anyway, and new SVMs get DNS configured at create time, so it\u0027s existing-empty SVMs only. Acceptable trade-off IMO.\n\nIn my understanding, if a share server doesn\u0027t have shares, it won\u0027t be updated at ensure_shares time. However, we should reconcile it at shares creation, which is something this change does not do currently, so I think it should:\n\n- Look up dns records for the share server\n- Compare the records with current dns config\n- Patch the config if something differs.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"1dc92188_8c03605e","line":2904,"in_reply_to":"773c640c_496a6cd7","updated":"2026-05-17 14:32:09.000000000","message":"Thanks Carlos — I see Gireesh also raised the similar concern on the driver-side hook, so the consensus is clearly to keep this driver-only. The reason I originally added the base hook was to get a guaranteed \"runs on every restart\" trigger with the share-server list + context handed in by ShareManager, without overloading existing entry points — but the backport argument is fair, and adding a new abstract on ShareDriver for one driver\u0027s reconciliation isn\u0027t great either.\n\nPlan for next patch set, if we\u0027re aligned: move the reconcile loop into our ensure_shares() — dedupe share_server_ids from the shares list and call _reconcile_dns_for_vserver() once per SVM. To handle the get_backend_info() early-return in ensure_driver_resources() (which would otherwise skip ensure_shares on an unchanged backend, and a manila.conf DNS edit alone wouldn\u0027t change the hash), I\u0027ll fold a hash of the DNS config into get_backend_info() so config edits invalidate the early-return correctly.\n\nNet result: the manila/share/driver.py and manila/share/manager.py changes go away, everything stays inside the NetApp driver, and the patch is backportable. The one corner case is SVMs with zero shares — they won\u0027t reconcile until a share lands on them — but they have no consumers anyway, and new SVMs get DNS configured at create time, so it\u0027s existing-empty SVMs only. Acceptable trade-off IMO.\n\nSince this rework also requires meaningful re-testing (DHSS\u003dTrue restart paths, conf-edit-then-restart, idle backends), please confirm we are good with this direction and I\u0027ll proceed with the changes in the next patch set. Thanks!\n\nCC: @gouthampravi@gmail.com @anoop.shukla@netapp.com @gawasthi2010@gmail.com","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"164697acd87cc7395e8032421b3010fdfb49cfbe","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"5cca80c5_2adbf3a2","line":2904,"in_reply_to":"7ddfa226_4fd847b8","updated":"2026-05-20 13:47:50.000000000","message":"Thanks a lot @ces.eduardo98@gmail.com — agreed on all three points. Confirming the design for next patchset (also addressing @gouthampravi@gmail.com / @anoop.shukla@netapp.com\u0027s empty-SVM question on this thread):\n\n1. Restart-time reconcile (SVMs with shares). ensure_shares() dedupes share_server_id from the shares list and calls _reconcile_dns_for_vserver() per SVM. To make a manila.conf DNS-only edit invalidate ShareManager\u0027s backend_info early-return on restart, fold a hash of (netapp_dns_domains, netapp_dns_nameservers, netapp_dns_hosts) into get_backend_info().\n\n2. Share-create reconcile (covers existing empty SVMs). On the share-create path for an existing SVM, before allocation:\n\n    Look up DNS records on the SVM.\n    Compare against the driver\u0027s current in-memory DNS config.\n    PATCH only on drift (idempotent — no-op otherwise).\n    This is the piece Carlos explicitly called out, and it\u0027s also the answer to        Goutham\u0027s \"what about empty SVMs?\": empty SVMs have no consumers, so the divergence is invisible to tenants until a share lands — and at that moment, the create-path reconcile applies current config before the share is provisioned. New SVMs continue to get DNS at create time inside _create_vserver().\n\n3. Net result on the diff. manila/share/driver.py and manila/share/manager.py changes are removed in PS 3. Everything lives in manila/share/drivers/netapp/. Fully backportable.\n\n4. So we\u0027re committing to.\n\n    SVM with ≥1 share: matches manila.conf after every service restart.\n    SVM with 0 shares: matches manila.conf by the time the first share is allocated on it.\n    manila.conf edits require a service restart (same as every other manila option today). Documented in the driver guide and the release note.\n\n@gouthampravi@gmail.com @anoop.shukla@netapp.com — please confirm you\u0027re aligned with the above (restart-time reconcile for SVMs with shares, share-create-time reconcile for empty SVMs). If you\u0027re good with it, I\u0027ll proceed with making the changes on this basis and mark this thread resolved. Thanks!","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"84c05ef4119db5a0ab1588a69f40094ff3cae858","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb421e4b_974ace80","line":2904,"in_reply_to":"9142aec7_a5d216a2","updated":"2026-05-19 13:44:32.000000000","message":"Sorry, stating that it is inline with what Gireesh and I suggested means we both want this out of the driver interface to make this change backportable. I agree with @saikumar1016@gmail.com\u0027s approach though. I don\u0027t think check for setup error should be the place for this to live, as it serves a different purpose, even though it\u0027s called when we want it to be for the purpose of this fix. Instead, maybe it should indeed be part of either ensure shares or the driver startup. My initial suggestion for ensure shares is that in the future, in case you guys to some fancy reloading to the options, you would not need a full restart to pick up configs like this. The downside is needing the string to change so the changes are picking up by the ensure_shares. At this point, I\u0027d also seek for opinions from @gouthampravi@gmail.com, @maurice.escher@sap.com and @anoop.shukla@netapp.com :)","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3e8788c65ba88896ffb38c40875d19fd1f32924e","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"f431e8af_6bb42d77","line":2904,"in_reply_to":"bb421e4b_974ace80","updated":"2026-05-19 14:31:57.000000000","message":"yeah, ensure_shares works fine for this. \n\nHow do you handle share servers that have no shares yet? When would you reconcile those?","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"1cc847d7ace164962256e1f1b746740a6ae8c636","unresolved":false,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ecefc08_f6d0dcf6","line":2904,"in_reply_to":"da8762a0_9f616411","updated":"2026-05-21 05:29:13.000000000","message":"Partially yes Goutham! Used an LLM to tighten wording with given technical points and it ended up too long. Apologies; will try to keep future comments as short as possible. Thanks!\n\nAs all of us aligned here, marking this as resolved. Thank you so much Carloss/Anoop/Goutham!!","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"07772a41528f9bcdf7858f4243f3c07d042c1d1c","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"        \"\"\""},{"line_number":2902,"context_line":"        raise NotImplementedError()"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":2905,"context_line":"        \"\"\"Invoked on service startup to reconcile per-SVM/share-server state."},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"        Drivers that maintain configuration on a share server (e.g. DNS"}],"source_content_type":"text/x-python","patch_set":1,"id":"65cafb5d_47a02b0f","line":2904,"in_reply_to":"f431e8af_6bb42d77","updated":"2026-05-19 15:57:31.000000000","message":"That is a good point from @gouthampravi@gmail.com. If we make this part of ensure_shares, we will only loop through the share servers which have shares. It may end up not getting called for the share servers that do not have shares. Do we have a better solution to avoid that?","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":4596,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":4597,"context_line":"            msg \u003d _(\"Failed to configure infrastructure DNS for vserver \""},{"line_number":4598,"context_line":"                    \"%(vserver)s. %(err)s\")"},{"line_number":4599,"context_line":"            raise exception.NetAppException(msg % {\u0027vserver\u0027: vserver_name,"},{"line_number":4600,"context_line":"                                                   \u0027err\u0027: e.message})"},{"line_number":4601,"context_line":""},{"line_number":4602,"context_line":"    @na_utils.trace"},{"line_number":4603,"context_line":"    def is_hostname_reachable_from_all_nodes(self, vserver_name, hostname):"}],"source_content_type":"text/x-python","patch_set":1,"id":"419e6049_20199a0e","line":4600,"range":{"start_line":4599,"start_character":50,"end_line":4600,"end_character":68},"updated":"2026-05-14 22:23:56.000000000","message":"the formatting also can happen at the moment of the msg declaration, maybe with an f string?","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":true,"context_lines":[{"line_number":4596,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":4597,"context_line":"            msg \u003d _(\"Failed to configure infrastructure DNS for vserver \""},{"line_number":4598,"context_line":"                    \"%(vserver)s. %(err)s\")"},{"line_number":4599,"context_line":"            raise exception.NetAppException(msg % {\u0027vserver\u0027: vserver_name,"},{"line_number":4600,"context_line":"                                                   \u0027err\u0027: e.message})"},{"line_number":4601,"context_line":""},{"line_number":4602,"context_line":"    @na_utils.trace"},{"line_number":4603,"context_line":"    def is_hostname_reachable_from_all_nodes(self, vserver_name, hostname):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3fc9c7f_1ffa3902","line":4600,"range":{"start_line":4599,"start_character":50,"end_line":4600,"end_character":68},"in_reply_to":"419e6049_20199a0e","updated":"2026-05-17 14:32:09.000000000","message":"Tried that first, but for translatable messages OpenStack convention is _(\"...\") % {...} — f-strings aren\u0027t picked up by the translation extractor (and in _() the lazy-format dict is what the i18n machinery hashes against). Happy to inline the dict to a single line if it\u0027s the verbosity bothering you, but I\u0027d keep _() here.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[{"line_number":4596,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":4597,"context_line":"            msg \u003d _(\"Failed to configure infrastructure DNS for vserver \""},{"line_number":4598,"context_line":"                    \"%(vserver)s. %(err)s\")"},{"line_number":4599,"context_line":"            raise exception.NetAppException(msg % {\u0027vserver\u0027: vserver_name,"},{"line_number":4600,"context_line":"                                                   \u0027err\u0027: e.message})"},{"line_number":4601,"context_line":""},{"line_number":4602,"context_line":"    @na_utils.trace"},{"line_number":4603,"context_line":"    def is_hostname_reachable_from_all_nodes(self, vserver_name, hostname):"}],"source_content_type":"text/x-python","patch_set":1,"id":"05c693ce_78687228","line":4600,"range":{"start_line":4599,"start_character":50,"end_line":4600,"end_character":68},"in_reply_to":"85ff4260_57d3aa2b","updated":"2026-05-25 20:00:47.000000000","message":"Thanks Goutham!!\n\nWe can close this comment as carloss as mentioned this is also fine in the comment: https://review.opendev.org/c/openstack/manila/+/988254/comment/d8f45209_569d12ac/","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09a4dec8ed3f25fd185a5dd33271048aa657f880","unresolved":true,"context_lines":[{"line_number":4596,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":4597,"context_line":"            msg \u003d _(\"Failed to configure infrastructure DNS for vserver \""},{"line_number":4598,"context_line":"                    \"%(vserver)s. %(err)s\")"},{"line_number":4599,"context_line":"            raise exception.NetAppException(msg % {\u0027vserver\u0027: vserver_name,"},{"line_number":4600,"context_line":"                                                   \u0027err\u0027: e.message})"},{"line_number":4601,"context_line":""},{"line_number":4602,"context_line":"    @na_utils.trace"},{"line_number":4603,"context_line":"    def is_hostname_reachable_from_all_nodes(self, vserver_name, hostname):"}],"source_content_type":"text/x-python","patch_set":1,"id":"85ff4260_57d3aa2b","line":4600,"range":{"start_line":4599,"start_character":50,"end_line":4600,"end_character":68},"in_reply_to":"e3fc9c7f_1ffa3902","updated":"2026-05-21 19:11:44.000000000","message":"yeah lazy formatting is a preferred pattern.. we should avoid fstrings for Logs because of the eager loading and possible security issues","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":4601,"context_line":""},{"line_number":4602,"context_line":"    @na_utils.trace"},{"line_number":4603,"context_line":"    def is_hostname_reachable_from_all_nodes(self, vserver_name, hostname):"},{"line_number":4604,"context_line":"        \"\"\"Return True iff ``hostname`` is pingable from EVERY cluster node."},{"line_number":4605,"context_line":""},{"line_number":4606,"context_line":"        Issues ``network ping -node \u003cN\u003e -vserver \u003cSVM\u003e -destination"},{"line_number":4607,"context_line":"        \u003chostname\u003e`` against every node in the cluster via the private-CLI"}],"source_content_type":"text/x-python","patch_set":1,"id":"04ee6850_be08beef","line":4604,"range":{"start_line":4604,"start_character":23,"end_line":4604,"end_character":26},"updated":"2026-05-14 22:23:56.000000000","message":"if","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":4601,"context_line":""},{"line_number":4602,"context_line":"    @na_utils.trace"},{"line_number":4603,"context_line":"    def is_hostname_reachable_from_all_nodes(self, vserver_name, hostname):"},{"line_number":4604,"context_line":"        \"\"\"Return True iff ``hostname`` is pingable from EVERY cluster node."},{"line_number":4605,"context_line":""},{"line_number":4606,"context_line":"        Issues ``network ping -node \u003cN\u003e -vserver \u003cSVM\u003e -destination"},{"line_number":4607,"context_line":"        \u003chostname\u003e`` against every node in the cluster via the private-CLI"}],"source_content_type":"text/x-python","patch_set":1,"id":"63e3e704_211f2419","line":4604,"range":{"start_line":4604,"start_character":23,"end_line":4604,"end_character":26},"in_reply_to":"04ee6850_be08beef","updated":"2026-05-17 14:32:09.000000000","message":"Reworded to \"Return True only when...\" to be unambiguous.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":4620,"context_line":"                      \"\u0027%(vserver)s\u0027: %(err)s. Treating as unreachable.\","},{"line_number":4621,"context_line":"                      {\u0027host\u0027: hostname, \u0027vserver\u0027: vserver_name,"},{"line_number":4622,"context_line":"                       \u0027err\u0027: e.message})"},{"line_number":4623,"context_line":"            return False"},{"line_number":4624,"context_line":""},{"line_number":4625,"context_line":"        if not nodes:"},{"line_number":4626,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"270ce41a_532caeb0","line":4623,"range":{"start_line":4623,"start_character":12,"end_line":4623,"end_character":24},"updated":"2026-05-14 22:23:56.000000000","message":"wouldn\u0027t this be misleading the caller? an exception because it could not list cluster nodes is totally different from the code returning False. This will be interpreted as the node not being able to reach and the staticc local-host entry will be created.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":4620,"context_line":"                      \"\u0027%(vserver)s\u0027: %(err)s. Treating as unreachable.\","},{"line_number":4621,"context_line":"                      {\u0027host\u0027: hostname, \u0027vserver\u0027: vserver_name,"},{"line_number":4622,"context_line":"                       \u0027err\u0027: e.message})"},{"line_number":4623,"context_line":"            return False"},{"line_number":4624,"context_line":""},{"line_number":4625,"context_line":"        if not nodes:"},{"line_number":4626,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"8cf2f06c_7b7a2dea","line":4623,"range":{"start_line":4623,"start_character":12,"end_line":4623,"end_character":24},"in_reply_to":"270ce41a_532caeb0","updated":"2026-05-17 14:32:09.000000000","message":"Good catch — failure to enumerate cluster nodes is genuinely different from per-node ping failure and shouldn\u0027t quietly trigger the static-host fallback. In patch set2, list_cluster_nodes() errors propagate; only per-node network ping failures still return False (those are \"unreachable from this node\").","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":4623,"context_line":"            return False"},{"line_number":4624,"context_line":""},{"line_number":4625,"context_line":"        if not nodes:"},{"line_number":4626,"context_line":"            return False"},{"line_number":4627,"context_line":""},{"line_number":4628,"context_line":"        for node in nodes:"},{"line_number":4629,"context_line":"            body \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"a49d598e_0afee332","line":4626,"range":{"start_line":4626,"start_character":12,"end_line":4626,"end_character":24},"updated":"2026-05-14 22:23:56.000000000","message":"same? maybe we should treat this situation differently","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":4623,"context_line":"            return False"},{"line_number":4624,"context_line":""},{"line_number":4625,"context_line":"        if not nodes:"},{"line_number":4626,"context_line":"            return False"},{"line_number":4627,"context_line":""},{"line_number":4628,"context_line":"        for node in nodes:"},{"line_number":4629,"context_line":"            body \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"c3144dab_50439481","line":4626,"range":{"start_line":4626,"start_character":12,"end_line":4626,"end_character":24},"in_reply_to":"a49d598e_0afee332","updated":"2026-05-17 14:32:09.000000000","message":"Mentioned the explanation above.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":4669,"context_line":"                return {}"},{"line_number":4670,"context_line":"            msg \u003d _(\"Failed to retrieve local hosts for vserver \""},{"line_number":4671,"context_line":"                    \"%(vserver)s. %(err)s\")"},{"line_number":4672,"context_line":"            raise exception.NetAppException(msg % {\u0027vserver\u0027: vserver_name,"},{"line_number":4673,"context_line":"                                                   \u0027err\u0027: e.message})"},{"line_number":4674,"context_line":""},{"line_number":4675,"context_line":"        entries \u003d {}"},{"line_number":4676,"context_line":"        for record in result.get(\u0027records\u0027, []):"}],"source_content_type":"text/x-python","patch_set":1,"id":"d8f45209_569d12ac","line":4673,"range":{"start_line":4672,"start_character":50,"end_line":4673,"end_character":68},"updated":"2026-05-14 22:23:56.000000000","message":"same about formatting outside if possible","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"96777ec8dacf6106cc5558e0f58a4c4d8c89fcd0","unresolved":false,"context_lines":[{"line_number":4669,"context_line":"                return {}"},{"line_number":4670,"context_line":"            msg \u003d _(\"Failed to retrieve local hosts for vserver \""},{"line_number":4671,"context_line":"                    \"%(vserver)s. %(err)s\")"},{"line_number":4672,"context_line":"            raise exception.NetAppException(msg % {\u0027vserver\u0027: vserver_name,"},{"line_number":4673,"context_line":"                                                   \u0027err\u0027: e.message})"},{"line_number":4674,"context_line":""},{"line_number":4675,"context_line":"        entries \u003d {}"},{"line_number":4676,"context_line":"        for record in result.get(\u0027records\u0027, []):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1532c58b_319b1d1c","line":4673,"range":{"start_line":4672,"start_character":50,"end_line":4673,"end_character":68},"in_reply_to":"cb4c036f_837957d7","updated":"2026-05-19 13:07:14.000000000","message":"Only solution would be moving the declaration out of the _, but I\u0027m fine with the way this is as well.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":true,"context_lines":[{"line_number":4669,"context_line":"                return {}"},{"line_number":4670,"context_line":"            msg \u003d _(\"Failed to retrieve local hosts for vserver \""},{"line_number":4671,"context_line":"                    \"%(vserver)s. %(err)s\")"},{"line_number":4672,"context_line":"            raise exception.NetAppException(msg % {\u0027vserver\u0027: vserver_name,"},{"line_number":4673,"context_line":"                                                   \u0027err\u0027: e.message})"},{"line_number":4674,"context_line":""},{"line_number":4675,"context_line":"        entries \u003d {}"},{"line_number":4676,"context_line":"        for record in result.get(\u0027records\u0027, []):"}],"source_content_type":"text/x-python","patch_set":1,"id":"cb4c036f_837957d7","line":4673,"range":{"start_line":4672,"start_character":50,"end_line":4673,"end_character":68},"in_reply_to":"d8f45209_569d12ac","updated":"2026-05-17 14:32:09.000000000","message":"Same as the comment on configure_dns_for_vserver — keeping _(\"...\") % {...} for translatability.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e18e761fe5c13b60aebf183532d996633b29e7a8","unresolved":true,"context_lines":[{"line_number":4630,"context_line":"                \u0027count\u0027: 1,"},{"line_number":4631,"context_line":"            }"},{"line_number":4632,"context_line":"            try:"},{"line_number":4633,"context_line":"                self.send_request(\u0027/private/cli/network/ping\u0027, \u0027post\u0027,"},{"line_number":4634,"context_line":"                                  body\u003dbody)"},{"line_number":4635,"context_line":"            except netapp_api.api.NaApiError as e:"},{"line_number":4636,"context_line":"                LOG.debug(\"Hostname \u0027%(host)s\u0027 not reachable from node \""},{"line_number":4637,"context_line":"                          \"\u0027%(node)s\u0027 on vserver \u0027%(vserver)s\u0027: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"cab1b956_414383d5","line":4634,"range":{"start_line":4633,"start_character":0,"end_line":4634,"end_character":44},"updated":"2026-05-20 22:31:34.000000000","message":"Is this good practice? Would a \"/private\" API be accessible by the driver\u0027s credentials? \n\nIs this okay because this is DHSS\u003dTrue? \n\nis there any risk of this API disappearing because of some ONTAP policy?","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"9727e3dd424d2af7c0b83557f5a3d69e72fe6ecf","unresolved":true,"context_lines":[{"line_number":4630,"context_line":"                \u0027count\u0027: 1,"},{"line_number":4631,"context_line":"            }"},{"line_number":4632,"context_line":"            try:"},{"line_number":4633,"context_line":"                self.send_request(\u0027/private/cli/network/ping\u0027, \u0027post\u0027,"},{"line_number":4634,"context_line":"                                  body\u003dbody)"},{"line_number":4635,"context_line":"            except netapp_api.api.NaApiError as e:"},{"line_number":4636,"context_line":"                LOG.debug(\"Hostname \u0027%(host)s\u0027 not reachable from node \""},{"line_number":4637,"context_line":"                          \"\u0027%(node)s\u0027 on vserver \u0027%(vserver)s\u0027: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"cf19adf8_d3aa90e9","line":4634,"range":{"start_line":4633,"start_character":0,"end_line":4634,"end_character":44},"in_reply_to":"4b968f7a_64c4ff77","updated":"2026-05-25 05:52:36.000000000","message":"Yes. We have used private CLI APIs in many places. Its also available on the public swagger page from ONTAP documentation, so its not a hidden API anyways.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"54e47bedb6e40fb5f04b0cd41181d990b9f3a962","unresolved":true,"context_lines":[{"line_number":4630,"context_line":"                \u0027count\u0027: 1,"},{"line_number":4631,"context_line":"            }"},{"line_number":4632,"context_line":"            try:"},{"line_number":4633,"context_line":"                self.send_request(\u0027/private/cli/network/ping\u0027, \u0027post\u0027,"},{"line_number":4634,"context_line":"                                  body\u003dbody)"},{"line_number":4635,"context_line":"            except netapp_api.api.NaApiError as e:"},{"line_number":4636,"context_line":"                LOG.debug(\"Hostname \u0027%(host)s\u0027 not reachable from node \""},{"line_number":4637,"context_line":"                          \"\u0027%(node)s\u0027 on vserver \u0027%(vserver)s\u0027: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"4b968f7a_64c4ff77","line":4634,"range":{"start_line":4633,"start_character":0,"end_line":4634,"end_character":44},"in_reply_to":"c958bcda_6070749c","updated":"2026-05-21 19:43:00.000000000","message":"okay, i\u0027d push for it.. seeing \"/private\" seems like someone didn\u0027t envision this being used in long living clients. I wish the endpoint was: \"/zapi-hack\" or something like that.. :D but you get my point.. \n\nYou having to merge this in open source code that runs critical systems seems like ONTAP will have to support this for a long time.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a324e1fd00d2b15a56eb1d30779410dbbf3116f1","unresolved":true,"context_lines":[{"line_number":4630,"context_line":"                \u0027count\u0027: 1,"},{"line_number":4631,"context_line":"            }"},{"line_number":4632,"context_line":"            try:"},{"line_number":4633,"context_line":"                self.send_request(\u0027/private/cli/network/ping\u0027, \u0027post\u0027,"},{"line_number":4634,"context_line":"                                  body\u003dbody)"},{"line_number":4635,"context_line":"            except netapp_api.api.NaApiError as e:"},{"line_number":4636,"context_line":"                LOG.debug(\"Hostname \u0027%(host)s\u0027 not reachable from node \""},{"line_number":4637,"context_line":"                          \"\u0027%(node)s\u0027 on vserver \u0027%(vserver)s\u0027: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"c958bcda_6070749c","line":4634,"range":{"start_line":4633,"start_character":0,"end_line":4634,"end_character":44},"in_reply_to":"cab1b956_414383d5","updated":"2026-05-21 14:02:03.000000000","message":"Hi Goutham,\n\nA private API acts as an alternative to ZAPI API for an API that has not yet been RESTified. So this looks fine to me. It should be accessible using the driver credentials and has been used across Cinder and Manila in gaps we have yet to fill on ONTAP. We will pursue this as a REST gap and later when ONTAP provides a public API, we will switch to it.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[{"line_number":4630,"context_line":"                \u0027count\u0027: 1,"},{"line_number":4631,"context_line":"            }"},{"line_number":4632,"context_line":"            try:"},{"line_number":4633,"context_line":"                self.send_request(\u0027/private/cli/network/ping\u0027, \u0027post\u0027,"},{"line_number":4634,"context_line":"                                  body\u003dbody)"},{"line_number":4635,"context_line":"            except netapp_api.api.NaApiError as e:"},{"line_number":4636,"context_line":"                LOG.debug(\"Hostname \u0027%(host)s\u0027 not reachable from node \""},{"line_number":4637,"context_line":"                          \"\u0027%(node)s\u0027 on vserver \u0027%(vserver)s\u0027: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"a2581831_2039af3e","line":4634,"range":{"start_line":4633,"start_character":0,"end_line":4634,"end_character":44},"in_reply_to":"cf19adf8_d3aa90e9","updated":"2026-05-25 20:00:47.000000000","message":"Thank you Anoop/Goutham! Marking it as resolved.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"}],"manila/share/drivers/netapp/dataontap/cluster_mode/drv_multi_svm.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6023a0885ed8a78decea55c3f79c00dcfbe0dfb7","unresolved":true,"context_lines":[{"line_number":289,"context_line":"    def ensure_shares(self, context, shares):"},{"line_number":290,"context_line":"        return self.library.ensure_shares(context, shares)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":293,"context_line":"        return self.library.ensure_share_servers(context, share_servers)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def get_share_server_network_info("},{"line_number":296,"context_line":"            self, context, share_server, identifier, driver_options):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1d494111_2ea75a4a","line":293,"range":{"start_line":292,"start_character":0,"end_line":293,"end_character":72},"updated":"2026-05-26 13:49:12.000000000","message":"please remove","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"bc2f505fcc2fdbb44639bec703fcaceaa89aa170","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    def ensure_shares(self, context, shares):"},{"line_number":290,"context_line":"        return self.library.ensure_shares(context, shares)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":293,"context_line":"        return self.library.ensure_share_servers(context, share_servers)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def get_share_server_network_info("},{"line_number":296,"context_line":"            self, context, share_server, identifier, driver_options):"}],"source_content_type":"text/x-python","patch_set":3,"id":"4903cb54_dbfb49fd","line":293,"range":{"start_line":292,"start_character":0,"end_line":293,"end_character":72},"in_reply_to":"1d494111_2ea75a4a","updated":"2026-05-28 10:28:28.000000000","message":"Removed.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"}],"manila/share/drivers/netapp/dataontap/cluster_mode/drv_single_svm.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"bc2f505fcc2fdbb44639bec703fcaceaa89aa170","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    def ensure_shares(self, context, shares):"},{"line_number":276,"context_line":"        return self.library.ensure_shares(context, shares)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":279,"context_line":"        raise NotImplementedError"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_share_server_network_info("},{"line_number":282,"context_line":"            self, context, share_server, identifier, driver_options):"},{"line_number":283,"context_line":"        raise NotImplementedError"}],"source_content_type":"text/x-python","patch_set":3,"id":"f5324093_afa7ab3f","line":280,"range":{"start_line":278,"start_character":4,"end_line":280,"end_character":0},"updated":"2026-05-28 10:28:28.000000000","message":"Removed it from here also","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_multi_svm.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        - ``netapp_dns_domains`` and ``netapp_dns_nameservers`` must be set"},{"line_number":97,"context_line":"          together (or both empty)."},{"line_number":98,"context_line":"        - ``netapp_dns_hosts`` may only be set when both of the above are set."},{"line_number":99,"context_line":"        - Each entry in ``netapp_dns_hosts`` is in ``hostname:ip`` form, and"},{"line_number":100,"context_line":"          a single entry may carry multiple comma-separated hostnames"},{"line_number":101,"context_line":"          (``host1,host2,...:ip``) to map all of them to one IP. The first"}],"source_content_type":"text/x-python","patch_set":1,"id":"98e8f346_7299b2c7","line":98,"range":{"start_line":98,"start_character":12,"end_line":98,"end_character":28},"updated":"2026-05-14 22:23:56.000000000","message":"does this must be set when both are set?","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        - ``netapp_dns_domains`` and ``netapp_dns_nameservers`` must be set"},{"line_number":97,"context_line":"          together (or both empty)."},{"line_number":98,"context_line":"        - ``netapp_dns_hosts`` may only be set when both of the above are set."},{"line_number":99,"context_line":"        - Each entry in ``netapp_dns_hosts`` is in ``hostname:ip`` form, and"},{"line_number":100,"context_line":"          a single entry may carry multiple comma-separated hostnames"},{"line_number":101,"context_line":"          (``host1,host2,...:ip``) to map all of them to one IP. The first"}],"source_content_type":"text/x-python","patch_set":1,"id":"a6f09611_d56c8f16","line":98,"range":{"start_line":98,"start_character":12,"end_line":98,"end_character":28},"in_reply_to":"98e8f346_7299b2c7","updated":"2026-05-17 14:32:09.000000000","message":"This restriction is intentional. ONTAP itself does allow local-host entries without DNS configured, but in our design netapp_dns_hosts is strictly a fallback for hostnames that the SVM cannot resolve through the configured DNS servers — the driver first configures netapp_dns_domains + netapp_dns_nameservers, then probes each netapp_dns_hosts entry from every cluster node, and only materializes a static local-host record when a probe fails. Allowing netapp_dns_hosts standalone would invert that design (no DNS to probe against in the first place) and quietly mask deployment misconfiguration in environments where DNS is supposed to be the source of truth. I\u0027ve expanded the docstring/help text in PS2 to make this design intent explicit.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        - ``netapp_dns_hosts`` may only be set when both of the above are set."},{"line_number":99,"context_line":"        - Each entry in ``netapp_dns_hosts`` is in ``hostname:ip`` form, and"},{"line_number":100,"context_line":"          a single entry may carry multiple comma-separated hostnames"},{"line_number":101,"context_line":"          (``host1,host2,...:ip``) to map all of them to one IP. The first"},{"line_number":102,"context_line":"          hostname is the canonical name; the rest become aliases on ONTAP."},{"line_number":103,"context_line":"          IPv4 and IPv6 addresses are both accepted."},{"line_number":104,"context_line":"        - The same hostname may also appear under multiple distinct IPs"}],"source_content_type":"text/x-python","patch_set":1,"id":"b9620e75_d89e2d09","line":101,"range":{"start_line":101,"start_character":10,"end_line":101,"end_character":34},"updated":"2026-05-14 22:23:56.000000000","message":"this is actually a bit confusing and deserves proper documentation if we decide to keep this approach","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        - ``netapp_dns_hosts`` may only be set when both of the above are set."},{"line_number":99,"context_line":"        - Each entry in ``netapp_dns_hosts`` is in ``hostname:ip`` form, and"},{"line_number":100,"context_line":"          a single entry may carry multiple comma-separated hostnames"},{"line_number":101,"context_line":"          (``host1,host2,...:ip``) to map all of them to one IP. The first"},{"line_number":102,"context_line":"          hostname is the canonical name; the rest become aliases on ONTAP."},{"line_number":103,"context_line":"          IPv4 and IPv6 addresses are both accepted."},{"line_number":104,"context_line":"        - The same hostname may also appear under multiple distinct IPs"}],"source_content_type":"text/x-python","patch_set":1,"id":"84945ce1_b6dc07f7","line":101,"range":{"start_line":101,"start_character":10,"end_line":101,"end_character":34},"in_reply_to":"b9620e75_d89e2d09","updated":"2026-05-17 14:32:09.000000000","message":"Agreed the shorthand is non-obvious. ONTAP local-host entries are keyed by (svm, address) with one canonical hostname plus an alias list per IP, so we genuinely need a way to express \"multiple hostnames sharing one IP\" and the host1,host2:IP form is the most natural mapping. The driver-side re-merge exists only because cfg.ListOpt splits on every comma — there\u0027s no escape mechanism in oslo.config. In PS2 I\u0027ve reworked the netapp_dns_hosts help text to call out the shorthand explicitly with a worked-examples block (input → effective entries on the SVM) covering the single-host, multi-hostname-shared-IP, and same-hostname-multiple-IP cases.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":181,"context_line":"            merged.append(\u0027,\u0027.join(pending))"},{"line_number":182,"context_line":"        return merged"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @staticmethod"},{"line_number":185,"context_line":"    def _parse_dns_hosts(hosts):"},{"line_number":186,"context_line":"        \"\"\"Parse merged ``host[,host...]:ip`` entries into ``{ip: [names]}``."},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"68683ed7_3aea97ea","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":17},"updated":"2026-05-14 22:23:56.000000000","message":"missing trace","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            merged.append(\u0027,\u0027.join(pending))"},{"line_number":182,"context_line":"        return merged"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @staticmethod"},{"line_number":185,"context_line":"    def _parse_dns_hosts(hosts):"},{"line_number":186,"context_line":"        \"\"\"Parse merged ``host[,host...]:ip`` entries into ``{ip: [names]}``."},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2e341e3b_59965afe","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":17},"in_reply_to":"68683ed7_3aea97ea","updated":"2026-05-17 14:32:09.000000000","message":"Done. Note na_utils.trace expects self, so I converted both helpers from @staticmethod to regular methods (callers were already invoking them via self, so no caller change).","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":205,"context_line":"                    names_list.append(hostname)"},{"line_number":206,"context_line":"        return parsed"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @na_utils.trace"},{"line_number":209,"context_line":"    def _get_vserver(self, share_server\u003dNone, vserver_name\u003dNone,"},{"line_number":210,"context_line":"                     backend_name\u003dNone):"},{"line_number":211,"context_line":"        if share_server:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f78078f_4c245385","line":208,"range":{"start_line":208,"start_character":0,"end_line":208,"end_character":19},"updated":"2026-05-14 22:23:56.000000000","message":"same as above","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                    names_list.append(hostname)"},{"line_number":206,"context_line":"        return parsed"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @na_utils.trace"},{"line_number":209,"context_line":"    def _get_vserver(self, share_server\u003dNone, vserver_name\u003dNone,"},{"line_number":210,"context_line":"                     backend_name\u003dNone):"},{"line_number":211,"context_line":"        if share_server:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4f5b5f72_a67172c8","line":208,"range":{"start_line":208,"start_character":0,"end_line":208,"end_character":19},"in_reply_to":"5f78078f_4c245385","updated":"2026-05-17 14:32:09.000000000","message":"Addressed and explained above.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"            security_services \u003d network_info[0].get(\u0027security_services\u0027)"},{"line_number":493,"context_line":"            try:"},{"line_number":494,"context_line":"                # NOTE: Order matters here. Network plumbing (LIFs + routes)"},{"line_number":495,"context_line":"                # must come first so the SVM has a usable data path; ONTAP"},{"line_number":496,"context_line":"                # validates DNS reachability synchronously when DNS is"},{"line_number":497,"context_line":"                # configured, and that probe goes out over the SVM\u0027s data"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3f904f_871191a6","line":494,"range":{"start_line":494,"start_character":18,"end_line":494,"end_character":22},"updated":"2026-05-14 22:23:56.000000000","message":"NOTE(Sai)","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"            security_services \u003d network_info[0].get(\u0027security_services\u0027)"},{"line_number":493,"context_line":"            try:"},{"line_number":494,"context_line":"                # NOTE: Order matters here. Network plumbing (LIFs + routes)"},{"line_number":495,"context_line":"                # must come first so the SVM has a usable data path; ONTAP"},{"line_number":496,"context_line":"                # validates DNS reachability synchronously when DNS is"},{"line_number":497,"context_line":"                # configured, and that probe goes out over the SVM\u0027s data"}],"source_content_type":"text/x-python","patch_set":1,"id":"85f69403_f65e36b6","line":494,"range":{"start_line":494,"start_character":18,"end_line":494,"end_character":22},"in_reply_to":"bf3f904f_871191a6","updated":"2026-05-17 14:32:09.000000000","message":"Done. Added as NOTE(pulluri).","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2e453e13adb2e31cec1f900a8f49a1fe09417b7a","unresolved":true,"context_lines":[{"line_number":495,"context_line":"                # must come first so the SVM has a usable data path; ONTAP"},{"line_number":496,"context_line":"                # validates DNS reachability synchronously when DNS is"},{"line_number":497,"context_line":"                # configured, and that probe goes out over the SVM\u0027s data"},{"line_number":498,"context_line":"                # LIFs. Infrastructure DNS (Approach-1) is then configured"},{"line_number":499,"context_line":"                # BEFORE security services so that the security-services"},{"line_number":500,"context_line":"                # configure_dns() path performs a read-merge-write and"},{"line_number":501,"context_line":"                # merges any AD/LDAP DNS values with (not overwrite) the"}],"source_content_type":"text/x-python","patch_set":1,"id":"5043dbf9_1d6d849f","line":498,"range":{"start_line":498,"start_character":43,"end_line":498,"end_character":55},"updated":"2026-05-14 12:02:00.000000000","message":"This need to remove","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":495,"context_line":"                # must come first so the SVM has a usable data path; ONTAP"},{"line_number":496,"context_line":"                # validates DNS reachability synchronously when DNS is"},{"line_number":497,"context_line":"                # configured, and that probe goes out over the SVM\u0027s data"},{"line_number":498,"context_line":"                # LIFs. Infrastructure DNS (Approach-1) is then configured"},{"line_number":499,"context_line":"                # BEFORE security services so that the security-services"},{"line_number":500,"context_line":"                # configure_dns() path performs a read-merge-write and"},{"line_number":501,"context_line":"                # merges any AD/LDAP DNS values with (not overwrite) the"}],"source_content_type":"text/x-python","patch_set":1,"id":"405d5b01_9cf86b01","line":498,"range":{"start_line":498,"start_character":43,"end_line":498,"end_character":55},"in_reply_to":"5043dbf9_1d6d849f","updated":"2026-05-14 22:23:56.000000000","message":"+1","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                # must come first so the SVM has a usable data path; ONTAP"},{"line_number":496,"context_line":"                # validates DNS reachability synchronously when DNS is"},{"line_number":497,"context_line":"                # configured, and that probe goes out over the SVM\u0027s data"},{"line_number":498,"context_line":"                # LIFs. Infrastructure DNS (Approach-1) is then configured"},{"line_number":499,"context_line":"                # BEFORE security services so that the security-services"},{"line_number":500,"context_line":"                # configure_dns() path performs a read-merge-write and"},{"line_number":501,"context_line":"                # merges any AD/LDAP DNS values with (not overwrite) the"}],"source_content_type":"text/x-python","patch_set":1,"id":"22499b9b_1be8b639","line":498,"range":{"start_line":498,"start_character":43,"end_line":498,"end_character":55},"in_reply_to":"5043dbf9_1d6d849f","updated":"2026-05-17 14:32:09.000000000","message":"Done.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2e453e13adb2e31cec1f900a8f49a1fe09417b7a","unresolved":true,"context_lines":[{"line_number":502,"context_line":"                # infra DNS set here."},{"line_number":503,"context_line":"                self._setup_network_for_vserver("},{"line_number":504,"context_line":"                    vserver_name, vserver_client, network_info, ipspace_name,"},{"line_number":505,"context_line":"                    security_services\u003dNone, nfs_config\u003dnfs_config)"},{"line_number":506,"context_line":"                self._configure_dns_for_specified_vserver(vserver_name)"},{"line_number":507,"context_line":"                if security_services:"},{"line_number":508,"context_line":"                    self._client.setup_security_services("}],"source_content_type":"text/x-python","patch_set":1,"id":"c9a2dfc5_e196c953","line":505,"range":{"start_line":505,"start_character":19,"end_line":505,"end_character":42},"updated":"2026-05-14 12:02:00.000000000","message":"Instead of passing the None here and setting up the sercuirty_services in this method, you can move self._configure_dns_for_specified_vserver(vserver_name) to _setup_network_for_vserver() method after enabling the NFS (line no 779).","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"11272adb51566ac27536a05b096413280e293c30","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                # infra DNS set here."},{"line_number":503,"context_line":"                self._setup_network_for_vserver("},{"line_number":504,"context_line":"                    vserver_name, vserver_client, network_info, ipspace_name,"},{"line_number":505,"context_line":"                    security_services\u003dNone, nfs_config\u003dnfs_config)"},{"line_number":506,"context_line":"                self._configure_dns_for_specified_vserver(vserver_name)"},{"line_number":507,"context_line":"                if security_services:"},{"line_number":508,"context_line":"                    self._client.setup_security_services("}],"source_content_type":"text/x-python","patch_set":1,"id":"14b55937_0dea50d9","line":505,"range":{"start_line":505,"start_character":19,"end_line":505,"end_character":42},"in_reply_to":"39f20137_8640a565","updated":"2026-05-21 12:26:53.000000000","message":"It would be better to move the reconciliation under the ensure_shares","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"164697acd87cc7395e8032421b3010fdfb49cfbe","unresolved":true,"context_lines":[{"line_number":502,"context_line":"                # infra DNS set here."},{"line_number":503,"context_line":"                self._setup_network_for_vserver("},{"line_number":504,"context_line":"                    vserver_name, vserver_client, network_info, ipspace_name,"},{"line_number":505,"context_line":"                    security_services\u003dNone, nfs_config\u003dnfs_config)"},{"line_number":506,"context_line":"                self._configure_dns_for_specified_vserver(vserver_name)"},{"line_number":507,"context_line":"                if security_services:"},{"line_number":508,"context_line":"                    self._client.setup_security_services("}],"source_content_type":"text/x-python","patch_set":1,"id":"39f20137_8640a565","line":505,"range":{"start_line":505,"start_character":19,"end_line":505,"end_character":42},"in_reply_to":"8bf19eca_a61ac494","updated":"2026-05-20 13:47:50.000000000","message":"Thank you carloss!! \n\n@gawasthi2010@gmail.com: +1 to Carlos\u0027s inline here. Keeping the call at _create_vserver() because _setup_network_for_vserver() is also used by SVM-DR destination setup and the network-reload path, both of which explicitly must not (re)apply DNS — moving it in would force a configure_dns\u003dTrue/False flag on every caller (same parameter-count problem, relocated) or silently apply DNS where it\u0027s wrong. It also keeps the create-path ordering (network → DNS → security services) explicit at the caller, which is what lets setup_security_services() read-merge-write AD/LDAP on top of infra DNS without clobbering it. OK to mark this resolved, or would you like to discuss further?","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"96777ec8dacf6106cc5558e0f58a4c4d8c89fcd0","unresolved":true,"context_lines":[{"line_number":502,"context_line":"                # infra DNS set here."},{"line_number":503,"context_line":"                self._setup_network_for_vserver("},{"line_number":504,"context_line":"                    vserver_name, vserver_client, network_info, ipspace_name,"},{"line_number":505,"context_line":"                    security_services\u003dNone, nfs_config\u003dnfs_config)"},{"line_number":506,"context_line":"                self._configure_dns_for_specified_vserver(vserver_name)"},{"line_number":507,"context_line":"                if security_services:"},{"line_number":508,"context_line":"                    self._client.setup_security_services("}],"source_content_type":"text/x-python","patch_set":1,"id":"8bf19eca_a61ac494","line":505,"range":{"start_line":505,"start_character":19,"end_line":505,"end_character":42},"in_reply_to":"bc3fd660_ce5bf9b1","updated":"2026-05-19 13:07:14.000000000","message":"I agree with keeping this outside the setup networking for vserver piece","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":true,"context_lines":[{"line_number":502,"context_line":"                # infra DNS set here."},{"line_number":503,"context_line":"                self._setup_network_for_vserver("},{"line_number":504,"context_line":"                    vserver_name, vserver_client, network_info, ipspace_name,"},{"line_number":505,"context_line":"                    security_services\u003dNone, nfs_config\u003dnfs_config)"},{"line_number":506,"context_line":"                self._configure_dns_for_specified_vserver(vserver_name)"},{"line_number":507,"context_line":"                if security_services:"},{"line_number":508,"context_line":"                    self._client.setup_security_services("}],"source_content_type":"text/x-python","patch_set":1,"id":"bc3fd660_ce5bf9b1","line":505,"range":{"start_line":505,"start_character":19,"end_line":505,"end_character":42},"in_reply_to":"c9a2dfc5_e196c953","updated":"2026-05-17 14:32:09.000000000","message":"Thanks for the suggestion, Gireesh. I considered this but want to push back: _setup_network_for_vserver() is shared by three call paths today:\n\n1. _create_vserver() — new SVM, DNS should be configured.\n2. _setup_networking_for_destination_vserver() (SVM-DR migration) — passes enable_nfs\u003dFalse, security_services\u003dNone; the existing comment explicitly states \"Security service and NFS configuration should be handled by SVM DR, so no changes will be made here.\" DNS comes over with the DR\u0027d SVM and we must not touch it.\n3. update_share_server_network_allocations() (add-subnet on an existing share server) — passes enable_nfs\u003dFalse, security_services\u003dNone; the SVM already has DNS from create time.\n\nPushing _configure_dns_for_specified_vserver() into _setup_network_for_vserver() would either (a) incorrectly re-push DNS on the migration and subnet-update paths, or (b) force us to add a new configure_dns\u003dFalse parameter and have those two callers pass it — which is the same opt-out pattern as security_services\u003dNone, just relocated. We don\u0027t actually save a knob.\n\nKeeping the DNS call at the _create_vserver() site also matches how _create_barbican_kms_config_for_specified_vserver() (the sibling SVM-scoped REST configurator added earlier) is invoked — from _create_vserver(), not from inside _setup_network_for_vserver() — so the create-path stays the single, readable place where \"this is what a brand-new SVM needs\" lives. The security_services\u003dNone + explicit DNS call + explicit setup_security_services() sequence makes the read-merge-write ordering visible to the reader at one site, which the NOTE block above documents.\n\nHappy to tighten the NOTE comment if it\u0027s confusing, but I\u0027d prefer to keep the call where it is. WDYT?\n\n@ces.eduardo98@gmail.com Would appreciate your view on this. Thanks a lot.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @na_utils.trace"},{"line_number":575,"context_line":"    def _configure_dns_for_specified_vserver(self, vserver_name):"},{"line_number":576,"context_line":"        \"\"\"Approach-1 create-path: configure DNS + local hosts on a new SVM."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"        Uses the REST API exclusively (force_rest_client\u003dTrue), mirroring"},{"line_number":579,"context_line":"        the pattern used for Barbican KMS configuration. No-op when both"}],"source_content_type":"text/x-python","patch_set":1,"id":"c55d7d25_74e8ac6d","line":576,"range":{"start_line":576,"start_character":11,"end_line":576,"end_character":22},"updated":"2026-05-14 22:23:56.000000000","message":"possibly coming from some tool, please remove","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @na_utils.trace"},{"line_number":575,"context_line":"    def _configure_dns_for_specified_vserver(self, vserver_name):"},{"line_number":576,"context_line":"        \"\"\"Approach-1 create-path: configure DNS + local hosts on a new SVM."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"        Uses the REST API exclusively (force_rest_client\u003dTrue), mirroring"},{"line_number":579,"context_line":"        the pattern used for Barbican KMS configuration. No-op when both"}],"source_content_type":"text/x-python","patch_set":1,"id":"b91bd7e8_af3c4c5e","line":576,"range":{"start_line":576,"start_character":11,"end_line":576,"end_character":22},"in_reply_to":"c55d7d25_74e8ac6d","updated":"2026-05-17 14:32:09.000000000","message":"Done — stripped \"Create-path\", \"Update-path\", and \"(Approach-1)\" wording from docstrings/comments.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9ed85083aabcf444b9ef67cd9c716cfa8b15fd41","unresolved":true,"context_lines":[{"line_number":579,"context_line":"        the pattern used for Barbican KMS configuration. No-op when both"},{"line_number":580,"context_line":"        ``netapp_dns_domains`` and ``netapp_dns_nameservers`` are empty."},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        domains \u003d self.configuration.safe_get(\u0027netapp_dns_domains\u0027) or []"},{"line_number":583,"context_line":"        nameservers \u003d (self.configuration.safe_get(\u0027netapp_dns_nameservers\u0027)"},{"line_number":584,"context_line":"                       or [])"},{"line_number":585,"context_line":"        hosts \u003d self._merge_dns_host_tokens("},{"line_number":586,"context_line":"            self.configuration.safe_get(\u0027netapp_dns_hosts\u0027) or [])"}],"source_content_type":"text/x-python","patch_set":1,"id":"421543be_cb6fb841","line":583,"range":{"start_line":582,"start_character":8,"end_line":583,"end_character":76},"updated":"2026-05-14 22:23:56.000000000","message":"this is being fetched multiple times. maybe we should cache this at the driver startup?","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        the pattern used for Barbican KMS configuration. No-op when both"},{"line_number":580,"context_line":"        ``netapp_dns_domains`` and ``netapp_dns_nameservers`` are empty."},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        domains \u003d self.configuration.safe_get(\u0027netapp_dns_domains\u0027) or []"},{"line_number":583,"context_line":"        nameservers \u003d (self.configuration.safe_get(\u0027netapp_dns_nameservers\u0027)"},{"line_number":584,"context_line":"                       or [])"},{"line_number":585,"context_line":"        hosts \u003d self._merge_dns_host_tokens("},{"line_number":586,"context_line":"            self.configuration.safe_get(\u0027netapp_dns_hosts\u0027) or [])"}],"source_content_type":"text/x-python","patch_set":1,"id":"089b6e52_e2d471b3","line":583,"range":{"start_line":582,"start_character":8,"end_line":583,"end_character":76},"in_reply_to":"421543be_cb6fb841","updated":"2026-05-17 14:32:09.000000000","message":"Done — _validate_dns_config() now snapshots the validated/normalized values onto self._dns_domains, self._dns_nameservers, self._dns_hosts, and self._dns_parsed_hosts. The create-path (_configure_dns_for_specified_vserver) and reconcile-path (ensure_share_servers) now read those cached attributes — no more repeated safe_get + _merge_dns_host_tokens work.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2e453e13adb2e31cec1f900a8f49a1fe09417b7a","unresolved":true,"context_lines":[{"line_number":623,"context_line":"                vserver_name, canonical, ip, aliases\u003daliases)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    @na_utils.trace"},{"line_number":626,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":627,"context_line":"        \"\"\"Approach-1 update-path: reconcile DNS on existing SVMs."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        Invoked by ShareManager on service restart. For every share server"}],"source_content_type":"text/x-python","patch_set":1,"id":"c84f33b1_9e15a443","line":626,"range":{"start_line":626,"start_character":8,"end_line":626,"end_character":28},"updated":"2026-05-14 12:02:00.000000000","message":"Currently, manager.py calls this method, which in turn invokes _reconcile_dns_for_vserver(). I suggest calling _reconcile_dns_for_vserver() directly from check_for_setup_error() instead. This approach will update the DNS server during service restart while limiting changes to the driver code only, and we can remove the changes done in core code.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6ccdd5a9a648a6c3546201ca1dadc4cfe54a034e","unresolved":true,"context_lines":[{"line_number":623,"context_line":"                vserver_name, canonical, ip, aliases\u003daliases)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    @na_utils.trace"},{"line_number":626,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":627,"context_line":"        \"\"\"Approach-1 update-path: reconcile DNS on existing SVMs."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        Invoked by ShareManager on service restart. For every share server"}],"source_content_type":"text/x-python","patch_set":1,"id":"fe877b6b_38b3dbc5","line":626,"range":{"start_line":626,"start_character":8,"end_line":626,"end_character":28},"in_reply_to":"25c0422a_43aed0c9","updated":"2026-05-20 13:08:56.000000000","message":"\u003e directly from check_for_setup_error() instead\n\nEven though check for setup error will do things at the time we want them to happen, I don\u0027t think that it is the appropriate place to do updates based on configuration for share servers. This operation can take longer than it should.\n\nI think this discussion took another direction when we decided to go for ensure_shares instead. We won\u0027t need/have any net new driver interfaces and we found a place to reconcile the config.\n\nShare creation should be updated in case a share server is empty and the DNS config has a mismatch though. That is the only missing piece based on recent discussions.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"07772a41528f9bcdf7858f4243f3c07d042c1d1c","unresolved":true,"context_lines":[{"line_number":623,"context_line":"                vserver_name, canonical, ip, aliases\u003daliases)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    @na_utils.trace"},{"line_number":626,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":627,"context_line":"        \"\"\"Approach-1 update-path: reconcile DNS on existing SVMs."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        Invoked by ShareManager on service restart. For every share server"}],"source_content_type":"text/x-python","patch_set":1,"id":"25c0422a_43aed0c9","line":626,"range":{"start_line":626,"start_character":8,"end_line":626,"end_character":28},"in_reply_to":"a4ca4b38_26b24175","updated":"2026-05-19 15:57:31.000000000","message":"I would may be recommend to keep it as reconciling_dns_for_vserver() instead. Since ensure_shares() loops through the shares and it may lead to not updating dns config on SVMs which do not have shares yet. It may be too late to configure the DNS after first share is created and customer has already hit the issue.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"bb4806091d39a2b8f26ca3bd9f7d7335dc935944","unresolved":true,"context_lines":[{"line_number":623,"context_line":"                vserver_name, canonical, ip, aliases\u003daliases)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    @na_utils.trace"},{"line_number":626,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":627,"context_line":"        \"\"\"Approach-1 update-path: reconcile DNS on existing SVMs."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        Invoked by ShareManager on service restart. For every share server"}],"source_content_type":"text/x-python","patch_set":1,"id":"a4ca4b38_26b24175","line":626,"range":{"start_line":626,"start_character":8,"end_line":626,"end_character":28},"in_reply_to":"c84f33b1_9e15a443","updated":"2026-05-17 14:32:09.000000000","message":"Thanks Gireesh. I can see carloss also raised the same concern on the manila/share/driver.py change — both of you are leaning toward keeping this driver-only and avoiding the new base hook, so it makes sense for me also to take driver-only path. The reason I initially went with the core hook was that it gives us a guaranteed \"runs on every service restart\" trigger with the share-server list + context handed to us, without overloading existing entry points — but the backport cost and the new-interface footprint is a fair pushback.\n\nBetween the two driver-only options I\u0027d lean toward Carloss\u0027s suggestion (do it inside ensure_shares()) over check_for_setup_error(), because:\n\nensure_shares() already gets a context and the share list from ShareManager, so no driver-side DB lookup is needed — we can just dedupe share_server_ids from shares and call _reconcile_dns_for_vserver() once per SVM.\ncheck_for_setup_error() is contractually a validation hook; folding state-changing reconcile work into it would be the wrong shape.\nThe one trade-off is that ensure_driver_resources() early-returns when get_backend_info()\u0027s hash matches the stored one, so an unchanged backend would skip ensure_shares entirely. To make a manila.conf DNS edit actually propagate on restart, I\u0027ll fold a hash of the DNS config into get_backend_info() so the early-return invalidates correctly.\n\nIf we\u0027re all aligned on this, I can implement the ensure_shares() approach in the next patch set — drop the manila/share/driver.py and manila/share/manager.py changes, move the reconcile loop into our ensure_shares(), and fold the DNS hash into get_backend_info(). This involves a fair bit of re-testing (DHSS\u003dTrue multi-SVM restart paths, conf-edit-then-restart, idle backends), so wanted to finalize the approach before I rework and re-validate. Please confirm on this and I\u0027ll proceed. Thanks again!\n\nCC: @ces.eduardo98@gmail.com","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"164697acd87cc7395e8032421b3010fdfb49cfbe","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                vserver_name, canonical, ip, aliases\u003daliases)"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    @na_utils.trace"},{"line_number":626,"context_line":"    def ensure_share_servers(self, context, share_servers):"},{"line_number":627,"context_line":"        \"\"\"Approach-1 update-path: reconcile DNS on existing SVMs."},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        Invoked by ShareManager on service restart. For every share server"}],"source_content_type":"text/x-python","patch_set":1,"id":"3808f3d5_18971c63","line":626,"range":{"start_line":626,"start_character":8,"end_line":626,"end_character":28},"in_reply_to":"fe877b6b_38b3dbc5","updated":"2026-05-20 13:47:50.000000000","message":"Thanks @gawasthi2010@gmail.com. Per the follow-up discussion on the manila/share/driver.py thread (carloss/goutham/anoop all aligned), in the next patchset will move the reconcile into the driver\u0027s ensure_shares() rather than check_for_setup_error() — check_for_setup_error() is contractually a validation hook, so keeping state-changing reconcile out of it. Empty SVMs are covered by an additional reconcile on the share-create path. Net effect matches your ask: manila/share/driver.py and manila/share/manager.py changes go away. Marking this resolved.","commit_id":"e6d138fe2472e7216130b32b1fc12c79eb2620b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e18e761fe5c13b60aebf183532d996633b29e7a8","unresolved":true,"context_lines":[{"line_number":663,"context_line":"        nameservers \u003d self._dns_nameservers"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        if not domains or not nameservers:"},{"line_number":666,"context_line":"            LOG.warning(\u0027DNS reconciliation skipped: netapp_dns_domains \u0027"},{"line_number":667,"context_line":"                        \u0027and/or netapp_dns_nameservers are empty. Existing \u0027"},{"line_number":668,"context_line":"                        \u0027SVM DNS configuration is left untouched.\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        rest_client \u003d self._get_rest_client_for_backend()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5b615bcd_dcf6136b","line":668,"range":{"start_line":666,"start_character":0,"end_line":668,"end_character":67},"updated":"2026-05-20 22:31:34.000000000","message":"not a valid \"warning\"..","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        nameservers \u003d self._dns_nameservers"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        if not domains or not nameservers:"},{"line_number":666,"context_line":"            LOG.warning(\u0027DNS reconciliation skipped: netapp_dns_domains \u0027"},{"line_number":667,"context_line":"                        \u0027and/or netapp_dns_nameservers are empty. Existing \u0027"},{"line_number":668,"context_line":"                        \u0027SVM DNS configuration is left untouched.\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        rest_client \u003d self._get_rest_client_for_backend()"}],"source_content_type":"text/x-python","patch_set":2,"id":"fbf099bd_604b428c","line":668,"range":{"start_line":666,"start_character":0,"end_line":668,"end_character":67},"in_reply_to":"5b615bcd_dcf6136b","updated":"2026-05-25 20:00:47.000000000","message":"Removed.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e18e761fe5c13b60aebf183532d996633b29e7a8","unresolved":true,"context_lines":[{"line_number":695,"context_line":"                                   domains, nameservers, desired_hosts):"},{"line_number":696,"context_line":"        \"\"\"Reconcile DNS name-service and local-hosts on one SVM.\"\"\""},{"line_number":697,"context_line":"        # --- DNS name-service reconciliation ---"},{"line_number":698,"context_line":"        current \u003d rest_client.get_dns_config(vserver_name\u003dvserver_name)"},{"line_number":699,"context_line":"        current_domains \u003d sorted(current.get(\u0027domains\u0027) or [])"},{"line_number":700,"context_line":"        current_servers \u003d sorted(current.get(\u0027dns-ips\u0027) or [])"},{"line_number":701,"context_line":"        if (current_domains \u003d\u003d sorted(domains) and"},{"line_number":702,"context_line":"                current_servers \u003d\u003d sorted(nameservers)):"},{"line_number":703,"context_line":"            LOG.debug(\u0027DNS already in sync on vserver %(vserver)s; no \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"40114d78_8bd442b8","line":700,"range":{"start_line":698,"start_character":7,"end_line":700,"end_character":62},"updated":"2026-05-20 22:31:34.000000000","message":"As you rewrite this, i\u0027d like to consider how DNS is configured on Vservers with security services today:\n\nhttps://opendev.org/openstack/manila/src/commit/1d9b3e80084b4bde2e066700f74240f3f1e36126/manila/share/drivers/netapp/dataontap/client/client_cmode.py#L2266-L2271\n\nThere\u0027s a \"merge\" approach, different from this sort of set anything that\u0027s on the config file approach..\n\nFrom my understanding, DNS entries added by a security service will sit on top of infra DNS.. but then, reconciliation would overwrite them with just the infra values, breaking AD/LDAP name resolution.. \n\ndo you agree?","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"e97abda15400b3a9ff7183a35290b9344dd6652f","unresolved":true,"context_lines":[{"line_number":695,"context_line":"                                   domains, nameservers, desired_hosts):"},{"line_number":696,"context_line":"        \"\"\"Reconcile DNS name-service and local-hosts on one SVM.\"\"\""},{"line_number":697,"context_line":"        # --- DNS name-service reconciliation ---"},{"line_number":698,"context_line":"        current \u003d rest_client.get_dns_config(vserver_name\u003dvserver_name)"},{"line_number":699,"context_line":"        current_domains \u003d sorted(current.get(\u0027domains\u0027) or [])"},{"line_number":700,"context_line":"        current_servers \u003d sorted(current.get(\u0027dns-ips\u0027) or [])"},{"line_number":701,"context_line":"        if (current_domains \u003d\u003d sorted(domains) and"},{"line_number":702,"context_line":"                current_servers \u003d\u003d sorted(nameservers)):"},{"line_number":703,"context_line":"            LOG.debug(\u0027DNS already in sync on vserver %(vserver)s; no \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"d354e2c8_fe3ff148","line":700,"range":{"start_line":698,"start_character":7,"end_line":700,"end_character":62},"in_reply_to":"40114d78_8bd442b8","updated":"2026-05-21 11:04:14.000000000","message":"Yes Agree, you\u0027re right. Good point, thanks for pointing out this Goutham.\n\nWe[ @anoop.shukla@netapp.com, @gawasthi2010@gmail.com and I] had a discussion on this and would like to go with an additive approach.\n\nSay we have a network configured with security services which has DNS and manila.conf also has DNS entries. On create of a DHSS\u003dTrue share, the SVM gets all the DNS entries from both security services and manila.conf.\n\nNow if DNS entries in manila.conf are updated — say the old entry is removed and a new one added — with the additive approach, after reconciliation the SVM will have the old manila.conf entry, the security-service DNS entries, and the new manila.conf entry all present. We never delete entries we didn\u0027t add, so security-service DNS is always preserved. We will have stale old DNS entries from manila.conf and we believe they are harmless in practice. \n\nYour thoughts on this ?@gouthampravi@gmail.com\nYour suggestions on this are much appreciated. Thank you!","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[{"line_number":695,"context_line":"                                   domains, nameservers, desired_hosts):"},{"line_number":696,"context_line":"        \"\"\"Reconcile DNS name-service and local-hosts on one SVM.\"\"\""},{"line_number":697,"context_line":"        # --- DNS name-service reconciliation ---"},{"line_number":698,"context_line":"        current \u003d rest_client.get_dns_config(vserver_name\u003dvserver_name)"},{"line_number":699,"context_line":"        current_domains \u003d sorted(current.get(\u0027domains\u0027) or [])"},{"line_number":700,"context_line":"        current_servers \u003d sorted(current.get(\u0027dns-ips\u0027) or [])"},{"line_number":701,"context_line":"        if (current_domains \u003d\u003d sorted(domains) and"},{"line_number":702,"context_line":"                current_servers \u003d\u003d sorted(nameservers)):"},{"line_number":703,"context_line":"            LOG.debug(\u0027DNS already in sync on vserver %(vserver)s; no \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3dad3e9f_33cc3eeb","line":700,"range":{"start_line":698,"start_character":7,"end_line":700,"end_character":62},"in_reply_to":"49d69e40_1c58efbc","updated":"2026-05-25 20:00:47.000000000","message":"Thanks Goutham — addressed in the new patch set by treating manila.conf and security-services as two independent owners, each re-read from its source of truth (CONF and DB) every reconcile pass. The SVM is PATCHed to union(SS, conf) (full-replace, SS-first, deduped), so a netapp_dns_* edit only touches conf-owned entries and an SS add/remove only touches SS-owned entries — no conflict resolution needed because the union is additive and stale rows from either side drop out naturally on the next pass. For the ONTAP per-SVM caps (6 domains / 3 servers), the union is now checked up-front on SS add/update and on SVM create (clean rejection, no ONTAP mutation), and warn-and-skipped in the reconcile rather than writing partials.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"c848daba081f2acc61c0f7b1d718eb6c999856f3","unresolved":true,"context_lines":[{"line_number":695,"context_line":"                                   domains, nameservers, desired_hosts):"},{"line_number":696,"context_line":"        \"\"\"Reconcile DNS name-service and local-hosts on one SVM.\"\"\""},{"line_number":697,"context_line":"        # --- DNS name-service reconciliation ---"},{"line_number":698,"context_line":"        current \u003d rest_client.get_dns_config(vserver_name\u003dvserver_name)"},{"line_number":699,"context_line":"        current_domains \u003d sorted(current.get(\u0027domains\u0027) or [])"},{"line_number":700,"context_line":"        current_servers \u003d sorted(current.get(\u0027dns-ips\u0027) or [])"},{"line_number":701,"context_line":"        if (current_domains \u003d\u003d sorted(domains) and"},{"line_number":702,"context_line":"                current_servers \u003d\u003d sorted(nameservers)):"},{"line_number":703,"context_line":"            LOG.debug(\u0027DNS already in sync on vserver %(vserver)s; no \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"e5e5a0a1_f6be4f89","line":700,"range":{"start_line":698,"start_character":7,"end_line":700,"end_character":62},"in_reply_to":"d354e2c8_fe3ff148","updated":"2026-05-21 14:16:21.000000000","message":"Acknowledged that we should not be overwriting the DNS entry configuration when the PATCH is fired. We should have a default behaviour of appending a new DNS entry instead. If customer faces issues and wants to remove from the SVM, he can always take an ONTAP command line/ API route. Since we do not know which DNS is used for what, appending a new entry would be preferred.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"749a2ae58ad90d54f3b6abf71432e265c0f1d5e8","unresolved":true,"context_lines":[{"line_number":695,"context_line":"                                   domains, nameservers, desired_hosts):"},{"line_number":696,"context_line":"        \"\"\"Reconcile DNS name-service and local-hosts on one SVM.\"\"\""},{"line_number":697,"context_line":"        # --- DNS name-service reconciliation ---"},{"line_number":698,"context_line":"        current \u003d rest_client.get_dns_config(vserver_name\u003dvserver_name)"},{"line_number":699,"context_line":"        current_domains \u003d sorted(current.get(\u0027domains\u0027) or [])"},{"line_number":700,"context_line":"        current_servers \u003d sorted(current.get(\u0027dns-ips\u0027) or [])"},{"line_number":701,"context_line":"        if (current_domains \u003d\u003d sorted(domains) and"},{"line_number":702,"context_line":"                current_servers \u003d\u003d sorted(nameservers)):"},{"line_number":703,"context_line":"            LOG.debug(\u0027DNS already in sync on vserver %(vserver)s; no \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"49d69e40_1c58efbc","line":700,"range":{"start_line":698,"start_character":7,"end_line":700,"end_character":62},"in_reply_to":"e5e5a0a1_f6be4f89","updated":"2026-05-21 19:06:39.000000000","message":"\u003e We will have stale old DNS entries from manila.conf and we believe they are harmless in practice.\n\n\nNo i feel we should be able to identify what comes from manila.conf and what comes from the security services.. the security service DNS info is in the database.\n\nunsure how additive stuff is harmless.. what if they\u0027re conflicting? also, in another place you mentioned you have limits for this stuff..","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6023a0885ed8a78decea55c3f79c00dcfbe0dfb7","unresolved":true,"context_lines":[{"line_number":55,"context_line":"METADATA_MTU \u003d \u0027set_mtu\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# ONTAP per-SVM hard caps on the DNS name-service object. Used by the"},{"line_number":58,"context_line":"# create-time (L2), add/update-time (L1) and reconcile-time (L3) cap"},{"line_number":59,"context_line":"# pre-flights so all three paths reject (or skip) the same way before"},{"line_number":60,"context_line":"# ONTAP would refuse the PATCH/POST. Values from ONTAP REST docs:"},{"line_number":61,"context_line":"# /name-services/dns -\u003e ``domains`` max 6, ``servers`` max 3."}],"source_content_type":"text/x-python","patch_set":3,"id":"330ebb24_b2613a07","line":58,"range":{"start_line":58,"start_character":2,"end_line":58,"end_character":64},"updated":"2026-05-26 13:49:12.000000000","message":"what does l1, l2, l3 mean?","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"bc2f505fcc2fdbb44639bec703fcaceaa89aa170","unresolved":false,"context_lines":[{"line_number":55,"context_line":"METADATA_MTU \u003d \u0027set_mtu\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# ONTAP per-SVM hard caps on the DNS name-service object. Used by the"},{"line_number":58,"context_line":"# create-time (L2), add/update-time (L1) and reconcile-time (L3) cap"},{"line_number":59,"context_line":"# pre-flights so all three paths reject (or skip) the same way before"},{"line_number":60,"context_line":"# ONTAP would refuse the PATCH/POST. Values from ONTAP REST docs:"},{"line_number":61,"context_line":"# /name-services/dns -\u003e ``domains`` max 6, ``servers`` max 3."}],"source_content_type":"text/x-python","patch_set":3,"id":"73531c68_074d6e70","line":58,"range":{"start_line":58,"start_character":2,"end_line":58,"end_character":64},"in_reply_to":"330ebb24_b2613a07","updated":"2026-05-28 10:28:28.000000000","message":"Yes seems to be AI generated, I reworded this as below which is easy to understand.\nONTAP recommendations- users can add a maximum of 6 domains\n# and 3 DNS servers.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6023a0885ed8a78decea55c3f79c00dcfbe0dfb7","unresolved":true,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        parsed \u003d {}"},{"line_number":238,"context_line":"        for entry in hosts:"},{"line_number":239,"context_line":"            hostnames_part, _sep, ip \u003d entry.partition(\u0027:\u0027)"},{"line_number":240,"context_line":"            ip \u003d ip.strip()"},{"line_number":241,"context_line":"            names_list \u003d parsed.setdefault(ip, [])"},{"line_number":242,"context_line":"            for hostname in hostnames_part.split(\u0027,\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"cddc7b56_c229d46b","line":239,"range":{"start_line":239,"start_character":12,"end_line":239,"end_character":59},"updated":"2026-05-26 13:49:12.000000000","message":"is this ipv6 safe?","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"76dba6b6e81956e66e8e2423f087e3148693783c","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        parsed \u003d {}"},{"line_number":238,"context_line":"        for entry in hosts:"},{"line_number":239,"context_line":"            hostnames_part, _sep, ip \u003d entry.partition(\u0027:\u0027)"},{"line_number":240,"context_line":"            ip \u003d ip.strip()"},{"line_number":241,"context_line":"            names_list \u003d parsed.setdefault(ip, [])"},{"line_number":242,"context_line":"            for hostname in hostnames_part.split(\u0027,\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"359937d0_94c5acc8","line":239,"range":{"start_line":239,"start_character":12,"end_line":239,"end_character":59},"in_reply_to":"cddc7b56_c229d46b","updated":"2026-05-26 13:49:56.000000000","message":"Actually is, I tested locally and forgot to remove the comment from drafts, my bad.","commit_id":"8ef35eb1d8318d3f469327f232f968bdba8605b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0233a67a2bf919c12d43b8ac81a875e9b25866d1","unresolved":true,"context_lines":[{"line_number":200,"context_line":"        info \u003d (super(NetAppCmodeMultiSVMFileStorageLibrary, self)"},{"line_number":201,"context_line":"                .get_backend_info(context)) or {}"},{"line_number":202,"context_line":"        info[\u0027netapp_dns_domains\u0027] \u003d \u0027,\u0027.join(self._dns_domains)"},{"line_number":203,"context_line":"        info[\u0027netapp_dns_nameservers\u0027] \u003d \u0027,\u0027.join(self._dns_nameservers)"},{"line_number":204,"context_line":"        return info"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":6,"id":"2708fdc6_51234279","line":203,"updated":"2026-06-01 21:47:44.000000000","message":"I had omitted the third config opt here, but that should be necessary too?\n\n```\ninfo[\u0027netapp_dns_hosts\u0027] \u003d \u0027,\u0027.join(\n      h for hosts in self._dns_parsed_hosts.values() for h in hosts)\n```","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        info \u003d (super(NetAppCmodeMultiSVMFileStorageLibrary, self)"},{"line_number":201,"context_line":"                .get_backend_info(context)) or {}"},{"line_number":202,"context_line":"        info[\u0027netapp_dns_domains\u0027] \u003d \u0027,\u0027.join(self._dns_domains)"},{"line_number":203,"context_line":"        info[\u0027netapp_dns_nameservers\u0027] \u003d \u0027,\u0027.join(self._dns_nameservers)"},{"line_number":204,"context_line":"        return info"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":6,"id":"83a11ca9_4600c915","line":203,"in_reply_to":"2708fdc6_51234279","updated":"2026-06-02 13:29:53.000000000","message":"Ah, yes. Added Goutham. Thanks.\n\nTested below 3 tests after addressing this and it\u0027s working as expected.\n\nTC14: Add a dns hosts entry \nTC15: Delete a dns hosts entry \nTC16: Name-swap across dns hosts IPs\n\nTests results: https://paste.opendev.org/show/bXCrCaPrls6ukAS5S9LR/\n\nAdditionally I have tested below as well.\nTC17: Delete an entry from \"netapp_dns_nameservers\"\nTC18: Add an entry to \"netapp_dns_nameservers\"\nTC19: Delete an entry from \"netapp_dns_domains\"\nTC20: Add an entry to \"netapp_dns_domains\"\nTests[TC17/TC18/TC19/TC20] results: https://paste.opendev.org/show/bqGPZh7m0TWFd165kVxV/","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0233a67a2bf919c12d43b8ac81a875e9b25866d1","unresolved":true,"context_lines":[{"line_number":248,"context_line":"    def _reconcile_dns_for_vserver(self, vserver_name,"},{"line_number":249,"context_line":"                                   ss_domains, ss_servers):"},{"line_number":250,"context_line":"        \"\"\"Converge SVM DNS to the union of conf + security-service values.\"\"\""},{"line_number":251,"context_line":"        rest_client \u003d self._get_rest_client_for_backend()"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        # Build target: SS first, then conf entries"},{"line_number":254,"context_line":"        target_domains \u003d list(ss_domains)"}],"source_content_type":"text/x-python","patch_set":6,"id":"340debd3_aeb0e1df","line":251,"range":{"start_line":251,"start_character":0,"end_line":251,"end_character":57},"updated":"2026-06-01 21:47:44.000000000","message":"this again is something I wasn\u0027t sure of. Is this okay to do? Or do you have ZAPI equivalents that MUST work alongside REST?\n\nIn other words, I set \"force_rest_client\u003dTrue\" (line 177). Will this work against all supported versions of ONTAP? or do you still have to cater to ZAPI-only users?","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a4ad6371aacc83e8bf97d6e74a702607d7105a8e","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def _reconcile_dns_for_vserver(self, vserver_name,"},{"line_number":249,"context_line":"                                   ss_domains, ss_servers):"},{"line_number":250,"context_line":"        \"\"\"Converge SVM DNS to the union of conf + security-service values.\"\"\""},{"line_number":251,"context_line":"        rest_client \u003d self._get_rest_client_for_backend()"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        # Build target: SS first, then conf entries"},{"line_number":254,"context_line":"        target_domains \u003d list(ss_domains)"}],"source_content_type":"text/x-python","patch_set":6,"id":"cf722ad7_5bc4c8e1","line":251,"range":{"start_line":251,"start_character":0,"end_line":251,"end_character":57},"in_reply_to":"09caeb5b_de6a9566","updated":"2026-06-02 18:56:38.000000000","message":"Done","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ab5410e9b17ecba655f545b3c4fe9b67600949f9","unresolved":true,"context_lines":[{"line_number":248,"context_line":"    def _reconcile_dns_for_vserver(self, vserver_name,"},{"line_number":249,"context_line":"                                   ss_domains, ss_servers):"},{"line_number":250,"context_line":"        \"\"\"Converge SVM DNS to the union of conf + security-service values.\"\"\""},{"line_number":251,"context_line":"        rest_client \u003d self._get_rest_client_for_backend()"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        # Build target: SS first, then conf entries"},{"line_number":254,"context_line":"        target_domains \u003d list(ss_domains)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f5c00003_2c9323f6","line":251,"range":{"start_line":251,"start_character":0,"end_line":251,"end_character":57},"in_reply_to":"340debd3_aeb0e1df","updated":"2026-06-02 06:55:48.000000000","message":"Hey Goutham,\n\nThe approach here is to take force_rest_client. These APIs are available since ONTAP 9.6 onwards and we do not expect customers to linger on versions prior to 9.6 as they will be out of support. So I think we should be fine to take forced rest approach here.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":true,"context_lines":[{"line_number":248,"context_line":"    def _reconcile_dns_for_vserver(self, vserver_name,"},{"line_number":249,"context_line":"                                   ss_domains, ss_servers):"},{"line_number":250,"context_line":"        \"\"\"Converge SVM DNS to the union of conf + security-service values.\"\"\""},{"line_number":251,"context_line":"        rest_client \u003d self._get_rest_client_for_backend()"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        # Build target: SS first, then conf entries"},{"line_number":254,"context_line":"        target_domains \u003d list(ss_domains)"}],"source_content_type":"text/x-python","patch_set":6,"id":"09caeb5b_de6a9566","line":251,"range":{"start_line":251,"start_character":0,"end_line":251,"end_character":57},"in_reply_to":"f5c00003_2c9323f6","updated":"2026-06-02 13:29:53.000000000","message":"Agreed with Anoop and also added a startup check in check_for_setup_error that fails fast with NetAppException when netapp_dns_domains is configured and the cluster is running ONTAP \u003c 9.12.1, instead of deferring the error to first provisioning. Covered by a positive and a negative unit test as well. Thanks!","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a4ad6371aacc83e8bf97d6e74a702607d7105a8e","unresolved":true,"context_lines":[{"line_number":60,"context_line":"class NetAppCmodeMultiSVMFileStorageLibrary("},{"line_number":61,"context_line":"        lib_base.NetAppCmodeFileStorageLibrary):"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    _dns_domains \u003d []"},{"line_number":64,"context_line":"    _dns_nameservers \u003d []"},{"line_number":65,"context_line":"    _dns_parsed_hosts \u003d {}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @na_utils.trace"},{"line_number":68,"context_line":"    def check_for_setup_error(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"2b72b519_ade9237e","line":65,"range":{"start_line":63,"start_character":0,"end_line":65,"end_character":26},"updated":"2026-06-02 18:56:38.000000000","message":"i\u0027d fix this up for the future.. but these are bad/mutable defaults. I would set them to None if you\u0027re looking to create class variables like this: https://docs.python-guide.org/writing/gotchas/","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a4ad6371aacc83e8bf97d6e74a702607d7105a8e","unresolved":true,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        # DNS workflows force REST; surface the existing 9.12.1"},{"line_number":96,"context_line":"        # version check at startup instead of at first provisioning."},{"line_number":97,"context_line":"        if self._dns_domains:"},{"line_number":98,"context_line":"            self._get_rest_client_for_backend()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        (super(NetAppCmodeMultiSVMFileStorageLibrary, self)."}],"source_content_type":"text/x-python","patch_set":7,"id":"9d9eac16_b25ec82c","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":29},"updated":"2026-06-02 18:56:38.000000000","message":"+1\nI don\u0027t know if ONTAP versions below 9.12.1 are unsupported, but, this gate is useful. I would have liked an error log.","commit_id":"844ba8c3ae2b44224c33f03191a478adcf246bab"}],"manila/share/drivers/netapp/options.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"96777ec8dacf6106cc5558e0f58a4c4d8c89fcd0","unresolved":true,"context_lines":[{"line_number":311,"context_line":"                     \u0027set together with netapp_dns_domains.\u0027),"},{"line_number":312,"context_line":"    cfg.ListOpt(\u0027netapp_dns_hosts\u0027,"},{"line_number":313,"context_line":"                default\u003d[],"},{"line_number":314,"context_line":"                help\u003d\u0027Optional list of static hostname-to-IP mappings to \u0027"},{"line_number":315,"context_line":"                     \u0027add to each new SVM local hosts table. Each entry \u0027"},{"line_number":316,"context_line":"                     \u0027is in \"hostname:ip\" form. The driver only adds a \u0027"},{"line_number":317,"context_line":"                     \u0027local-host entry when the hostname is unreachable \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"809a2eae_34cea7d9","line":314,"updated":"2026-05-19 13:07:14.000000000","message":"Thanks for the documentation. It\u0027s being shown in https://2950cf656fc7c6c0b230-2635c9269ad2bde2592553cd282ad960.ssl.cf1.rackcdn.com/openstack/a92e1c0f4c2c46438599a302f88ad185/docs/configuration/shared-file-systems/samples/manila.conf.html, but reading this as part of the code is really painful. I think we should also add this to the configuration documentation of the netapp driver.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                     \u0027set together with netapp_dns_domains.\u0027),"},{"line_number":312,"context_line":"    cfg.ListOpt(\u0027netapp_dns_hosts\u0027,"},{"line_number":313,"context_line":"                default\u003d[],"},{"line_number":314,"context_line":"                help\u003d\u0027Optional list of static hostname-to-IP mappings to \u0027"},{"line_number":315,"context_line":"                     \u0027add to each new SVM local hosts table. Each entry \u0027"},{"line_number":316,"context_line":"                     \u0027is in \"hostname:ip\" form. The driver only adds a \u0027"},{"line_number":317,"context_line":"                     \u0027local-host entry when the hostname is unreachable \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"e7ef6c7e_bb4e95b9","line":314,"in_reply_to":"7caf9dd7_b6fb4caf","updated":"2026-05-25 20:00:47.000000000","message":"Done.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"164697acd87cc7395e8032421b3010fdfb49cfbe","unresolved":true,"context_lines":[{"line_number":311,"context_line":"                     \u0027set together with netapp_dns_domains.\u0027),"},{"line_number":312,"context_line":"    cfg.ListOpt(\u0027netapp_dns_hosts\u0027,"},{"line_number":313,"context_line":"                default\u003d[],"},{"line_number":314,"context_line":"                help\u003d\u0027Optional list of static hostname-to-IP mappings to \u0027"},{"line_number":315,"context_line":"                     \u0027add to each new SVM local hosts table. Each entry \u0027"},{"line_number":316,"context_line":"                     \u0027is in \"hostname:ip\" form. The driver only adds a \u0027"},{"line_number":317,"context_line":"                     \u0027local-host entry when the hostname is unreachable \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7caf9dd7_b6fb4caf","line":314,"in_reply_to":"809a2eae_34cea7d9","updated":"2026-05-20 13:47:50.000000000","message":"Thanks Carloss — agreed. In the next patchset I\u0027ll trim the help\u003d text in options.py for netapp_dns_domains, netapp_dns_nameservers, and netapp_dns_hosts down to a concise one-paragraph summary (just enough to make manila.conf sample useful), and move the full explanation — option semantics, the host1,host2:ip shorthand with worked examples, the local-host fallback rule, and the create/restart/share-create reconcile behavior — into a new \"DNS configuration for SVMs (DHSS\u003dTrue)\" section under doc/source/admin/netapp_cluster_mode_driver.rst. That should make the source readable and give operators a single docs entry point with all the context. I\u0027ll mark it resolved once I make the changes.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"}],"manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_multi_svm.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"96777ec8dacf6106cc5558e0f58a4c4d8c89fcd0","unresolved":true,"context_lines":[{"line_number":4318,"context_line":"    def _prime_dns_cache(self, domains\u003dNone, nameservers\u003dNone, hosts\u003dNone):"},{"line_number":4319,"context_line":"        \"\"\"Seed the cached DNS attrs so create/reconcile paths can run."},{"line_number":4320,"context_line":""},{"line_number":4321,"context_line":"        After PS2, ``_configure_dns_for_specified_vserver`` and"},{"line_number":4322,"context_line":"        ``ensure_share_servers`` read from ``self._dns_*`` attrs that"},{"line_number":4323,"context_line":"        are normally populated by ``_validate_dns_config()`` during"},{"line_number":4324,"context_line":"        ``check_for_setup_error()``. Tests that exercise those paths"}],"source_content_type":"text/x-python","patch_set":2,"id":"a4400bba_1e2bd75f","line":4321,"range":{"start_line":4321,"start_character":8,"end_line":4321,"end_character":18},"updated":"2026-05-19 13:07:14.000000000","message":"not needed","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"20515aaeb5518db02cc0b7c16f051928146ca2e7","unresolved":false,"context_lines":[{"line_number":4318,"context_line":"    def _prime_dns_cache(self, domains\u003dNone, nameservers\u003dNone, hosts\u003dNone):"},{"line_number":4319,"context_line":"        \"\"\"Seed the cached DNS attrs so create/reconcile paths can run."},{"line_number":4320,"context_line":""},{"line_number":4321,"context_line":"        After PS2, ``_configure_dns_for_specified_vserver`` and"},{"line_number":4322,"context_line":"        ``ensure_share_servers`` read from ``self._dns_*`` attrs that"},{"line_number":4323,"context_line":"        are normally populated by ``_validate_dns_config()`` during"},{"line_number":4324,"context_line":"        ``check_for_setup_error()``. Tests that exercise those paths"}],"source_content_type":"text/x-python","patch_set":2,"id":"482150a5_4b1a4c3f","line":4321,"range":{"start_line":4321,"start_character":8,"end_line":4321,"end_character":18},"in_reply_to":"56d134c0_fac1f54a","updated":"2026-05-25 20:00:47.000000000","message":"Done.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"164697acd87cc7395e8032421b3010fdfb49cfbe","unresolved":true,"context_lines":[{"line_number":4318,"context_line":"    def _prime_dns_cache(self, domains\u003dNone, nameservers\u003dNone, hosts\u003dNone):"},{"line_number":4319,"context_line":"        \"\"\"Seed the cached DNS attrs so create/reconcile paths can run."},{"line_number":4320,"context_line":""},{"line_number":4321,"context_line":"        After PS2, ``_configure_dns_for_specified_vserver`` and"},{"line_number":4322,"context_line":"        ``ensure_share_servers`` read from ``self._dns_*`` attrs that"},{"line_number":4323,"context_line":"        are normally populated by ``_validate_dns_config()`` during"},{"line_number":4324,"context_line":"        ``check_for_setup_error()``. Tests that exercise those paths"}],"source_content_type":"text/x-python","patch_set":2,"id":"56d134c0_fac1f54a","line":4321,"range":{"start_line":4321,"start_character":8,"end_line":4321,"end_character":18},"in_reply_to":"a4400bba_1e2bd75f","updated":"2026-05-20 13:47:50.000000000","message":"Got it, will address this in the next patch set and market it resolve.","commit_id":"b40bb1e60569b2d3a6526a46581eba62fc354ec7"}],"releasenotes/notes/bug-2147659-netapp-svm-dns-53ffd9bee8b54f4b.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0233a67a2bf919c12d43b8ac81a875e9b25866d1","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":"    NetApp cDOT driver: Added ``netapp_dns_domains``,"},{"line_number":5,"context_line":"    ``netapp_dns_nameservers``, and ``netapp_dns_hosts`` configuration"},{"line_number":6,"context_line":"    options. In DHSS\u003dTrue mode, these provide infrastructure DNS to"},{"line_number":7,"context_line":"    newly created SVMs so they can resolve hostnames (e.g. Barbican"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"e4667c6c_0262b38b","line":4,"range":{"start_line":4,"start_character":11,"end_line":4,"end_character":15},"updated":"2026-06-01 21:47:44.000000000","message":"ONTAP\n\nisn\u0027t \"cDOT\" an old/deprecated name?","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4d327cc2245f144583ae51f4f5da78346adebedd","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":"    NetApp cDOT driver: Added ``netapp_dns_domains``,"},{"line_number":5,"context_line":"    ``netapp_dns_nameservers``, and ``netapp_dns_hosts`` configuration"},{"line_number":6,"context_line":"    options. In DHSS\u003dTrue mode, these provide infrastructure DNS to"},{"line_number":7,"context_line":"    newly created SVMs so they can resolve hostnames (e.g. Barbican"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"88c1cee5_99f67599","line":4,"range":{"start_line":4,"start_character":11,"end_line":4,"end_character":15},"in_reply_to":"e4667c6c_0262b38b","updated":"2026-06-02 11:33:23.000000000","message":"Agreed. This should be replaced with ONTAP.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","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":"    NetApp cDOT driver: Added ``netapp_dns_domains``,"},{"line_number":5,"context_line":"    ``netapp_dns_nameservers``, and ``netapp_dns_hosts`` configuration"},{"line_number":6,"context_line":"    options. In DHSS\u003dTrue mode, these provide infrastructure DNS to"},{"line_number":7,"context_line":"    newly created SVMs so they can resolve hostnames (e.g. Barbican"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"cdb5fed3_4c3e1f46","line":4,"range":{"start_line":4,"start_character":11,"end_line":4,"end_character":15},"in_reply_to":"e4667c6c_0262b38b","updated":"2026-06-02 13:29:53.000000000","message":"Replaced. Thanks.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0233a67a2bf919c12d43b8ac81a875e9b25866d1","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    KMS endpoints) without requiring a security service."},{"line_number":9,"context_line":"fixes:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    NetApp cDOT driver: Fixed"},{"line_number":12,"context_line":"    `bug #2147659 \u003chttps://launchpad.net/bugs/2147659\u003e`_ where SVMs"},{"line_number":13,"context_line":"    created in DHSS\u003dTrue mode had no DNS name-service, causing share"},{"line_number":14,"context_line":"    creation to fail when the SVM needed to resolve infrastructure"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"66c25afb_eaafe5cd","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":15},"updated":"2026-06-01 21:47:44.000000000","message":"same","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4d327cc2245f144583ae51f4f5da78346adebedd","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    KMS endpoints) without requiring a security service."},{"line_number":9,"context_line":"fixes:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    NetApp cDOT driver: Fixed"},{"line_number":12,"context_line":"    `bug #2147659 \u003chttps://launchpad.net/bugs/2147659\u003e`_ where SVMs"},{"line_number":13,"context_line":"    created in DHSS\u003dTrue mode had no DNS name-service, causing share"},{"line_number":14,"context_line":"    creation to fail when the SVM needed to resolve infrastructure"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"09e9a77a_2cc34c5e","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":15},"in_reply_to":"66c25afb_eaafe5cd","updated":"2026-06-02 11:33:23.000000000","message":"+1","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"eb3091df6a11b687a53c82b0d776501fe424923c","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    KMS endpoints) without requiring a security service."},{"line_number":9,"context_line":"fixes:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    NetApp cDOT driver: Fixed"},{"line_number":12,"context_line":"    `bug #2147659 \u003chttps://launchpad.net/bugs/2147659\u003e`_ where SVMs"},{"line_number":13,"context_line":"    created in DHSS\u003dTrue mode had no DNS name-service, causing share"},{"line_number":14,"context_line":"    creation to fail when the SVM needed to resolve infrastructure"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"a0986c59_02825842","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":15},"in_reply_to":"66c25afb_eaafe5cd","updated":"2026-06-02 13:29:53.000000000","message":"Done here as well.","commit_id":"5b1d90379a987a96cfdba538f1050b35479a2a1a"}]}
