)]}'
{"id":"openstack%2Fopenstacksdk~657411","triplet_id":"openstack%2Fopenstacksdk~master~If9eafdd7b60098ed5bbc37ad06757a6f7e348b4d","project":"openstack/openstacksdk","branch":"master","topic":"verify-image-checksums","hashtags":[],"change_id":"If9eafdd7b60098ed5bbc37ad06757a6f7e348b4d","subject":"Verify image checksums after upload","status":"ABANDONED","created":"2019-05-06 17:29:27.000000000","updated":"2019-05-16 15:11:26.000000000","total_comment_count":1,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"29215d7a2a3f21d8aba8e89e1d49822900fb3be3","_number":657411,"virtual_id_number":657411,"owner":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"date":"2019-05-07 19:01:39.000000000","_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},{"value":1,"date":"2019-05-06 20:12:57.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"recommended":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"disliked":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"all":[{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},{"value":1,"date":"2019-05-06 18:20:15.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},{"value":-1,"date":"2019-05-07 10:14:41.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","value":-1,"default_value":0,"optional":true},"Workflow":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Allow-Post-Review":{"all":[{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{" 0":"Abstain","+1":"Approved for Zuul Post Review Pipeline"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2019-05-06 18:20:15.000000000","updated_by":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"reviewer":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"state":"REVIEWER"},{"updated":"2019-05-06 20:12:57.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2019-05-07 10:14:41.000000000","updated_by":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"reviewer":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"state":"REVIEWER"}],"messages":[{"id":"95256b32c5a4772d6715de832ef54f84115b661f","author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"date":"2019-05-06 17:29:27.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"c4b4cda4d588a619808e2b336ca2b2fef425a73d","author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"date":"2019-05-06 17:34:10.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"0ffb73fe2958eb8f2aa2d9e489084ce241cf3e38","author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"date":"2019-05-06 17:59:17.000000000","message":"Patch Set 2:\n\n(1 comment)","accounts_in_message":[],"_revision_number":2},{"id":"c2697ee3a3dcb1396217d6e5e97e1f35b9ac1fc7","author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"date":"2019-05-06 18:17:11.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"cd947603cd3bfddee37878e709df0125f1b99008","author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"date":"2019-05-06 18:20:15.000000000","message":"Patch Set 3: Code-Review+1","accounts_in_message":[],"_revision_number":3},{"id":"dc0c496b4d9043e2fe34a596adcbef5f7a3e46dc","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-05-06 20:12:57.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\n\n- openstack-tox-lower-constraints http://logs.openstack.org/11/657411/3/check/openstack-tox-lower-constraints/31ae0be/ : SUCCESS in 3m 01s\n- openstack-tox-pep8 http://logs.openstack.org/11/657411/3/check/openstack-tox-pep8/dbc0bbd/ : SUCCESS in 2m 48s\n- openstack-tox-py27 http://logs.openstack.org/11/657411/3/check/openstack-tox-py27/6154a26/ : SUCCESS in 2m 48s\n- openstack-tox-py36 http://logs.openstack.org/11/657411/3/check/openstack-tox-py36/646bc8d/ : SUCCESS in 3m 09s\n- openstack-tox-py37 http://logs.openstack.org/11/657411/3/check/openstack-tox-py37/b24fb76/ : SUCCESS in 3m 04s\n- openstacksdk-functional-devstack-tips http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-tips/3e09e00/ : SUCCESS in 1h 05m 50s\n- openstacksdk-functional-devstack-tips-python2 http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-tips-python2/dc22e9e/ : SUCCESS in 56m 31s\n- openstacksdk-tox-py36-tips http://logs.openstack.org/11/657411/3/check/openstacksdk-tox-py36-tips/7e041f5/ : SUCCESS in 3m 34s\n- os-client-config-tox-py27-tips http://logs.openstack.org/11/657411/3/check/os-client-config-tox-py27-tips/47ce8ef/ : SUCCESS in 4m 25s\n- os-client-config-tox-py37-tips http://logs.openstack.org/11/657411/3/check/os-client-config-tox-py37-tips/4bc2261/ : SUCCESS in 7m 02s\n- osc-tox-py27-tips http://logs.openstack.org/11/657411/3/check/osc-tox-py27-tips/db0680b/ : SUCCESS in 5m 39s\n- osc-tox-py36-tips http://logs.openstack.org/11/657411/3/check/osc-tox-py36-tips/ccea483/ : SUCCESS in 5m 35s\n- openstack-tox-docs http://logs.openstack.org/11/657411/3/check/openstack-tox-docs/c87c917/html/ : SUCCESS in 4m 08s\n- openstacksdk-ansible-devel-functional-devstack http://logs.openstack.org/11/657411/3/check/openstacksdk-ansible-devel-functional-devstack/4644aa4/ : SUCCESS in 40m 48s (non-voting)\n- openstacksdk-ansible-stable-2.6-functional-devstack http://logs.openstack.org/11/657411/3/check/openstacksdk-ansible-stable-2.6-functional-devstack/30df4d9/ : SUCCESS in 35m 30s (non-voting)\n- openstacksdk-functional-devstack http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack/dcf36d5/ : SUCCESS in 1h 21m 54s\n- openstacksdk-functional-devstack-networking http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-networking/7e7d041/ : SUCCESS in 1h 51m 15s\n- openstacksdk-functional-devstack-senlin http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-senlin/668adb2/ : SUCCESS in 1h 17m 52s\n- openstacksdk-functional-devstack-magnum http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-magnum/d3c7a10/ : SUCCESS in 1h 23m 03s (non-voting)\n- openstacksdk-functional-devstack-masakari http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-masakari/f44dbda/ : SUCCESS in 37m 01s (non-voting)\n- openstacksdk-functional-devstack-ironic http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-ironic/8814512/ : SUCCESS in 42m 41s (non-voting)\n- openstacksdk-functional-devstack-python2 http://logs.openstack.org/11/657411/3/check/openstacksdk-functional-devstack-python2/a8b927c/ : SUCCESS in 1h 27m 54s\n- osc-functional-devstack-tips http://logs.openstack.org/11/657411/3/check/osc-functional-devstack-tips/70f29b3/ : SUCCESS in 1h 11m 39s (non-voting)\n- nodepool-functional-py35-src http://logs.openstack.org/11/657411/3/check/nodepool-functional-py35-src/37b939a/ : SUCCESS in 47m 17s\n- bifrost-integration-tinyipa-ubuntu-xenial http://logs.openstack.org/11/657411/3/check/bifrost-integration-tinyipa-ubuntu-xenial/f962138/ : SUCCESS in 20m 09s\n- metalsmith-integration-openstacksdk-src http://logs.openstack.org/11/657411/3/check/metalsmith-integration-openstacksdk-src/f2c80bd/ : SUCCESS in 1h 00m 13s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"ebad4311483a08026711ac14709ac0c05e0f4f0d","author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"date":"2019-05-07 10:14:41.000000000","message":"Patch Set 3: Code-Review-1\n\nThanks for pointing this Clark. Unfortunately there are few issues here:\n\n- md5, sha256 are suppressed currently and not end up here (BaseImageProxy.create_image do not pass them further)\n- checksum MIGHT be null, which will lead to exception here\n- there are some clouds, which will reprocess image in the backend and modify the checksum.\n- there is huge refactor patch for the image service (https://review.opendev.org/#/c/651534/) where I try to address this as well","accounts_in_message":[],"_revision_number":3},{"id":"9d670de53512e70a8f27866deef1126bd1d6801a","author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"date":"2019-05-07 19:01:39.000000000","message":"Patch Set 3:\n\n\u003e Thanks for pointing this Clark. Unfortunately there are few issues\n \u003e here:\n \u003e \n \u003e - md5, sha256 are suppressed currently and not end up here\n \u003e (BaseImageProxy.create_image do not pass them further)\n \u003e - checksum MIGHT be null, which will lead to exception here\n\nI think we should error if checksum is null because we can\u0027t do proper verification in that case. (And work with glance if we need to ensure they do the hashing inline so it is done when upload is complete).\n\n \u003e - there are some clouds, which will reprocess image in the backend\n \u003e and modify the checksum.\n\nThat completely breaks the user\u0027s ability to confirm they have a good image in glance. If this is an issue we need to work with glance to either do verification itself or perhaps carry multiple checksums for the before and after.\n\n \u003e - there is huge refactor patch for the image service\n \u003e (https://review.opendev.org/#/c/651534/) where I try to address\n \u003e this as well\n\nGood to know this is something others are wanting to fix as this is definitely an issue we\u0027ve run into in production. Thank you for doing that.\n\nShould I abandon this change given the one linked above?","accounts_in_message":[],"_revision_number":3},{"id":"e6a825d72915e10c16c83e9932960d3199b078ff","author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"date":"2019-05-08 06:50:43.000000000","message":"Patch Set 3:\n\n\u003e \u003e - md5, sha256 are suppressed currently and not end up here\n \u003e \u003e (BaseImageProxy.create_image do not pass them further)\n \u003e \u003e - checksum MIGHT be null, which will lead to exception here\n \u003e \n \u003e I think we should error if checksum is null because we can\u0027t do\n \u003e proper verification in that case. (And work with glance if we need\n \u003e to ensure they do the hashing inline so it is done when upload is\n \u003e complete).\n\nI have introduced verify_checksum parameter to create_image, which will allow this. Default is true, so nodepool gets what it needs, but there is still possibility to bypass this for \"bad clouds\"\n\n  \u003e \u003e - there are some clouds, which will reprocess image in the\n \u003e backend\n \u003e \u003e and modify the checksum.\n \u003e \n \u003e That completely breaks the user\u0027s ability to confirm they have a\n \u003e good image in glance. If this is an issue we need to work with\n \u003e glance to either do verification itself or perhaps carry multiple\n \u003e checksums for the before and after.\n\nAgree, but that is how it is and at least in one case used really in production. I assume actually all \"Huawei-based\" clouds have that issue.\n \u003e \n \u003e \u003e - there is huge refactor patch for the image service\n \u003e \u003e (https://review.opendev.org/#/c/651534/) where I try to address\n \u003e \u003e this as well\n \u003e \n \u003e Good to know this is something others are wanting to fix as this is\n \u003e definitely an issue we\u0027ve run into in production. Thank you for\n \u003e doing that.\n \u003e \n \u003e Should I abandon this change given the one linked above?\n\nLet\u0027s do it this way and I would appreciate your review there for this particular issue","accounts_in_message":[],"_revision_number":3},{"id":"8580181a7a3b652753884892e95abb6d3a051565","author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"date":"2019-05-16 15:11:26.000000000","message":"Abandoned\n\nThis has been taken up in the refactor of image uploading instead.","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"8a6af721d080d2e2fccb5bc46c57042ed269c269","revisions":{"1ab18daf7bdbc66ef5dd833404515cd053873cba":{"kind":"REWORK","_number":1,"created":"2019-05-06 17:29:27.000000000","uploader":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"ref":"refs/changes/11/657411/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstacksdk","ref":"refs/changes/11/657411/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/1"}}},"commit":{"parents":[{"commit":"90449d53a34324f413d438f21c6509389b852721","subject":"Merge \"Remove now unused task_manager file\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/90449d53a34324f413d438f21c6509389b852721"}]}],"author":{"name":"Clark Boylan","email":"clark.boylan@gmail.com","date":"2019-05-06 17:28:04.000000000","tz":-420},"committer":{"name":"Clark Boylan","email":"clark.boylan@gmail.com","date":"2019-05-06 17:29:24.000000000","tz":-420},"subject":"Verify image checksums after upload","message":"Verify image checksums after upload\n\nThe OpenStack Infra team noticed that nodepool (via openstack sdk)\nuploaded an invalid image. This prevented node boots from completing\nsuccessfully and would have been caught by a simple checksum check step.\n\nAdd this step to prevent openstacksdk users from attempting to use bad\nimage uploads.\n\nChange-Id: If9eafdd7b60098ed5bbc37ad06757a6f7e348b4d\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/1ab18daf7bdbc66ef5dd833404515cd053873cba"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/1ab18daf7bdbc66ef5dd833404515cd053873cba"}]},"branch":"refs/heads/master"},"46316f0aa5a7053ea147fd210a05b5b39f748c1c":{"kind":"REWORK","_number":2,"created":"2019-05-06 17:34:10.000000000","uploader":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"ref":"refs/changes/11/657411/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstacksdk","ref":"refs/changes/11/657411/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/2"}}},"commit":{"parents":[{"commit":"90449d53a34324f413d438f21c6509389b852721","subject":"Merge \"Remove now unused task_manager file\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/90449d53a34324f413d438f21c6509389b852721"}]}],"author":{"name":"Clark Boylan","email":"clark.boylan@gmail.com","date":"2019-05-06 17:28:04.000000000","tz":-420},"committer":{"name":"Clark Boylan","email":"clark.boylan@gmail.com","date":"2019-05-06 17:34:04.000000000","tz":-420},"subject":"Verify image checksums after upload","message":"Verify image checksums after upload\n\nThe OpenStack Infra team noticed that nodepool (via openstack sdk)\nuploaded an invalid image. This prevented node boots from completing\nsuccessfully and would have been caught by a simple checksum check step.\n\nAdd this step to prevent openstacksdk users from attempting to use bad\nimage uploads.\n\nChange-Id: If9eafdd7b60098ed5bbc37ad06757a6f7e348b4d\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/46316f0aa5a7053ea147fd210a05b5b39f748c1c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/46316f0aa5a7053ea147fd210a05b5b39f748c1c"}]},"branch":"refs/heads/master"},"8a6af721d080d2e2fccb5bc46c57042ed269c269":{"kind":"REWORK","_number":3,"created":"2019-05-06 18:17:11.000000000","uploader":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"ref":"refs/changes/11/657411/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstacksdk","ref":"refs/changes/11/657411/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstacksdk refs/changes/11/657411/3"}}},"commit":{"parents":[{"commit":"90449d53a34324f413d438f21c6509389b852721","subject":"Merge \"Remove now unused task_manager file\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/90449d53a34324f413d438f21c6509389b852721"}]}],"author":{"name":"Clark Boylan","email":"clark.boylan@gmail.com","date":"2019-05-06 17:28:04.000000000","tz":-420},"committer":{"name":"Clark Boylan","email":"clark.boylan@gmail.com","date":"2019-05-06 18:16:59.000000000","tz":-420},"subject":"Verify image checksums after upload","message":"Verify image checksums after upload\n\nThe OpenStack Infra team noticed that nodepool (via openstack sdk)\nuploaded an invalid image. This prevented node boots from completing\nsuccessfully and would have been caught by a simple checksum check step.\n\nAdd this step to prevent openstacksdk users from attempting to use bad\nimage uploads.\n\nChange-Id: If9eafdd7b60098ed5bbc37ad06757a6f7e348b4d\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/8a6af721d080d2e2fccb5bc46c57042ed269c269"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstacksdk/commit/8a6af721d080d2e2fccb5bc46c57042ed269c269"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
