)]}'
{"doc/source/developing_guides/pluginguide.rst":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7a44df403e3db1ff75bfe2f421bc513c2ae31ae4","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"Adding an OpenStack Client"},{"line_number":727,"context_line":"--------------------------"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"In order to support a new Heat resource, you might need to add a new OpenStack"},{"line_number":730,"context_line":"client. Derive from heat.engine.clients.client_plugin.ClientPlugin and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffd0ebdf_5862b518","line":727,"updated":"2019-01-03 03:17:30.000000000","message":"This is great content and could go in a separate patch.","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cc1b2bc8d628828a3c3183016b9d6619e0582438","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"Adding an OpenStack Client"},{"line_number":727,"context_line":"--------------------------"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"In order to support a new Heat resource, you might need to add a new OpenStack"},{"line_number":730,"context_line":"client. Derive from heat.engine.clients.client_plugin.ClientPlugin and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9fdfeff1_f254b000","line":727,"in_reply_to":"ffd0ebdf_5862b518","updated":"2019-02-20 17:51:44.000000000","message":"Ok, I\u0027ll add it in a separate patch at a later stage.","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7a44df403e3db1ff75bfe2f421bc513c2ae31ae4","unresolved":false,"context_lines":[{"line_number":734,"context_line":""},{"line_number":735,"context_line":"   A list of service types for this client"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":".. py:function:: _create(self)"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"  Create the client."},{"line_number":740,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffd0ebdf_f85b6951","line":737,"updated":"2019-01-03 03:17:30.000000000","message":"This still works, but for the future we want to encourage people to use:\n\n  _create(self, version\u003dNone)","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7a44df403e3db1ff75bfe2f421bc513c2ae31ae4","unresolved":false,"context_lines":[{"line_number":741,"context_line":"  :return: The created client, or None if failed to create it."},{"line_number":742,"context_line":"  :raise: any ``Exception`` if the creation failed."},{"line_number":743,"context_line":""},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"In order to use the new client, add it in ``setup.cfg``:"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":".."}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffd0ebdf_383fb1d7","line":744,"updated":"2019-01-03 03:17:30.000000000","message":"Virtually all clients will want to implement is_not_found(self, ex); and many is_over_limit(self, ex) and/or is_conflict(self, ex) as well.","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7a44df403e3db1ff75bfe2f421bc513c2ae31ae4","unresolved":false,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"In order to use the new client, add it in ``setup.cfg``:"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":".."},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"heat.clients \u003d"},{"line_number":750,"context_line":"    vitrage \u003d heat.engine.clients.os.trove:VitrageClientPlugin"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffd0ebdf_384a5180","line":747,"updated":"2019-01-03 03:17:30.000000000","message":"Not sure this is the syntax you\u0027re looking for. I\u0027d suggest a literal block - change the \u0027:\u0027 on the line above to \u0027::\u0027, indent the block, and delete this line.","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7a44df403e3db1ff75bfe2f421bc513c2ae31ae4","unresolved":false,"context_lines":[{"line_number":747,"context_line":".."},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"heat.clients \u003d"},{"line_number":750,"context_line":"    vitrage \u003d heat.engine.clients.os.trove:VitrageClientPlugin"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ffd0ebdf_584b9586","line":750,"range":{"start_line":750,"start_character":37,"end_line":750,"end_character":50},"updated":"2019-01-03 03:17:30.000000000","message":"Bit of a mismatch here :)\n\nMaybe use \u0027myservice\u0027 or something to keep it generic.","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"}],"heat/engine/clients/os/vitrage.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7a44df403e3db1ff75bfe2f421bc513c2ae31ae4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ffd0ebdf_5b270fb8","line":31,"updated":"2019-01-03 03:17:30.000000000","message":"Agree with Rico that you definitely want to implement is_not_found().","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"ea6c89564ea1812a9343d32fd6887229c127abf3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3fa7e38b_2bb6bddd","line":31,"in_reply_to":"9fdfeff1_f26d90cc","updated":"2020-01-07 20:12:39.000000000","message":"Like this:\n\n  def is_not_found(self, exc):\n    return isinstance(exc, vitrageclient.exceptions.ClientException) and exc.code \u003d\u003d 404\n\nIt doesn\u0027t appear true that you can\u0027t get a 404 when deleting a template: https://opendev.org/openstack/vitrage/src/branch/master/vitrage/api/controllers/v1/template.py#L107\n\nHowever, as you said, that doesn\u0027t actually happen when the template is not found: https://opendev.org/openstack/vitrage/src/branch/master/vitrage/api_handler/apis/template.py#L98-L99\n\nIn fact, looking through that first file, it appears that literally every type of error returns a 404, almost all of which are completely the wrong code. So I guess it is indeed safer not to implement this.","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"cc1b2bc8d628828a3c3183016b9d6619e0582438","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9fdfeff1_f26d90cc","line":31,"in_reply_to":"ffd0ebdf_5b270fb8","updated":"2019-02-20 17:51:44.000000000","message":"I don\u0027t see how this can be implemented at this stage, since vitrage template delete does not return any indication that the resource is not found","commit_id":"c7bcdaea94d4657792aec4c69ab64c9379fe0af9"}]}
