)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35921,"name":"Travis Holton","email":"travisholton+ubuntuone@catalystcloud.nz","username":"travisholton"},"change_message_id":"f74e71db818317a807d1919a4113472f579fb7bd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"68f0c6d7_c247a699","updated":"2023-05-29 19:15:56.000000000","message":"A couple questions regarding the strategy being used for upgrades:\n\nCurrently worker nodes are upgraded before the control plane, which would put components on workers at a higher version than the kube-apiserver. Should that be the other way around to keep the version skew policy happy (i.e. everything should be at the same or max 2 minor versions below kube-apiserver)?\n\nAlso, the upgrade begins by cordoning off an existing worker node before adding an updated worker node. If there is only 1 worker node in the cluster to begin with, then for a brief time there are 0 worker nodes available in the cluster. Could the rolling update strategy be changed to keep at least 1 available?","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"},{"author":{"_account_id":35921,"name":"Travis Holton","email":"travisholton+ubuntuone@catalystcloud.nz","username":"travisholton"},"change_message_id":"7dd93185793da8a251d2adfd2a9b97123e77b8aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3cf6fa2d_f8865f4f","updated":"2023-05-31 00:45:19.000000000","message":"Amend earlier comment","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"},{"author":{"_account_id":35921,"name":"Travis Holton","email":"travisholton+ubuntuone@catalystcloud.nz","username":"travisholton"},"change_message_id":"281875b2387f29a365d1fb75d0f69418971ce0ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fd1c6a67_a132fc8a","updated":"2023-05-29 06:58:32.000000000","message":"Devstack build failing at cluster template creation.","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"03ff926a5dea9b1940a3d9541ad7c0414f8ffee6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1d5cc0af_f39480d2","in_reply_to":"03a2bc53_1e21a920","updated":"2023-09-15 17:30:17.000000000","message":"You can actually choose a different strategy in the helm charts if needed, such as add one remove one for the workers. We found that didn\u0027t work for our use case as people didn\u0027t have enough capacity for that :/","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"},{"author":{"_account_id":35921,"name":"Travis Holton","email":"travisholton+ubuntuone@catalystcloud.nz","username":"travisholton"},"change_message_id":"83a401c5ac28b5aec44e8e77ac3b56bec9c414ed","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6fa48ade_cf9fa4c7","in_reply_to":"1d5cc0af_f39480d2","updated":"2023-09-18 19:04:49.000000000","message":"I did see that the upgrade was creating a new control plane node and removing-then-creating a new worker simultaneously. It makes sense if the strategy was changed and CAPI created both a new controlplane node and a new worker node at the same time that would exceed capacity with +2 nodes.\n\nCould it help to change the cluster template upgrade so that the control plane nodes upgraded first and the worker nodes only once controlplane is complete? Then the node increase could be limited to +1 more easily.\n\nIf it helps, I\u0027ve created a PR (https://github.com/stackhpc/capi-helm-charts/pull/90) for separating controlplane and nodeGroup machineImage/machineImageId which Matt is reviewing.","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"},{"author":{"_account_id":35921,"name":"Travis Holton","email":"travisholton+ubuntuone@catalystcloud.nz","username":"travisholton"},"change_message_id":"7dd93185793da8a251d2adfd2a9b97123e77b8aa","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"03a2bc53_1e21a920","in_reply_to":"68f0c6d7_c247a699","updated":"2023-05-31 00:45:19.000000000","message":"\u003e Currently worker nodes are upgraded before the control plane...\n\nMy mistake. I see that control plane and worker nodes are created at the same time. The control-plane node just takes a little longer to appear in the cluster thus appearing that it is happening after the worker node upgrade.","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"11541822dd9a02f662345e07c11888b58933ec3b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"854a1036_f0d79245","in_reply_to":"6fa48ade_cf9fa4c7","updated":"2023-09-21 17:04:54.000000000","message":"Good questions. I think the helm chart is in control of all that right now, via how the machine deployments are configured. I think Matt told me we can\u0027t do it like that, because we have to upgrade both of those things at the same time... but I don\u0027t know here the limitation lies, be it helm or capi?","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"},{"author":{"_account_id":35921,"name":"Travis Holton","email":"travisholton+ubuntuone@catalystcloud.nz","username":"travisholton"},"change_message_id":"f85afdb56c43fa9bf6929a1ed7d4f6ce1ebed6a4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c6040b05_1c17daf8","in_reply_to":"854a1036_f0d79245","updated":"2023-09-21 18:27:15.000000000","message":"I believe that the upgrade would have to be done by executing the helm command twice: first to upgrade the machineImage/machineImageId for the control plane when that is complete then upgrade the machineImage/machineImageId for the nodegroup.\n\nThere would probably have to be an additional way to represent the UPDATE_IN_PROGRESS status so that it\u0027s possible to differentiate between \"upgrading controlplane\" and \"upgrading worker nodes\".","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"}],"devstack/contrib/new-devstack.sh":[{"author":{"_account_id":35921,"name":"Travis Holton","email":"travisholton+ubuntuone@catalystcloud.nz","username":"travisholton"},"change_message_id":"281875b2387f29a365d1fb75d0f69418971ce0ee","unresolved":true,"context_lines":[{"line_number":96,"context_line":"  --coe kubernetes \\"},{"line_number":97,"context_line":"  --image $(openstack image show ubuntu-focal-kube-v1.26.3 -c id -f value) \\"},{"line_number":98,"context_line":"  --external-network public \\"},{"line_number":99,"context_line":"  --master-flavor ds2G20 \\"},{"line_number":100,"context_line":"  --flavor ds2G20 \\"},{"line_number":101,"context_line":"  --public \\"},{"line_number":102,"context_line":"  --master-lb-enabled"}],"source_content_type":"text/x-sh","patch_set":4,"id":"41958c4d_e663e61f","line":99,"updated":"2023-05-29 06:58:32.000000000","message":"This currently breaks devstack build since flavor ds2G20 isn\u0027t defined. Should this be ds2G?","commit_id":"a3af9bd850df38d9f7c04cca7c59baaa0cb4038d"}],"magnum/drivers/cluster_api/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79c1b729f60fc0f78f67751e16f85a66bccf1fda","unresolved":true,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # The control plane object is what controls the Kubernetes version"},{"line_number":85,"context_line":"        # If it is known, report it"},{"line_number":86,"context_line":"        kube_version \u003d kcp_status.get(\"version\", kcp_spec.get(\"version\"))"},{"line_number":87,"context_line":"        if cluster.coe_version !\u003d kube_version:"},{"line_number":88,"context_line":"            cluster.coe_version \u003d kube_version"},{"line_number":89,"context_line":"            cluster.save()"}],"source_content_type":"text/x-python","patch_set":1,"id":"14df7531_063cd3ae","line":86,"updated":"2023-05-25 08:44:14.000000000","message":"let’s move this into the base patch?","commit_id":"c82bd80382b4db4da01a41b2a6a618fa1f691ada"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79c1b729f60fc0f78f67751e16f85a66bccf1fda","unresolved":true,"context_lines":[{"line_number":413,"context_line":"        suffix \u003d CONF.capi_driver.magnum_namespace_suffix"},{"line_number":414,"context_line":"        return f\"{suffix}-{project_id}\""},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def _label(self, cluster, key, default, cluster_template\u003dNone):"},{"line_number":417,"context_line":"        if cluster_template is None:"},{"line_number":418,"context_line":"            cluster_template \u003d cluster.cluster_template"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"65e6ce70_2309a681","line":416,"updated":"2023-05-25 08:44:14.000000000","message":"I would rather we make template a required arg to keep it simple an explicit?","commit_id":"c82bd80382b4db4da01a41b2a6a618fa1f691ada"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79c1b729f60fc0f78f67751e16f85a66bccf1fda","unresolved":true,"context_lines":[{"line_number":427,"context_line":"        # NOTE(johngarbutt): filtering untrusted user input"},{"line_number":428,"context_line":"        return re.sub(r\"[^a-z0-9\\.\\-\\/]+\", \"\", raw)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _get_chart_version(self, cluster, cluster_template\u003dNone):"},{"line_number":431,"context_line":"        if cluster_template is None:"},{"line_number":432,"context_line":"            cluster_template \u003d cluster.cluster_template"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"6c3f41fc_16900086","line":430,"updated":"2023-05-25 08:44:14.000000000","message":"as above, make it required I think","commit_id":"c82bd80382b4db4da01a41b2a6a618fa1f691ada"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79c1b729f60fc0f78f67751e16f85a66bccf1fda","unresolved":true,"context_lines":[{"line_number":735,"context_line":"        scale_manager\u003dNone,"},{"line_number":736,"context_line":"        rollback\u003dFalse,"},{"line_number":737,"context_line":"    ):"},{"line_number":738,"context_line":"        # TODO(mkjpryor) check that the upgrade is viable"},{"line_number":739,"context_line":"        # e.g. not a downgrade, not an upgrade by more than one minor version"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        # Updating the template will likely apply for all nodegroups"}],"source_content_type":"text/x-python","patch_set":1,"id":"d0b9158e_ad956135","line":738,"updated":"2023-05-25 08:44:14.000000000","message":"this seems very important! clearly should happen before we update the template id","commit_id":"c82bd80382b4db4da01a41b2a6a618fa1f691ada"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79c1b729f60fc0f78f67751e16f85a66bccf1fda","unresolved":true,"context_lines":[{"line_number":745,"context_line":"            nodegroup.save()"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        # Store the new template ID"},{"line_number":748,"context_line":"        cluster.cluster_template_id \u003d cluster_template.uuid"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        self._update_helm_release("},{"line_number":751,"context_line":"            context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4cfdb553_a2bb2f0e","line":748,"updated":"2023-05-25 08:44:14.000000000","message":"why not do a save here, then a refresh() we should be able to just use cluster_template everywhere then?\n\n… actually let’s update the state I guess, I know it duplicates the conductor, but that seems worth it?","commit_id":"c82bd80382b4db4da01a41b2a6a618fa1f691ada"}]}
