)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"d3b699ac47dcf7df4b46bb08cc07f03ef57a4845","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6cd8f0e0_297f05c5","updated":"2025-03-05 23:23:13.000000000","message":"CI failures are being addressed in https://review.opendev.org/c/openstack/magnum-specs/+/943504","commit_id":"24b7c5d1399dedfc91da6f953213156a9b524014"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"a61f4c7ecaee14649f18acf152d9ff2a90945498","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"96fee882_4415de87","updated":"2025-03-12 07:45:21.000000000","message":"Thanks for trying to untangle the label mess!","commit_id":"614ac935ee103a9e3fec31fca3c2023f048440ed"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"21ce27ddd748ecdb360099f10a531e935ce7104d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0fbf3abb_2894f9f3","updated":"2025-03-19 00:21:54.000000000","message":"Proposal updated with changes that came from a discussion with Jake (thank you, Jake!).\n\nThe proposed changes to Magnum itself are limited to two functions `validate_labels` and `normalise_labels`, and deprecation of `--merge-labels`.\n\nThe logic for these functions is to be implemented by the drivers, and an example of the expected behavior is outlined here.","commit_id":"d7e95153e318eee9730fef0dd8404bbdab1f04cf"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"eda8ecc8d0cc30ba83c5be369ed2314d0c9e7604","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"068adfea_5fd5bb9f","updated":"2025-03-26 10:11:59.000000000","message":"Hi Mohammed, would appreciate your comments on this spec","commit_id":"9199546fcbc2de1e116914fa76a0fa98cb7778f3"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"ef7db7dad520735801eed80ca9829c696cf90bf9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b6d0b085_53a3c355","updated":"2025-03-19 20:54:59.000000000","message":"Thank you! nits combed.","commit_id":"9199546fcbc2de1e116914fa76a0fa98cb7778f3"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"76f8368c8385559536ba1bc8594cebcdd82f3334","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c5a0e1e2_3110e6f9","updated":"2026-06-07 20:10:52.000000000","message":"Please retarget to Hibiscus","commit_id":"1cefa8c59ab2575e9efae80e1c4f4b0dfac48593"}],"specs/flamingo/label-normalisation.rst":[{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"a61f4c7ecaee14649f18acf152d9ff2a90945498","unresolved":true,"context_lines":[{"line_number":69,"context_line":"  2. Drivers take care of normalising labels on Clusters and NodeGroup objects"},{"line_number":70,"context_line":"  by removing labels that do not belong to particular Objects and copying all"},{"line_number":71,"context_line":"  labels from a Cluster Template at creation time."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Either of these options results in labels being specified for a given Cluster"},{"line_number":74,"context_line":"in a single location (ie. normalised)."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"4b942c53_e93238d8","line":72,"updated":"2025-03-12 07:45:21.000000000","message":"do you have a preferred option?","commit_id":"614ac935ee103a9e3fec31fca3c2023f048440ed"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"f006163a16869314e8ae1baaee7ccd6a02d340a0","unresolved":true,"context_lines":[{"line_number":69,"context_line":"  2. Drivers take care of normalising labels on Clusters and NodeGroup objects"},{"line_number":70,"context_line":"  by removing labels that do not belong to particular Objects and copying all"},{"line_number":71,"context_line":"  labels from a Cluster Template at creation time."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Either of these options results in labels being specified for a given Cluster"},{"line_number":74,"context_line":"in a single location (ie. normalised)."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"a18e14e0_5f13bb6f","line":72,"in_reply_to":"4b942c53_e93238d8","updated":"2025-03-16 22:03:38.000000000","message":"I\u0027ve been exploring reducing code duplicating by implementing option 1, where the driver specifies the valid labels. To keep all the behaviours present in the CAPI Helm driver this requires complexity:\n\nLabel definitions must also declare:\n 1. If they copy from Cluster Template.\n 1. A validation function.\n 1. Their default values.\n 1. In once case, a different default based on another label.\n 1. (in the future) Whether they are mutable after Cluster creation.","commit_id":"614ac935ee103a9e3fec31fca3c2023f048440ed"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"a61f4c7ecaee14649f18acf152d9ff2a90945498","unresolved":true,"context_lines":[{"line_number":87,"context_line":"    stored in the Magnum field and not as a label."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"This spec also proposes to change ``--merge-labels`` to become the default"},{"line_number":90,"context_line":"(ie. True) and to deprecate it. There does not appear to be a valid use case"},{"line_number":91,"context_line":"to override **all** labels of a Cluster Template (as defaults must always"},{"line_number":92,"context_line":"exist in driver or config), and several labels can be provided at creation"},{"line_number":93,"context_line":"time to customise a Cluster."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7dc6106d_7f0fe182","line":92,"range":{"start_line":90,"start_character":32,"end_line":92,"end_character":26},"updated":"2025-03-12 07:45:21.000000000","message":"was `--merge-labels false` meant to be used to unset labels from CT? although I\u0027m sure that can be achieved another way - by setting the label to the default value (provided the user know the default).","commit_id":"614ac935ee103a9e3fec31fca3c2023f048440ed"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"f006163a16869314e8ae1baaee7ccd6a02d340a0","unresolved":true,"context_lines":[{"line_number":87,"context_line":"    stored in the Magnum field and not as a label."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"This spec also proposes to change ``--merge-labels`` to become the default"},{"line_number":90,"context_line":"(ie. True) and to deprecate it. There does not appear to be a valid use case"},{"line_number":91,"context_line":"to override **all** labels of a Cluster Template (as defaults must always"},{"line_number":92,"context_line":"exist in driver or config), and several labels can be provided at creation"},{"line_number":93,"context_line":"time to customise a Cluster."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"bd91295b_abed6ecf","line":92,"range":{"start_line":90,"start_character":32,"end_line":92,"end_character":26},"in_reply_to":"7dc6106d_7f0fe182","updated":"2025-03-16 22:03:38.000000000","message":"Yes, I think that\u0027s right. If you want to unset a label from the Cluster Template then providing every other label except the unset one allows this right now. The default is then used from either the Driver or Magnum config.\n\nIn general though:\n1. This default may either change causing unexpected change to a users cluster, or require the deployer to never alter this default after the installation of Magnum (eg. a default pod CIDR range).\n2. If the Cluster Template provided an undesirable default, simply setting the preferred one will be just as good. (Provided it is documented).","commit_id":"614ac935ee103a9e3fec31fca3c2023f048440ed"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"a61f4c7ecaee14649f18acf152d9ff2a90945498","unresolved":true,"context_lines":[{"line_number":128,"context_line":"normalized vs those that have not, we will introduce a new boolean field"},{"line_number":129,"context_line":"``normalized``."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Magnum and Magnum Drivers will then be able to perform any migration logic to"},{"line_number":132,"context_line":"normalize labels on Cluster and NodeGroup objects, using the Cluster"},{"line_number":133,"context_line":"Template. After this point ``normalized`` would be set to ``True``."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Magnum Drivers that look for but not find the ``normalized`` field should"},{"line_number":136,"context_line":"assume Magnum is older than this implemented field and continue with their"}],"source_content_type":"text/x-rst","patch_set":3,"id":"47b5eecc_15a1c6e0","line":133,"range":{"start_line":131,"start_character":0,"end_line":133,"end_character":66},"updated":"2025-03-12 07:45:21.000000000","message":"when will this happen? as a periodic task?\n\nI feel like, as an operator, I want migration to be explicit. I am ok with creating a new duplicate CT, then doing an explicit migrate to the new CT. In this way,\n\n- existing clusters will not be affected\n- new clusters with existing older cluster templates will keep the old behaviour\n\nIf we do this, a field on the CT may be more useful? Then we can infer if a cluster is normalised by its CT.","commit_id":"614ac935ee103a9e3fec31fca3c2023f048440ed"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"f006163a16869314e8ae1baaee7ccd6a02d340a0","unresolved":true,"context_lines":[{"line_number":128,"context_line":"normalized vs those that have not, we will introduce a new boolean field"},{"line_number":129,"context_line":"``normalized``."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Magnum and Magnum Drivers will then be able to perform any migration logic to"},{"line_number":132,"context_line":"normalize labels on Cluster and NodeGroup objects, using the Cluster"},{"line_number":133,"context_line":"Template. After this point ``normalized`` would be set to ``True``."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Magnum Drivers that look for but not find the ``normalized`` field should"},{"line_number":136,"context_line":"assume Magnum is older than this implemented field and continue with their"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3118a515_8fdef105","line":133,"range":{"start_line":131,"start_character":0,"end_line":133,"end_character":66},"in_reply_to":"47b5eecc_15a1c6e0","updated":"2025-03-16 22:03:38.000000000","message":"No, I don\u0027t think a periodic task is a good idea. If there is a problem it would occur without user or operator intervention, so would be unexpected.\n\nThe Cluster Template field is a good idea and would provide a defined upgrade event that users could control.\n\nThe alternatives I was thinking of was to:\n1. Create a `magnum-manage` operator triggered command that normalized a cluster. This is then operator controlled and requires an explicit action. As it is idempotent there is no harm in running the normalize operation several times, and it could be simply triggered through normal cluster use.\n2. So migrating Clusters on the next user-triggered action is the other approach. But this is less obvious than the CT method to the end user and if there is a problem a simple resize action may cause unexpected cluster changes.\n\nSo, the Cluster Template field (and perhaps defaulting it on) is appealing.","commit_id":"614ac935ee103a9e3fec31fca3c2023f048440ed"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"52a7fa36092cdc1f8cdd9c1aa25793f80877a697","unresolved":true,"context_lines":[{"line_number":98,"context_line":"    to the NodeGroup object and should be referenced by the driver only from"},{"line_number":99,"context_line":"    there. If set, these labels should be kept on the Cluster object as it"},{"line_number":100,"context_line":"    provides a default for newly created NodeGroups and would confuse"},{"line_number":101,"context_line":"    idempotent IaC tooling (such as Terraform or Ansible). "},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  * Special case labels ``max_node_count`` and ``min_node_count`` are"},{"line_number":104,"context_line":"    permitted on Cluster objects (to use as defaults for new NodeGroups) but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9bc0f7fc_9438fd46","line":101,"range":{"start_line":101,"start_character":58,"end_line":101,"end_character":59},"updated":"2025-03-19 13:52:24.000000000","message":"nit: whitespace","commit_id":"d7e95153e318eee9730fef0dd8404bbdab1f04cf"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"ef7db7dad520735801eed80ca9829c696cf90bf9","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    to the NodeGroup object and should be referenced by the driver only from"},{"line_number":99,"context_line":"    there. If set, these labels should be kept on the Cluster object as it"},{"line_number":100,"context_line":"    provides a default for newly created NodeGroups and would confuse"},{"line_number":101,"context_line":"    idempotent IaC tooling (such as Terraform or Ansible). "},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  * Special case labels ``max_node_count`` and ``min_node_count`` are"},{"line_number":104,"context_line":"    permitted on Cluster objects (to use as defaults for new NodeGroups) but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"8e432f2d_6a8a3ecf","line":101,"range":{"start_line":101,"start_character":58,"end_line":101,"end_character":59},"in_reply_to":"9bc0f7fc_9438fd46","updated":"2025-03-19 20:54:59.000000000","message":"Done","commit_id":"d7e95153e318eee9730fef0dd8404bbdab1f04cf"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"52a7fa36092cdc1f8cdd9c1aa25793f80877a697","unresolved":true,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"The implementation of this label is left to the individual driver to define"},{"line_number":158,"context_line":"and utilise. An example label for Cluster API Helm driver is"},{"line_number":159,"context_line":"`capi_helm_label_normalise\u003dTrue`, set on new Cluster Templates."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"REST API Impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a9cf38f_c524b084","line":159,"updated":"2025-03-19 13:52:24.000000000","message":"double backticks?","commit_id":"d7e95153e318eee9730fef0dd8404bbdab1f04cf"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"ef7db7dad520735801eed80ca9829c696cf90bf9","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"The implementation of this label is left to the individual driver to define"},{"line_number":158,"context_line":"and utilise. An example label for Cluster API Helm driver is"},{"line_number":159,"context_line":"`capi_helm_label_normalise\u003dTrue`, set on new Cluster Templates."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"REST API Impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"78ff5298_8648be71","line":159,"in_reply_to":"1a9cf38f_c524b084","updated":"2025-03-19 20:54:59.000000000","message":"Done","commit_id":"d7e95153e318eee9730fef0dd8404bbdab1f04cf"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"52a7fa36092cdc1f8cdd9c1aa25793f80877a697","unresolved":true,"context_lines":[{"line_number":168,"context_line":"   ``true`` when not provided instead of ``false``."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"   2. Remove the ``labels_overridden``, ``labels_added`` and"},{"line_number":171,"context_line":"   ``labels_skipped`` generated fields returned from "},{"line_number":172,"context_line":"   ``GET /v1/clusters/{cluster_ident}``. Inheritance of labels is now"},{"line_number":173,"context_line":"   supported only by copying relevant labels at create time, otherwise labels"},{"line_number":174,"context_line":"   are read directly from the relevant object."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9826798a_99815fd2","line":171,"range":{"start_line":171,"start_character":52,"end_line":171,"end_character":53},"updated":"2025-03-19 13:52:24.000000000","message":"nit: whitespace","commit_id":"d7e95153e318eee9730fef0dd8404bbdab1f04cf"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"ef7db7dad520735801eed80ca9829c696cf90bf9","unresolved":false,"context_lines":[{"line_number":168,"context_line":"   ``true`` when not provided instead of ``false``."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"   2. Remove the ``labels_overridden``, ``labels_added`` and"},{"line_number":171,"context_line":"   ``labels_skipped`` generated fields returned from "},{"line_number":172,"context_line":"   ``GET /v1/clusters/{cluster_ident}``. Inheritance of labels is now"},{"line_number":173,"context_line":"   supported only by copying relevant labels at create time, otherwise labels"},{"line_number":174,"context_line":"   are read directly from the relevant object."}],"source_content_type":"text/x-rst","patch_set":4,"id":"9ec464ce_41c14b8b","line":171,"range":{"start_line":171,"start_character":52,"end_line":171,"end_character":53},"in_reply_to":"9826798a_99815fd2","updated":"2025-03-19 20:54:59.000000000","message":"Done","commit_id":"d7e95153e318eee9730fef0dd8404bbdab1f04cf"}]}
