)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"d77b645cb527acb1c1b657179698d9f5d6d7af01","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"8d1c0bd9_ea09f0d7","updated":"2022-02-23 23:16:23.000000000","message":"This will be superceded soon by the aws driver rework: https://review.opendev.org/c/zuul/nodepool/+/830525","commit_id":"4368440089be901b36f51d491c3ebeaea58a1dd3"}],"doc/source/aws.rst":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"74b127e72d5f725df02c31556a441e0942553936","unresolved":true,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"      See `Boto Configuration`_ for more information."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"   .. attr:: vmimport"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"      Required if diskimages are configured for this provider."},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"3f990582_3625e55b","line":92,"range":{"start_line":92,"start_character":13,"end_line":92,"end_character":21},"updated":"2021-01-13 15:28:27.000000000","message":"I think this is non-intuitive and could be renamed to diskimage-import or similar.","commit_id":"d4e793dfcd41140038ea6739eb8208315da62793"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"398071653e9e8cdaf52fe013af5999d8cdbec4a6","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"      See `Boto Configuration`_ for more information."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"   .. attr:: vmimport"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"      Required if diskimages are configured for this provider."},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"0eef9103_403f42bf","line":92,"range":{"start_line":92,"start_character":13,"end_line":92,"end_character":21},"in_reply_to":"3f990582_3625e55b","updated":"2021-01-14 16:01:53.000000000","message":"Done","commit_id":"d4e793dfcd41140038ea6739eb8208315da62793"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"74b127e72d5f725df02c31556a441e0942553936","unresolved":true,"context_lines":[{"line_number":104,"context_line":"         :type: str"},{"line_number":105,"context_line":"         :default: vmimport"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"         Role to assign the import image task."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"      .. attr:: basedir"},{"line_number":110,"context_line":"         :type: str"}],"source_content_type":"text/x-rst","patch_set":19,"id":"0ad3bec1_1d58ee5f","line":107,"updated":"2021-01-13 15:28:27.000000000","message":"This should be described in more detail and include the link to the docs: https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-role","commit_id":"d4e793dfcd41140038ea6739eb8208315da62793"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"398071653e9e8cdaf52fe013af5999d8cdbec4a6","unresolved":false,"context_lines":[{"line_number":104,"context_line":"         :type: str"},{"line_number":105,"context_line":"         :default: vmimport"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"         Role to assign the import image task."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"      .. attr:: basedir"},{"line_number":110,"context_line":"         :type: str"}],"source_content_type":"text/x-rst","patch_set":19,"id":"4d54114e_709cf6e6","line":107,"in_reply_to":"0ad3bec1_1d58ee5f","updated":"2021-01-14 16:01:53.000000000","message":"Done","commit_id":"d4e793dfcd41140038ea6739eb8208315da62793"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"     providers:"},{"line_number":39,"context_line":"       - name: ec2-us-west-2"},{"line_number":40,"context_line":"         driver: aws"},{"line_number":41,"context_line":"         region-name: us-west-2"},{"line_number":42,"context_line":"         cloud-images:"},{"line_number":43,"context_line":"           - name: debian9"},{"line_number":44,"context_line":"             image-id: ami-09c308526d9534717"}],"source_content_type":"text/x-rst","patch_set":20,"id":"6e5d0d95_9412c8ba","line":41,"updated":"2021-02-06 22:30:20.000000000","message":"I think that would be good.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"062fc5cb9e3b3ac22889cab5b84e13857b75b76e","unresolved":true,"context_lines":[{"line_number":38,"context_line":"     providers:"},{"line_number":39,"context_line":"       - name: ec2-us-west-2"},{"line_number":40,"context_line":"         driver: aws"},{"line_number":41,"context_line":"         region-name: us-west-2"},{"line_number":42,"context_line":"         cloud-images:"},{"line_number":43,"context_line":"           - name: debian9"},{"line_number":44,"context_line":"             image-id: ami-09c308526d9534717"}],"source_content_type":"text/x-rst","patch_set":20,"id":"180eed0b_c0bf2b0c","line":41,"updated":"2021-02-04 17:17:28.000000000","message":"Should we add an example diskimage-import configuration here since the new label below uses a diskimage? My read of the diskimage-import documentation is that this provider must now supply diskimage-import configs so having that in the example is probably a good idea.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"c204aa9bbdd455ee3bcf2f139f5cead3a9ccf097","unresolved":false,"context_lines":[{"line_number":38,"context_line":"     providers:"},{"line_number":39,"context_line":"       - name: ec2-us-west-2"},{"line_number":40,"context_line":"         driver: aws"},{"line_number":41,"context_line":"         region-name: us-west-2"},{"line_number":42,"context_line":"         cloud-images:"},{"line_number":43,"context_line":"           - name: debian9"},{"line_number":44,"context_line":"             image-id: ami-09c308526d9534717"}],"source_content_type":"text/x-rst","patch_set":20,"id":"085f07ef_629ed0d9","line":41,"in_reply_to":"180eed0b_c0bf2b0c","updated":"2021-02-16 14:46:13.000000000","message":"Done","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":267,"context_line":"         The connection type that a consumer should use when connecting"},{"line_number":268,"context_line":"         to the node. For most diskimages this is not"},{"line_number":269,"context_line":"         necessary. However when creating Windows images this could be"},{"line_number":270,"context_line":"         ``winrm`` to enable access via ansible."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"      .. attr:: connection-port"},{"line_number":273,"context_line":"         :type: int"}],"source_content_type":"text/x-rst","patch_set":20,"id":"aef68a4b_15f59279","line":270,"updated":"2021-02-06 22:30:20.000000000","message":"I think this is okay as written since windows does support both ssh and winrm.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":29671,"name":"Albin Vass","email":"opendev@albinvass.com","username":"albin_vass"},"change_message_id":"5fba2b8e5e2caca5fb587099d0b92769959ab589","unresolved":true,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"         The connection type that a consumer should use when connecting"},{"line_number":268,"context_line":"         to the node. For most diskimages this is not"},{"line_number":269,"context_line":"         necessary. However when creating Windows images this could be"},{"line_number":270,"context_line":"         ``winrm`` to enable access via ansible."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"      .. attr:: connection-port"},{"line_number":273,"context_line":"         :type: int"}],"source_content_type":"text/x-rst","patch_set":20,"id":"0b78f73c_8f727ef3","line":270,"range":{"start_line":269,"start_character":20,"end_line":270,"end_character":47},"updated":"2021-01-15 09:52:58.000000000","message":"Most of the time this should be `winrm` for windows nodes (since ssh modules are still experimental).\n\n\u003e However when creating Windows images this should be set to ``winrm`` for ansible to access the node.\n\n\nBut technically dib also cannot create windows images :)","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":4162,"name":"Paul Belanger","email":"pabelanger@redhat.com","username":"pabelanger"},"change_message_id":"cb5cdb9bdd5904f54b0fd6b854f1a2ae6b6b0a09","unresolved":true,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"      Format for image names that are uploaded to providers."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"   .. attr:: post-upload-hook"},{"line_number":307,"context_line":"      :type: string"},{"line_number":308,"context_line":"      :default: None"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"      Filename of an optional script that can be called after an image has"},{"line_number":311,"context_line":"      been uploaded to a provider but before it is taken into use. This is"},{"line_number":312,"context_line":"      useful to perform last minute validation tests before an image is"},{"line_number":313,"context_line":"      really used for build nodes. The script will be called as follows:"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"      ``\u003cSCRIPT\u003e \u003cPROVIDER\u003e \u003cEXTERNAL_IMAGE_ID\u003e \u003cLOCAL_IMAGE_FILENAME\u003e``"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"      If the script returns with result code 0 it is treated as successful"},{"line_number":318,"context_line":"      otherwise it is treated as failed and the image gets deleted."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"   .. attr:: pools"},{"line_number":321,"context_line":"      :type: list"}],"source_content_type":"text/x-rst","patch_set":23,"id":"3d535be5_a9f01dee","line":318,"range":{"start_line":306,"start_character":0,"end_line":318,"end_character":67},"updated":"2021-03-10 15:51:57.000000000","message":"This looks like a large API change between openstack provider; we also used to support this logic, but removed it for zuulv3.  And decided zuul-executors would only SSH into the nodes.\n\nHas this changed? We likely want to have a larger discussion about it.","commit_id":"f884e8c7229d30e56f79cf47aa5cca9992fa7151"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"980a38b22b45e87accdb6c4dc45a1dcbae47ac22","unresolved":true,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"      Format for image names that are uploaded to providers."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"   .. attr:: post-upload-hook"},{"line_number":307,"context_line":"      :type: string"},{"line_number":308,"context_line":"      :default: None"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"      Filename of an optional script that can be called after an image has"},{"line_number":311,"context_line":"      been uploaded to a provider but before it is taken into use. This is"},{"line_number":312,"context_line":"      useful to perform last minute validation tests before an image is"},{"line_number":313,"context_line":"      really used for build nodes. The script will be called as follows:"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"      ``\u003cSCRIPT\u003e \u003cPROVIDER\u003e \u003cEXTERNAL_IMAGE_ID\u003e \u003cLOCAL_IMAGE_FILENAME\u003e``"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"      If the script returns with result code 0 it is treated as successful"},{"line_number":318,"context_line":"      otherwise it is treated as failed and the image gets deleted."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"   .. attr:: pools"},{"line_number":321,"context_line":"      :type: list"}],"source_content_type":"text/x-rst","patch_set":23,"id":"4238fd4b_89020e57","line":318,"range":{"start_line":306,"start_character":0,"end_line":318,"end_character":67},"in_reply_to":"3d535be5_a9f01dee","updated":"2021-03-11 08:32:44.000000000","message":"I think there is a misunderstanding. This is not about ssh into the nodes. The post upload hook is running locally and has been added to the openstack driver long ago to support use cases like enforcing image distribution to compute nodes or post upload sanity checks before taking an image into production.","commit_id":"f884e8c7229d30e56f79cf47aa5cca9992fa7151"},{"author":{"_account_id":4162,"name":"Paul Belanger","email":"pabelanger@redhat.com","username":"pabelanger"},"change_message_id":"d4503ce78e1dc0a8f0255eeebb08dd0e39b00779","unresolved":true,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"      Format for image names that are uploaded to providers."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"   .. attr:: post-upload-hook"},{"line_number":307,"context_line":"      :type: string"},{"line_number":308,"context_line":"      :default: None"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"      Filename of an optional script that can be called after an image has"},{"line_number":311,"context_line":"      been uploaded to a provider but before it is taken into use. This is"},{"line_number":312,"context_line":"      useful to perform last minute validation tests before an image is"},{"line_number":313,"context_line":"      really used for build nodes. The script will be called as follows:"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"      ``\u003cSCRIPT\u003e \u003cPROVIDER\u003e \u003cEXTERNAL_IMAGE_ID\u003e \u003cLOCAL_IMAGE_FILENAME\u003e``"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"      If the script returns with result code 0 it is treated as successful"},{"line_number":318,"context_line":"      otherwise it is treated as failed and the image gets deleted."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"   .. attr:: pools"},{"line_number":321,"context_line":"      :type: list"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9f776500_6925a436","line":318,"range":{"start_line":306,"start_character":0,"end_line":318,"end_character":67},"in_reply_to":"4238fd4b_89020e57","updated":"2021-03-12 17:18:23.000000000","message":"Thanks for the info, I missed that in the docs.","commit_id":"f884e8c7229d30e56f79cf47aa5cca9992fa7151"}],"nodepool/driver/aws/config.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9d932435b0eba2d0f6046db932d5aab631ed7fdf","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def __repr__(self):"},{"line_number":40,"context_line":"        return \"\u003cProviderDiskImage %s\u003e\" % self.name"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class ProviderCloudImage(ConfigValue):"},{"line_number":43,"context_line":"    def __init__(self):"},{"line_number":44,"context_line":"        self.name \u003d None"},{"line_number":45,"context_line":"        self.image_id \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_a5f2fa99","line":42,"updated":"2020-06-11 22:02:36.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"9d0c812e1f3892c42b0d87755caec7ac1ef927ab"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9d932435b0eba2d0f6046db932d5aab631ed7fdf","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            v.Required(\u0027pools\u0027): [pool],"},{"line_number":325,"context_line":"            v.Required(\u0027region-name\u0027): str,"},{"line_number":326,"context_line":"            \u0027profile-name\u0027: str,"},{"line_number":327,"context_line":"            \u0027cloud-images\u0027: [provider_cloud_images],"},{"line_number":328,"context_line":"            \u0027cloud-images\u0027: [provider_diskimage],"},{"line_number":329,"context_line":"            \u0027hostname-format\u0027: str,"},{"line_number":330,"context_line":"            \u0027boot-timeout\u0027: int,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_05f2c69a","line":327,"updated":"2020-06-11 22:02:36.000000000","message":"pep8: F601 dictionary key \u0027cloud-images\u0027 repeated with different values","commit_id":"9d0c812e1f3892c42b0d87755caec7ac1ef927ab"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9d932435b0eba2d0f6046db932d5aab631ed7fdf","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            v.Required(\u0027region-name\u0027): str,"},{"line_number":326,"context_line":"            \u0027profile-name\u0027: str,"},{"line_number":327,"context_line":"            \u0027cloud-images\u0027: [provider_cloud_images],"},{"line_number":328,"context_line":"            \u0027cloud-images\u0027: [provider_diskimage],"},{"line_number":329,"context_line":"            \u0027hostname-format\u0027: str,"},{"line_number":330,"context_line":"            \u0027boot-timeout\u0027: int,"},{"line_number":331,"context_line":"            \u0027launch-retries\u0027: int,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_e5ecf2bc","line":328,"updated":"2020-06-11 22:02:36.000000000","message":"pep8: F601 dictionary key \u0027cloud-images\u0027 repeated with different values","commit_id":"9d0c812e1f3892c42b0d87755caec7ac1ef927ab"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"deca56186469a0c62c4d395fdde163a31d03aeab","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def __repr__(self):"},{"line_number":40,"context_line":"        return \"\u003cProviderDiskImage %s\u003e\" % self.name"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class ProviderCloudImage(ConfigValue):"},{"line_number":43,"context_line":"    def __init__(self):"},{"line_number":44,"context_line":"        self.name \u003d None"},{"line_number":45,"context_line":"        self.image_id \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_6b61d011","line":42,"updated":"2020-06-12 11:09:29.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"5e01b880224c50f4c6a8c083ec4f5d539c016b7b"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"062fc5cb9e3b3ac22889cab5b84e13857b75b76e","unresolved":true,"context_lines":[{"line_number":356,"context_line":"            \u0027hostname-format\u0027: str,"},{"line_number":357,"context_line":"            \u0027boot-timeout\u0027: int,"},{"line_number":358,"context_line":"            \u0027launch-retries\u0027: int,"},{"line_number":359,"context_line":"            \u0027vmimport\u0027: {"},{"line_number":360,"context_line":"                v.Required(\u0027bucket\u0027): str,"},{"line_number":361,"context_line":"                \u0027role\u0027: str,"},{"line_number":362,"context_line":"                \u0027basedir\u0027: str,"}],"source_content_type":"text/x-python","patch_set":20,"id":"6d7fdc80_97894e5d","line":359,"range":{"start_line":359,"start_character":13,"end_line":359,"end_character":21},"updated":"2021-02-04 17:17:28.000000000","message":"The docs call this key diskimage-import. I think we need to make the schema and docs agreee?","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            \u0027hostname-format\u0027: str,"},{"line_number":357,"context_line":"            \u0027boot-timeout\u0027: int,"},{"line_number":358,"context_line":"            \u0027launch-retries\u0027: int,"},{"line_number":359,"context_line":"            \u0027vmimport\u0027: {"},{"line_number":360,"context_line":"                v.Required(\u0027bucket\u0027): str,"},{"line_number":361,"context_line":"                \u0027role\u0027: str,"},{"line_number":362,"context_line":"                \u0027basedir\u0027: str,"}],"source_content_type":"text/x-python","patch_set":20,"id":"a1f13587_aead4f40","line":359,"updated":"2021-02-06 22:30:20.000000000","message":"Yes.  This should have failed testing, but I guess extra keys are allowed, and this schema isn\u0027t sophisticated enough to make diskimage-import required conditional on diskimages being present.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"c204aa9bbdd455ee3bcf2f139f5cead3a9ccf097","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            \u0027hostname-format\u0027: str,"},{"line_number":357,"context_line":"            \u0027boot-timeout\u0027: int,"},{"line_number":358,"context_line":"            \u0027launch-retries\u0027: int,"},{"line_number":359,"context_line":"            \u0027vmimport\u0027: {"},{"line_number":360,"context_line":"                v.Required(\u0027bucket\u0027): str,"},{"line_number":361,"context_line":"                \u0027role\u0027: str,"},{"line_number":362,"context_line":"                \u0027basedir\u0027: str,"}],"source_content_type":"text/x-python","patch_set":20,"id":"de827c71_337eb724","line":359,"range":{"start_line":359,"start_character":13,"end_line":359,"end_character":21},"in_reply_to":"6d7fdc80_97894e5d","updated":"2021-02-16 14:46:13.000000000","message":"Done","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"}],"nodepool/driver/aws/handler.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"deca56186469a0c62c4d395fdde163a31d03aeab","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            self.label.connection_port \u003d diskimage.connection_port"},{"line_number":55,"context_line":"            self.label.connection_type \u003d diskimage.connection_type"},{"line_number":56,"context_line":"            self.label."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        while attempts \u003c\u003d self.retries:"},{"line_number":59,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_4b64cc21","line":56,"updated":"2020-06-12 11:09:29.000000000","message":"pep8: E999 SyntaxError: invalid syntax","commit_id":"5e01b880224c50f4c6a8c083ec4f5d539c016b7b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b93ca3d00593a6ef0892d75db625f9c3e0ebfba1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    (diskimage.name, self.provider_config.name)"},{"line_number":47,"context_line":"                )"},{"line_number":48,"context_line":"            cloud_image \u003d ProviderCloudImage()"},{"line_number":49,"context_line":"            cloud_image.name image_upload.image_name"},{"line_number":50,"context_line":"            cloud_image.image_id \u003d image_upload.external_id"},{"line_number":51,"context_line":"            cloud_image.username \u003d image_upload.username"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bf51134e_f32f4e85","line":49,"updated":"2020-06-23 13:14:02.000000000","message":"pep8: E999 SyntaxError: invalid syntax","commit_id":"a414bf9cf2a6cb4a39f0291b118e32da505a6795"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b93ca3d00593a6ef0892d75db625f9c3e0ebfba1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            cloud_image.username \u003d image_upload.username"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            self.label.connection_port \u003d diskimage.connection_port"},{"line_number":55,"context_line":"            self.label.connection_type \u003d diskimage.connection_type"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        while attempts \u003c\u003d self.retries:"}],"source_content_type":"text/x-python","patch_set":11,"id":"bf51134e_534efa6e","line":54,"updated":"2020-06-23 13:14:02.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"a414bf9cf2a6cb4a39f0291b118e32da505a6795"}],"nodepool/driver/aws/provider.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fbde5fac4b66da8c4bc520e9e881f69a9f5032e0","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def uploadImage(self, image_name, filename, image_type\u003dNone, meta\u003dNone):"},{"line_number":147,"context_line":"        s3_client \u003d self.aws.client(\"s3\")"},{"line_number":148,"context_line":"        response \u003d s3_client.upload_file(filename, self.s3_image_bucket, image_name)"},{"line_number":149,"context_line":"        args \u003d dict("},{"line_number":150,"context_line":"            DiskContainers\u003d["},{"line_number":151,"context_line":"                UserBucket\u003ddict("}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_eab16146","line":148,"updated":"2020-06-11 20:26:27.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"c20a0e2911482ab4497c8816290e32b467b42188"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fbde5fac4b66da8c4bc520e9e881f69a9f5032e0","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        response \u003d s3_client.upload_file(filename, self.s3_image_bucket, image_name)"},{"line_number":149,"context_line":"        args \u003d dict("},{"line_number":150,"context_line":"            DiskContainers\u003d["},{"line_number":151,"context_line":"                UserBucket\u003ddict("},{"line_number":152,"context_line":"                    S3Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":153,"context_line":"                    S3Key\u003dfilename,"},{"line_number":154,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_4a820d54","line":151,"updated":"2020-06-11 20:26:27.000000000","message":"pep8: E999 SyntaxError: invalid syntax","commit_id":"c20a0e2911482ab4497c8816290e32b467b42188"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9d932435b0eba2d0f6046db932d5aab631ed7fdf","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        s3_client.upload_file(filename, self.s3_image_bucket, image_name)"},{"line_number":149,"context_line":"        args \u003d dict("},{"line_number":150,"context_line":"            DiskContainers\u003d["},{"line_number":151,"context_line":"                UserBucket\u003ddict("},{"line_number":152,"context_line":"                    S3Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":153,"context_line":"                    S3Key\u003dfilename,"},{"line_number":154,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_c5f72e8c","line":151,"updated":"2020-06-11 22:02:36.000000000","message":"pep8: E999 SyntaxError: invalid syntax","commit_id":"9d0c812e1f3892c42b0d87755caec7ac1ef927ab"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"deca56186469a0c62c4d395fdde163a31d03aeab","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        s3_client.upload_file(filename, self.s3_image_bucket, image_name)"},{"line_number":148,"context_line":"        args \u003d dict("},{"line_number":149,"context_line":"            DiskContainers\u003d["},{"line_number":150,"context_line":"                UserBucket\u003ddict("},{"line_number":151,"context_line":"                    S3Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":152,"context_line":"                    S3Key\u003dfilename,"},{"line_number":153,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_ab6be8ee","line":150,"updated":"2020-06-12 11:09:29.000000000","message":"pep8: E999 SyntaxError: invalid syntax","commit_id":"5e01b880224c50f4c6a8c083ec4f5d539c016b7b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2860046e4e7aafbab1d5c597a923e2e668243e28","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        )"},{"line_number":167,"context_line":"        image \u003d self.ec2_client.import_image(**args)"},{"line_number":168,"context_line":"        # TODO wait for import to finish"},{"line_number":169,"context_line":"        s3_client.delete_object(Bucket\u003dself.provider.s3_image_bucket[\u0027name\u0027], Key\u003ddest)"},{"line_number":170,"context_line":"        return image.get(\u0027ImageId\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def deleteImage(self, image_name, image_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_345f7b42","line":169,"updated":"2020-06-15 23:24:03.000000000","message":"pep8: E501 line too long (87 \u003e 79 characters)","commit_id":"a9d02cea50da20414569f097078220345dee77d1"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def uploadImage(self, image_name, filename, image_type\u003dNone, meta\u003dNone,"},{"line_number":168,"context_line":"                    md5\u003dNone, sha256\u003dNone):"},{"line_number":169,"context_line":"        dest \u003d image_name"},{"line_number":170,"context_line":"        if self.provider.s3_image_basedir:"},{"line_number":171,"context_line":"            dest \u003d self.provider.s3_image_basedir + \u0027/\u0027 + dest"},{"line_number":172,"context_line":"        self.log.debug(\"Uploading image %s to %s/%s\","}],"source_content_type":"text/x-python","patch_set":20,"id":"f4b1eb82_ff2e2d37","line":169,"updated":"2021-02-06 22:30:20.000000000","message":"I notice that the s3 dest is basically just the image name.  If it leaks and then we later upload a new image with the same name, will that just overwrite the previous image?  If so, then great.  If not, we may need to do more leak handling here.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"c204aa9bbdd455ee3bcf2f139f5cead3a9ccf097","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def uploadImage(self, image_name, filename, image_type\u003dNone, meta\u003dNone,"},{"line_number":168,"context_line":"                    md5\u003dNone, sha256\u003dNone):"},{"line_number":169,"context_line":"        dest \u003d image_name"},{"line_number":170,"context_line":"        if self.provider.s3_image_basedir:"},{"line_number":171,"context_line":"            dest \u003d self.provider.s3_image_basedir + \u0027/\u0027 + dest"},{"line_number":172,"context_line":"        self.log.debug(\"Uploading image %s to %s/%s\","}],"source_content_type":"text/x-python","patch_set":20,"id":"084f5142_838cc423","line":169,"in_reply_to":"f4b1eb82_ff2e2d37","updated":"2021-02-16 14:46:13.000000000","message":"The image name here is actually the ext_image_name from the upload worker which has a timestamp attached to the image name specified in the config (e.g. ubuntu1804-1613482878).","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                response \u003d self.ec2_client.describe_import_image_tasks("},{"line_number":208,"context_line":"                    ImportTaskIds\u003d[import_task_id]"},{"line_number":209,"context_line":"                )"},{"line_number":210,"context_line":"                import_image_task \u003d response[\u0027ImportImageTasks\u0027][0]"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.s3_client.delete_object(Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":213,"context_line":"                                     Key\u003ddest)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7d3913dd_2c01a434","line":210,"updated":"2021-02-06 22:30:20.000000000","message":"Not a minus one: we could use iterate_timeout here and have a really long timeout in case the import gets permanently stuck.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"c204aa9bbdd455ee3bcf2f139f5cead3a9ccf097","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                response \u003d self.ec2_client.describe_import_image_tasks("},{"line_number":208,"context_line":"                    ImportTaskIds\u003d[import_task_id]"},{"line_number":209,"context_line":"                )"},{"line_number":210,"context_line":"                import_image_task \u003d response[\u0027ImportImageTasks\u0027][0]"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.s3_client.delete_object(Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":213,"context_line":"                                     Key\u003ddest)"}],"source_content_type":"text/x-python","patch_set":20,"id":"80b1bde2_d73b8d76","line":210,"in_reply_to":"7d3913dd_2c01a434","updated":"2021-02-16 14:46:13.000000000","message":"done","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                import_image_task \u003d response[\u0027ImportImageTasks\u0027][0]"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.s3_client.delete_object(Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":213,"context_line":"                                     Key\u003ddest)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if status \u003d\u003d \u0027deleted\u0027:"},{"line_number":216,"context_line":"            raise ValueError(import_image_task[\u0027StatusMessage\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"26fc3ec5_18730894","line":213,"updated":"2021-02-06 22:30:20.000000000","message":"I agree, that is easy and worthwhile.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"062fc5cb9e3b3ac22889cab5b84e13857b75b76e","unresolved":true,"context_lines":[{"line_number":210,"context_line":"                import_image_task \u003d response[\u0027ImportImageTasks\u0027][0]"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.s3_client.delete_object(Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":213,"context_line":"                                     Key\u003ddest)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if status \u003d\u003d \u0027deleted\u0027:"},{"line_number":216,"context_line":"            raise ValueError(import_image_task[\u0027StatusMessage\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"41de7c6f_52b81487","line":213,"updated":"2021-02-04 17:17:28.000000000","message":"You may want to put this s3 delete in a finally block to ensure that nodepool will try very hard to clean it up even if things go wrong. This will help avoid leaking objects in s3.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"c204aa9bbdd455ee3bcf2f139f5cead3a9ccf097","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                import_image_task \u003d response[\u0027ImportImageTasks\u0027][0]"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.s3_client.delete_object(Bucket\u003dself.provider.s3_image_bucket,"},{"line_number":213,"context_line":"                                     Key\u003ddest)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if status \u003d\u003d \u0027deleted\u0027:"},{"line_number":216,"context_line":"            raise ValueError(import_image_task[\u0027StatusMessage\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"f793a635_ed776d36","line":213,"in_reply_to":"41de7c6f_52b81487","updated":"2021-02-16 14:46:13.000000000","message":"Done","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def deleteImage(self, image_name, image_id):"},{"line_number":231,"context_line":"        self.log.debug(\"Deregistering image %s: %s\", image_name, image_id)"},{"line_number":232,"context_line":"        self.ec2_client.deregister_image(ImageId\u003dimage_id)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def join(self):"},{"line_number":235,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f33eaf3_b1d25130","line":232,"updated":"2021-02-06 22:30:20.000000000","message":"Agreed, and if the deletion fails, let that exception propogate up so we keep the ZK record.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"062fc5cb9e3b3ac22889cab5b84e13857b75b76e","unresolved":true,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def deleteImage(self, image_name, image_id):"},{"line_number":231,"context_line":"        self.log.debug(\"Deregistering image %s: %s\", image_name, image_id)"},{"line_number":232,"context_line":"        self.ec2_client.deregister_image(ImageId\u003dimage_id)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def join(self):"},{"line_number":235,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"ced99981_871299b1","line":232,"updated":"2021-02-04 17:17:28.000000000","message":"Related to my concern about leaks above. You may also want to check if the s3 object is present at this point and delete it here as well if so.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"c204aa9bbdd455ee3bcf2f139f5cead3a9ccf097","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def deleteImage(self, image_name, image_id):"},{"line_number":231,"context_line":"        self.log.debug(\"Deregistering image %s: %s\", image_name, image_id)"},{"line_number":232,"context_line":"        self.ec2_client.deregister_image(ImageId\u003dimage_id)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def join(self):"},{"line_number":235,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"5c27cde5_66c6db0e","line":232,"in_reply_to":"ced99981_871299b1","updated":"2021-02-16 14:46:13.000000000","message":"Done","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"}],"nodepool/tests/fixtures/aws.yaml":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"providers:"},{"line_number":31,"context_line":"  - name: ec2-us-west-2"},{"line_number":32,"context_line":"    driver: aws"},{"line_number":33,"context_line":"    region-name: us-west-2"},{"line_number":34,"context_line":"    diskimages:"},{"line_number":35,"context_line":"      - name: dib-ubuntu1804"},{"line_number":36,"context_line":"    cloud-images:"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"350625a5_062c6aea","line":33,"updated":"2021-02-06 22:30:20.000000000","message":"Agreed.","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"062fc5cb9e3b3ac22889cab5b84e13857b75b76e","unresolved":true,"context_lines":[{"line_number":30,"context_line":"providers:"},{"line_number":31,"context_line":"  - name: ec2-us-west-2"},{"line_number":32,"context_line":"    driver: aws"},{"line_number":33,"context_line":"    region-name: us-west-2"},{"line_number":34,"context_line":"    diskimages:"},{"line_number":35,"context_line":"      - name: dib-ubuntu1804"},{"line_number":36,"context_line":"    cloud-images:"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"8240b0dc_31a4e04d","line":33,"updated":"2021-02-04 17:17:28.000000000","message":"Doesn\u0027t this need a vmimport/diskimage-import section too?","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"}],"nodepool/tests/unit/test_driver_aws.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2aea5414eb5a823d5678773c9c51bd248c2325d6","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                self.zk.storeNode(node)"},{"line_number":202,"context_line":"                self.waitForNodeDeletion(node)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _prepare_diskimage_label(self, provider_manager):"},{"line_number":205,"context_line":"        def _labelReadyTrue(label):"},{"line_number":206,"context_line":"            return True"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"b2b17458_831afcfe","line":204,"updated":"2021-02-06 22:30:20.000000000","message":"This causes the new code not to run (because it adds the data to ZK as if it had already run).  The rest of the AWS tests use boto to actually exercise nodepool code.  Can we do that here?","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"},{"author":{"_account_id":22907,"name":"Jonas Sticha","email":"jonas.sticha@bmw.de","username":"jonas.sticha"},"change_message_id":"c204aa9bbdd455ee3bcf2f139f5cead3a9ccf097","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                self.zk.storeNode(node)"},{"line_number":202,"context_line":"                self.waitForNodeDeletion(node)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _prepare_diskimage_label(self, provider_manager):"},{"line_number":205,"context_line":"        def _labelReadyTrue(label):"},{"line_number":206,"context_line":"            return True"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ad84c4ae_36639b8e","line":204,"in_reply_to":"b2b17458_831afcfe","updated":"2021-02-16 14:46:13.000000000","message":"Thanks for your remark, I forgot to take out the labelReady mock method. Now the actual labelReady code in the aws provider will be executed.\nHowever, as large parts of this patch are in the image_upload, I added an additional test case to test the image upload aswell (executing the boto3 code where possible).\nI did this in an extra commit, as I had to restructure the existing test case to avoid duplicate code and did not want this commit to get too big.\nhttps://review.opendev.org/c/zuul/nodepool/+/775844","commit_id":"0520a58c31c62dc089fa1dfb8f1f15754afd19b5"}]}
