)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"b07d3468afd4b5e9f1df43b1e794e7267e6d15f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9159374b_7417c3e6","updated":"2024-07-16 13:44:46.000000000","message":"I have addressed the comments in PatchSet 11, please","commit_id":"3e6c80af61f8050e1af2cd668110bea2e76782e1"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"eb42a8e2bcabe52eb645a9c5bb316453588e0fc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"43d62290_bae4e613","updated":"2024-07-19 08:02:11.000000000","message":"recheck","commit_id":"9e14d0bd9cee3c300053411e2e6693f9413ede43"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"67724c6b9a3f23917b18723cba457ccd578c33d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"6505077a_08aa2b92","updated":"2024-07-22 09:33:04.000000000","message":"Clean up resolved comments.","commit_id":"bb266194e99a5b4bfc57a709dc0e6d75f07a645f"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"bfab649a3a64a771d81cd0ebb1e56805d32cc10b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"4a41436a_a4f4e6f1","updated":"2024-07-20 17:18:58.000000000","message":"I addressed some of my comments in an updated patchset.  I think we\u0027re already in a good position to go ahead and manage deleting launch templates that are no longer needed.  I think we should go ahead and do that at startup when we create the launch templates.  We just need to examine the tags and see if the nodepool provider name corresponds to us, and if it\u0027s not a template we know about, delete it.","commit_id":"bb266194e99a5b4bfc57a709dc0e6d75f07a645f"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0f689f535581218a30f6081f384a392349ef6140","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":26,"id":"d64f0f1b_98214a21","in_reply_to":"4a41436a_a4f4e6f1","updated":"2024-07-20 17:19:31.000000000","message":"unresolving","commit_id":"bb266194e99a5b4bfc57a709dc0e6d75f07a645f"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"87cbc18fb33396d746885b9aa61e57e4f22cd90b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"f30ea3f9_cd04f031","in_reply_to":"4fd568ec_6879761c","updated":"2024-07-22 16:40:10.000000000","message":"Done","commit_id":"bb266194e99a5b4bfc57a709dc0e6d75f07a645f"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"b861820dc541bc2a632524104d01bad040ada058","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":26,"id":"ee7d47c3_696bb1a1","in_reply_to":"d64f0f1b_98214a21","updated":"2024-07-22 10:10:17.000000000","message":"I can add that.","commit_id":"bb266194e99a5b4bfc57a709dc0e6d75f07a645f"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"1f852fb82150a3e3c12a4a2474bfc0d0cdb1a2bb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":26,"id":"4fd568ec_6879761c","in_reply_to":"ee7d47c3_696bb1a1","updated":"2024-07-22 14:21:45.000000000","message":"Implemented in the new patchsest.","commit_id":"bb266194e99a5b4bfc57a709dc0e6d75f07a645f"}],"doc/source/aws.rst":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":690,"context_line":"              :type: dict"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"              If sepecifed, EC2 fleet API would be used for launching the instance."},{"line_number":693,"context_line":"              Mutually exclusive with :attr:`providers.[aws].pools.labels.instance-type`"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"              .. attr:: instance-types"},{"line_number":696,"context_line":"                 :type: list"}],"source_content_type":"text/x-rst","patch_set":24,"id":"c180035c_253895b7","line":693,"updated":"2024-07-20 15:05:56.000000000","message":"We should mention that quota handling is retro-spective not pro-spective when using the fleet api.\n\nAlso, this change could use a release note.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":false,"context_lines":[{"line_number":690,"context_line":"              :type: dict"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"              If sepecifed, EC2 fleet API would be used for launching the instance."},{"line_number":693,"context_line":"              Mutually exclusive with :attr:`providers.[aws].pools.labels.instance-type`"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"              .. attr:: instance-types"},{"line_number":696,"context_line":"                 :type: list"}],"source_content_type":"text/x-rst","patch_set":24,"id":"5cba17b9_5793ead6","line":693,"in_reply_to":"014d908c_db56e541","updated":"2024-07-22 16:27:27.000000000","message":"Done","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"1f852fb82150a3e3c12a4a2474bfc0d0cdb1a2bb","unresolved":true,"context_lines":[{"line_number":690,"context_line":"              :type: dict"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"              If sepecifed, EC2 fleet API would be used for launching the instance."},{"line_number":693,"context_line":"              Mutually exclusive with :attr:`providers.[aws].pools.labels.instance-type`"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"              .. attr:: instance-types"},{"line_number":696,"context_line":"                 :type: list"}],"source_content_type":"text/x-rst","patch_set":24,"id":"014d908c_db56e541","line":693,"in_reply_to":"bb6d035c_73ed898d","updated":"2024-07-22 14:21:45.000000000","message":"Added in the new patchset.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"b861820dc541bc2a632524104d01bad040ada058","unresolved":true,"context_lines":[{"line_number":690,"context_line":"              :type: dict"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"              If sepecifed, EC2 fleet API would be used for launching the instance."},{"line_number":693,"context_line":"              Mutually exclusive with :attr:`providers.[aws].pools.labels.instance-type`"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"              .. attr:: instance-types"},{"line_number":696,"context_line":"                 :type: list"}],"source_content_type":"text/x-rst","patch_set":24,"id":"bb6d035c_73ed898d","line":693,"in_reply_to":"c180035c_253895b7","updated":"2024-07-22 10:10:17.000000000","message":"I can add that.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":702,"context_line":"                 :type: dict"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"                 Requirements of the instance to be launched."},{"line_number":705,"context_line":"                 Mutually exclusive with :attr:`providers.[aws].pools.labels.fleet.instance-types`"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"                 .. attr:: vcpu-count"},{"line_number":708,"context_line":"                    :type: dict"}],"source_content_type":"text/x-rst","patch_set":24,"id":"b82423c8_7eea63a9","line":705,"updated":"2024-07-20 15:05:56.000000000","message":"This is a subset of what\u0027s available in the api.  We\u0027re also translating nodepool-style options (lowercase hyphenated) to AWS-style options (camel-case).  If we\u0027re going to support this (and not just instance-types), then we should consider the following questions:\n\n1) Should we support all the options explicitly?  I.e., add options like \"accelerator-names\" to this.  Requesting gpus does not seem far-fetched.\n2) Should we support all the options implicitly?  I.e., remove everything below this level and say \"The supplied dictionary will be passed to AWS verbatim as InstanceRequirements.\"","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":false,"context_lines":[{"line_number":702,"context_line":"                 :type: dict"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"                 Requirements of the instance to be launched."},{"line_number":705,"context_line":"                 Mutually exclusive with :attr:`providers.[aws].pools.labels.fleet.instance-types`"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"                 .. attr:: vcpu-count"},{"line_number":708,"context_line":"                    :type: dict"}],"source_content_type":"text/x-rst","patch_set":24,"id":"255f825b_27a8a59b","line":705,"in_reply_to":"7343bb29_5425d4a9","updated":"2024-07-22 16:27:27.000000000","message":"Done","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"bd37b625fe7eeafb8b401f0ddab9505584223be8","unresolved":true,"context_lines":[{"line_number":702,"context_line":"                 :type: dict"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"                 Requirements of the instance to be launched."},{"line_number":705,"context_line":"                 Mutually exclusive with :attr:`providers.[aws].pools.labels.fleet.instance-types`"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"                 .. attr:: vcpu-count"},{"line_number":708,"context_line":"                    :type: dict"}],"source_content_type":"text/x-rst","patch_set":24,"id":"fa2dcde2_552aa12b","line":705,"in_reply_to":"b82423c8_7eea63a9","updated":"2024-07-22 08:45:13.000000000","message":"I have a slight preference for 2), though we\u0027d loose the advantage of validating the options.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"b861820dc541bc2a632524104d01bad040ada058","unresolved":true,"context_lines":[{"line_number":702,"context_line":"                 :type: dict"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"                 Requirements of the instance to be launched."},{"line_number":705,"context_line":"                 Mutually exclusive with :attr:`providers.[aws].pools.labels.fleet.instance-types`"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"                 .. attr:: vcpu-count"},{"line_number":708,"context_line":"                    :type: dict"}],"source_content_type":"text/x-rst","patch_set":24,"id":"7343bb29_5425d4a9","line":705,"in_reply_to":"fa2dcde2_552aa12b","updated":"2024-07-22 10:10:17.000000000","message":"Once we start to support `InstanceRequirements` I think sooner or later we have to support all options, and in this case option 2 would be a much simpler solution, with the cost of no validation.\n\nAlternatively, also related your question in another comment \"Should we actually support instance-requirements?\": at least for now \u0027InstanceRequirements\u0027 is not the main motivation to use fleet API. So how about we leave out the support of \u0027InstanceRequirements\u0027 in the first iteration, and adding it later when there comes strong user requirement?","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":true,"context_lines":[{"line_number":689,"context_line":"           .. attr:: fleet"},{"line_number":690,"context_line":"              :type: dict"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"              If sepecifed, EC2 fleet API would be used for launching the instance."},{"line_number":693,"context_line":"              In this case, quota is not checked before launching the instance, but is"},{"line_number":694,"context_line":"              taken into account after the instance is launched."},{"line_number":695,"context_line":"              Mutually exclusive with :attr:`providers.[aws].pools.labels.instance-type`"}],"source_content_type":"text/x-rst","patch_set":31,"id":"e39aa4b0_c87b9dd3","line":692,"range":{"start_line":692,"start_character":17,"end_line":692,"end_character":26},"updated":"2024-07-22 16:27:27.000000000","message":"typo: specified","commit_id":"40ddd896514769e59d0f95cfffdf5a11641f03b6"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"08ad2528fa8b264f76c0bd6d4928ebcf57fa399b","unresolved":false,"context_lines":[{"line_number":689,"context_line":"           .. attr:: fleet"},{"line_number":690,"context_line":"              :type: dict"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"              If sepecifed, EC2 fleet API would be used for launching the instance."},{"line_number":693,"context_line":"              In this case, quota is not checked before launching the instance, but is"},{"line_number":694,"context_line":"              taken into account after the instance is launched."},{"line_number":695,"context_line":"              Mutually exclusive with :attr:`providers.[aws].pools.labels.instance-type`"}],"source_content_type":"text/x-rst","patch_set":31,"id":"7e399a65_69efe1a9","line":692,"range":{"start_line":692,"start_character":17,"end_line":692,"end_character":26},"in_reply_to":"e39aa4b0_c87b9dd3","updated":"2024-07-22 16:37:51.000000000","message":"Done","commit_id":"40ddd896514769e59d0f95cfffdf5a11641f03b6"}],"nodepool/driver/aws/adapter.py":[{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"0c245382ac3986f63d107985f7bc0557cdcddb35","unresolved":true,"context_lines":[{"line_number":538,"context_line":"            \u0027nodepool_managed\u0027: True,"},{"line_number":539,"context_line":"            \u0027nodepool_provider_name\u0027: provider_config.name,"},{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":"        launch_tempalte_prefix \u003d \u0027nodepool-launch-template\u0027"},{"line_number":542,"context_line":"        exising_templates \u003d []"},{"line_number":543,"context_line":"        name_filter \u003d {"},{"line_number":544,"context_line":"            \u0027Name\u0027: \u0027launch-template-name\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"17e9b540_d8f6fcae","line":541,"range":{"start_line":541,"start_character":8,"end_line":541,"end_character":30},"updated":"2024-07-05 12:15:15.000000000","message":"typo: template","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"4531740583a47de42f81213c5edb1892f430c514","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            \u0027nodepool_managed\u0027: True,"},{"line_number":539,"context_line":"            \u0027nodepool_provider_name\u0027: provider_config.name,"},{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":"        launch_tempalte_prefix \u003d \u0027nodepool-launch-template\u0027"},{"line_number":542,"context_line":"        exising_templates \u003d []"},{"line_number":543,"context_line":"        name_filter \u003d {"},{"line_number":544,"context_line":"            \u0027Name\u0027: \u0027launch-template-name\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c8419567_2dc67ab7","line":541,"range":{"start_line":541,"start_character":8,"end_line":541,"end_character":30},"in_reply_to":"17e9b540_d8f6fcae","updated":"2024-07-05 12:34:49.000000000","message":"Done","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"0c245382ac3986f63d107985f7bc0557cdcddb35","unresolved":true,"context_lines":[{"line_number":539,"context_line":"            \u0027nodepool_provider_name\u0027: provider_config.name,"},{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":"        launch_tempalte_prefix \u003d \u0027nodepool-launch-template\u0027"},{"line_number":542,"context_line":"        exising_templates \u003d []"},{"line_number":543,"context_line":"        name_filter \u003d {"},{"line_number":544,"context_line":"            \u0027Name\u0027: \u0027launch-template-name\u0027,"},{"line_number":545,"context_line":"            \u0027Values\u0027: [f\u0027{launch_tempalte_prefix}-*\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"5459dc82_12501b24","line":542,"range":{"start_line":542,"start_character":8,"end_line":542,"end_character":25},"updated":"2024-07-05 12:15:15.000000000","message":"typo: existing","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"4531740583a47de42f81213c5edb1892f430c514","unresolved":false,"context_lines":[{"line_number":539,"context_line":"            \u0027nodepool_provider_name\u0027: provider_config.name,"},{"line_number":540,"context_line":"        }"},{"line_number":541,"context_line":"        launch_tempalte_prefix \u003d \u0027nodepool-launch-template\u0027"},{"line_number":542,"context_line":"        exising_templates \u003d []"},{"line_number":543,"context_line":"        name_filter \u003d {"},{"line_number":544,"context_line":"            \u0027Name\u0027: \u0027launch-template-name\u0027,"},{"line_number":545,"context_line":"            \u0027Values\u0027: [f\u0027{launch_tempalte_prefix}-*\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"c15c8c10_b42edf93","line":542,"range":{"start_line":542,"start_character":8,"end_line":542,"end_character":25},"in_reply_to":"5459dc82_12501b24","updated":"2024-07-05 12:34:49.000000000","message":"Done","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"0c245382ac3986f63d107985f7bc0557cdcddb35","unresolved":true,"context_lines":[{"line_number":559,"context_line":"                                 f\u0027{label.volume_type}-{label.volume_size}-\u0027"},{"line_number":560,"context_line":"                                 f\u0027{label.iops}-{label.throughput}\u0027)"},{"line_number":561,"context_line":"                if template_name in exising_templates:"},{"line_number":562,"context_line":"                    self.log.debug("},{"line_number":563,"context_line":"                        f\u0027launch template {template_name} already exist\u0027)"},{"line_number":564,"context_line":"                    continue"},{"line_number":565,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4aed42ed_b4606019","line":562,"updated":"2024-07-05 12:15:15.000000000","message":"f-strings should not be used in log messages.","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"4531740583a47de42f81213c5edb1892f430c514","unresolved":false,"context_lines":[{"line_number":559,"context_line":"                                 f\u0027{label.volume_type}-{label.volume_size}-\u0027"},{"line_number":560,"context_line":"                                 f\u0027{label.iops}-{label.throughput}\u0027)"},{"line_number":561,"context_line":"                if template_name in exising_templates:"},{"line_number":562,"context_line":"                    self.log.debug("},{"line_number":563,"context_line":"                        f\u0027launch template {template_name} already exist\u0027)"},{"line_number":564,"context_line":"                    continue"},{"line_number":565,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f3c466c2_c7bb3d26","line":562,"in_reply_to":"4aed42ed_b4606019","updated":"2024-07-05 12:34:49.000000000","message":"Done","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"0c245382ac3986f63d107985f7bc0557cdcddb35","unresolved":true,"context_lines":[{"line_number":563,"context_line":"                        f\u0027launch template {template_name} already exist\u0027)"},{"line_number":564,"context_line":"                    continue"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"                self.log.debug(f\u0027Creating launch template {template_name}\u0027)"},{"line_number":567,"context_line":"                ebs_settings \u003d {"},{"line_number":568,"context_line":"                    \u0027DeleteOnTermination\u0027: True,"},{"line_number":569,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"de7fc0ce_6994bbb0","line":566,"updated":"2024-07-05 12:15:15.000000000","message":"same here.","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"4531740583a47de42f81213c5edb1892f430c514","unresolved":false,"context_lines":[{"line_number":563,"context_line":"                        f\u0027launch template {template_name} already exist\u0027)"},{"line_number":564,"context_line":"                    continue"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"                self.log.debug(f\u0027Creating launch template {template_name}\u0027)"},{"line_number":567,"context_line":"                ebs_settings \u003d {"},{"line_number":568,"context_line":"                    \u0027DeleteOnTermination\u0027: True,"},{"line_number":569,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ce4fe89_6b0f2dbd","line":566,"in_reply_to":"de7fc0ce_6994bbb0","updated":"2024-07-05 12:34:49.000000000","message":"Done","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"0c245382ac3986f63d107985f7bc0557cdcddb35","unresolved":true,"context_lines":[{"line_number":595,"context_line":"                            },"},{"line_number":596,"context_line":"                        ]"},{"line_number":597,"context_line":"                    )"},{"line_number":598,"context_line":"                    self.log.debug(f\u0027launch template {template_name} created\u0027)"},{"line_number":599,"context_line":"                except Exception as e:"},{"line_number":600,"context_line":"                    self.log.debug("},{"line_number":601,"context_line":"                        f\u0027Could not create launch template {template_name}\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"be801e3a_cd194997","line":598,"updated":"2024-07-05 12:15:15.000000000","message":"f-string shouldn\u0027t be used in  logs","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"4531740583a47de42f81213c5edb1892f430c514","unresolved":false,"context_lines":[{"line_number":595,"context_line":"                            },"},{"line_number":596,"context_line":"                        ]"},{"line_number":597,"context_line":"                    )"},{"line_number":598,"context_line":"                    self.log.debug(f\u0027launch template {template_name} created\u0027)"},{"line_number":599,"context_line":"                except Exception as e:"},{"line_number":600,"context_line":"                    self.log.debug("},{"line_number":601,"context_line":"                        f\u0027Could not create launch template {template_name}\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c83ed936_2bcaa2e2","line":598,"in_reply_to":"be801e3a_cd194997","updated":"2024-07-05 12:34:49.000000000","message":"Done","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"0c245382ac3986f63d107985f7bc0557cdcddb35","unresolved":true,"context_lines":[{"line_number":597,"context_line":"                    )"},{"line_number":598,"context_line":"                    self.log.debug(f\u0027launch template {template_name} created\u0027)"},{"line_number":599,"context_line":"                except Exception as e:"},{"line_number":600,"context_line":"                    self.log.debug("},{"line_number":601,"context_line":"                        f\u0027Could not create launch template {template_name}\u0027)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"77c6fcf6_9dd8e3a2","line":600,"updated":"2024-07-05 12:15:15.000000000","message":"This should probably be logged as `log.exception()` (w/o using f-strings)","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"4531740583a47de42f81213c5edb1892f430c514","unresolved":false,"context_lines":[{"line_number":597,"context_line":"                    )"},{"line_number":598,"context_line":"                    self.log.debug(f\u0027launch template {template_name} created\u0027)"},{"line_number":599,"context_line":"                except Exception as e:"},{"line_number":600,"context_line":"                    self.log.debug("},{"line_number":601,"context_line":"                        f\u0027Could not create launch template {template_name}\u0027)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9895fe68_0718ffe0","line":600,"in_reply_to":"77c6fcf6_9dd8e3a2","updated":"2024-07-05 12:34:49.000000000","message":"Done","commit_id":"664720fda74cc969d50c58213899c13151f23964"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"f5dcf41da4f241af76b400bbd182de890478ca16","unresolved":true,"context_lines":[{"line_number":555,"context_line":"            for label_name, label in pool.labels.items():"},{"line_number":556,"context_line":"                # ToDo: Enable this when fleet change is merged"},{"line_number":557,"context_line":"                # Create launch templates only for labels which usage fleet"},{"line_number":558,"context_line":"                # if not label.fleet:"},{"line_number":559,"context_line":"                #     continue"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"                template_name \u003d (f\u0027{launch_template_prefix}-\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"908552ab_6e2c552a","line":558,"updated":"2024-07-11 14:32:25.000000000","message":"this can be enabled, and should only create template when `fleet` is specified.","commit_id":"de7ae06751645c6faff28241fd16fc96c3f96b6c"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"5b841097f2a0f19c9e7cb8d6b182a83c8d3e9e25","unresolved":false,"context_lines":[{"line_number":555,"context_line":"            for label_name, label in pool.labels.items():"},{"line_number":556,"context_line":"                # ToDo: Enable this when fleet change is merged"},{"line_number":557,"context_line":"                # Create launch templates only for labels which usage fleet"},{"line_number":558,"context_line":"                # if not label.fleet:"},{"line_number":559,"context_line":"                #     continue"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"                template_name \u003d (f\u0027{launch_template_prefix}-\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"33da5a12_9a9624ef","line":558,"in_reply_to":"6e093f3b_3bff9df7","updated":"2024-07-12 10:13:44.000000000","message":"Done","commit_id":"de7ae06751645c6faff28241fd16fc96c3f96b6c"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"39cfded4d5d4f355d106b440e61b20f2d999efbd","unresolved":true,"context_lines":[{"line_number":555,"context_line":"            for label_name, label in pool.labels.items():"},{"line_number":556,"context_line":"                # ToDo: Enable this when fleet change is merged"},{"line_number":557,"context_line":"                # Create launch templates only for labels which usage fleet"},{"line_number":558,"context_line":"                # if not label.fleet:"},{"line_number":559,"context_line":"                #     continue"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"                template_name \u003d (f\u0027{launch_template_prefix}-\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"6e093f3b_3bff9df7","line":558,"in_reply_to":"908552ab_6e2c552a","updated":"2024-07-11 14:51:41.000000000","message":"I think our changes are dependent on each other, maybe it would be easier to just merge our changes to one change. I can do that if you agree.","commit_id":"de7ae06751645c6faff28241fd16fc96c3f96b6c"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"f5dcf41da4f241af76b400bbd182de890478ca16","unresolved":true,"context_lines":[{"line_number":601,"context_line":"                    )"},{"line_number":602,"context_line":"                    self.log.debug(\u0027launch template %s created\u0027, template_name)"},{"line_number":603,"context_line":"                except Exception:"},{"line_number":604,"context_line":"                    self.log.exception("},{"line_number":605,"context_line":"                        \u0027Could not create launch template %s\u0027, template_name)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"0e8c73d6_42844a50","line":604,"updated":"2024-07-11 14:32:25.000000000","message":"If the exception is saying the template name already in use, we should not print the whole stack trace, instead just log a string.\nThe exception would look like\n```\nTraceback (most recent call last):\n  File \"/nodepool/nodepool/driver/aws/adapter.py\", line 598, in __init__\n    self.ec2_client.create_launch_template(\n  File \"/nodepool/.nox/tests/lib/python3.11/site-packages/botocore/client.py\", line 565, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/nodepool/.nox/tests/lib/python3.11/site-packages/botocore/client.py\", line 1021, in _make_api_call\n    raise error_class(parsed_response, operation_name)\nbotocore.exceptions.ClientError: An error occurred (InvalidLaunchTemplateName.AlreadyExistsException) when calling the CreateLaunchTemplate operation: Launch template name already in use.\n```","commit_id":"de7ae06751645c6faff28241fd16fc96c3f96b6c"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"5b841097f2a0f19c9e7cb8d6b182a83c8d3e9e25","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                    )"},{"line_number":602,"context_line":"                    self.log.debug(\u0027launch template %s created\u0027, template_name)"},{"line_number":603,"context_line":"                except Exception:"},{"line_number":604,"context_line":"                    self.log.exception("},{"line_number":605,"context_line":"                        \u0027Could not create launch template %s\u0027, template_name)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"0971bfe4_1e668691","line":604,"in_reply_to":"0e8c73d6_42844a50","updated":"2024-07-12 10:13:44.000000000","message":"Done","commit_id":"de7ae06751645c6faff28241fd16fc96c3f96b6c"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"e56bd14080aa495481d3320173e111fa7d2fc2ac","unresolved":true,"context_lines":[{"line_number":763,"context_line":"                    host_types.add(label.instance_type)"},{"line_number":764,"context_line":"                # label.instance_type is None for fleet, and in this case"},{"line_number":765,"context_line":"                # we do not set quota information."},{"line_number":766,"context_line":"                elif label.instance_type:"},{"line_number":767,"context_line":"                    if label.instance_type not in instance_types:"},{"line_number":768,"context_line":"                        instance_types[label.instance_type] \u003d set()"},{"line_number":769,"context_line":"                    instance_types[label.instance_type].add("}],"source_content_type":"text/x-python","patch_set":9,"id":"9e9a8a92_3d2ea6bb","line":766,"updated":"2024-07-15 16:18:47.000000000","message":"We should know the possible instance_types for fleet api requests, right?  If so, we should include all of them here.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                    host_types.add(label.instance_type)"},{"line_number":764,"context_line":"                # label.instance_type is None for fleet, and in this case"},{"line_number":765,"context_line":"                # we do not set quota information."},{"line_number":766,"context_line":"                elif label.instance_type:"},{"line_number":767,"context_line":"                    if label.instance_type not in instance_types:"},{"line_number":768,"context_line":"                        instance_types[label.instance_type] \u003d set()"},{"line_number":769,"context_line":"                    instance_types[label.instance_type].add("}],"source_content_type":"text/x-python","patch_set":9,"id":"a03acc33_e61bcb17","line":766,"in_reply_to":"44015389_c3d5209e","updated":"2024-07-22 16:27:27.000000000","message":"Done","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"b07d3468afd4b5e9f1df43b1e794e7267e6d15f3","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                    host_types.add(label.instance_type)"},{"line_number":764,"context_line":"                # label.instance_type is None for fleet, and in this case"},{"line_number":765,"context_line":"                # we do not set quota information."},{"line_number":766,"context_line":"                elif label.instance_type:"},{"line_number":767,"context_line":"                    if label.instance_type not in instance_types:"},{"line_number":768,"context_line":"                        instance_types[label.instance_type] \u003d set()"},{"line_number":769,"context_line":"                    instance_types[label.instance_type].add("}],"source_content_type":"text/x-python","patch_set":9,"id":"6996f30f_22dd3e21","line":766,"in_reply_to":"9e9a8a92_3d2ea6bb","updated":"2024-07-16 13:44:46.000000000","message":"The list of `instance_types` is optional in creating fleet API request, user can alternatively or additionally specify `instance-requirements`.\n\nSo it is not guaranteed to know all possible instance_types that the instance could be, but we can make best effort to include the list of `instance_types` here if it is configured.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"951aadb4ef4fabb6356ed8aa7ec05afa504a1727","unresolved":true,"context_lines":[{"line_number":763,"context_line":"                    host_types.add(label.instance_type)"},{"line_number":764,"context_line":"                # label.instance_type is None for fleet, and in this case"},{"line_number":765,"context_line":"                # we do not set quota information."},{"line_number":766,"context_line":"                elif label.instance_type:"},{"line_number":767,"context_line":"                    if label.instance_type not in instance_types:"},{"line_number":768,"context_line":"                        instance_types[label.instance_type] \u003d set()"},{"line_number":769,"context_line":"                    instance_types[label.instance_type].add("}],"source_content_type":"text/x-python","patch_set":9,"id":"39bd2255_e77166f9","line":766,"in_reply_to":"9e9a8a92_3d2ea6bb","updated":"2024-07-20 15:07:06.000000000","message":"Two questions about that:\n1) Should we actually support instance-requirements?  We don\u0027t do anything like that right now with aws single instances.  But we do have something like that for openstack single instances.  But I\u0027m not sure we should, because if someone isn\u0027t careful, they could end up getting a surprise bill if aws adds a new expensive instance-type that meets your criteria.  So one should always include min and max values.  :)\n\n2) Assuming we *do* want to support that, how about we use this API call to get the possible instance types and use that here?\n\nhttps://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/get_instance_types_from_instance_requirements.html","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"951aadb4ef4fabb6356ed8aa7ec05afa504a1727","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                    host_types.add(label.instance_type)"},{"line_number":764,"context_line":"                # label.instance_type is None for fleet, and in this case"},{"line_number":765,"context_line":"                # we do not set quota information."},{"line_number":766,"context_line":"                elif label.instance_type:"},{"line_number":767,"context_line":"                    if label.instance_type not in instance_types:"},{"line_number":768,"context_line":"                        instance_types[label.instance_type] \u003d set()"},{"line_number":769,"context_line":"                    instance_types[label.instance_type].add("}],"source_content_type":"text/x-python","patch_set":9,"id":"ace2a176_3833b672","line":766,"in_reply_to":"9e9a8a92_3d2ea6bb","updated":"2024-07-20 15:07:06.000000000","message":"Two questions about that:\n1) Should we actually support instance-requirements?  We don\u0027t do anything like that right now with aws single instances.  But we do have something like that for openstack single instances.  But I\u0027m not sure we should, because if someone isn\u0027t careful, they could end up getting a surprise bill if aws adds a new expensive instance-type that meets your criteria.  So one should always include min and max values.  :)\n\n2) Assuming we *do* want to support that, how about we use this API call to get the possible instance types and use that here?\n\nhttps://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/get_instance_types_from_instance_requirements.html","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"7fbfcace80ff9422c25204546b47acba1de4a610","unresolved":true,"context_lines":[{"line_number":763,"context_line":"                    host_types.add(label.instance_type)"},{"line_number":764,"context_line":"                # label.instance_type is None for fleet, and in this case"},{"line_number":765,"context_line":"                # we do not set quota information."},{"line_number":766,"context_line":"                elif label.instance_type:"},{"line_number":767,"context_line":"                    if label.instance_type not in instance_types:"},{"line_number":768,"context_line":"                        instance_types[label.instance_type] \u003d set()"},{"line_number":769,"context_line":"                    instance_types[label.instance_type].add("}],"source_content_type":"text/x-python","patch_set":9,"id":"44015389_c3d5209e","line":766,"in_reply_to":"ace2a176_3833b672","updated":"2024-07-20 17:16:50.000000000","message":"unresolving","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"df5fd0a354f63ce533abc5954dd5d076efe691ec","unresolved":true,"context_lines":[{"line_number":558,"context_line":"                if not label.fleet:"},{"line_number":559,"context_line":"                    continue"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"                template_name \u003d (f\u0027{launch_template_prefix}-\u0027"},{"line_number":562,"context_line":"                                 f\u0027{label.volume_type}-{label.volume_size}-\u0027"},{"line_number":563,"context_line":"                                 f\u0027{label.iops}-{label.throughput}\u0027)"},{"line_number":564,"context_line":"                if template_name in existing_templates:"},{"line_number":565,"context_line":"                    self.log.debug("},{"line_number":566,"context_line":"                        \u0027launch template %s already exist\u0027, template_name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"b75bf733_cf63d20b","line":563,"range":{"start_line":561,"start_character":0,"end_line":563,"end_character":68},"updated":"2024-07-18 12:26:42.000000000","message":"This should be moved to an own method so it can be reused later when creating the fleet request.\nMaybe something like: getLaunchTemplateNameFromLabel","commit_id":"378c4d63e536ca677f8be2b6cb0bc06ec1f1b562"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"11a87a9b9ce58fb82efd6a435df291291430dde6","unresolved":false,"context_lines":[{"line_number":558,"context_line":"                if not label.fleet:"},{"line_number":559,"context_line":"                    continue"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"                template_name \u003d (f\u0027{launch_template_prefix}-\u0027"},{"line_number":562,"context_line":"                                 f\u0027{label.volume_type}-{label.volume_size}-\u0027"},{"line_number":563,"context_line":"                                 f\u0027{label.iops}-{label.throughput}\u0027)"},{"line_number":564,"context_line":"                if template_name in existing_templates:"},{"line_number":565,"context_line":"                    self.log.debug("},{"line_number":566,"context_line":"                        \u0027launch template %s already exist\u0027, template_name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"01b3f5d1_ded1ace1","line":563,"range":{"start_line":561,"start_character":0,"end_line":563,"end_character":68},"in_reply_to":"b75bf733_cf63d20b","updated":"2024-07-19 05:25:59.000000000","message":"Done","commit_id":"378c4d63e536ca677f8be2b6cb0bc06ec1f1b562"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":535,"context_line":"        self.not_our_images \u003d set()"},{"line_number":536,"context_line":"        self.not_our_snapshots \u003d set()"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        self.log.info(\"Creating launch templates\")"},{"line_number":539,"context_line":"        tags \u003d {"},{"line_number":540,"context_line":"            \u0027nodepool_managed\u0027: True,"},{"line_number":541,"context_line":"            \u0027nodepool_provider_name\u0027: provider_config.name,"}],"source_content_type":"text/x-python","patch_set":24,"id":"081960c3_2988ea6f","line":538,"updated":"2024-07-20 15:05:56.000000000","message":"From here to the end of the method should probably be a new method, and we should just call \"CreateLaunchTemplates\" here.\n\nMoreover, we should probably actually scan through the list of labels to see if there are any before creating the launch templatse, and if there are none, omit the query to find the list of launch templates, thus saving api calls in the non-fleet case.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"7fbfcace80ff9422c25204546b47acba1de4a610","unresolved":true,"context_lines":[{"line_number":535,"context_line":"        self.not_our_images \u003d set()"},{"line_number":536,"context_line":"        self.not_our_snapshots \u003d set()"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        self.log.info(\"Creating launch templates\")"},{"line_number":539,"context_line":"        tags \u003d {"},{"line_number":540,"context_line":"            \u0027nodepool_managed\u0027: True,"},{"line_number":541,"context_line":"            \u0027nodepool_provider_name\u0027: provider_config.name,"}],"source_content_type":"text/x-python","patch_set":24,"id":"8cccc4a8_531a1916","line":538,"in_reply_to":"081960c3_2988ea6f","updated":"2024-07-20 17:16:50.000000000","message":"I\u0027ve done this in a new revision.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"67724c6b9a3f23917b18723cba457ccd578c33d1","unresolved":false,"context_lines":[{"line_number":535,"context_line":"        self.not_our_images \u003d set()"},{"line_number":536,"context_line":"        self.not_our_snapshots \u003d set()"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        self.log.info(\"Creating launch templates\")"},{"line_number":539,"context_line":"        tags \u003d {"},{"line_number":540,"context_line":"            \u0027nodepool_managed\u0027: True,"},{"line_number":541,"context_line":"            \u0027nodepool_provider_name\u0027: provider_config.name,"}],"source_content_type":"text/x-python","patch_set":24,"id":"e09d9fac_c5c38793","line":538,"in_reply_to":"8cccc4a8_531a1916","updated":"2024-07-22 09:33:04.000000000","message":"Acknowledged","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":551,"context_line":"            for page in paginator.paginate(Filters\u003d[name_filter]):"},{"line_number":552,"context_line":"                for template in page[\u0027LaunchTemplates\u0027]:"},{"line_number":553,"context_line":"                    existing_templates.append(template[\u0027LaunchTemplateName\u0027])"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        for pool_name, pool in provider_config.pools.items():"},{"line_number":556,"context_line":"            for label_name, label in pool.labels.items():"},{"line_number":557,"context_line":"                # Create launch templates only for labels which usage fleet"}],"source_content_type":"text/x-python","patch_set":24,"id":"bfc6b9ec_8e81649a","line":554,"updated":"2024-07-20 15:05:56.000000000","message":"This strategy probably warrants a comment:\n\nThe idea is to create minimal launch templates and override as much as possible.  The fewer launch templates we have, the better, since it\u0027s less extra work for us to manage their lifecycles.\n\nSo below, we create launch templates with only the attributes which can not be overridden later when we use them.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"67724c6b9a3f23917b18723cba457ccd578c33d1","unresolved":false,"context_lines":[{"line_number":551,"context_line":"            for page in paginator.paginate(Filters\u003d[name_filter]):"},{"line_number":552,"context_line":"                for template in page[\u0027LaunchTemplates\u0027]:"},{"line_number":553,"context_line":"                    existing_templates.append(template[\u0027LaunchTemplateName\u0027])"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        for pool_name, pool in provider_config.pools.items():"},{"line_number":556,"context_line":"            for label_name, label in pool.labels.items():"},{"line_number":557,"context_line":"                # Create launch templates only for labels which usage fleet"}],"source_content_type":"text/x-python","patch_set":24,"id":"e25140bd_a6eb5e77","line":554,"in_reply_to":"bfc6b9ec_8e81649a","updated":"2024-07-22 09:33:04.000000000","message":"Acknowledged","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":562,"context_line":"                if template_name in existing_templates:"},{"line_number":563,"context_line":"                    self.log.debug("},{"line_number":564,"context_line":"                        \u0027launch template %s already exist\u0027, template_name)"},{"line_number":565,"context_line":"                    continue"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"                self.log.debug(\u0027Creating launch template %s\u0027, template_name)"},{"line_number":568,"context_line":"                ebs_settings \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"dcdbddc7_41615b94","line":565,"updated":"2024-07-20 15:05:56.000000000","message":"The security group ID is not encoded in the name of the launch template, which means that if there is another aws provider using the same volume configuration but a different security group id, they would collide.  We are also setting tags on the launch template, which is good, but they specify this provider, and that\u0027s also not in the launch template name, which means that when we add support for deleting launch templates, we might delete a template created by another provider.\n\nWe might need to change either the contents or names of the launch template in the future, and it may be a little difficult to do so.\n\nHow about we use content-addressible naming for the templates.  Create the entire content of the launch_template call (except for the name) and then generate a sha1 hash of that.  Use that as the launch template name suffix instead of the volume characteristics.\n\nTo make it easier too find the correct launch template to use later, go ahead and store the launch template name on the label object.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"67724c6b9a3f23917b18723cba457ccd578c33d1","unresolved":false,"context_lines":[{"line_number":562,"context_line":"                if template_name in existing_templates:"},{"line_number":563,"context_line":"                    self.log.debug("},{"line_number":564,"context_line":"                        \u0027launch template %s already exist\u0027, template_name)"},{"line_number":565,"context_line":"                    continue"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"                self.log.debug(\u0027Creating launch template %s\u0027, template_name)"},{"line_number":568,"context_line":"                ebs_settings \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"f462ff62_ae786118","line":565,"in_reply_to":"77fe6ca7_3d2571bc","updated":"2024-07-22 09:33:04.000000000","message":"Acknowledged","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"7fbfcace80ff9422c25204546b47acba1de4a610","unresolved":true,"context_lines":[{"line_number":562,"context_line":"                if template_name in existing_templates:"},{"line_number":563,"context_line":"                    self.log.debug("},{"line_number":564,"context_line":"                        \u0027launch template %s already exist\u0027, template_name)"},{"line_number":565,"context_line":"                    continue"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"                self.log.debug(\u0027Creating launch template %s\u0027, template_name)"},{"line_number":568,"context_line":"                ebs_settings \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"77fe6ca7_3d2571bc","line":565,"in_reply_to":"dcdbddc7_41615b94","updated":"2024-07-20 17:16:50.000000000","message":"I\u0027ve done this in a new revision.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":597,"context_line":"                            },"},{"line_number":598,"context_line":"                        ]"},{"line_number":599,"context_line":"                    )"},{"line_number":600,"context_line":"                    self.log.debug(\u0027launch template %s created\u0027, template_name)"},{"line_number":601,"context_line":"                except botocore.exceptions.ClientError as e:"},{"line_number":602,"context_line":"                    if (e.response[\u0027Error\u0027][\u0027Code\u0027] \u003d\u003d"},{"line_number":603,"context_line":"                        \u0027InvalidLaunchTemplateName.AlreadyExistsException\u0027):"}],"source_content_type":"text/x-python","patch_set":24,"id":"f43338d2_b95d5beb","line":600,"updated":"2024-07-20 15:05:56.000000000","message":"Capitalize \"launch\"","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"67724c6b9a3f23917b18723cba457ccd578c33d1","unresolved":false,"context_lines":[{"line_number":597,"context_line":"                            },"},{"line_number":598,"context_line":"                        ]"},{"line_number":599,"context_line":"                    )"},{"line_number":600,"context_line":"                    self.log.debug(\u0027launch template %s created\u0027, template_name)"},{"line_number":601,"context_line":"                except botocore.exceptions.ClientError as e:"},{"line_number":602,"context_line":"                    if (e.response[\u0027Error\u0027][\u0027Code\u0027] \u003d\u003d"},{"line_number":603,"context_line":"                        \u0027InvalidLaunchTemplateName.AlreadyExistsException\u0027):"}],"source_content_type":"text/x-python","patch_set":24,"id":"627bb152_07420a60","line":600,"in_reply_to":"0ca25403_41d22854","updated":"2024-07-22 09:33:04.000000000","message":"Acknowledged","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"7fbfcace80ff9422c25204546b47acba1de4a610","unresolved":true,"context_lines":[{"line_number":597,"context_line":"                            },"},{"line_number":598,"context_line":"                        ]"},{"line_number":599,"context_line":"                    )"},{"line_number":600,"context_line":"                    self.log.debug(\u0027launch template %s created\u0027, template_name)"},{"line_number":601,"context_line":"                except botocore.exceptions.ClientError as e:"},{"line_number":602,"context_line":"                    if (e.response[\u0027Error\u0027][\u0027Code\u0027] \u003d\u003d"},{"line_number":603,"context_line":"                        \u0027InvalidLaunchTemplateName.AlreadyExistsException\u0027):"}],"source_content_type":"text/x-python","patch_set":24,"id":"0ca25403_41d22854","line":600,"in_reply_to":"f43338d2_b95d5beb","updated":"2024-07-20 17:16:50.000000000","message":"I did this in in a new revision.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":true,"context_lines":[{"line_number":1593,"context_line":"            if (template_name in existing_templates or"},{"line_number":1594,"context_line":"                template_name in created_templates):"},{"line_number":1595,"context_line":"                self.log.debug("},{"line_number":1596,"context_line":"                    \u0027launch template %s already exist\u0027, template_name)"},{"line_number":1597,"context_line":"                continue"},{"line_number":1598,"context_line":""},{"line_number":1599,"context_line":"            template_args[\u0027LaunchTemplateName\u0027] \u003d template_name"}],"source_content_type":"text/x-python","patch_set":31,"id":"c895c762_2d1450fc","line":1596,"range":{"start_line":1596,"start_character":0,"end_line":1596,"end_character":2},"updated":"2024-07-22 16:27:27.000000000","message":"\"Launch template %s already exists\"","commit_id":"40ddd896514769e59d0f95cfffdf5a11641f03b6"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"08ad2528fa8b264f76c0bd6d4928ebcf57fa399b","unresolved":false,"context_lines":[{"line_number":1593,"context_line":"            if (template_name in existing_templates or"},{"line_number":1594,"context_line":"                template_name in created_templates):"},{"line_number":1595,"context_line":"                self.log.debug("},{"line_number":1596,"context_line":"                    \u0027launch template %s already exist\u0027, template_name)"},{"line_number":1597,"context_line":"                continue"},{"line_number":1598,"context_line":""},{"line_number":1599,"context_line":"            template_args[\u0027LaunchTemplateName\u0027] \u003d template_name"}],"source_content_type":"text/x-python","patch_set":31,"id":"86d2c460_4c2f2649","line":1596,"range":{"start_line":1596,"start_character":0,"end_line":1596,"end_character":2},"in_reply_to":"c895c762_2d1450fc","updated":"2024-07-22 16:37:51.000000000","message":"Done","commit_id":"40ddd896514769e59d0f95cfffdf5a11641f03b6"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"d0708a155c8eb165e4aa2961a0602a289b7a39b2","unresolved":true,"context_lines":[{"line_number":1703,"context_line":""},{"line_number":1704,"context_line":"            return describe_instances_result[\u0027Reservations\u0027][0][\u0027Instances\u0027][0]"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"    def _runInstace(self, label, image_id, tags, hostname,"},{"line_number":1707,"context_line":"                    dedicated_host_id, log):"},{"line_number":1708,"context_line":"        args \u003d dict("},{"line_number":1709,"context_line":"            ImageId\u003dimage_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"bfa1b6cd_7c912702","line":1706,"range":{"start_line":1706,"start_character":8,"end_line":1706,"end_character":19},"updated":"2024-07-23 05:18:24.000000000","message":"nit: typo `_runInstaNce`","commit_id":"3b1f900e00dbb9df4c80c54dfd6cd070fbd7d98c"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"0b6f5b8352cf763b0a42ff39674caed1484ce4ed","unresolved":false,"context_lines":[{"line_number":1703,"context_line":""},{"line_number":1704,"context_line":"            return describe_instances_result[\u0027Reservations\u0027][0][\u0027Instances\u0027][0]"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"    def _runInstace(self, label, image_id, tags, hostname,"},{"line_number":1707,"context_line":"                    dedicated_host_id, log):"},{"line_number":1708,"context_line":"        args \u003d dict("},{"line_number":1709,"context_line":"            ImageId\u003dimage_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"914f5f68_15ef0e12","line":1706,"range":{"start_line":1706,"start_character":8,"end_line":1706,"end_character":19},"in_reply_to":"bfa1b6cd_7c912702","updated":"2024-07-23 06:26:51.000000000","message":"Done","commit_id":"3b1f900e00dbb9df4c80c54dfd6cd070fbd7d98c"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"f22aece2b40275b223dbd7ee8584eda4efc153f3","unresolved":true,"context_lines":[{"line_number":1551,"context_line":""},{"line_number":1552,"context_line":"        for label in labels:"},{"line_number":1553,"context_line":"            # Create launch templates only for labels which usage fleet"},{"line_number":1554,"context_line":"            if not label.fleet:"},{"line_number":1555,"context_line":"                continue"},{"line_number":1556,"context_line":""},{"line_number":1557,"context_line":"            ebs_settings \u003d {"}],"source_content_type":"text/x-python","patch_set":34,"id":"2fb940b9_e5f10b8e","line":1554,"updated":"2024-07-23 07:40:55.000000000","message":"nit: strictly speaking this filter is already done above and not needed here.","commit_id":"a719e8c021ed95c64677c42ce9abc6beea990053"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"2d3da132d08a16c567844459d47b1aa3661da29c","unresolved":false,"context_lines":[{"line_number":1551,"context_line":""},{"line_number":1552,"context_line":"        for label in labels:"},{"line_number":1553,"context_line":"            # Create launch templates only for labels which usage fleet"},{"line_number":1554,"context_line":"            if not label.fleet:"},{"line_number":1555,"context_line":"                continue"},{"line_number":1556,"context_line":""},{"line_number":1557,"context_line":"            ebs_settings \u003d {"}],"source_content_type":"text/x-python","patch_set":34,"id":"1f2a6f1f_718928d8","line":1554,"in_reply_to":"2fb940b9_e5f10b8e","updated":"2024-07-23 07:55:18.000000000","message":"Done","commit_id":"a719e8c021ed95c64677c42ce9abc6beea990053"}],"nodepool/driver/aws/config.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":205,"context_line":"            v.Exclusive(\u0027instance-type\u0027, \u0027instance\u0027): str,"},{"line_number":206,"context_line":"            v.Exclusive(\u0027fleet\u0027, \u0027instance\u0027): {"},{"line_number":207,"context_line":"                v.Exclusive(\u0027instance-types\u0027, \u0027fleet-instance\u0027): list,"},{"line_number":208,"context_line":"                v.Exclusive(\u0027instance-requirements\u0027, \u0027fleet-instance\u0027): dict,"},{"line_number":209,"context_line":"                v.Required(\u0027allocation-strategy\u0027): v.Any("},{"line_number":210,"context_line":"                    \u0027prioritized\u0027, \u0027price-capacity-optimized\u0027,"},{"line_number":211,"context_line":"                    \u0027capacity-optimized\u0027, \u0027diversified\u0027, \u0027lowest-price\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"de13af1f_7b38630f","line":208,"updated":"2024-07-20 15:05:56.000000000","message":"There is documentation for the dict contents here, but no validation; this would be fine if we pass the contents through unchanged, but since we currently map only some of them, we should be validating them.  We need to decide which thing we want to do, and either change this code or the mapping code to match.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            v.Exclusive(\u0027instance-type\u0027, \u0027instance\u0027): str,"},{"line_number":206,"context_line":"            v.Exclusive(\u0027fleet\u0027, \u0027instance\u0027): {"},{"line_number":207,"context_line":"                v.Exclusive(\u0027instance-types\u0027, \u0027fleet-instance\u0027): list,"},{"line_number":208,"context_line":"                v.Exclusive(\u0027instance-requirements\u0027, \u0027fleet-instance\u0027): dict,"},{"line_number":209,"context_line":"                v.Required(\u0027allocation-strategy\u0027): v.Any("},{"line_number":210,"context_line":"                    \u0027prioritized\u0027, \u0027price-capacity-optimized\u0027,"},{"line_number":211,"context_line":"                    \u0027capacity-optimized\u0027, \u0027diversified\u0027, \u0027lowest-price\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f68c413_402e4bde","line":208,"in_reply_to":"de13af1f_7b38630f","updated":"2024-07-22 16:27:27.000000000","message":"Done","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"}],"nodepool/driver/statemachine.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"e56bd14080aa495481d3320173e111fa7d2fc2ac","unresolved":true,"context_lines":[{"line_number":128,"context_line":"        self.node.connection_type \u003d image.connection_type"},{"line_number":129,"context_line":"        qi \u003d self.manager.quotaNeededByLabel(label.name, self.handler.pool)"},{"line_number":130,"context_line":"        if qi:"},{"line_number":131,"context_line":"            self.node.resources \u003d qi.get_resources()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.zk.storeNode(self.node)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"0c652245_49425cbc","line":131,"updated":"2024-07-15 16:18:47.000000000","message":"In this line, we\u0027re storing the actual quota resources used by the node -- but only based on the label because we haven\u0027t actually launched it yet.\n\nBut if we do this again below in updateNodeFromInstance, where you\u0027ve stored the instance type, then we would have the actual final resources.\n\nIf we add a method to QuotaInformation to deserialize from the get_resources output, then we can reconstruct the resources from the node record given what we already have.  (See other note.)","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"b07d3468afd4b5e9f1df43b1e794e7267e6d15f3","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.node.connection_type \u003d image.connection_type"},{"line_number":129,"context_line":"        qi \u003d self.manager.quotaNeededByLabel(label.name, self.handler.pool)"},{"line_number":130,"context_line":"        if qi:"},{"line_number":131,"context_line":"            self.node.resources \u003d qi.get_resources()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.zk.storeNode(self.node)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"b15d4c16_81b5f2be","line":131,"in_reply_to":"0c652245_49425cbc","updated":"2024-07-16 13:44:46.000000000","message":"I think it is a good idea, instead of storing the `instance_type`, we can store the `resources` once the instance is launched. So that we do not add the addtional `instance_type` to the node object.\n\nTo avoid adding `instance_type` parameter to the `getQuotaForLabel()` in Adapter, we still need to pass in the actual `instance_type` in some way. I did a trick that and set the actual instance_type to a deepcopied label as a parameter.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"67724c6b9a3f23917b18723cba457ccd578c33d1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.node.connection_type \u003d image.connection_type"},{"line_number":129,"context_line":"        qi \u003d self.manager.quotaNeededByLabel(label.name, self.handler.pool)"},{"line_number":130,"context_line":"        if qi:"},{"line_number":131,"context_line":"            self.node.resources \u003d qi.get_resources()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.zk.storeNode(self.node)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"e6147df4_a25ed023","line":131,"in_reply_to":"177d5943_bc85f4f3","updated":"2024-07-22 09:33:04.000000000","message":"You are right, I should not have resolved this discussion. Resolve it now as it has been fixed in your Patchset.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"7fbfcace80ff9422c25204546b47acba1de4a610","unresolved":true,"context_lines":[{"line_number":128,"context_line":"        self.node.connection_type \u003d image.connection_type"},{"line_number":129,"context_line":"        qi \u003d self.manager.quotaNeededByLabel(label.name, self.handler.pool)"},{"line_number":130,"context_line":"        if qi:"},{"line_number":131,"context_line":"            self.node.resources \u003d qi.get_resources()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.zk.storeNode(self.node)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"177d5943_bc85f4f3","line":131,"in_reply_to":"71f20750_79dff0a2","updated":"2024-07-20 17:16:50.000000000","message":"This comment should not have been resolved since your changes did not address my concern.  It\u0027s fine if you didn\u0027t see how to do it, or I didn\u0027t explain it clearly enough -- but in that case you should leave it up to me to decide whether it\u0027s resolved.\n\nAt any rate, we can do this.  I\u0027ve done this in a new revision.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"9f15bd691be6abae880b0be4bb3fecaf0f8e045b","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.node.connection_type \u003d image.connection_type"},{"line_number":129,"context_line":"        qi \u003d self.manager.quotaNeededByLabel(label.name, self.handler.pool)"},{"line_number":130,"context_line":"        if qi:"},{"line_number":131,"context_line":"            self.node.resources \u003d qi.get_resources()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.zk.storeNode(self.node)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"71f20750_79dff0a2","line":131,"in_reply_to":"b15d4c16_81b5f2be","updated":"2024-07-18 12:42:33.000000000","message":"An update to may previous comment: The trick to set the `instance_type` to the label would not work, because not all label contains `instance_type`. So I think we can not avoid adding new parameters to those functions.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":true,"context_lines":[{"line_number":809,"context_line":"        provider_label \u003d pool.labels[ntype]"},{"line_number":810,"context_line":"        qi \u003d self.label_quota_cache.get(provider_label)"},{"line_number":811,"context_line":"        if qi is not None:"},{"line_number":812,"context_line":"            return qi"},{"line_number":813,"context_line":"        try:"},{"line_number":814,"context_line":"            qi \u003d self.adapter.getQuotaForLabel(provider_label)"},{"line_number":815,"context_line":"            self.log.debug(\"Quota required for %s: %s\","}],"source_content_type":"text/x-python","patch_set":31,"id":"8c821ae7_ec3a776c","side":"PARENT","line":812,"range":{"start_line":812,"start_character":19,"end_line":812,"end_character":21},"updated":"2024-07-22 16:27:27.000000000","message":"Do we need to remove this caching?","commit_id":"0c3063a89a60ceb446d005dfc220dcf79629e6d4"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"08ad2528fa8b264f76c0bd6d4928ebcf57fa399b","unresolved":false,"context_lines":[{"line_number":809,"context_line":"        provider_label \u003d pool.labels[ntype]"},{"line_number":810,"context_line":"        qi \u003d self.label_quota_cache.get(provider_label)"},{"line_number":811,"context_line":"        if qi is not None:"},{"line_number":812,"context_line":"            return qi"},{"line_number":813,"context_line":"        try:"},{"line_number":814,"context_line":"            qi \u003d self.adapter.getQuotaForLabel(provider_label)"},{"line_number":815,"context_line":"            self.log.debug(\"Quota required for %s: %s\","}],"source_content_type":"text/x-python","patch_set":31,"id":"004d45cf_dcefa91b","side":"PARENT","line":812,"range":{"start_line":812,"start_character":19,"end_line":812,"end_character":21},"in_reply_to":"8c821ae7_ec3a776c","updated":"2024-07-22 16:37:51.000000000","message":"Done","commit_id":"0c3063a89a60ceb446d005dfc220dcf79629e6d4"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":true,"context_lines":[{"line_number":1019,"context_line":"    * host_id: str"},{"line_number":1020,"context_line":"    * driver_data: any"},{"line_number":1021,"context_line":"    * slot: int"},{"line_number":1022,"context_line":"    * instance_type: str"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"    And the following are even more optional (as they are usually"},{"line_number":1025,"context_line":"    already set from the image configuration):"}],"source_content_type":"text/x-python","patch_set":31,"id":"22a60ebd_95d3cd55","line":1022,"updated":"2024-07-22 16:27:27.000000000","message":"We shouldn\u0027t need this anymore.","commit_id":"40ddd896514769e59d0f95cfffdf5a11641f03b6"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"08ad2528fa8b264f76c0bd6d4928ebcf57fa399b","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"    * host_id: str"},{"line_number":1020,"context_line":"    * driver_data: any"},{"line_number":1021,"context_line":"    * slot: int"},{"line_number":1022,"context_line":"    * instance_type: str"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"    And the following are even more optional (as they are usually"},{"line_number":1025,"context_line":"    already set from the image configuration):"}],"source_content_type":"text/x-python","patch_set":31,"id":"ea6f6a73_d93c111f","line":1022,"in_reply_to":"22a60ebd_95d3cd55","updated":"2024-07-22 16:37:51.000000000","message":"Done","commit_id":"40ddd896514769e59d0f95cfffdf5a11641f03b6"}],"nodepool/driver/utils.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"e56bd14080aa495481d3320173e111fa7d2fc2ac","unresolved":true,"context_lines":[{"line_number":369,"context_line":"                        # may have changed under it.  It should settle out"},{"line_number":370,"context_line":"                        # eventually when it\u0027s deleted."},{"line_number":371,"context_line":"                        continue"},{"line_number":372,"context_line":"                    node_resources \u003d self.quotaNeededByLabel("},{"line_number":373,"context_line":"                        node.type[0], provider_pool, node.instance_type)"},{"line_number":374,"context_line":"                    self.log.debug(\"node_resources: %s\", node_resources)"},{"line_number":375,"context_line":"                    used_quota.add(node_resources)"}],"source_content_type":"text/x-python","patch_set":9,"id":"211d2621_af3dc79b","line":372,"updated":"2024-07-15 16:18:47.000000000","message":"This is the thing that requires all the changes to the adapter api.\n\nInstead of passing instance_type\u003dNone to everything, how about we see if node.resources exists, and if it does, skip this call to quotaNeededByLabel and instead deserialize the resources into a QuotaInformation object.  (See other note.)\n\nThat should let us delete almost every line in this patch with instance_type.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"b07d3468afd4b5e9f1df43b1e794e7267e6d15f3","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                        # may have changed under it.  It should settle out"},{"line_number":370,"context_line":"                        # eventually when it\u0027s deleted."},{"line_number":371,"context_line":"                        continue"},{"line_number":372,"context_line":"                    node_resources \u003d self.quotaNeededByLabel("},{"line_number":373,"context_line":"                        node.type[0], provider_pool, node.instance_type)"},{"line_number":374,"context_line":"                    self.log.debug(\"node_resources: %s\", node_resources)"},{"line_number":375,"context_line":"                    used_quota.add(node_resources)"}],"source_content_type":"text/x-python","patch_set":9,"id":"4794602e_0bb40bc9","line":372,"in_reply_to":"211d2621_af3dc79b","updated":"2024-07-16 13:44:46.000000000","message":"yep, I uploaded a patch with the changes. Please check the PatchSet 11.","commit_id":"cf34a3a30b4a5b942d727459d2650f8ae3b3e067"}],"nodepool/tests/fixtures/aws/aws-fleet.yaml":[{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"c672d58a7a1e7b997297ba5877dcd7d379a10c4f","unresolved":true,"context_lines":[{"line_number":16,"context_line":"  - name: ubuntu1404-io2"},{"line_number":17,"context_line":"  - name: ubuntu1404-gp3"},{"line_number":18,"context_line":"  - name: ubuntu1404-on-demand"},{"line_number":19,"context_line":"  - name: ubuntu1404-spot"},{"line_number":20,"context_line":"  - name: ubuntu1404-spot"},{"line_number":21,"context_line":"  - name: ubuntu1404-4core"},{"line_number":22,"context_line":"  - name: ubuntu1404-fleet-4core"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":16,"id":"f1429cf7_1ee446d4","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":25},"updated":"2024-07-18 12:04:47.000000000","message":"The label ubuntu1404-spot is twice in the list","commit_id":"e0c1901b405f88ef2b87c83dfe63bc4ad0839f48"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"df5fd0a354f63ce533abc5954dd5d076efe691ec","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  - name: ubuntu1404-io2"},{"line_number":17,"context_line":"  - name: ubuntu1404-gp3"},{"line_number":18,"context_line":"  - name: ubuntu1404-on-demand"},{"line_number":19,"context_line":"  - name: ubuntu1404-spot"},{"line_number":20,"context_line":"  - name: ubuntu1404-spot"},{"line_number":21,"context_line":"  - name: ubuntu1404-4core"},{"line_number":22,"context_line":"  - name: ubuntu1404-fleet-4core"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":16,"id":"b0d61d0c_0f5c3d4b","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":25},"in_reply_to":"f1429cf7_1ee446d4","updated":"2024-07-18 12:26:42.000000000","message":"Done","commit_id":"e0c1901b405f88ef2b87c83dfe63bc4ad0839f48"}],"nodepool/tests/unit/test_driver_aws.py":[{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"793a09c1a6c52ba154279eb693d84582186a2d55","unresolved":true,"context_lines":[{"line_number":1366,"context_line":"        self.assertEqual(lt1[\u0027LaunchTemplateName\u0027],"},{"line_number":1367,"context_line":"                         \u0027nodepool-launch-template-io2-20-2000-None\u0027)"},{"line_number":1368,"context_line":"        self.assertEqual(lt2[\u0027LaunchTemplateName\u0027],"},{"line_number":1369,"context_line":"                         \u0027nodepool-launch-template-gp3-40-1000-200\u0027)"},{"line_number":1370,"context_line":""},{"line_number":1371,"context_line":"        # Restart pool, the launch templates must be the same and"},{"line_number":1372,"context_line":"        # must not be recreated"}],"source_content_type":"text/x-python","patch_set":4,"id":"3c7e898d_b7e30bcf","line":1369,"updated":"2024-07-11 14:34:57.000000000","message":"Here would also helpful to check the content of the template, if it is the same as configured.","commit_id":"de7ae06751645c6faff28241fd16fc96c3f96b6c"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"5b841097f2a0f19c9e7cb8d6b182a83c8d3e9e25","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"        self.assertEqual(lt1[\u0027LaunchTemplateName\u0027],"},{"line_number":1367,"context_line":"                         \u0027nodepool-launch-template-io2-20-2000-None\u0027)"},{"line_number":1368,"context_line":"        self.assertEqual(lt2[\u0027LaunchTemplateName\u0027],"},{"line_number":1369,"context_line":"                         \u0027nodepool-launch-template-gp3-40-1000-200\u0027)"},{"line_number":1370,"context_line":""},{"line_number":1371,"context_line":"        # Restart pool, the launch templates must be the same and"},{"line_number":1372,"context_line":"        # must not be recreated"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ef3e001_ba6d40e9","line":1369,"in_reply_to":"3c7e898d_b7e30bcf","updated":"2024-07-12 10:13:44.000000000","message":"Done","commit_id":"de7ae06751645c6faff28241fd16fc96c3f96b6c"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ec7d4167a58c14f68dc4b8463639469cfccee8f5","unresolved":true,"context_lines":[{"line_number":1330,"context_line":"        self.assertEqual(req.state, zk.FAILED)"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"        # Add a wait to make sure the DeletedNodeWorker marks the deletion"},{"line_number":1333,"context_line":"        time.sleep(1)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"        # verify instance and host are deleted"},{"line_number":1336,"context_line":"        provider \u003d self.pool.getProviderManager(\u0027ec2-us-west-2\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"da7ec9d2_ef87ad0a","line":1333,"updated":"2024-07-20 15:05:56.000000000","message":"Sleeps in tests are not reliable because things take varying abouts of time to happen.  That\u0027s why we use iterate_timeout instead.\n\nIt sounds like you\u0027re saying we could get through the iterate_timeout below before even starting to delete a node.  In that case, instead of adding the sleep here, you should adjust the iterate_timeout to also check that there are no instances (or reservations).\n\nAlso, this could be its own change.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a8ffb06d8fe4d097070e99f908a46801babddf67","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"        self.assertEqual(req.state, zk.FAILED)"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"        # Add a wait to make sure the DeletedNodeWorker marks the deletion"},{"line_number":1333,"context_line":"        time.sleep(1)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"        # verify instance and host are deleted"},{"line_number":1336,"context_line":"        provider \u003d self.pool.getProviderManager(\u0027ec2-us-west-2\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"dccecf0d_f295763b","line":1333,"in_reply_to":"c0d2f448_4234c24c","updated":"2024-07-22 16:27:27.000000000","message":"Done","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"67724c6b9a3f23917b18723cba457ccd578c33d1","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"        self.assertEqual(req.state, zk.FAILED)"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"        # Add a wait to make sure the DeletedNodeWorker marks the deletion"},{"line_number":1333,"context_line":"        time.sleep(1)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"        # verify instance and host are deleted"},{"line_number":1336,"context_line":"        provider \u003d self.pool.getProviderManager(\u0027ec2-us-west-2\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"371c26f6_d7caed84","line":1333,"in_reply_to":"da7ec9d2_ef87ad0a","updated":"2024-07-22 09:33:04.000000000","message":"Acknowledged","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"},{"author":{"_account_id":33134,"name":"Dong Zhang","email":"dong.zhang@bmw.de","username":"dongzhang"},"change_message_id":"1f852fb82150a3e3c12a4a2474bfc0d0cdb1a2bb","unresolved":true,"context_lines":[{"line_number":1330,"context_line":"        self.assertEqual(req.state, zk.FAILED)"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"        # Add a wait to make sure the DeletedNodeWorker marks the deletion"},{"line_number":1333,"context_line":"        time.sleep(1)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"        # verify instance and host are deleted"},{"line_number":1336,"context_line":"        provider \u003d self.pool.getProviderManager(\u0027ec2-us-west-2\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"c0d2f448_4234c24c","line":1333,"in_reply_to":"da7ec9d2_ef87ad0a","updated":"2024-07-22 14:21:45.000000000","message":"I saw you have fixed in another change, I removed my changes here in the new patchset.","commit_id":"3dec271616aa7abbf0cd251ce569153db9f68b6d"}],"releasenotes/notes/aws-fleet-api-ef99139931642c54.yaml":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"08ad2528fa8b264f76c0bd6d4928ebcf57fa399b","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The AWS driver now support EC2 Fleet API to launch instances. Currently"},{"line_number":5,"context_line":"    `InstanceRequirements` is not supported."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"1cc1ee08_46c395de","line":5,"updated":"2024-07-22 16:37:51.000000000","message":"I don\u0027t think we need to say what we haven\u0027t implemented, but I do get the idea that you want to communicate that if someone is expecting to use instance requirements they may be disappointed.  How about we just describe what we did implement -- that fleet can be used to pick from among a set of instance types.","commit_id":"e65d111fb0fe13927803cad9dfc8851fa1204728"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"87cbc18fb33396d746885b9aa61e57e4f22cd90b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The AWS driver now support EC2 Fleet API to launch instances. Currently"},{"line_number":5,"context_line":"    `InstanceRequirements` is not supported."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"e5187e37_9b8e04cd","line":5,"in_reply_to":"1cc1ee08_46c395de","updated":"2024-07-22 16:40:10.000000000","message":"Done","commit_id":"e65d111fb0fe13927803cad9dfc8851fa1204728"}]}
