)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"4c59b128141e2b0133d90e8af46af7e164fcc049","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"345f0d64_a8acd1e9","updated":"2022-08-11 14:06:36.000000000","message":"John: curious about where the other half of this is at?","commit_id":"ccedf10411fcf6f5cc8a08c9e5866a26b76003d9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"818fad35df72d9575e81bc2aa961d64eba7986af","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9e7399e5_ab3f061f","in_reply_to":"345f0d64_a8acd1e9","updated":"2022-08-15 10:14:15.000000000","message":"So the Cluster API base operator we are using with a few customers via our HPC portal called Azimuth, as presented at the summit:\nhttps://stackhpc.github.io/azimuth-user-docs/\nhttps://stackhpc.github.io/azimuth-config/try/\n\nSadly, for the magnum integration, this code here is exactly how far it has got. It currently still a bit of a background task, due to everything else going on (looking at you CentOS 8). I have added some more details on what is left just with the prototype work in the commit message, so that is a bit clearer.\n\nIts hopefully not far off getting someone outside of StackHPC to give it a go, and get some early feedback. I have given some vague pointers in the commit message of how I was setting up the dev environment, roughly anyways. Hopefully I can create some Kayobe config and custom playbook to make that easier, in the not too distant future.","commit_id":"ccedf10411fcf6f5cc8a08c9e5866a26b76003d9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79384b77d213309a14f8fb111e9dfaed51af3535","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"12d1be55_4f439fa8","in_reply_to":"9e7399e5_ab3f061f","updated":"2023-05-12 17:04:16.000000000","message":"Ack","commit_id":"ccedf10411fcf6f5cc8a08c9e5866a26b76003d9"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"315c2ec8b7b83507d29ffc1e957dc98fcae9c710","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"2930facb_990c4b51","updated":"2023-04-12 08:38:50.000000000","message":"Can we split it in multiple patches? it\u0027s +1k lines - it\u0027s hardly reviewable","commit_id":"cd1790458b739735233c0560d58ca15f413201de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"509b384d929698316f02779bfae0c0d1d6dd7f84","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"65084db3_0ef1f8d3","in_reply_to":"2930facb_990c4b51","updated":"2023-04-24 10:09:21.000000000","message":"This has been split into multiple patches, is there a particular further split you would recommend here? We could pull out the helm and k8s clients, but its a touch artificial?\n\nI am about to add some unit testing, which isn\u0027t likely to help too much with the line count here.\n\nI will see what I can do with a split out, when looking at the unit tests.","commit_id":"cd1790458b739735233c0560d58ca15f413201de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79384b77d213309a14f8fb111e9dfaed51af3535","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"d3ae061d_38e53126","in_reply_to":"65084db3_0ef1f8d3","updated":"2023-05-12 17:04:16.000000000","message":"Done","commit_id":"cd1790458b739735233c0560d58ca15f413201de"},{"author":{"_account_id":35260,"name":"Tyler","email":"tyler@stackhpc.com","username":"scrungus"},"change_message_id":"fb856e940a8b2eed335d16540cdf4dff3da2653b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":73,"id":"b5f54d63_aaf43e49","updated":"2023-06-20 14:50:38.000000000","message":"this needs to be caught:\n\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall Traceback (most recent call last):\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall   File \"/var/lib/kolla/venv/lib/python3.9/site-packages/oslo_service/loopingcall.py\", line 150, in _run_loop\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall     result \u003d func(*self.args, **self.kw)\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall   File \"/magnum-base-source/magnum-base-archive-stackhpc-yoga/magnum/service/periodic.py\", line 73, in update_status\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall     cdriver.update_cluster_status(self.ctx, self.cluster)\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall   File \"/magnum-base-source/magnum-base-archive-stackhpc-yoga/magnum/drivers/cluster_api/driver.py\", line 376, in update_cluster_status\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall     capi_cluster \u003d self._get_capi_cluster(cluster)\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall   File \"/magnum-base-source/magnum-base-archive-stackhpc-yoga/magnum/drivers/cluster_api/driver.py\", line 338, in _get_capi_cluster\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall     self._sanitised_name(self._get_chart_release_name(cluster)),\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall   File \"/magnum-base-source/magnum-base-archive-stackhpc-yoga/magnum/drivers/cluster_api/driver.py\", line 438, in _sanitised_name\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall     (f\"{name}-{suffix}\" if suffix else name).lower(),\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall AttributeError: \u0027NoneType\u0027 object has no attribute \u0027lower\u0027\n2023-06-20 14:11:41.268 8 ERROR oslo.service.loopingcall \n2023-06-20 14:11:51.144 8 ERROR oslo.service.loopingcall [-] Fixed interval looping call \u0027magnum.service.periodic.ClusterUpdateJob.update_status\u0027 failed: AttributeError: \u0027NoneType\u0027 object has no attribute \u0027lower\u0027","commit_id":"f165a82b8a9f12a49c3008ffd81c6ac4c3ffec34"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6943b216a38984b4c49b9bed9481f920bd15bad0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":79,"id":"16cbc81b_b2a269a5","updated":"2023-09-19 17:29:37.000000000","message":"I need to restore the devstack stuff from the previous patches. I am doing a re-org so its easier to keep this in sync with the downstream efforts, and making it easier to keep pulling in fixes from customer testing feedback we are getting now.","commit_id":"de92e56b741d9dab3e47d84f262adf6d4dec2bb5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"286f0d334fdeb8d436df6821016128ed7ef3012c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":79,"id":"a668dc05_89ed4750","in_reply_to":"16cbc81b_b2a269a5","updated":"2023-09-20 08:45:51.000000000","message":"Done","commit_id":"de92e56b741d9dab3e47d84f262adf6d4dec2bb5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"dbbbf9acd6d73c9b03d3907252660a245ead0eed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":82,"id":"d76022a1_c9ce9b7c","updated":"2023-09-20 08:48:35.000000000","message":"fixing up coverage, and testing devstack WIP stuff.","commit_id":"c88a85ff7c8cceee0e8ecbbf32732d2ce1f9ea2b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"15ad8ba0935eac5aca0d698744b0da7f3b5ec75c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":83,"id":"58504b7e_602ba432","updated":"2023-09-20 09:08:16.000000000","message":"coverage fixed, trying to re-test devstack work with updated images, etc.","commit_id":"ad83af12b4a5646eded371634f1e8441d1fb80bb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4481fd72763730251d2b6e4d7fa66890a4a71ba7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":84,"id":"0b347133_89a5b832","updated":"2023-09-20 09:08:46.000000000","message":"coverage fixed, trying to re-test devstack work with updated images, etc.","commit_id":"9355db14a46c343a9f32bc6a6eaff174c0fd536d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2d5c9f86582393528e2cd7df2404696d68cf77be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":97,"id":"07828429_bfd00491","updated":"2023-09-26 13:59:26.000000000","message":"doh, that image url isn\u0027t working right now.","commit_id":"df99a93bc8281fc6917f45ce90b5a6c12b0599c5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a7a9458a7a183a2d3405c8aa46fbe53904c639b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":98,"id":"0010491e_8b4be319","updated":"2023-09-27 08:54:07.000000000","message":"recheck capi bootstrap","commit_id":"4b021e13c4315afdb7aa5321750fb3a093e432b1"}],"devstack/contrib/new-devstack.sh":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":178,"context_line":"exit"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"# Test it"},{"line_number":181,"context_line":"openstack coe cluster create devstacktest \\"},{"line_number":182,"context_line":"  --cluster-template kube-1.25.5 \\"},{"line_number":183,"context_line":"  --master-count 3 \\"},{"line_number":184,"context_line":"  --node-count 2"}],"source_content_type":"text/x-sh","patch_set":19,"id":"a46315a9_c71693b7","line":181,"updated":"2023-04-03 17:06:24.000000000","message":"I think we need a separate patch that works with the older driver. @tyler, can help with that. Then in this patch we add just the bits into the magnum devstack plugin that enable the CAPI bits I think?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79384b77d213309a14f8fb111e9dfaed51af3535","unresolved":false,"context_lines":[{"line_number":178,"context_line":"exit"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"# Test it"},{"line_number":181,"context_line":"openstack coe cluster create devstacktest \\"},{"line_number":182,"context_line":"  --cluster-template kube-1.25.5 \\"},{"line_number":183,"context_line":"  --master-count 3 \\"},{"line_number":184,"context_line":"  --node-count 2"}],"source_content_type":"text/x-sh","patch_set":19,"id":"31f045df_53cb0909","line":181,"in_reply_to":"a46315a9_c71693b7","updated":"2023-05-12 17:04:16.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"0c1e2fbc42523bb0c8e7656eee2d4633c08d5373","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# Add a k8s image"},{"line_number":76,"context_line":"curl -O https://object.arcus.openstack.hpc.cam.ac.uk/swift/v1/AUTH_f0dc9cb312144d0aa44037c9149d2513/azimuth-images-prerelease/ubuntu-focal-kube-v1.26.3-230411-1504.qcow2"},{"line_number":77,"context_line":"openstack image create ubuntu-focal-kube-v1.26.3 \\"},{"line_number":78,"context_line":"  --file ubuntu-focal-kube-v1.26.3-230411-1504.qcow2 \\"},{"line_number":79,"context_line":"  --disk-format qcow2 \\"},{"line_number":80,"context_line":"  --container-format bare \\"}],"source_content_type":"text/x-sh","patch_set":74,"id":"d00c1972_012f15a3","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":50},"updated":"2023-09-04 15:27:28.000000000","message":"devstack and tempest stopped used focal for anything - can we do the same?","commit_id":"ece8393cee2cceece5abda94f9ef952e04d10a1b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ade27d63698de5762911eecfb5bd979a65936aaf","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# Add a k8s image"},{"line_number":76,"context_line":"curl -O https://object.arcus.openstack.hpc.cam.ac.uk/swift/v1/AUTH_f0dc9cb312144d0aa44037c9149d2513/azimuth-images-prerelease/ubuntu-focal-kube-v1.26.3-230411-1504.qcow2"},{"line_number":77,"context_line":"openstack image create ubuntu-focal-kube-v1.26.3 \\"},{"line_number":78,"context_line":"  --file ubuntu-focal-kube-v1.26.3-230411-1504.qcow2 \\"},{"line_number":79,"context_line":"  --disk-format qcow2 \\"},{"line_number":80,"context_line":"  --container-format bare \\"}],"source_content_type":"text/x-sh","patch_set":74,"id":"89d0659b_38b73940","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":50},"in_reply_to":"9a2f2a8c_1b1b4d38","updated":"2023-09-20 08:45:16.000000000","message":"OK, I picked the lasted 1.28 image we have for jammy.","commit_id":"ece8393cee2cceece5abda94f9ef952e04d10a1b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"710ab7c2c329003d92a1432f08da8b1534a4dbc1","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"# Add a k8s image"},{"line_number":76,"context_line":"curl -O https://object.arcus.openstack.hpc.cam.ac.uk/swift/v1/AUTH_f0dc9cb312144d0aa44037c9149d2513/azimuth-images-prerelease/ubuntu-focal-kube-v1.26.3-230411-1504.qcow2"},{"line_number":77,"context_line":"openstack image create ubuntu-focal-kube-v1.26.3 \\"},{"line_number":78,"context_line":"  --file ubuntu-focal-kube-v1.26.3-230411-1504.qcow2 \\"},{"line_number":79,"context_line":"  --disk-format qcow2 \\"},{"line_number":80,"context_line":"  --container-format bare \\"}],"source_content_type":"text/x-sh","patch_set":74,"id":"9a2f2a8c_1b1b4d38","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":50},"in_reply_to":"d00c1972_012f15a3","updated":"2023-09-12 17:38:26.000000000","message":"It was broken when we last tested, but it seems to be now fixed: https://github.com/stackhpc/capi-helm-charts/commit/e016f781c3d0364d4451a256f248bf37971011ce","commit_id":"ece8393cee2cceece5abda94f9ef952e04d10a1b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1b3778552c607cfc557dcdbcc9933d2d12c55a1e","unresolved":true,"context_lines":[{"line_number":78,"context_line":"# TODO: jammy is broken, falling back to focal"},{"line_number":79,"context_line":"image_name\u003dubuntu-focal-kube-v1.28.1"},{"line_number":80,"context_line":"kube_version\u003dv1.28.1"},{"line_number":81,"context_line":"curl -o ${image_name}.qcow2 \"https://object.arcus.openstack.hpc.cam.ac.uk/azimuth-images/ubuntu-focal-kube-v1.28.1-230831-1150.qcow2?AWSAccessKeyId\u003dc5bd0fa15bae4e08b305a52aac97c3a6\u0026Expires\u003d1725019898\u0026Signature\u003d%2FXW2ywkA%2FQ8bCUiJkiLCWBAf81M%3D\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"openstack image create $image_name \\"},{"line_number":84,"context_line":"  --file ${image_name}.qcow2 \\"}],"source_content_type":"text/x-sh","patch_set":99,"id":"2b57b164_1545701e","line":81,"range":{"start_line":81,"start_character":29,"end_line":81,"end_character":245},"updated":"2024-02-16 19:37:01.000000000","message":"Umm.... This is semi-concerning to see in an open source project, as it is reliant upon something else which seemingly has a canned starting state. At a minimum more detail is required to allow reviewers to make an appropriate decision.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"ea51c1d5089360229404eb206b4f1a165f3a531e","unresolved":true,"context_lines":[{"line_number":78,"context_line":"# TODO: jammy is broken, falling back to focal"},{"line_number":79,"context_line":"image_name\u003dubuntu-focal-kube-v1.28.1"},{"line_number":80,"context_line":"kube_version\u003dv1.28.1"},{"line_number":81,"context_line":"curl -o ${image_name}.qcow2 \"https://object.arcus.openstack.hpc.cam.ac.uk/azimuth-images/ubuntu-focal-kube-v1.28.1-230831-1150.qcow2?AWSAccessKeyId\u003dc5bd0fa15bae4e08b305a52aac97c3a6\u0026Expires\u003d1725019898\u0026Signature\u003d%2FXW2ywkA%2FQ8bCUiJkiLCWBAf81M%3D\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"openstack image create $image_name \\"},{"line_number":84,"context_line":"  --file ${image_name}.qcow2 \\"}],"source_content_type":"text/x-sh","patch_set":99,"id":"1ec5e697_1f633756","line":81,"range":{"start_line":81,"start_character":29,"end_line":81,"end_character":245},"in_reply_to":"1a6b97a5_efe51f0d","updated":"2024-02-19 03:01:33.000000000","message":"There is an existing SIG Cluster Lifecycle project that contains the code to build these images[1].\n\nIf there is a location Opendev provides to host this type of image once built, we should migrate to using that as or when this merges so it can be maintained by the community long term.\n\nI\u0027d appreciate any links for how Amphora images are stored, so Magnum can follow the example.\n\n[1] https://image-builder.sigs.k8s.io/capi/capi.html","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"55bfc81eec8ded0678f86fe14aa19bf002357eba","unresolved":true,"context_lines":[{"line_number":78,"context_line":"# TODO: jammy is broken, falling back to focal"},{"line_number":79,"context_line":"image_name\u003dubuntu-focal-kube-v1.28.1"},{"line_number":80,"context_line":"kube_version\u003dv1.28.1"},{"line_number":81,"context_line":"curl -o ${image_name}.qcow2 \"https://object.arcus.openstack.hpc.cam.ac.uk/azimuth-images/ubuntu-focal-kube-v1.28.1-230831-1150.qcow2?AWSAccessKeyId\u003dc5bd0fa15bae4e08b305a52aac97c3a6\u0026Expires\u003d1725019898\u0026Signature\u003d%2FXW2ywkA%2FQ8bCUiJkiLCWBAf81M%3D\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"openstack image create $image_name \\"},{"line_number":84,"context_line":"  --file ${image_name}.qcow2 \\"}],"source_content_type":"text/x-sh","patch_set":99,"id":"f014e5a6_1d92b304","line":81,"range":{"start_line":81,"start_character":29,"end_line":81,"end_character":245},"in_reply_to":"1ec5e697_1f633756","updated":"2024-02-20 03:52:25.000000000","message":"You can build and upload artifacts from CI job pipelines to tarballs.opendev.org. The positive outcome is they can then be mirrored into CI regions to improve reliability of transfers. Ask in OFTC IRC channel #opendev, and feel free to reach out, I can likely point you to examples of how Ironic does it for our ramdisk image artifacts.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"9acee47c0bf02994974be8dda9bc473da54ca144","unresolved":true,"context_lines":[{"line_number":78,"context_line":"# TODO: jammy is broken, falling back to focal"},{"line_number":79,"context_line":"image_name\u003dubuntu-focal-kube-v1.28.1"},{"line_number":80,"context_line":"kube_version\u003dv1.28.1"},{"line_number":81,"context_line":"curl -o ${image_name}.qcow2 \"https://object.arcus.openstack.hpc.cam.ac.uk/azimuth-images/ubuntu-focal-kube-v1.28.1-230831-1150.qcow2?AWSAccessKeyId\u003dc5bd0fa15bae4e08b305a52aac97c3a6\u0026Expires\u003d1725019898\u0026Signature\u003d%2FXW2ywkA%2FQ8bCUiJkiLCWBAf81M%3D\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"openstack image create $image_name \\"},{"line_number":84,"context_line":"  --file ${image_name}.qcow2 \\"}],"source_content_type":"text/x-sh","patch_set":99,"id":"1a6b97a5_efe51f0d","line":81,"range":{"start_line":81,"start_character":29,"end_line":81,"end_character":245},"in_reply_to":"2b57b164_1545701e","updated":"2024-02-17 15:45:38.000000000","message":"to have that said, it\u0027s a part of devstack plugin.\n\nbut ofc it would be great to have means of building image using dib or smth like that, and store it somewhere in tarballs like Octavia does with Amphora images.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"}],"magnum/conf/capi_helm.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1b3778552c607cfc557dcdbcc9933d2d12c55a1e","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \"helm_chart_repo\","},{"line_number":43,"context_line":"        default\u003d\"https://stackhpc.github.io/capi-helm-charts\","},{"line_number":44,"context_line":"        help\u003d("},{"line_number":45,"context_line":"            \"Reference to the helm chart repository for \""},{"line_number":46,"context_line":"            \"the cluster API driver. \""}],"source_content_type":"text/x-python","patch_set":99,"id":"2244bc76_d9db693a","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":60},"updated":"2024-02-16 19:37:01.000000000","message":"A single vendor default seems unacceptable in community context.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"06689c7a16c516fdc85c0f6f6071f8f9ea0881aa","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \"helm_chart_repo\","},{"line_number":43,"context_line":"        default\u003d\"https://stackhpc.github.io/capi-helm-charts\","},{"line_number":44,"context_line":"        help\u003d("},{"line_number":45,"context_line":"            \"Reference to the helm chart repository for \""},{"line_number":46,"context_line":"            \"the cluster API driver. \""}],"source_content_type":"text/x-python","patch_set":99,"id":"ee22a4d5_26db4425","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":60},"in_reply_to":"1d130d36_5239a4c0","updated":"2024-02-21 13:01:37.000000000","message":"Hi Julia!\n\nTo clarify, we were thinking of merging the driver but leave it disabled. Documentation will reflect that driver is beta, not supported and not suitable for production. Sort of a shadow feature that can be enabled by a feature flag.\n\nThe reason for this is that it is quite a big change with multi parts, and merging an initial implementation will allow us to have a solid foundation to build and test other parts like the helm chart. (I know we can use Depends-On, but I was thinking of breaking the problem into manageable chunks, and leave helm chart chunk to after this patches are merged.)\n\nWhen the helm chart is forked and hosted with OpenStack, we will change this default and then remove the beta feature flag, thereby making the driver generally available.\n\nMaybe I do not quite understand your concerns about \u0027single vendor default\u0027. Magnum uses multiple images from external vendors\u0027 repo. What most operators have done to reduce risk is to mirror those images to their own registry. This can be similarly done with this helm chart, i.e. when I roll this out in my organisation I will change this to use our registry.\n\nI appreciate your input, please keep them coming.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"ea51c1d5089360229404eb206b4f1a165f3a531e","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \"helm_chart_repo\","},{"line_number":43,"context_line":"        default\u003d\"https://stackhpc.github.io/capi-helm-charts\","},{"line_number":44,"context_line":"        help\u003d("},{"line_number":45,"context_line":"            \"Reference to the helm chart repository for \""},{"line_number":46,"context_line":"            \"the cluster API driver. \""}],"source_content_type":"text/x-python","patch_set":99,"id":"bb51d181_1b5df5c8","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":60},"in_reply_to":"2244bc76_d9db693a","updated":"2024-02-19 03:01:33.000000000","message":"A good point to raise.\n\nMy understanding here from Magnum weekly meetings[1] is that when the driver is in a position to merge, the capi-helm-charts repo[2] will also be contributed from StackHPC to the Magnum project.\n\nSo this is expected to change very soon after merging, perhaps before - we still need to resolve the publishing method (OCI or HTTPS) which this needs to point to, but that is a separate topic to ownership of the repo.\n\n[1] https://meetings.opendev.org/meetings/magnum/2024/magnum.2024-01-10-09.00.log.html#l-60\n[2] https://review.opendev.org/c/openstack/governance/+/893118","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"55bfc81eec8ded0678f86fe14aa19bf002357eba","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \"helm_chart_repo\","},{"line_number":43,"context_line":"        default\u003d\"https://stackhpc.github.io/capi-helm-charts\","},{"line_number":44,"context_line":"        help\u003d("},{"line_number":45,"context_line":"            \"Reference to the helm chart repository for \""},{"line_number":46,"context_line":"            \"the cluster API driver. \""}],"source_content_type":"text/x-python","patch_set":99,"id":"1d130d36_5239a4c0","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":60},"in_reply_to":"3fd98a09_37ba3249","updated":"2024-02-20 03:52:25.000000000","message":"Greetings Jake!\n\nJust to make sure we\u0027re on the same page. When your saying \"driver is made available for end users\", do you mean when it is merged? Or after merger?\n\nThe reason I raise concern now is because software is usable by operators as soon as it is merged, which is the approach projects have traditionally taken in the OpenStack community.\n\nHey John!\n\nIf there is consensus, there is no reason something cannot move once initially merged. Lots of small steps add up just as much as a big huge step! I guess I\u0027m rather confused given messaging and statements which have been made. If you would like to chat, I would be happy to.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"9913baef5ed00d11518057efd585ef1cbb65e9e6","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \"helm_chart_repo\","},{"line_number":43,"context_line":"        default\u003d\"https://stackhpc.github.io/capi-helm-charts\","},{"line_number":44,"context_line":"        help\u003d("},{"line_number":45,"context_line":"            \"Reference to the helm chart repository for \""},{"line_number":46,"context_line":"            \"the cluster API driver. \""}],"source_content_type":"text/x-python","patch_set":99,"id":"3fd98a09_37ba3249","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":60},"in_reply_to":"5cd54ffc_ac511da5","updated":"2024-02-19 10:29:10.000000000","message":"Hi Julia, all, thanks for the input. TL;DR; this will not be the default when the driver is made available for end users.\n\nAs Dale says, we have WIP to add the Helm chart repo under Magnum governance.\n\nSeparately, this driver will also be marked as `beta` when merged[1], which means it has to be explicitly enabled. This allows effort to consolidate around the different pieces for at least one cycle.\n\nAs this is a big piece of work and there is a bit of chicken and egg situation with the different components, we have tried to reach a compromise where we can get different pieces tested in CI.\n\n[1] https://review.opendev.org/c/openstack/magnum/+/891722","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f0deca121b20ff7c998cef06821e1730170c6c28","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \"helm_chart_repo\","},{"line_number":43,"context_line":"        default\u003d\"https://stackhpc.github.io/capi-helm-charts\","},{"line_number":44,"context_line":"        help\u003d("},{"line_number":45,"context_line":"            \"Reference to the helm chart repository for \""},{"line_number":46,"context_line":"            \"the cluster API driver. \""}],"source_content_type":"text/x-python","patch_set":99,"id":"5cd54ffc_ac511da5","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":60},"in_reply_to":"bb51d181_1b5df5c8","updated":"2024-02-19 09:57:54.000000000","message":"Sorry, I haven\u0027t seen this till now. Leaving these alone given the consensus was to not merge this anytime soon.\n\nI was originally hoping for a top level Azimuth OpenInfra project, that could own these. That doesn\u0027t look possible right now, and if Magnum is keen, that would be great place for these to be contributed, so we can all work on them together.\n\nCertainly agreed with you Julia, it would suck to be left with an external dependency on a single vendor repo. Probably this needs reversing, such that we get the helm charts in first. Although that effort is wasted if no one every wants to merge this driver, which has been my personal working assumption at this point.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"},{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"b8d4db094e2b5309e33bf7a29e0144c2c2b13c3e","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    ),"},{"line_number":41,"context_line":"    cfg.StrOpt("},{"line_number":42,"context_line":"        \"helm_chart_repo\","},{"line_number":43,"context_line":"        default\u003d\"https://stackhpc.github.io/capi-helm-charts\","},{"line_number":44,"context_line":"        help\u003d("},{"line_number":45,"context_line":"            \"Reference to the helm chart repository for \""},{"line_number":46,"context_line":"            \"the cluster API driver. \""}],"source_content_type":"text/x-python","patch_set":99,"id":"0baef78a_0b5c8bc0","line":43,"range":{"start_line":43,"start_character":17,"end_line":43,"end_character":60},"in_reply_to":"ee22a4d5_26db4425","updated":"2024-02-21 15:10:06.000000000","message":"I don\u0027t agree with this.  The Helm charts are fundamental to the existence of this driver.  Without it, this driver is nothing but a stub.\n\nWhat you\u0027re saying is \"we are now releasing a driver in Magnum that depends on an external vendor Helm charts to operate\".  That\u0027s not OK.","commit_id":"8f317f2c7002fb178bd27ca508a4827a2820bbb7"}],"magnum/drivers/cluster_api/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"818fad35df72d9575e81bc2aa961d64eba7986af","unresolved":true,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if previous_state \u003d\u003d fields.ClusterStatus.DELETE_IN_PROGRESS:"},{"line_number":80,"context_line":"            LOG.info(\"Checking on a delete for %s\", cluster.uuid)"},{"line_number":81,"context_line":"            if k8s_status \u003d\u003d ClusterStatus.NOT_FOUND:"},{"line_number":82,"context_line":"                cluster.status \u003d fields.ClusterStatus.DELETE_COMPLETE"},{"line_number":83,"context_line":"                cluster.status_reason \u003d \"cluster deleted\""},{"line_number":84,"context_line":"                cluster.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"c268d946_56598026","line":81,"updated":"2022-08-15 10:14:15.000000000","message":"Note: probably a good time to delete the secret in k8s and keystone, once we auto generate app creds.","commit_id":"84570da0103c3f32f0b3d1c4293f2c0d592c0446"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"da8996dfa5a2e2725e952645ef2a28da5708e138","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if previous_state \u003d\u003d fields.ClusterStatus.DELETE_IN_PROGRESS:"},{"line_number":80,"context_line":"            LOG.info(\"Checking on a delete for %s\", cluster.uuid)"},{"line_number":81,"context_line":"            if k8s_status \u003d\u003d ClusterStatus.NOT_FOUND:"},{"line_number":82,"context_line":"                cluster.status \u003d fields.ClusterStatus.DELETE_COMPLETE"},{"line_number":83,"context_line":"                cluster.status_reason \u003d \"cluster deleted\""},{"line_number":84,"context_line":"                cluster.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3e5fb2f3_e0477716","line":81,"in_reply_to":"c268d946_56598026","updated":"2023-01-29 17:39:39.000000000","message":"Ack","commit_id":"84570da0103c3f32f0b3d1c4293f2c0d592c0446"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":111,"context_line":"    def _update_helm_release(self, cluster, cluster_template\u003dNone):"},{"line_number":112,"context_line":"        cluster_template \u003d cluster_template or cluster.cluster_template"},{"line_number":113,"context_line":"        values \u003d {"},{"line_number":114,"context_line":"            \"kubernetesVersion\": cluster_template.labels[\"kube_tag\"].lstrip("},{"line_number":115,"context_line":"                \"v\""},{"line_number":116,"context_line":"            ),"},{"line_number":117,"context_line":"            \"machineImageId\": cluster_template.image_id,"}],"source_content_type":"text/x-python","patch_set":19,"id":"614bab35_52c91bbc","line":114,"updated":"2023-04-03 17:06:24.000000000","message":"Yeah, lets pull this from image metadata, and fail if the image is missing the metadata we want to see, as the idea you mentioned to me, just documenting that here.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def _update_helm_release(self, cluster, cluster_template\u003dNone):"},{"line_number":112,"context_line":"        cluster_template \u003d cluster_template or cluster.cluster_template"},{"line_number":113,"context_line":"        values \u003d {"},{"line_number":114,"context_line":"            \"kubernetesVersion\": cluster_template.labels[\"kube_tag\"].lstrip("},{"line_number":115,"context_line":"                \"v\""},{"line_number":116,"context_line":"            ),"},{"line_number":117,"context_line":"            \"machineImageId\": cluster_template.image_id,"}],"source_content_type":"text/x-python","patch_set":19,"id":"f2b5d3e1_6e7e889b","line":114,"in_reply_to":"614bab35_52c91bbc","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":114,"context_line":"            \"kubernetesVersion\": cluster_template.labels[\"kube_tag\"].lstrip("},{"line_number":115,"context_line":"                \"v\""},{"line_number":116,"context_line":"            ),"},{"line_number":117,"context_line":"            \"machineImageId\": cluster_template.image_id,"},{"line_number":118,"context_line":"            \"cloudCredentialsSecretName\": self._sanitised_name("},{"line_number":119,"context_line":"                cluster.name, \"cloud-credentials\""},{"line_number":120,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":19,"id":"e42f13c4_84ea6bdc","line":117,"updated":"2023-04-03 17:06:24.000000000","message":"this might be the image name, lets bring that patch in here.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            \"kubernetesVersion\": cluster_template.labels[\"kube_tag\"].lstrip("},{"line_number":115,"context_line":"                \"v\""},{"line_number":116,"context_line":"            ),"},{"line_number":117,"context_line":"            \"machineImageId\": cluster_template.image_id,"},{"line_number":118,"context_line":"            \"cloudCredentialsSecretName\": self._sanitised_name("},{"line_number":119,"context_line":"                cluster.name, \"cloud-credentials\""},{"line_number":120,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":19,"id":"d64876b8_2310f448","line":117,"in_reply_to":"e42f13c4_84ea6bdc","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":121,"context_line":"            \"clusterNetworking\": {"},{"line_number":122,"context_line":"                \"internalNetwork\": {"},{"line_number":123,"context_line":"                    \"nodeCidr\": self._label("},{"line_number":124,"context_line":"                        cluster, \"fixed_subnet_cidr\", \"10.0.0.0/24\""},{"line_number":125,"context_line":"                    )"},{"line_number":126,"context_line":"                }"},{"line_number":127,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":19,"id":"dc1df8cd_7250a251","line":124,"updated":"2023-04-03 17:06:24.000000000","message":"Nice touch, good idea.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            \"clusterNetworking\": {"},{"line_number":122,"context_line":"                \"internalNetwork\": {"},{"line_number":123,"context_line":"                    \"nodeCidr\": self._label("},{"line_number":124,"context_line":"                        cluster, \"fixed_subnet_cidr\", \"10.0.0.0/24\""},{"line_number":125,"context_line":"                    )"},{"line_number":126,"context_line":"                }"},{"line_number":127,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":19,"id":"65ff735e_f0cedb71","line":124,"in_reply_to":"dc1df8cd_7250a251","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":125,"context_line":"                    )"},{"line_number":126,"context_line":"                }"},{"line_number":127,"context_line":"            },"},{"line_number":128,"context_line":"            \"apiServer\": {\"enableLoadBalancer\": cluster.master_lb_enabled},"},{"line_number":129,"context_line":"            \"controlPlane\": {"},{"line_number":130,"context_line":"                \"machineFlavor\": cluster.master_flavor_id,"},{"line_number":131,"context_line":"                \"machineCount\": cluster.master_count,"}],"source_content_type":"text/x-python","patch_set":19,"id":"ddd99ae5_409dbf4d","line":128,"updated":"2023-04-03 17:06:24.000000000","message":"Does master_lb_enabled \u003d false work with upgrades, etc? I thought it broke things when we use floating IPs?\n\nI think we should hard code this to true for now, so there is less to test?\n\nHonestly I think we need to respect the external_network and internal_network settings before we worry about the loadbalancer stuff.\n\nhttps://docs.openstack.org/magnum/latest/user/#networking\n\nexternal-network\nThe external Neutron network ID to connect to this cluster. This is used to connect the cluster to the external internet, allowing the nodes in the cluster to access external URL for discovery, image download, etc. If not specified, the default value is “public” and this is valid for a typical devstack.\n\nfixed-network\nThe Neutron network to use as the private network for the cluster nodes. If not specified, a new Neutron private network will be created.\n\nFor example, fixed-network and external-network could be set to be the same network, and that gives you a fully hidden from the internet setup I guess?\n\nFor now, I think ignoring those is correct, but this needs fixing really soon, like maybe the next patch adds that, and adds some test.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                    )"},{"line_number":126,"context_line":"                }"},{"line_number":127,"context_line":"            },"},{"line_number":128,"context_line":"            \"apiServer\": {\"enableLoadBalancer\": cluster.master_lb_enabled},"},{"line_number":129,"context_line":"            \"controlPlane\": {"},{"line_number":130,"context_line":"                \"machineFlavor\": cluster.master_flavor_id,"},{"line_number":131,"context_line":"                \"machineCount\": cluster.master_count,"}],"source_content_type":"text/x-python","patch_set":19,"id":"76356bf6_ba0df998","line":128,"in_reply_to":"ddd99ae5_409dbf4d","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            values[\"clusterNetworking\"][\"dnsNameservers\"] \u003d dns_nameservers"},{"line_number":146,"context_line":"        if cluster.keypair:"},{"line_number":147,"context_line":"            values[\"machineSSHKeyName\"] \u003d cluster.keypair"},{"line_number":148,"context_line":"        self.helm_client.install_or_upgrade("},{"line_number":149,"context_line":"            self._sanitised_name(cluster.name),"},{"line_number":150,"context_line":"            MAGNUM_HELM_CHART_NAME,"},{"line_number":151,"context_line":"            values,"}],"source_content_type":"text/x-python","patch_set":19,"id":"d276a4d8_2280c189","line":148,"updated":"2023-04-03 17:06:24.000000000","message":"Lets make this a priority for a nice unit test please :)","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            values[\"clusterNetworking\"][\"dnsNameservers\"] \u003d dns_nameservers"},{"line_number":146,"context_line":"        if cluster.keypair:"},{"line_number":147,"context_line":"            values[\"machineSSHKeyName\"] \u003d cluster.keypair"},{"line_number":148,"context_line":"        self.helm_client.install_or_upgrade("},{"line_number":149,"context_line":"            self._sanitised_name(cluster.name),"},{"line_number":150,"context_line":"            MAGNUM_HELM_CHART_NAME,"},{"line_number":151,"context_line":"            values,"}],"source_content_type":"text/x-python","patch_set":19,"id":"a554d61b_342e127a","line":148,"in_reply_to":"d276a4d8_2280c189","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":166,"context_line":"            )"},{"line_number":167,"context_line":"            if cluster.api_address !\u003d api_address:"},{"line_number":168,"context_line":"                cluster.api_address \u003d api_address"},{"line_number":169,"context_line":"                cluster.save()"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # If the cluster is not yet ready then the create/update"},{"line_number":172,"context_line":"        # is still in progress"}],"source_content_type":"text/x-python","patch_set":19,"id":"ad68202c_d26de3ea","line":169,"updated":"2023-04-03 17:06:24.000000000","message":"Can you move this first bit into a separate function please, like _update_cluster_api_address?\n\nAnd yes, I am complaining about my own function split out work here 😊","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            )"},{"line_number":167,"context_line":"            if cluster.api_address !\u003d api_address:"},{"line_number":168,"context_line":"                cluster.api_address \u003d api_address"},{"line_number":169,"context_line":"                cluster.save()"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # If the cluster is not yet ready then the create/update"},{"line_number":172,"context_line":"        # is still in progress"}],"source_content_type":"text/x-python","patch_set":19,"id":"0ad446df_b1aac1eb","line":169,"in_reply_to":"ad68202c_d26de3ea","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            if cond not in true_conditions:"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # TODO(johngarbutt): we need to check for timeout!"},{"line_number":183,"context_line":"        if cluster.status \u003d\u003d fields.ClusterStatus.CREATE_IN_PROGRESS:"},{"line_number":184,"context_line":"            cluster.status \u003d fields.ClusterStatus.CREATE_COMPLETE"},{"line_number":185,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"d5ad006e_6e5cd5cf","line":182,"updated":"2023-04-03 17:06:24.000000000","message":"I would love to see us do something simple for a timeout here please? Does the helm release have some updated at attribute we could use as a starting point?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            if cond not in true_conditions:"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # TODO(johngarbutt): we need to check for timeout!"},{"line_number":183,"context_line":"        if cluster.status \u003d\u003d fields.ClusterStatus.CREATE_IN_PROGRESS:"},{"line_number":184,"context_line":"            cluster.status \u003d fields.ClusterStatus.CREATE_COMPLETE"},{"line_number":185,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"b0195c95_0a15323b","line":182,"in_reply_to":"d5ad006e_6e5cd5cf","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":203,"context_line":"                name\u003df\"magnum-{cluster.uuid}\", user\u003dcluster.user_id"},{"line_number":204,"context_line":"            )"},{"line_number":205,"context_line":"        except keystoneauth1.exceptions.http.NotFound:"},{"line_number":206,"context_line":"            pass"},{"line_number":207,"context_line":"        else:"},{"line_number":208,"context_line":"            appcred.delete()"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"871f8b37_af7f8229","line":206,"updated":"2023-04-03 17:06:24.000000000","message":"We should probably add a debug log here... is that expected? Maybe it should be a warning log?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b750a51fa493c8d5f9bab36e824b1071a13650e2","unresolved":true,"context_lines":[{"line_number":203,"context_line":"                name\u003df\"magnum-{cluster.uuid}\", user\u003dcluster.user_id"},{"line_number":204,"context_line":"            )"},{"line_number":205,"context_line":"        except keystoneauth1.exceptions.http.NotFound:"},{"line_number":206,"context_line":"            pass"},{"line_number":207,"context_line":"        else:"},{"line_number":208,"context_line":"            appcred.delete()"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"b450f9d3_c30de340","line":206,"in_reply_to":"7f7bc562_88b78801","updated":"2023-04-11 14:26:43.000000000","message":"Yes, but probably still worth a debug log I think.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"69127a6cd1037f2952f88033f502c6ec290bd599","unresolved":true,"context_lines":[{"line_number":203,"context_line":"                name\u003df\"magnum-{cluster.uuid}\", user\u003dcluster.user_id"},{"line_number":204,"context_line":"            )"},{"line_number":205,"context_line":"        except keystoneauth1.exceptions.http.NotFound:"},{"line_number":206,"context_line":"            pass"},{"line_number":207,"context_line":"        else:"},{"line_number":208,"context_line":"            appcred.delete()"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"7f7bc562_88b78801","line":206,"in_reply_to":"871f8b37_af7f8229","updated":"2023-04-04 09:07:01.000000000","message":"If the cluster failed before the app cred was even created, then this will get hit on delete. It is ignored because it is already the target state.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                name\u003df\"magnum-{cluster.uuid}\", user\u003dcluster.user_id"},{"line_number":204,"context_line":"            )"},{"line_number":205,"context_line":"        except keystoneauth1.exceptions.http.NotFound:"},{"line_number":206,"context_line":"            pass"},{"line_number":207,"context_line":"        else:"},{"line_number":208,"context_line":"            appcred.delete()"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"2705e243_b60b2eb4","line":206,"in_reply_to":"b450f9d3_c30de340","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":234,"context_line":"            # create is still in progress"},{"line_number":235,"context_line":"            if not capi_cluster:"},{"line_number":236,"context_line":"                return"},{"line_number":237,"context_line":"            self._update_status_updating(cluster, capi_cluster)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        elif cluster.status \u003d\u003d fields.ClusterStatus.DELETE_IN_PROGRESS:"},{"line_number":240,"context_line":"            LOG.debug(\"Checking on a delete for %s\", cluster.uuid)"}],"source_content_type":"text/x-python","patch_set":19,"id":"94db26ee_615353e7","line":237,"updated":"2023-04-03 17:06:24.000000000","message":"yeah, lets call the api update separately here.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            # create is still in progress"},{"line_number":235,"context_line":"            if not capi_cluster:"},{"line_number":236,"context_line":"                return"},{"line_number":237,"context_line":"            self._update_status_updating(cluster, capi_cluster)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        elif cluster.status \u003d\u003d fields.ClusterStatus.DELETE_IN_PROGRESS:"},{"line_number":240,"context_line":"            LOG.debug(\"Checking on a delete for %s\", cluster.uuid)"}],"source_content_type":"text/x-python","patch_set":19,"id":"c6ae2e7b_b25f6afc","line":237,"in_reply_to":"94db26ee_615353e7","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":241,"context_line":"            # If the Cluster API cluster still exists,"},{"line_number":242,"context_line":"            # the delete is still in progress"},{"line_number":243,"context_line":"            if capi_cluster:"},{"line_number":244,"context_line":"                return"},{"line_number":245,"context_line":"            self._update_status_deleting(context, cluster)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def create_cluster(self, context, cluster, cluster_create_timeout):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ee8e5488_94857d38","line":244,"updated":"2023-04-03 17:06:24.000000000","message":"Don\u0027t we need some timeout here, where we go into an ERROR state I guess? Maybe that is pointless?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            # If the Cluster API cluster still exists,"},{"line_number":242,"context_line":"            # the delete is still in progress"},{"line_number":243,"context_line":"            if capi_cluster:"},{"line_number":244,"context_line":"                return"},{"line_number":245,"context_line":"            self._update_status_deleting(context, cluster)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def create_cluster(self, context, cluster, cluster_create_timeout):"}],"source_content_type":"text/x-python","patch_set":19,"id":"8a4b65c7_0ec271aa","line":244,"in_reply_to":"ee8e5488_94857d38","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        # Ensure that the Magnum namespace exists"},{"line_number":251,"context_line":"        namespace \u003d self._namespace(cluster)"},{"line_number":252,"context_line":"        kubernetes.Namespace(self.k8s_client).apply(namespace)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Create an application credential for the cluster"},{"line_number":255,"context_line":"        # and store it in a secret"}],"source_content_type":"text/x-python","patch_set":19,"id":"05686fec_3f6dcd54","line":252,"updated":"2023-04-03 17:06:24.000000000","message":"can this be a function called _ensure_namespace_created()? that would avoid the comment being needed I think?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        # Ensure that the Magnum namespace exists"},{"line_number":251,"context_line":"        namespace \u003d self._namespace(cluster)"},{"line_number":252,"context_line":"        kubernetes.Namespace(self.k8s_client).apply(namespace)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Create an application credential for the cluster"},{"line_number":255,"context_line":"        # and store it in a secret"}],"source_content_type":"text/x-python","patch_set":19,"id":"2ef22289_c03189c2","line":252,"in_reply_to":"05686fec_3f6dcd54","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b750a51fa493c8d5f9bab36e824b1071a13650e2","unresolved":true,"context_lines":[{"line_number":259,"context_line":"            name\u003df\"magnum-{cluster.uuid}\","},{"line_number":260,"context_line":"            description\u003df\"Magnum cluster ({cluster.uuid})\","},{"line_number":261,"context_line":"        )"},{"line_number":262,"context_line":"        ca_certificate \u003d utils.get_openstack_ca()"},{"line_number":263,"context_line":"        if not ca_certificate:"},{"line_number":264,"context_line":"            with open(certifi.where(), \"r\") as ca_file:"},{"line_number":265,"context_line":"                ca_certificate \u003d ca_file.read()"},{"line_number":266,"context_line":"        creds \u003d {"},{"line_number":267,"context_line":"            \"identity_api_version\": 3,"},{"line_number":268,"context_line":"            \"region_name\": osc.cinder_region_name(),"}],"source_content_type":"text/x-python","patch_set":19,"id":"7b4c216b_a0d2e905","line":265,"range":{"start_line":262,"start_character":0,"end_line":265,"end_character":47},"updated":"2023-04-11 14:26:43.000000000","message":"lets extract this please, and add comments on why this is needed for CAPI when heat didn\u0027t need that, due to no \"built in\" certs.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            name\u003df\"magnum-{cluster.uuid}\","},{"line_number":260,"context_line":"            description\u003df\"Magnum cluster ({cluster.uuid})\","},{"line_number":261,"context_line":"        )"},{"line_number":262,"context_line":"        ca_certificate \u003d utils.get_openstack_ca()"},{"line_number":263,"context_line":"        if not ca_certificate:"},{"line_number":264,"context_line":"            with open(certifi.where(), \"r\") as ca_file:"},{"line_number":265,"context_line":"                ca_certificate \u003d ca_file.read()"},{"line_number":266,"context_line":"        creds \u003d {"},{"line_number":267,"context_line":"            \"identity_api_version\": 3,"},{"line_number":268,"context_line":"            \"region_name\": osc.cinder_region_name(),"}],"source_content_type":"text/x-python","patch_set":19,"id":"eb9ef499_d5b8b98c","line":265,"range":{"start_line":262,"start_character":0,"end_line":265,"end_character":47},"in_reply_to":"7b4c216b_a0d2e905","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":269,"context_line":"            \"interface\": cfg.CONF.nova_client.endpoint_type.replace("},{"line_number":270,"context_line":"                \"URL\", \"\""},{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            \"verify\": cfg.CONF.drivers.verify_ca,"},{"line_number":273,"context_line":"            \"auth\": {"},{"line_number":274,"context_line":"                \"auth_url\": osc.url_for("},{"line_number":275,"context_line":"                    service_type\u003d\"identity\", interface\u003d\"public\""}],"source_content_type":"text/x-python","patch_set":19,"id":"d3aab11c_c0bcac25","line":272,"updated":"2023-04-03 17:06:24.000000000","message":"This CA stuff looks very suspect to me.\n\nI think we need a config for any funny stuff with the CA like verify false. Lets avoid that magic for now please, probably just hard code it?\n\nHorizon has config for this, we can copy that approach. I wonder what is needed for devstack, for example.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            \"interface\": cfg.CONF.nova_client.endpoint_type.replace("},{"line_number":270,"context_line":"                \"URL\", \"\""},{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            \"verify\": cfg.CONF.drivers.verify_ca,"},{"line_number":273,"context_line":"            \"auth\": {"},{"line_number":274,"context_line":"                \"auth_url\": osc.url_for("},{"line_number":275,"context_line":"                    service_type\u003d\"identity\", interface\u003d\"public\""}],"source_content_type":"text/x-python","patch_set":19,"id":"b09aa07e_36f16db9","line":272,"in_reply_to":"95853246_420e71c4","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b750a51fa493c8d5f9bab36e824b1071a13650e2","unresolved":true,"context_lines":[{"line_number":269,"context_line":"            \"interface\": cfg.CONF.nova_client.endpoint_type.replace("},{"line_number":270,"context_line":"                \"URL\", \"\""},{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            \"verify\": cfg.CONF.drivers.verify_ca,"},{"line_number":273,"context_line":"            \"auth\": {"},{"line_number":274,"context_line":"                \"auth_url\": osc.url_for("},{"line_number":275,"context_line":"                    service_type\u003d\"identity\", interface\u003d\"public\""}],"source_content_type":"text/x-python","patch_set":19,"id":"95853246_420e71c4","line":272,"in_reply_to":"ad5411eb_aa289379","updated":"2023-04-11 14:26:43.000000000","message":"Ok, lets add some comments about what the heck is going on here, I grok that now.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"69127a6cd1037f2952f88033f502c6ec290bd599","unresolved":true,"context_lines":[{"line_number":269,"context_line":"            \"interface\": cfg.CONF.nova_client.endpoint_type.replace("},{"line_number":270,"context_line":"                \"URL\", \"\""},{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            \"verify\": cfg.CONF.drivers.verify_ca,"},{"line_number":273,"context_line":"            \"auth\": {"},{"line_number":274,"context_line":"                \"auth_url\": osc.url_for("},{"line_number":275,"context_line":"                    service_type\u003d\"identity\", interface\u003d\"public\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ad5411eb_aa289379","line":272,"in_reply_to":"d3aab11c_c0bcac25","updated":"2023-04-04 09:07:01.000000000","message":"This was mostly taken from the vexxhost driver, where it clearly works. Not sure what you think is suspect? More details please.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":251,"context_line":"        namespace \u003d self._namespace(cluster)"},{"line_number":252,"context_line":"        kubernetes.Namespace(self.k8s_client).apply(namespace)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Create an application credential for the cluster"},{"line_number":255,"context_line":"        # and store it in a secret"},{"line_number":256,"context_line":"        osc \u003d clients.OpenStackClients(context)"},{"line_number":257,"context_line":"        appcred \u003d osc.keystone().client.application_credentials.create("},{"line_number":258,"context_line":"            user\u003dcluster.user_id,"},{"line_number":259,"context_line":"            name\u003df\"magnum-{cluster.uuid}\","},{"line_number":260,"context_line":"            description\u003df\"Magnum cluster ({cluster.uuid})\","},{"line_number":261,"context_line":"        )"},{"line_number":262,"context_line":"        ca_certificate \u003d utils.get_openstack_ca()"},{"line_number":263,"context_line":"        if not ca_certificate:"},{"line_number":264,"context_line":"            with open(certifi.where(), \"r\") as ca_file:"},{"line_number":265,"context_line":"                ca_certificate \u003d ca_file.read()"},{"line_number":266,"context_line":"        creds \u003d {"},{"line_number":267,"context_line":"            \"identity_api_version\": 3,"},{"line_number":268,"context_line":"            \"region_name\": osc.cinder_region_name(),"},{"line_number":269,"context_line":"            \"interface\": cfg.CONF.nova_client.endpoint_type.replace("},{"line_number":270,"context_line":"                \"URL\", \"\""},{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            \"verify\": cfg.CONF.drivers.verify_ca,"},{"line_number":273,"context_line":"            \"auth\": {"},{"line_number":274,"context_line":"                \"auth_url\": osc.url_for("},{"line_number":275,"context_line":"                    service_type\u003d\"identity\", interface\u003d\"public\""},{"line_number":276,"context_line":"                ),"},{"line_number":277,"context_line":"                \"application_credential_id\": appcred.id,"},{"line_number":278,"context_line":"                \"application_credential_secret\": appcred.secret,"},{"line_number":279,"context_line":"            },"},{"line_number":280,"context_line":"        }"},{"line_number":281,"context_line":"        kubernetes.Secret(self.k8s_client).apply("},{"line_number":282,"context_line":"            self._sanitised_name(cluster.name, \"cloud-credentials\"),"},{"line_number":283,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":19,"id":"ab510191_319931aa","line":280,"range":{"start_line":254,"start_character":0,"end_line":280,"end_character":9},"updated":"2023-04-03 17:06:24.000000000","message":"I think this should be a separate function please?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        namespace \u003d self._namespace(cluster)"},{"line_number":252,"context_line":"        kubernetes.Namespace(self.k8s_client).apply(namespace)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Create an application credential for the cluster"},{"line_number":255,"context_line":"        # and store it in a secret"},{"line_number":256,"context_line":"        osc \u003d clients.OpenStackClients(context)"},{"line_number":257,"context_line":"        appcred \u003d osc.keystone().client.application_credentials.create("},{"line_number":258,"context_line":"            user\u003dcluster.user_id,"},{"line_number":259,"context_line":"            name\u003df\"magnum-{cluster.uuid}\","},{"line_number":260,"context_line":"            description\u003df\"Magnum cluster ({cluster.uuid})\","},{"line_number":261,"context_line":"        )"},{"line_number":262,"context_line":"        ca_certificate \u003d utils.get_openstack_ca()"},{"line_number":263,"context_line":"        if not ca_certificate:"},{"line_number":264,"context_line":"            with open(certifi.where(), \"r\") as ca_file:"},{"line_number":265,"context_line":"                ca_certificate \u003d ca_file.read()"},{"line_number":266,"context_line":"        creds \u003d {"},{"line_number":267,"context_line":"            \"identity_api_version\": 3,"},{"line_number":268,"context_line":"            \"region_name\": osc.cinder_region_name(),"},{"line_number":269,"context_line":"            \"interface\": cfg.CONF.nova_client.endpoint_type.replace("},{"line_number":270,"context_line":"                \"URL\", \"\""},{"line_number":271,"context_line":"            ),"},{"line_number":272,"context_line":"            \"verify\": cfg.CONF.drivers.verify_ca,"},{"line_number":273,"context_line":"            \"auth\": {"},{"line_number":274,"context_line":"                \"auth_url\": osc.url_for("},{"line_number":275,"context_line":"                    service_type\u003d\"identity\", interface\u003d\"public\""},{"line_number":276,"context_line":"                ),"},{"line_number":277,"context_line":"                \"application_credential_id\": appcred.id,"},{"line_number":278,"context_line":"                \"application_credential_secret\": appcred.secret,"},{"line_number":279,"context_line":"            },"},{"line_number":280,"context_line":"        }"},{"line_number":281,"context_line":"        kubernetes.Secret(self.k8s_client).apply("},{"line_number":282,"context_line":"            self._sanitised_name(cluster.name, \"cloud-credentials\"),"},{"line_number":283,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":19,"id":"5113d50c_f006280e","line":280,"range":{"start_line":254,"start_character":0,"end_line":280,"end_character":9},"in_reply_to":"ab510191_319931aa","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":290,"context_line":"                },"},{"line_number":291,"context_line":"            },"},{"line_number":292,"context_line":"            self._namespace(cluster),"},{"line_number":293,"context_line":"        )"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # Create secrets for the certificates stored in Barbican"},{"line_number":296,"context_line":"        # This is required for \"openstack coe cluster config\" to work,"}],"source_content_type":"text/x-python","patch_set":19,"id":"a80f72b5_72a41242","line":293,"updated":"2023-04-03 17:06:24.000000000","message":"as above, separate function for this k8s bit that gets passed the creds from the openstack bit please.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                },"},{"line_number":291,"context_line":"            },"},{"line_number":292,"context_line":"            self._namespace(cluster),"},{"line_number":293,"context_line":"        )"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # Create secrets for the certificates stored in Barbican"},{"line_number":296,"context_line":"        # This is required for \"openstack coe cluster config\" to work,"}],"source_content_type":"text/x-python","patch_set":19,"id":"521be3fd_1bfcd59c","line":293,"in_reply_to":"a80f72b5_72a41242","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":292,"context_line":"            self._namespace(cluster),"},{"line_number":293,"context_line":"        )"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # Create secrets for the certificates stored in Barbican"},{"line_number":296,"context_line":"        # This is required for \"openstack coe cluster config\" to work,"},{"line_number":297,"context_line":"        # as it doesn\u0027t communicate with the driver - it"},{"line_number":298,"context_line":"        # relies on the correct certificates being trusted"},{"line_number":299,"context_line":"        certificates \u003d {"},{"line_number":300,"context_line":"            \"ca\": cert_manager.get_cluster_ca_certificate(cluster, context),"},{"line_number":301,"context_line":"            \"etcd\": cert_manager.get_cluster_ca_certificate("},{"line_number":302,"context_line":"                cluster, context, \"etcd\""},{"line_number":303,"context_line":"            ),"},{"line_number":304,"context_line":"            \"proxy\": cert_manager.get_cluster_ca_certificate("},{"line_number":305,"context_line":"                cluster, context, \"front_proxy\""},{"line_number":306,"context_line":"            ),"},{"line_number":307,"context_line":"            \"sa\": cert_manager.get_cluster_magnum_cert(cluster, context),"},{"line_number":308,"context_line":"        }"},{"line_number":309,"context_line":"        for name, ca_cert in certificates.items():"},{"line_number":310,"context_line":"            kubernetes.Secret(self.k8s_client).apply("},{"line_number":311,"context_line":"                self._sanitised_name(cluster.name, name),"},{"line_number":312,"context_line":"                {"},{"line_number":313,"context_line":"                    \"metadata\": {"},{"line_number":314,"context_line":"                        \"labels\": self._k8s_resource_labels(cluster)"},{"line_number":315,"context_line":"                    },"},{"line_number":316,"context_line":"                    \"type\": \"cluster.x-k8s.io/secret\","},{"line_number":317,"context_line":"                    \"stringData\": {"},{"line_number":318,"context_line":"                        \"tls.crt\": encodeutils.safe_decode("},{"line_number":319,"context_line":"                            ca_cert.get_certificate()"},{"line_number":320,"context_line":"                        ),"},{"line_number":321,"context_line":"                        \"tls.key\": encodeutils.safe_decode("},{"line_number":322,"context_line":"                            x509.decrypt_key("},{"line_number":323,"context_line":"                                ca_cert.get_private_key(),"},{"line_number":324,"context_line":"                                ca_cert.get_private_key_passphrase(),"},{"line_number":325,"context_line":"                            )"},{"line_number":326,"context_line":"                        ),"},{"line_number":327,"context_line":"                    },"},{"line_number":328,"context_line":"                },"},{"line_number":329,"context_line":"                self._namespace(cluster),"},{"line_number":330,"context_line":"            )"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # Install the Helm release for the cluster"},{"line_number":333,"context_line":"        self._update_helm_release(cluster)"}],"source_content_type":"text/x-python","patch_set":19,"id":"92b4cafc_88971f74","line":330,"range":{"start_line":295,"start_character":0,"end_line":330,"end_character":13},"updated":"2023-04-03 17:06:24.000000000","message":"This should be a separate function as well please.\n\nHow does this information flow into CAPI? _update_helm_release doesn\u0027t seem to mention these certs. Is the name or metadata special here somehow? It probably worth a comment on how this is picked up by CAPI?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            self._namespace(cluster),"},{"line_number":293,"context_line":"        )"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # Create secrets for the certificates stored in Barbican"},{"line_number":296,"context_line":"        # This is required for \"openstack coe cluster config\" to work,"},{"line_number":297,"context_line":"        # as it doesn\u0027t communicate with the driver - it"},{"line_number":298,"context_line":"        # relies on the correct certificates being trusted"},{"line_number":299,"context_line":"        certificates \u003d {"},{"line_number":300,"context_line":"            \"ca\": cert_manager.get_cluster_ca_certificate(cluster, context),"},{"line_number":301,"context_line":"            \"etcd\": cert_manager.get_cluster_ca_certificate("},{"line_number":302,"context_line":"                cluster, context, \"etcd\""},{"line_number":303,"context_line":"            ),"},{"line_number":304,"context_line":"            \"proxy\": cert_manager.get_cluster_ca_certificate("},{"line_number":305,"context_line":"                cluster, context, \"front_proxy\""},{"line_number":306,"context_line":"            ),"},{"line_number":307,"context_line":"            \"sa\": cert_manager.get_cluster_magnum_cert(cluster, context),"},{"line_number":308,"context_line":"        }"},{"line_number":309,"context_line":"        for name, ca_cert in certificates.items():"},{"line_number":310,"context_line":"            kubernetes.Secret(self.k8s_client).apply("},{"line_number":311,"context_line":"                self._sanitised_name(cluster.name, name),"},{"line_number":312,"context_line":"                {"},{"line_number":313,"context_line":"                    \"metadata\": {"},{"line_number":314,"context_line":"                        \"labels\": self._k8s_resource_labels(cluster)"},{"line_number":315,"context_line":"                    },"},{"line_number":316,"context_line":"                    \"type\": \"cluster.x-k8s.io/secret\","},{"line_number":317,"context_line":"                    \"stringData\": {"},{"line_number":318,"context_line":"                        \"tls.crt\": encodeutils.safe_decode("},{"line_number":319,"context_line":"                            ca_cert.get_certificate()"},{"line_number":320,"context_line":"                        ),"},{"line_number":321,"context_line":"                        \"tls.key\": encodeutils.safe_decode("},{"line_number":322,"context_line":"                            x509.decrypt_key("},{"line_number":323,"context_line":"                                ca_cert.get_private_key(),"},{"line_number":324,"context_line":"                                ca_cert.get_private_key_passphrase(),"},{"line_number":325,"context_line":"                            )"},{"line_number":326,"context_line":"                        ),"},{"line_number":327,"context_line":"                    },"},{"line_number":328,"context_line":"                },"},{"line_number":329,"context_line":"                self._namespace(cluster),"},{"line_number":330,"context_line":"            )"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # Install the Helm release for the cluster"},{"line_number":333,"context_line":"        self._update_helm_release(cluster)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ef2dfcc9_ae595c57","line":330,"range":{"start_line":295,"start_character":0,"end_line":330,"end_character":13},"in_reply_to":"648bdc5a_60d44ada","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"69127a6cd1037f2952f88033f502c6ec290bd599","unresolved":true,"context_lines":[{"line_number":292,"context_line":"            self._namespace(cluster),"},{"line_number":293,"context_line":"        )"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # Create secrets for the certificates stored in Barbican"},{"line_number":296,"context_line":"        # This is required for \"openstack coe cluster config\" to work,"},{"line_number":297,"context_line":"        # as it doesn\u0027t communicate with the driver - it"},{"line_number":298,"context_line":"        # relies on the correct certificates being trusted"},{"line_number":299,"context_line":"        certificates \u003d {"},{"line_number":300,"context_line":"            \"ca\": cert_manager.get_cluster_ca_certificate(cluster, context),"},{"line_number":301,"context_line":"            \"etcd\": cert_manager.get_cluster_ca_certificate("},{"line_number":302,"context_line":"                cluster, context, \"etcd\""},{"line_number":303,"context_line":"            ),"},{"line_number":304,"context_line":"            \"proxy\": cert_manager.get_cluster_ca_certificate("},{"line_number":305,"context_line":"                cluster, context, \"front_proxy\""},{"line_number":306,"context_line":"            ),"},{"line_number":307,"context_line":"            \"sa\": cert_manager.get_cluster_magnum_cert(cluster, context),"},{"line_number":308,"context_line":"        }"},{"line_number":309,"context_line":"        for name, ca_cert in certificates.items():"},{"line_number":310,"context_line":"            kubernetes.Secret(self.k8s_client).apply("},{"line_number":311,"context_line":"                self._sanitised_name(cluster.name, name),"},{"line_number":312,"context_line":"                {"},{"line_number":313,"context_line":"                    \"metadata\": {"},{"line_number":314,"context_line":"                        \"labels\": self._k8s_resource_labels(cluster)"},{"line_number":315,"context_line":"                    },"},{"line_number":316,"context_line":"                    \"type\": \"cluster.x-k8s.io/secret\","},{"line_number":317,"context_line":"                    \"stringData\": {"},{"line_number":318,"context_line":"                        \"tls.crt\": encodeutils.safe_decode("},{"line_number":319,"context_line":"                            ca_cert.get_certificate()"},{"line_number":320,"context_line":"                        ),"},{"line_number":321,"context_line":"                        \"tls.key\": encodeutils.safe_decode("},{"line_number":322,"context_line":"                            x509.decrypt_key("},{"line_number":323,"context_line":"                                ca_cert.get_private_key(),"},{"line_number":324,"context_line":"                                ca_cert.get_private_key_passphrase(),"},{"line_number":325,"context_line":"                            )"},{"line_number":326,"context_line":"                        ),"},{"line_number":327,"context_line":"                    },"},{"line_number":328,"context_line":"                },"},{"line_number":329,"context_line":"                self._namespace(cluster),"},{"line_number":330,"context_line":"            )"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # Install the Helm release for the cluster"},{"line_number":333,"context_line":"        self._update_helm_release(cluster)"}],"source_content_type":"text/x-python","patch_set":19,"id":"648bdc5a_60d44ada","line":330,"range":{"start_line":295,"start_character":0,"end_line":330,"end_character":13},"in_reply_to":"92b4cafc_88971f74","updated":"2023-04-04 09:07:01.000000000","message":"CAPI looks for them by name and creates them if they don\u0027t exist. Like you say, probably needs a comment.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":336,"context_line":"        self, context, cluster, scale_manager\u003dNone, rollback\u003dFalse"},{"line_number":337,"context_line":"    ):"},{"line_number":338,"context_line":"        LOG.info(\"Starting to update cluster %s\", cluster.uuid)"},{"line_number":339,"context_line":"        raise Exception(\"not implemented yet!\")"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def delete_cluster(self, context, cluster):"},{"line_number":342,"context_line":"        LOG.info(\"Starting to delete cluster %s\", cluster.uuid)"}],"source_content_type":"text/x-python","patch_set":19,"id":"e759e347_f55a2870","line":339,"updated":"2023-04-03 17:06:24.000000000","message":"Is this just a call to _update_helm_release that is required?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        self, context, cluster, scale_manager\u003dNone, rollback\u003dFalse"},{"line_number":337,"context_line":"    ):"},{"line_number":338,"context_line":"        LOG.info(\"Starting to update cluster %s\", cluster.uuid)"},{"line_number":339,"context_line":"        raise Exception(\"not implemented yet!\")"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def delete_cluster(self, context, cluster):"},{"line_number":342,"context_line":"        LOG.info(\"Starting to delete cluster %s\", cluster.uuid)"}],"source_content_type":"text/x-python","patch_set":19,"id":"2f9b5699_832a713c","line":339,"in_reply_to":"e759e347_f55a2870","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":342,"context_line":"        LOG.info(\"Starting to delete cluster %s\", cluster.uuid)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        # Begin the deletion of the cluster by uninstalling the Helm release"},{"line_number":345,"context_line":"        self.helm_client.uninstall_release("},{"line_number":346,"context_line":"            self._sanitised_name(cluster.name),"},{"line_number":347,"context_line":"            namespace\u003dself._namespace(cluster),"},{"line_number":348,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"c3f49d39_7d522c01","line":345,"updated":"2023-04-03 17:06:24.000000000","message":"Does this wait for helm to complete?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"69127a6cd1037f2952f88033f502c6ec290bd599","unresolved":true,"context_lines":[{"line_number":342,"context_line":"        LOG.info(\"Starting to delete cluster %s\", cluster.uuid)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        # Begin the deletion of the cluster by uninstalling the Helm release"},{"line_number":345,"context_line":"        self.helm_client.uninstall_release("},{"line_number":346,"context_line":"            self._sanitised_name(cluster.name),"},{"line_number":347,"context_line":"            namespace\u003dself._namespace(cluster),"},{"line_number":348,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"f63858f1_d98c20be","line":345,"in_reply_to":"c3f49d39_7d522c01","updated":"2023-04-04 09:07:01.000000000","message":"It waits for all the resources to be marked for deletion, but doesn\u0027t wait for them to be deleted. This is the behaviour that we want, because it is at this point that we transition into DELETE_IN_PROGRESS.","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        LOG.info(\"Starting to delete cluster %s\", cluster.uuid)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        # Begin the deletion of the cluster by uninstalling the Helm release"},{"line_number":345,"context_line":"        self.helm_client.uninstall_release("},{"line_number":346,"context_line":"            self._sanitised_name(cluster.name),"},{"line_number":347,"context_line":"            namespace\u003dself._namespace(cluster),"},{"line_number":348,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"a9cbdb35_d3e0fa6f","line":345,"in_reply_to":"f63858f1_d98c20be","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":370,"context_line":"    ):"},{"line_number":371,"context_line":"        raise NotImplementedError(\"don\u0027t support upgrade yet\")"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def create_nodegroup(self, context, cluster, nodegroup):"},{"line_number":374,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def update_nodegroup(self, context, cluster, nodegroup):"},{"line_number":377,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def delete_nodegroup(self, context, cluster, nodegroup):"},{"line_number":380,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def create_federation(self, context, federation):"},{"line_number":383,"context_line":"        return NotImplementedError(\"Will not implement \u0027create_federation\u0027\")"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5e90657e_9fef6fda","line":381,"range":{"start_line":373,"start_character":0,"end_line":381,"end_character":0},"updated":"2023-04-03 17:06:24.000000000","message":"Is this just a call to _update_helm_release that is required? Just like the update_cluster call?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c66b49cf01fa95ce2bf4a9eb9f29d25922bb4a43","unresolved":true,"context_lines":[{"line_number":370,"context_line":"    ):"},{"line_number":371,"context_line":"        raise NotImplementedError(\"don\u0027t support upgrade yet\")"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def create_nodegroup(self, context, cluster, nodegroup):"},{"line_number":374,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def update_nodegroup(self, context, cluster, nodegroup):"},{"line_number":377,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def delete_nodegroup(self, context, cluster, nodegroup):"},{"line_number":380,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def create_federation(self, context, federation):"},{"line_number":383,"context_line":"        return NotImplementedError(\"Will not implement \u0027create_federation\u0027\")"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"61eaa45c_3f697fa1","line":381,"range":{"start_line":373,"start_character":0,"end_line":381,"end_character":0},"in_reply_to":"5e90657e_9fef6fda","updated":"2023-04-11 14:29:41.000000000","message":"Lets make that the second patch?","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"54a15ad1866f23bc53c8c347d879b24a4097ebff","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    ):"},{"line_number":371,"context_line":"        raise NotImplementedError(\"don\u0027t support upgrade yet\")"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def create_nodegroup(self, context, cluster, nodegroup):"},{"line_number":374,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def update_nodegroup(self, context, cluster, nodegroup):"},{"line_number":377,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def delete_nodegroup(self, context, cluster, nodegroup):"},{"line_number":380,"context_line":"        raise Exception(\"we don\u0027t support node groups yet\")"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def create_federation(self, context, federation):"},{"line_number":383,"context_line":"        return NotImplementedError(\"Will not implement \u0027create_federation\u0027\")"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"c50c6ee4_1f99c142","line":381,"range":{"start_line":373,"start_character":0,"end_line":381,"end_character":0},"in_reply_to":"61eaa45c_3f697fa1","updated":"2023-05-12 17:03:21.000000000","message":"Ack","commit_id":"b67e66dca834fdeacd26505fb76b6b598db2bc4c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2c2bd2acf7b2cbf0cc72af96368f29aabfa34495","unresolved":true,"context_lines":[{"line_number":358,"context_line":"                \"machineFlavor\": cluster.master_flavor_id,"},{"line_number":359,"context_line":"                \"machineCount\": cluster.master_count,"},{"line_number":360,"context_line":"            },"},{"line_number":361,"context_line":"            \"addons\": {"},{"line_number":362,"context_line":"                \"monitoring\": {\"enabled\": \"true\"},"},{"line_number":363,"context_line":"                \"kubernetesDashboard\": {\"enabled\": \"true\"},"},{"line_number":364,"context_line":"                # Nginx ingress off by default, requests extra LB"}],"source_content_type":"text/x-python","patch_set":58,"id":"14ca10c3_fdc76e12","line":361,"updated":"2023-05-19 08:47:36.000000000","message":"oops all these changes need to go back into the earlier helm change","commit_id":"823106c50c31d1581bf4c6c10efc7215805c446c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"64ee3b2779646fe12f8ab95a6db7005a8e2f4f76","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                \"machineFlavor\": cluster.master_flavor_id,"},{"line_number":359,"context_line":"                \"machineCount\": cluster.master_count,"},{"line_number":360,"context_line":"            },"},{"line_number":361,"context_line":"            \"addons\": {"},{"line_number":362,"context_line":"                \"monitoring\": {\"enabled\": \"true\"},"},{"line_number":363,"context_line":"                \"kubernetesDashboard\": {\"enabled\": \"true\"},"},{"line_number":364,"context_line":"                # Nginx ingress off by default, requests extra LB"}],"source_content_type":"text/x-python","patch_set":58,"id":"e013d29f_3d4cf745","line":361,"in_reply_to":"14ca10c3_fdc76e12","updated":"2023-05-19 12:35:26.000000000","message":"Done","commit_id":"823106c50c31d1581bf4c6c10efc7215805c446c"},{"author":{"_account_id":14394,"name":"Dale Smith","email":"dale@catalystcloud.nz","username":"dalees"},"change_message_id":"45c804bf4fb535afd1bba5ee632d0311d8b765f5","unresolved":true,"context_lines":[{"line_number":359,"context_line":"            self._update_status_deleting(context, cluster)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def get_monitor(self, context, cluster):"},{"line_number":362,"context_line":"        return k8s_monitor.K8sMonitor(context, cluster)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _namespace(self, cluster):"},{"line_number":365,"context_line":"        # We create clusters in a project-specific namespace"}],"source_content_type":"text/x-python","patch_set":73,"id":"d480380b_947faeb1","line":362,"updated":"2023-06-16 02:42:45.000000000","message":"This is functional in devstack and will be okay for some deployments, but it does require direct contact from magnum conductor to the workload cluster\u0027s K8s API endpoint.\n\nIt might be better implemented by contacting the Management cluster, and obtaining the `status` from the CAPI `Cluster` resource. This will require a K8sMonitor specific to CAPI.\n\n(This can be done later, and shouldn\u0027t prevent merging this patch. )","commit_id":"f165a82b8a9f12a49c3008ffd81c6ac4c3ffec34"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"286f0d334fdeb8d436df6821016128ed7ef3012c","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            self._update_status_deleting(context, cluster)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def get_monitor(self, context, cluster):"},{"line_number":362,"context_line":"        return k8s_monitor.K8sMonitor(context, cluster)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _namespace(self, cluster):"},{"line_number":365,"context_line":"        # We create clusters in a project-specific namespace"}],"source_content_type":"text/x-python","patch_set":73,"id":"57051b6c_a7fa1518","line":362,"in_reply_to":"a2b4b404_d0e28593","updated":"2023-09-20 08:45:51.000000000","message":"Ack","commit_id":"f165a82b8a9f12a49c3008ffd81c6ac4c3ffec34"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e3541d7e81fedd463e4a16975a8219589f16c6d1","unresolved":true,"context_lines":[{"line_number":359,"context_line":"            self._update_status_deleting(context, cluster)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def get_monitor(self, context, cluster):"},{"line_number":362,"context_line":"        return k8s_monitor.K8sMonitor(context, cluster)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _namespace(self, cluster):"},{"line_number":365,"context_line":"        # We create clusters in a project-specific namespace"}],"source_content_type":"text/x-python","patch_set":73,"id":"a2b4b404_d0e28593","line":362,"in_reply_to":"d480380b_947faeb1","updated":"2023-09-15 15:29:17.000000000","message":"Yes, good point, that is a cool idea!\n\nThis is just re-using what the existing Magnum driver does today. At least that is the intention here.","commit_id":"f165a82b8a9f12a49c3008ffd81c6ac4c3ffec34"}],"magnum/drivers/cluster_api/kubernetes.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"968faa42695bf2c46d052199d52b841ce35030f5","unresolved":true,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# TODO(johngarbutt): does this cause issues with eventlet?"},{"line_number":16,"context_line":"# why not use ./magnum/conductor/k8s_api.py?"},{"line_number":17,"context_line":"from kubernetes import client"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Resource:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fc94958e_1df82c17","line":17,"updated":"2023-01-29 17:46:02.000000000","message":"Yes, this should be re-written to make use of the client in magnum/conductor/k8s_api.py","commit_id":"8ca0c52ec43beddd5dfc062c4b62c63b451f2304"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79384b77d213309a14f8fb111e9dfaed51af3535","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# TODO(johngarbutt): does this cause issues with eventlet?"},{"line_number":16,"context_line":"# why not use ./magnum/conductor/k8s_api.py?"},{"line_number":17,"context_line":"from kubernetes import client"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Resource:"}],"source_content_type":"text/x-python","patch_set":11,"id":"436f5f5f_c88b2771","line":17,"in_reply_to":"5b4e2202_ec368a7a","updated":"2023-05-12 17:04:16.000000000","message":"Ack","commit_id":"8ca0c52ec43beddd5dfc062c4b62c63b451f2304"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0807a31ba0e524712dff4f8f26cf3882a6a6e9d7","unresolved":true,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# TODO(johngarbutt): does this cause issues with eventlet?"},{"line_number":16,"context_line":"# why not use ./magnum/conductor/k8s_api.py?"},{"line_number":17,"context_line":"from kubernetes import client"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Resource:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5b4e2202_ec368a7a","line":17,"in_reply_to":"fc94958e_1df82c17","updated":"2023-04-03 17:06:24.000000000","message":"As before, lets use the the above client if we can please.\n\nThe issue here is I think we depend on a version of the kubernetes client that is higher than upper constraints, aside from the worries about eventlet compatibility.","commit_id":"8ca0c52ec43beddd5dfc062c4b62c63b451f2304"}],"requirements.txt":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e0e08ec1e6f8cf64f1391d1cfcb985f84fcae4da","unresolved":true,"context_lines":[{"line_number":56,"context_line":"taskflow\u003e\u003d2.16.0 # Apache-2.0"},{"line_number":57,"context_line":"cryptography\u003e\u003d2.1.4 # BSD/Apache-2.0"},{"line_number":58,"context_line":"Werkzeug\u003e\u003d0.9 # BSD License"},{"line_number":59,"context_line":"kubernetes\u003e\u003d25.3.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":11,"id":"88db1823_f9a38eb5","line":59,"updated":"2023-01-29 17:41:06.000000000","message":"We obviously can\u0027t do this without this coming from global requirements.","commit_id":"8ca0c52ec43beddd5dfc062c4b62c63b451f2304"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"79384b77d213309a14f8fb111e9dfaed51af3535","unresolved":false,"context_lines":[{"line_number":56,"context_line":"taskflow\u003e\u003d2.16.0 # Apache-2.0"},{"line_number":57,"context_line":"cryptography\u003e\u003d2.1.4 # BSD/Apache-2.0"},{"line_number":58,"context_line":"Werkzeug\u003e\u003d0.9 # BSD License"},{"line_number":59,"context_line":"kubernetes\u003e\u003d25.3.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":11,"id":"cb5aa64c_7b7cd3e0","line":59,"in_reply_to":"88db1823_f9a38eb5","updated":"2023-05-12 17:04:16.000000000","message":"Ack","commit_id":"8ca0c52ec43beddd5dfc062c4b62c63b451f2304"}]}
