)]}'
{"doc/source/event_notifications.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a7075a3d2c3625587ce0e6e50d0afe4dbdc54a9c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"the Keystone configuration file. This value is defaulted to INFO for all"},{"line_number":58,"context_line":"notifications sent in Keystone\u0027s case."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Basic Notifications"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"All basic notifications contain a limited amount of information, specifically,"},{"line_number":64,"context_line":"just the resource type, operation, and resource id."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"The ``payload`` portion of a Basic Notification is a single key-value pair."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":".. code-block:: javascript"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    {"},{"line_number":71,"context_line":"        \"resource_info\": \u003cresource_id\u003e"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Where ``\u003cresource_id\u003e`` is the unique identifier assigned to the"},{"line_number":75,"context_line":"``resource_type`` that is undergoing the ``\u003coperation\u003e``."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Supported Events"},{"line_number":78,"context_line":"----------------"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The following table displays the compatibility between resource types and"},{"line_number":81,"context_line":"operations."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":84,"context_line":"resource type             supported operations"},{"line_number":85,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":86,"context_line":"group                     create, update, delete"},{"line_number":87,"context_line":"project                   create, update, delete"},{"line_number":88,"context_line":"role                      create, update, delete"},{"line_number":89,"context_line":"domain                    create, update, delete"},{"line_number":90,"context_line":"user                      create, update, delete"},{"line_number":91,"context_line":"trust                     create, delete"},{"line_number":92,"context_line":"region                    create, update, delete"},{"line_number":93,"context_line":"endpoint                  create, update, delete"},{"line_number":94,"context_line":"service                   create, update, delete"},{"line_number":95,"context_line":"policy                    create, update, delete"},{"line_number":96,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Note, ``trusts`` are an immutable resource, they do not support ``update``"},{"line_number":99,"context_line":"operations."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Example Notification"},{"line_number":102,"context_line":"--------------------"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"This is an example of a notification sent for a newly created user:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":".. code-block:: javascript"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    {"},{"line_number":109,"context_line":"        \"event_type\": \"identity.user.created\","},{"line_number":110,"context_line":"        \"message_id\": \"0156ee79-b35f-4cef-ac37-d4a85f231c69\","},{"line_number":111,"context_line":"        \"payload\": {"},{"line_number":112,"context_line":"            \"resource_info\": \"671da331c47d4e29bb6ea1d270154ec3\""},{"line_number":113,"context_line":"        },"},{"line_number":114,"context_line":"        \"priority\": \"INFO\","},{"line_number":115,"context_line":"        \"publisher_id\": \"identity.host1234\","},{"line_number":116,"context_line":"        \"timestamp\": \"2013-08-29 19:03:45.960280\""},{"line_number":117,"context_line":"    }"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"If the operation fails, the notification won\u0027t be sent, and no special error"},{"line_number":120,"context_line":"notification will be sent. Information about the error is handled through"},{"line_number":121,"context_line":"normal exception paths."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Auditing with CADF"},{"line_number":124,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_9f17ff53","line":121,"range":{"start_line":60,"start_character":0,"end_line":121,"end_character":23},"updated":"2016-11-14 19:35:01.000000000","message":"as a follow-up, we should probably switch the order of this with CADF below, so the user reads the default stuff first.","commit_id":"1e506fe59e171ebc6208b62c6a9c999df73b34ee"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"5acd7c801b55a6a22d94dce09694b8a035354570","unresolved":false,"context_lines":[{"line_number":57,"context_line":"the Keystone configuration file. This value is defaulted to INFO for all"},{"line_number":58,"context_line":"notifications sent in Keystone\u0027s case."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Basic Notifications"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"All basic notifications contain a limited amount of information, specifically,"},{"line_number":64,"context_line":"just the resource type, operation, and resource id."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"The ``payload`` portion of a Basic Notification is a single key-value pair."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":".. code-block:: javascript"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    {"},{"line_number":71,"context_line":"        \"resource_info\": \u003cresource_id\u003e"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Where ``\u003cresource_id\u003e`` is the unique identifier assigned to the"},{"line_number":75,"context_line":"``resource_type`` that is undergoing the ``\u003coperation\u003e``."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Supported Events"},{"line_number":78,"context_line":"----------------"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The following table displays the compatibility between resource types and"},{"line_number":81,"context_line":"operations."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":84,"context_line":"resource type             supported operations"},{"line_number":85,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":86,"context_line":"group                     create, update, delete"},{"line_number":87,"context_line":"project                   create, update, delete"},{"line_number":88,"context_line":"role                      create, update, delete"},{"line_number":89,"context_line":"domain                    create, update, delete"},{"line_number":90,"context_line":"user                      create, update, delete"},{"line_number":91,"context_line":"trust                     create, delete"},{"line_number":92,"context_line":"region                    create, update, delete"},{"line_number":93,"context_line":"endpoint                  create, update, delete"},{"line_number":94,"context_line":"service                   create, update, delete"},{"line_number":95,"context_line":"policy                    create, update, delete"},{"line_number":96,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Note, ``trusts`` are an immutable resource, they do not support ``update``"},{"line_number":99,"context_line":"operations."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Example Notification"},{"line_number":102,"context_line":"--------------------"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"This is an example of a notification sent for a newly created user:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":".. code-block:: javascript"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    {"},{"line_number":109,"context_line":"        \"event_type\": \"identity.user.created\","},{"line_number":110,"context_line":"        \"message_id\": \"0156ee79-b35f-4cef-ac37-d4a85f231c69\","},{"line_number":111,"context_line":"        \"payload\": {"},{"line_number":112,"context_line":"            \"resource_info\": \"671da331c47d4e29bb6ea1d270154ec3\""},{"line_number":113,"context_line":"        },"},{"line_number":114,"context_line":"        \"priority\": \"INFO\","},{"line_number":115,"context_line":"        \"publisher_id\": \"identity.host1234\","},{"line_number":116,"context_line":"        \"timestamp\": \"2013-08-29 19:03:45.960280\""},{"line_number":117,"context_line":"    }"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"If the operation fails, the notification won\u0027t be sent, and no special error"},{"line_number":120,"context_line":"notification will be sent. Information about the error is handled through"},{"line_number":121,"context_line":"normal exception paths."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Auditing with CADF"},{"line_number":124,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a77a97e_28f6858f","line":121,"range":{"start_line":60,"start_character":0,"end_line":121,"end_character":23},"in_reply_to":"7a77a97e_9f17ff53","updated":"2016-11-15 16:06:12.000000000","message":"Done","commit_id":"1e506fe59e171ebc6208b62c6a9c999df73b34ee"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b2e03e5b9081aa11845d0665d88d9773f83c41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7a77a97e_32f26bd3","updated":"2016-11-15 19:21:11.000000000","message":"thanks for swapping these around, the default should come first","commit_id":"25a30e83709c882bd54237878ceb42948790f8c0"}],"etc/keystone.conf.sample":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a7075a3d2c3625587ce0e6e50d0afe4dbdc54a9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7a77a97e_ca03730c","updated":"2016-11-14 19:35:01.000000000","message":"no need to change this one, we\u0027ll propose a separate patch to update the whole file","commit_id":"1e506fe59e171ebc6208b62c6a9c999df73b34ee"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"5acd7c801b55a6a22d94dce09694b8a035354570","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7a77a97e_48f3c19e","in_reply_to":"7a77a97e_ca03730c","updated":"2016-11-15 16:06:12.000000000","message":"Done","commit_id":"1e506fe59e171ebc6208b62c6a9c999df73b34ee"}],"keystone/conf/default.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"55622dc7c58ff119667986bf42abd00833d2d5eb","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"notification_format \u003d cfg.StrOpt("},{"line_number":204,"context_line":"    \u0027notification_format\u0027,"},{"line_number":205,"context_line":"    default\u003d\u0027basic\u0027,"},{"line_number":206,"context_line":"    choices\u003d[\u0027basic\u0027, \u0027cadf\u0027],"},{"line_number":207,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":208,"context_line":"Define the notification format for identity service events. A `basic`"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_3f0b327f","side":"PARENT","line":205,"updated":"2016-11-21 17:15:59.000000000","message":"If we go ahead and default to cadf notifications, is there any reason to maintain both types? Can we plan on deprecating the basic format?","commit_id":"5a930e7a63a025a93d1007e75784cb5233f43631"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e0ddffe85dd73f98e0d1059fd3e09fe20406b667","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"notification_format \u003d cfg.StrOpt("},{"line_number":204,"context_line":"    \u0027notification_format\u0027,"},{"line_number":205,"context_line":"    default\u003d\u0027basic\u0027,"},{"line_number":206,"context_line":"    choices\u003d[\u0027basic\u0027, \u0027cadf\u0027],"},{"line_number":207,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":208,"context_line":"Define the notification format for identity service events. A `basic`"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_3a08a028","side":"PARENT","line":205,"in_reply_to":"7a77a97e_3f0b327f","updated":"2016-11-21 17:59:18.000000000","message":"we probably could deprecate the basic format.","commit_id":"5a930e7a63a025a93d1007e75784cb5233f43631"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"b1f7295a9c9187f6bb949d45c97c9846ac396dfe","unresolved":false,"context_lines":[{"line_number":219,"context_line":"             \"identity.authenticate.pending\","},{"line_number":220,"context_line":"             \"identity.authenticate.failed\"],"},{"line_number":221,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":222,"context_line":"If left undefined, keystone will emit notifications for all types of events."},{"line_number":223,"context_line":"You can reduce the number of notifications keystone emits by using this option"},{"line_number":224,"context_line":"to enumerate notification topics that should be suppressed. Values are expected"},{"line_number":225,"context_line":"to be in the form `identity.\u003cresource_type\u003e.\u003coperation\u003e`. This field can be set"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_841f9908","line":222,"range":{"start_line":222,"start_character":0,"end_line":222,"end_character":76},"updated":"2016-11-21 16:53:56.000000000","message":"This needs to be fixed","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"f15722064d14fcb523dab99245f13371a51f6e98","unresolved":false,"context_lines":[{"line_number":219,"context_line":"             \"identity.authenticate.pending\","},{"line_number":220,"context_line":"             \"identity.authenticate.failed\"],"},{"line_number":221,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":222,"context_line":"If left undefined, keystone will emit notifications for all types of events."},{"line_number":223,"context_line":"You can reduce the number of notifications keystone emits by using this option"},{"line_number":224,"context_line":"to enumerate notification topics that should be suppressed. Values are expected"},{"line_number":225,"context_line":"to be in the form `identity.\u003cresource_type\u003e.\u003coperation\u003e`. This field can be set"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_7a7698d9","line":222,"in_reply_to":"7a77a97e_5f5c6eed","updated":"2016-11-21 17:38:08.000000000","message":"yes. If left undefined, keystone will emit notifications for all types of events except authn success, pending and failed.","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e0ddffe85dd73f98e0d1059fd3e09fe20406b667","unresolved":false,"context_lines":[{"line_number":219,"context_line":"             \"identity.authenticate.pending\","},{"line_number":220,"context_line":"             \"identity.authenticate.failed\"],"},{"line_number":221,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":222,"context_line":"If left undefined, keystone will emit notifications for all types of events."},{"line_number":223,"context_line":"You can reduce the number of notifications keystone emits by using this option"},{"line_number":224,"context_line":"to enumerate notification topics that should be suppressed. Values are expected"},{"line_number":225,"context_line":"to be in the form `identity.\u003cresource_type\u003e.\u003coperation\u003e`. This field can be set"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_f5163957","line":222,"in_reply_to":"7a77a97e_7a7698d9","updated":"2016-11-21 17:59:18.000000000","message":"Oh theres some ambiguity for \"not defined\"\n\nI guess \"If left empty, keystone will emit notifications ....\"\nand at the end \"By default, keystone will not emit notifications for authentication attempts (success, pending, failures)\"","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d552d38726a120b47107b90bcdc73804ad6ab84c","unresolved":false,"context_lines":[{"line_number":219,"context_line":"             \"identity.authenticate.pending\","},{"line_number":220,"context_line":"             \"identity.authenticate.failed\"],"},{"line_number":221,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":222,"context_line":"If left undefined, keystone will emit notifications for all types of events."},{"line_number":223,"context_line":"You can reduce the number of notifications keystone emits by using this option"},{"line_number":224,"context_line":"to enumerate notification topics that should be suppressed. Values are expected"},{"line_number":225,"context_line":"to be in the form `identity.\u003cresource_type\u003e.\u003coperation\u003e`. This field can be set"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_5f5c6eed","line":222,"in_reply_to":"7a77a97e_841f9908","updated":"2016-11-21 17:07:28.000000000","message":"Do you mean to say that needs to be reworded?","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"957c4025ed12eebb5d8df9a6ee65ba5736ec0ea3","unresolved":false,"context_lines":[{"line_number":219,"context_line":"             \"identity.authenticate.pending\","},{"line_number":220,"context_line":"             \"identity.authenticate.failed\"],"},{"line_number":221,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":222,"context_line":"If left undefined, keystone will emit notifications for all types of events."},{"line_number":223,"context_line":"You can reduce the number of notifications keystone emits by using this option"},{"line_number":224,"context_line":"to enumerate notification topics that should be suppressed. Values are expected"},{"line_number":225,"context_line":"to be in the form `identity.\u003cresource_type\u003e.\u003coperation\u003e`. This field can be set"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_1d52fbdd","line":222,"in_reply_to":"7a77a97e_f5163957","updated":"2016-11-21 18:57:26.000000000","message":"Done","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"76f58e38b409fbc613ed3c7af1aede0d9d5f1d1f","unresolved":false,"context_lines":[{"line_number":219,"context_line":"             \"identity.authenticate.pending\","},{"line_number":220,"context_line":"             \"identity.authenticate.failed\"],"},{"line_number":221,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":222,"context_line":"If left undefined, keystone will emit notifications for all types of events"},{"line_number":223,"context_line":"except authentication attempts (success, pending, and failure)."},{"line_number":224,"context_line":"You can reduce the number of notifications keystone emits by using this option"},{"line_number":225,"context_line":"to enumerate notification topics that should be suppressed. Values are expected"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_3d309707","line":222,"updated":"2016-11-21 19:20:38.000000000","message":"Now I\u0027m just starting to be nit picky :) \n\nThe description is jumping right into how to bypass a specific behavior. I might consider starting this off with the second sentence instead (\"You can reduce...\"). That way the description naturally describes the reason behind the option, how it can be useful, then goes into the details and describes the defaults.\n\n  You can reduce the number of notifications keystone emits by explicitly\n  opting out. Keystone will not emit notifications that match the patterns\n  expressed in this list. Values are expected to be in the form of\n  `identity.\u003cresource_type\u003e.\u003coperation\u003e`. By default, all notifications\n  related to authentication are automatically suppressed. This field can be\n  set multiple times in order to opt-out of multiple notification topics. For\n  example, the following suppresses notifications describing user creation or \n  successful authentication events:\n  notification_opt_out\u003didentity.user.create\n  notification_opt_out\u003didentity.authenticate.success","commit_id":"1062f0561b26d77edc2ec413ee8748e9f9c63fb9"}],"keystone/tests/unit/common/test_notifications.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"12b2e03e5b9081aa11845d0665d88d9773f83c41","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        callback.assert_called_once_with(\u0027identity\u0027, EXP_RESOURCE_TYPE,"},{"line_number":65,"context_line":"                                         operation,"},{"line_number":66,"context_line":"                                         {\u0027resource_info\u0027: exp_resource_id})"},{"line_number":67,"context_line":"        self.config_fixture.config(notification_format\u003d\u0027cadf\u0027)"},{"line_number":68,"context_line":"        with mock.patch("},{"line_number":69,"context_line":"                \u0027keystone.notifications._create_cadf_payload\u0027) as cadf_notify:"},{"line_number":70,"context_line":"            notify_function(EXP_RESOURCE_TYPE, exp_resource_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_b282fbfe","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":62},"updated":"2016-11-15 19:21:11.000000000","message":"hmm, it\u0027s reset here, whats up with that? these tests should be cadf specific","commit_id":"25a30e83709c882bd54237878ceb42948790f8c0"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"5120e6a420abb41534d9602b5eae6ce0d08858cf","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        callback.assert_called_once_with(\u0027identity\u0027, EXP_RESOURCE_TYPE,"},{"line_number":65,"context_line":"                                         operation,"},{"line_number":66,"context_line":"                                         {\u0027resource_info\u0027: exp_resource_id})"},{"line_number":67,"context_line":"        self.config_fixture.config(notification_format\u003d\u0027cadf\u0027)"},{"line_number":68,"context_line":"        with mock.patch("},{"line_number":69,"context_line":"                \u0027keystone.notifications._create_cadf_payload\u0027) as cadf_notify:"},{"line_number":70,"context_line":"            notify_function(EXP_RESOURCE_TYPE, exp_resource_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_e5266b15","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":62},"in_reply_to":"7a77a97e_b282fbfe","updated":"2016-11-15 19:52:59.000000000","message":"I was wondering about it.  It appears if L61-66 are executed with notification_format\u003d\u0027cadf\u0027, it pops up an error:\n\n   AttributeError: \u0027_CatalogHelperObj\u0027 object has no attribute \u0027catalog_api\u0027\n\nfrom https://github.com/openstack/keystone/blob/master/keystone/notifications.py#L669","commit_id":"25a30e83709c882bd54237878ceb42948790f8c0"}],"releasenotes/notes/enable-cadf-notification-format-by-default-f938267e1ec54071.yaml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0b7f3e0efedd4b5a8e7e3ac5769b8e85e340ba03","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Also, by default, opt-out the following authentication events"},{"line_number":5,"context_line":"    from emitting notification due to their chattiness."},{"line_number":6,"context_line":"    ``identity.authenticate.success``, ``identity.authenticate.pending``,"},{"line_number":7,"context_line":"    and ``identity.authenticate.failed``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7a77a97e_9ff526cd","line":7,"updated":"2016-11-21 17:08:57.000000000","message":"If a deployment relies on the ability to receive those types of notifications, they will have to specifically omit them on upgrade. That would be a good thing to add to the upgrade section.","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e0ddffe85dd73f98e0d1059fd3e09fe20406b667","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Also, by default, opt-out the following authentication events"},{"line_number":5,"context_line":"    from emitting notification due to their chattiness."},{"line_number":6,"context_line":"    ``identity.authenticate.success``, ``identity.authenticate.pending``,"},{"line_number":7,"context_line":"    and ``identity.authenticate.failed``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7a77a97e_900fd32d","line":7,"in_reply_to":"7a77a97e_9ff526cd","updated":"2016-11-21 17:59:18.000000000","message":"++ great catch!","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"957c4025ed12eebb5d8df9a6ee65ba5736ec0ea3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Also, by default, opt-out the following authentication events"},{"line_number":5,"context_line":"    from emitting notification due to their chattiness."},{"line_number":6,"context_line":"    ``identity.authenticate.success``, ``identity.authenticate.pending``,"},{"line_number":7,"context_line":"    and ``identity.authenticate.failed``."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7a77a97e_bd4ae725","line":7,"in_reply_to":"7a77a97e_9ff526cd","updated":"2016-11-21 18:57:26.000000000","message":"Done","commit_id":"addfd92249a1d3d9ccec58ff2ea1e27853404a9d"}]}
