)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Adam Young \u003cayoung@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-07 10:37:42 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implied Roles"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If547c2f16e812bc7fffd742ec37e6a26011f3185"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a6eadb0_ad065e83","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":13},"updated":"2016-12-17 04:27:10.000000000","message":"please add more than two words in a commit message","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8289d9e3b20ac23c4856bc232a2625ee1d1febc7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implied Roles"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All the user to create an inference rule between"},{"line_number":10,"context_line":"two roles. The first, caleed the prior role"},{"line_number":11,"context_line":"is the role explicitly assigned to an individual."},{"line_number":12,"context_line":"The second, called the implied role, is one that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"bff0334d_400b0a23","line":9,"updated":"2017-04-10 18:12:32.000000000","message":"Allow*","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8289d9e3b20ac23c4856bc232a2625ee1d1febc7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implied Roles"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All the user to create an inference rule between"},{"line_number":10,"context_line":"two roles. The first, caleed the prior role"},{"line_number":11,"context_line":"is the role explicitly assigned to an individual."},{"line_number":12,"context_line":"The second, called the implied role, is one that"},{"line_number":13,"context_line":"the user gets implicitly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"bff0334d_20148643","line":10,"updated":"2017-04-10 18:12:32.000000000","message":"called*","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8289d9e3b20ac23c4856bc232a2625ee1d1febc7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"two roles. The first, caleed the prior role"},{"line_number":11,"context_line":"is the role explicitly assigned to an individual."},{"line_number":12,"context_line":"The second, called the implied role, is one that"},{"line_number":13,"context_line":"the user gets implicitly."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The management and maintenance of the rules is"},{"line_number":16,"context_line":"perfromed in the Keystone server."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"bff0334d_c02f1a86","line":13,"updated":"2017-04-10 18:12:32.000000000","message":"An example would probably help reviewers here (specifically ones not entirely familiar with keystone).\n\nI.e. If role B implies role A, a user assigned role B also gets role A.","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Role B implies Role A."},{"line_number":16,"context_line":"User X is assigned Role B."},{"line_number":17,"context_line":"Therefore User X also assigned Role A."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The management and maintenance of the rules is"},{"line_number":20,"context_line":"performed in the Keystone server."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"5f201791_49407108","line":17,"updated":"2017-06-20 15:23:13.000000000","message":"This is a great description. If we don\u0027t have something like this in the documentation for implied roles already, we should add it.\n\nA natural extension of it would be to add example usage, making the whole document flow.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"}],"doc/source/cli/command-objects/implied_role.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":5,"context_line":"Identity v3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"implied-role create"},{"line_number":9,"context_line":"-------------------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_79f54d56","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":12},"updated":"2017-06-28 16:21:25.000000000","message":"implied role* (no hyphen)","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"Identity v3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"implied-role create"},{"line_number":9,"context_line":"-------------------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_68045415","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":12},"in_reply_to":"5f201791_79f54d56","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":8,"context_line":"implied-role create"},{"line_number":9,"context_line":"-------------------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."},{"line_number":12,"context_line":"A user or group assigned the prior role explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied role as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied role create"},{"line_number":16,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_f985ddad","line":13,"range":{"start_line":11,"start_character":0,"end_line":13,"end_character":45},"updated":"2017-06-28 16:21:25.000000000","message":"this text has to match the help text specified in the code: Creates an association between prior and implied roles","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":8,"context_line":"implied-role create"},{"line_number":9,"context_line":"-------------------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."},{"line_number":12,"context_line":"A user or group assigned the prior role explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied role as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied role create"},{"line_number":16,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_48a3d800","line":13,"range":{"start_line":11,"start_character":0,"end_line":13,"end_character":45},"in_reply_to":"5f201791_f985ddad","updated":"2017-06-28 17:01:03.000000000","message":"Thanks, I didn\u0027t realize that was the case. I see that in other commands the _description(s) tend to be short. There is a lot of good info ^^. Where is the best place to put more verbose info than what we have here?","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior-role \u003crole\u003e"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Role which implies the other role."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_b979a5c5","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":38},"updated":"2017-06-28 16:21:25.000000000","message":"has to match the code: \u0027prior role \u003crole\u003e (name or ID) implies another role\u0027","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior-role \u003crole\u003e"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Role which implies the other role."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_28cd3cb6","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":38},"in_reply_to":"5f201791_b979a5c5","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Role implied by the other role."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"implied role delete"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_3947d579","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":35},"updated":"2017-06-28 16:21:25.000000000","message":"has to match the code: \u0027\u003crole\u003e (name or ID) implied by another role\u0027","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Role implied by the other role."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"implied role delete"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_e8c2a484","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":35},"in_reply_to":"5f201791_3947d579","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"implied role delete"},{"line_number":32,"context_line":"-------------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Delete inference rule between two roles."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. program:: implied role delete"},{"line_number":37,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_b98be5bd","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":40},"updated":"2017-06-28 16:21:25.000000000","message":"same as above: Deletes an association between prior and implied roles","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"implied role delete"},{"line_number":32,"context_line":"-------------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Delete inference rule between two roles."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. program:: implied role delete"},{"line_number":37,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_08760071","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":40},"in_reply_to":"5f201791_b98be5bd","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. option:: --prior-role \u003crole\u003e"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    Role which implies the other role."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_b952c533","line":45,"range":{"start_line":45,"start_character":4,"end_line":45,"end_character":38},"updated":"2017-06-28 16:21:25.000000000","message":"has to match the code: \u0027prior role \u003crole\u003e (name or ID) implies another role\u0027","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. option:: --prior-role \u003crole\u003e"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    Role which implies the other role."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_a866ecb9","line":45,"range":{"start_line":45,"start_character":4,"end_line":45,"end_character":38},"in_reply_to":"5f201791_b952c533","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    Role implied by the other role."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"implied role list"},{"line_number":52,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_79366d05","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":35},"updated":"2017-06-28 16:21:25.000000000","message":"has to match the code: \u0027\u003crole\u003e (name or ID) implied by another role\u0027","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":".. option:: --implied-role \u003crole\u003e"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    Role implied by the other role."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"implied role list"},{"line_number":52,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_8807b0ca","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":35},"in_reply_to":"5f201791_79366d05","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"implied role list"},{"line_number":52,"context_line":"-----------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"List implied roles."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":".. program:: implied role list"},{"line_number":57,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_d92c61ad","line":54,"range":{"start_line":54,"start_character":18,"end_line":54,"end_character":19},"updated":"2017-06-28 16:21:25.000000000","message":"remove the \".\"","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"implied role list"},{"line_number":52,"context_line":"-----------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"List implied roles."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":".. program:: implied role list"},{"line_number":57,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":21,"id":"5f201791_480d18e6","line":54,"range":{"start_line":54,"start_character":18,"end_line":54,"end_character":19},"in_reply_to":"5f201791_d92c61ad","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2f8214488d0f7c26860041112c073e5f59edec9e","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    openstack implied role create"},{"line_number":17,"context_line":"        --prior-role \u003crole\u003e"},{"line_number":18,"context_line":"        --implied-role \u003crole\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. option:: --prior-role \u003crole\u003e"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"3f1d235d_2293d2a5","line":18,"updated":"2017-06-30 19:57:41.000000000","message":"So I apologize for not catching this earlier, but why does the --implied-role option even exist?  The standard is the first positional argument for a command is the first named resource, here \u0027implied role\u0027.  So the implied-role value should be a positional argument not an option.\n\nSame for delete below.","commit_id":"de8b38b59159227a9ef9de03c314e9c2fdd02a3d"}],"doc/source/command-objects/implied_role.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"implied_role"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Identity v3"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_cdbf1ace","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":12},"updated":"2016-12-17 04:27:10.000000000","message":"we don\u0027t have underscores in command names, osc/cliff is smart enough to handle 2 word commands","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"implied_role create"},{"line_number":9,"context_line":"-----------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_0db672f8","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":11},"updated":"2016-12-17 04:27:10.000000000","message":"more ----\u0027s please","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":14,"context_line":".. code:: bash"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    os implied_role create"},{"line_number":17,"context_line":"        --prior_role \u003crole_id\u003e"},{"line_number":18,"context_line":"        --implied_role \u003crole_id\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. option:: --prior_role \u003crole_id\u003e"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_cd947a38","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":29},"updated":"2016-12-17 04:27:10.000000000","message":"all of these should be \u003crole\u003e -- we always support ID and Name lookup","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":17,"context_line":"        --prior_role \u003crole_id\u003e"},{"line_number":18,"context_line":"        --implied_role \u003crole_id\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. option:: --prior_role \u003crole_id\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    Role which implies the other role."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_8d70c241","line":20,"range":{"start_line":20,"start_character":14,"end_line":20,"end_character":24},"updated":"2016-12-17 04:27:10.000000000","message":"we don\u0027t use underscores in command options, dashes only","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    "},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"implied_role delete"},{"line_number":30,"context_line":"-----------"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Delete role(s)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_cda63ac0","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":11},"updated":"2016-12-17 04:27:10.000000000","message":"more ----\u0027s please","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":29,"context_line":"implied_role delete"},{"line_number":30,"context_line":"-----------"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Delete role(s)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":".. program:: implied_role delete"},{"line_number":35,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_cd8d5a32","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":14},"updated":"2016-12-17 04:27:10.000000000","message":"\"Delete a role inference rule\"","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":49,"context_line":"implied_role list"},{"line_number":50,"context_line":"-----------------"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"List roles"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. program:: implied_role list"},{"line_number":55,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_0d84b208","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":10},"updated":"2016-12-17 04:27:10.000000000","message":"\"List role inference rules\"","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":54,"context_line":".. program:: implied_role list"},{"line_number":55,"context_line":".. code:: bash"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    os role list"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a6eadb0_4d7a2a25","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":16},"updated":"2016-12-17 04:27:10.000000000","message":"this seems incomplete","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"932b78dd0cb8acdceb21ef3d00c340a57108bb1a","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    os implied_role create"},{"line_number":17,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":18,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"bff0334d_e0b57e33","line":18,"updated":"2017-04-10 18:24:20.000000000","message":"Are these created automatically if they don\u0027t exist?","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"932b78dd0cb8acdceb21ef3d00c340a57108bb1a","unresolved":false,"context_lines":[{"line_number":20,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    Role which implies the other role."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":".. option:: --implied_role \u003crole\u003e"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    Role implied by the other role."}],"source_content_type":"text/x-rst","patch_set":15,"id":"bff0334d_a0d3f65f","line":23,"updated":"2017-04-10 18:24:20.000000000","message":"I find it easier to refer to these as set. Which is the role that \"contains\" the other? The definition of \"implies\" doesn\u0027t really tell me what it does. What do we mean by imply? The descriptions here don\u0027t really tell me much outside of what I\u0027ve already been able to glean from line 13.","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":9,"context_line":"-------------------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."},{"line_number":12,"context_line":"A user or group assigned the prior explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied rule as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied_role create"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_29bad5dd","line":12,"updated":"2017-06-20 15:23:13.000000000","message":"prior role*","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"-------------------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."},{"line_number":12,"context_line":"A user or group assigned the prior explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied rule as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied_role create"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_a4ef2caf","line":12,"in_reply_to":"5f201791_29bad5dd","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."},{"line_number":12,"context_line":"A user or group assigned the prior explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied rule as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_69c0cd51","line":13,"updated":"2017-06-20 15:23:13.000000000","message":"role*?","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Create new role inference rule between existing roles."},{"line_number":12,"context_line":"A user or group assigned the prior explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied rule as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_842af0e4","line":13,"in_reply_to":"5f201791_69c0cd51","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    os implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_49aab185","line":18,"updated":"2017-06-20 15:23:13.000000000","message":"s/os/openstack/ ?","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    os implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_4434d84a","line":18,"in_reply_to":"5f201791_49aab185","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b27aeaa9302ccc94523db1d654e3446259a44b21","unresolved":false,"context_lines":[{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    os implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_3e132d69","line":19,"updated":"2017-06-20 14:44:42.000000000","message":"I\u0027m not sure sure we want these to be handled as \u0027optional\u0027 parameters. I think a more succinct user experience would be along the lines of:\n`implied_role create \u003cprior role\u003e \u003cimplied role\u003e` \n\nAs it currently stands, it\u0027s not if an implied role is required. Would one be created by default if not provided? Would it raise an error? I\u0027m not sure and I don\u0027t think a user would be either.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    os implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_a9a82577","line":19,"in_reply_to":"5f201791_3e132d69","updated":"2017-06-20 15:23:13.000000000","message":"I don\u0027t think the server implementation takes into consideration a default of any kind if an implied roles isn\u0027t supplied. I think we should keep that expectation here.\n\nhttps://github.com/openstack/keystone/blob/45265c0ddffa399fcb10bed6eac98069decdf910/keystone/assignment/controllers.py#L525-L532","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":31,"context_line":"implied-role delete"},{"line_number":32,"context_line":"-------------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Delete implied_role(s)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. program:: implied_role delete"},{"line_number":37,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_e923bd04","line":34,"updated":"2017-06-20 15:23:13.000000000","message":"nit: It might be worth wording this like a disassociation? Suggesting this because a new user might think we\u0027re actually deleting a role, but instead we just breaking the relationship between two existing roles.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"implied-role delete"},{"line_number":32,"context_line":"-------------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Delete implied_role(s)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. program:: implied_role delete"},{"line_number":37,"context_line":".. code:: bash"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_16089525","line":34,"in_reply_to":"5f201791_e923bd04","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":36,"context_line":".. program:: implied_role delete"},{"line_number":37,"context_line":".. code:: bash"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    os role delete"},{"line_number":40,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":41,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_c9c48143","line":39,"updated":"2017-06-20 15:23:13.000000000","message":"openstack implied_role* ?","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":36,"context_line":".. program:: implied_role delete"},{"line_number":37,"context_line":".. code:: bash"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    os role delete"},{"line_number":40,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":41,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_f60ab91d","line":39,"in_reply_to":"5f201791_c9c48143","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b27aeaa9302ccc94523db1d654e3446259a44b21","unresolved":false,"context_lines":[{"line_number":37,"context_line":".. code:: bash"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    os role delete"},{"line_number":40,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":41,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. option:: --prior_role \u003crole\u003e"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_be061d20","line":40,"updated":"2017-06-20 14:44:42.000000000","message":"Same as previous comment","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":37,"context_line":".. code:: bash"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    os role delete"},{"line_number":40,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":41,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. option:: --prior_role \u003crole\u003e"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_b639e1d7","line":40,"in_reply_to":"5f201791_be061d20","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":56,"context_line":".. program:: implied_role list"},{"line_number":57,"context_line":".. code:: bash"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    os implied-role list"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_a91dc5be","line":59,"updated":"2017-06-20 15:23:13.000000000","message":"Same comments here.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":56,"context_line":".. program:: implied_role list"},{"line_number":57,"context_line":".. code:: bash"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    os implied-role list"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f201791_9634a5df","line":59,"in_reply_to":"5f201791_a91dc5be","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5f201791_0cff6267","updated":"2017-06-27 15:32:39.000000000","message":"this probably needs a rebase, move it to under /cli/, see the last few commits...","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5f201791_c155acfb","in_reply_to":"5f201791_0cff6267","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"implied_role"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Identity v3"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_ccfcca71","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":12},"updated":"2017-06-27 15:32:39.000000000","message":"remove the _","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"implied_role"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Identity v3"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_af073718","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":12},"in_reply_to":"5f201791_ccfcca71","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"A user or group assigned the prior role explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied role as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_4cf31a75","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":25},"updated":"2017-06-27 15:32:39.000000000","message":"remove the _, it\u0027s not actually used in the command, see the list of commands here: https://docs.openstack.org/developer/python-openstackclient/commands.html and note that we don\u0027t use _\u0027s anywhere","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":12,"context_line":"A user or group assigned the prior role explicitly will be"},{"line_number":13,"context_line":"implicitly assigned the implied role as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_a17190aa","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":25},"in_reply_to":"5f201791_4cf31a75","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_0ce9a27e","line":18,"range":{"start_line":18,"start_character":14,"end_line":18,"end_character":26},"updated":"2017-06-27 15:32:39.000000000","message":"remove the _, it\u0027s not actually used in the command","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":15,"context_line":".. program:: implied_role create"},{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_9f1c9178","line":18,"range":{"start_line":18,"start_character":14,"end_line":18,"end_character":26},"in_reply_to":"5f201791_0ce9a27e","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_ccddeae0","line":19,"range":{"start_line":19,"start_character":10,"end_line":19,"end_character":20},"updated":"2017-06-27 15:32:39.000000000","message":"prior-role*","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":16,"context_line":".. code:: bash"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_3f157d49","line":19,"range":{"start_line":19,"start_character":10,"end_line":19,"end_character":20},"in_reply_to":"5f201791_ccddeae0","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_8ce372a4","line":20,"range":{"start_line":20,"start_character":10,"end_line":20,"end_character":22},"updated":"2017-06-27 15:32:39.000000000","message":"implied-role*","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    openstack implied_role create"},{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_ff0a6523","line":20,"range":{"start_line":20,"start_character":10,"end_line":20,"end_character":22},"in_reply_to":"5f201791_8ce372a4","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Role which implies the other role."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_0cb76288","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":24},"updated":"2017-06-27 15:32:39.000000000","message":"the options always use dashes, see the big bold note here: https://docs.openstack.org/developer/python-openstackclient/commands.html","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":19,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":20,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Role which implies the other role."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_22156240","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":24},"in_reply_to":"5f201791_0cb76288","updated":"2017-06-28 15:14:02.000000000","message":"Thanks for the good ref., Steve!","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Role which implies the other role."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. option:: --implied_role \u003crole\u003e"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Role implied by the other role."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_acaf4e28","line":26,"range":{"start_line":26,"start_character":14,"end_line":26,"end_character":26},"updated":"2017-06-27 15:32:39.000000000","message":"the options always use dashes","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Role which implies the other role."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":".. option:: --implied_role \u003crole\u003e"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Role implied by the other role."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_823c3693","line":26,"range":{"start_line":26,"start_character":14,"end_line":26,"end_character":26},"in_reply_to":"5f201791_acaf4e28","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    Role implied by the other role."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"implied-role delete"},{"line_number":32,"context_line":"-------------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Delete inference rule between two roles."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. program:: implied_role delete"},{"line_number":37,"context_line":".. code:: bash"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    openstack implied_role delete"},{"line_number":40,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":41,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    Role which implies the other role."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":".. option:: --implied_role \u003crole\u003e"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    Role implied by the other role."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"implied_role list"},{"line_number":52,"context_line":"-----------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"List implied roles."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":".. program:: implied_role list"},{"line_number":57,"context_line":".. code:: bash"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    openstack implied_role list"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_2c69fef7","line":59,"range":{"start_line":31,"start_character":0,"end_line":59,"end_character":31},"updated":"2017-06-27 15:32:39.000000000","message":"same comments as above","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    Role implied by the other role."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"implied-role delete"},{"line_number":32,"context_line":"-------------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Delete inference rule between two roles."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. program:: implied_role delete"},{"line_number":37,"context_line":".. code:: bash"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    openstack implied_role delete"},{"line_number":40,"context_line":"        --prior_role \u003crole\u003e"},{"line_number":41,"context_line":"        --implied_role \u003crole\u003e"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. option:: --prior_role \u003crole\u003e"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    Role which implies the other role."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":".. option:: --implied_role \u003crole\u003e"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    Role implied by the other role."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"implied_role list"},{"line_number":52,"context_line":"-----------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"List implied roles."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":".. program:: implied_role list"},{"line_number":57,"context_line":".. code:: bash"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    openstack implied_role list"}],"source_content_type":"text/x-rst","patch_set":20,"id":"5f201791_a23972a4","line":59,"range":{"start_line":31,"start_character":0,"end_line":59,"end_character":31},"in_reply_to":"5f201791_2c69fef7","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"}],"openstackclient/identity/v3/role.py":[{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"d59c04eac98d8f5feaad30ac0e55f4c8df472d97","unresolved":false,"context_lines":[{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    data \u003d identity_client.roles.list()"},{"line_number":420,"context_line":"    for role in data:"},{"line_number":421,"context_line":"        if parsed_args.prior_role \u003d\u003d role[\u0027name\u0027]:"},{"line_number":422,"context_line":"            prior_role_id \u003d role[\u0027id\u0027]"},{"line_number":423,"context_line":"        if parsed_args.prior_role \u003d\u003d role[\u0027id\u0027]:"},{"line_number":424,"context_line":"            prior_role_id \u003d role[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_3f1628f1","line":421,"updated":"2016-03-17 18:22:26.000000000","message":"perhaps a simplification?\n\nif parsed_args.prior_role in (role[\u0027name\u0027], role[\u0027id\u0027]):\n    prior_role_id \u003d role[\u0027id\u0027]","commit_id":"9b2d56fcf7cd7a83082fd5d896fb865ba54550ff"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"983827dac75687b205e4e76c63c41fc5523f777c","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        parser.add_argument("},{"line_number":439,"context_line":"            \u0027implied_role\u0027,"},{"line_number":440,"context_line":"            metavar\u003d\u0027\u003crole-name\u003e\u0027,"},{"line_number":441,"context_line":"            help\u003d\u0027New role name\u0027,"},{"line_number":442,"context_line":"        )"},{"line_number":443,"context_line":"        return parser"},{"line_number":444,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a18252c_2f233507","line":441,"updated":"2016-04-12 01:43:16.000000000","message":"Looks like you support role and ID. for consistency suggesting couple of changes:\n\n1. remove  -name in the metavar.\n2. Update help to mention it supports name/id by append \"(name or ID)\".","commit_id":"4db327e8a5f452d56b5e21a4d85b719ff8069516"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                               \"either --domain or --project must also be \""},{"line_number":364,"context_line":"                               \"specified to list role grants.\\n\"))"},{"line_number":365,"context_line":"            return ([], [])"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        return (columns,"},{"line_number":368,"context_line":"                (utils.get_item_properties("},{"line_number":369,"context_line":"                    s, columns,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_4d930a5b","side":"PARENT","line":366,"updated":"2016-12-17 04:27:10.000000000","message":"undo this change","commit_id":"d2701116d343f7b597d2a21499dcd2768b64291e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        metavar\u003d\u0027\u003cgroup\u003e\u0027,"},{"line_number":54,"context_line":"        help\u003d_(\u0027Include \u003cgroup\u003e (name or ID)\u0027),"},{"line_number":55,"context_line":"    )"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    common.add_group_domain_option_to_parser(parser)"},{"line_number":58,"context_line":"    common.add_project_domain_option_to_parser(parser)"},{"line_number":59,"context_line":"    common.add_user_domain_option_to_parser(parser)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_0dad929a","line":56,"updated":"2016-12-17 04:27:10.000000000","message":"undo this change","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"def _add_implied_roles_parser_args(parser):"},{"line_number":509,"context_line":"        parser.add_argument("},{"line_number":510,"context_line":"            \u0027--prior_role\u0027,"},{"line_number":511,"context_line":"            metavar\u003d\u0027\u003crole-name\u003e\u0027,"},{"line_number":512,"context_line":"            help\u003d\u0027prior role \u003crole\u003e (name or ID) implies another role\u0027,"},{"line_number":513,"context_line":"        )"},{"line_number":514,"context_line":"        parser.add_argument("},{"line_number":515,"context_line":"            \u0027--implied_role\u0027,"},{"line_number":516,"context_line":"            metavar\u003d\u0027\u003crole\u003e\u0027,"},{"line_number":517,"context_line":"            help\u003d\u0027\u003crole\u003e (name or ID) implied by another role\u0027,"},{"line_number":518,"context_line":"        )"},{"line_number":519,"context_line":"        return parser"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_2da6cead","line":518,"range":{"start_line":509,"start_character":0,"end_line":518,"end_character":9},"updated":"2016-12-17 04:27:10.000000000","message":"make sure this matches the help text in the doc","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"class CreateImpliedRole(command.ShowOne):"},{"line_number":523,"context_line":"    \"\"\"Create new role inference rule\"\"\""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def get_parser(self, prog_name):"},{"line_number":526,"context_line":"        parser \u003d super(CreateImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_ede5b6db","line":523,"range":{"start_line":523,"start_character":4,"end_line":523,"end_character":40},"updated":"2016-12-17 04:27:10.000000000","message":"remove this line in favor of _description -- that\u0027s what is actually used in the help string","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def take_action(self, parsed_args):"},{"line_number":530,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":531,"context_line":"        (prior_role_id, implied_role_id) \u003d _parse_implied_params("},{"line_number":532,"context_line":"            identity_client, parsed_args)"},{"line_number":533,"context_line":"        response \u003d identity_client.roles.create_implied("},{"line_number":534,"context_line":"            prior_role_id, implied_role_id)"},{"line_number":535,"context_line":"        return zip(*sorted([(k, v[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_adb81ec9","line":532,"range":{"start_line":531,"start_character":8,"end_line":532,"end_character":41},"updated":"2016-12-17 04:27:10.000000000","message":"don\u0027t do this. use:\n\n  implied_role \u003d utils.find_resource(identity_client.roles,\n                                   parsed_args.implied_role)\n  prior_role \u003d utils.find_resource(identity_client.roles,\n                                   parsed_args.prior_role)\n\nand you\u0027ll get objects to play with, and get name+id lookup for free.","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":534,"context_line":"            prior_role_id, implied_role_id)"},{"line_number":535,"context_line":"        return zip(*sorted([(k, v[\u0027id\u0027])"},{"line_number":536,"context_line":"                            for k, v in six.iteritems(response._info)"},{"line_number":537,"context_line":"                            if k !\u003d \u0027links\u0027]))"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"class DeleteImpliedRole(command.Command):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_4dc86a55","line":537,"range":{"start_line":537,"start_character":28,"end_line":537,"end_character":44},"updated":"2016-12-17 04:27:10.000000000","message":"you can pop the links from the response object, this whole thing should just be:\n\n  response._info.pop(\u0027links\u0027)\n  return zip(*sorted(six.iteritems(response._info)))","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":538,"context_line":""},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"class DeleteImpliedRole(command.Command):"},{"line_number":541,"context_line":"    \"\"\"Delete role inference rule. \"\"\""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def get_parser(self, prog_name):"},{"line_number":544,"context_line":"        parser \u003d super(DeleteImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_addf3e0b","line":541,"range":{"start_line":541,"start_character":4,"end_line":541,"end_character":38},"updated":"2016-12-17 04:27:10.000000000","message":"remove this line in favor of _description","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":540,"context_line":"class DeleteImpliedRole(command.Command):"},{"line_number":541,"context_line":"    \"\"\"Delete role inference rule. \"\"\""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def get_parser(self, prog_name):"},{"line_number":544,"context_line":"        parser \u003d super(DeleteImpliedRole, self).get_parser(prog_name)"},{"line_number":545,"context_line":"        return _add_implied_roles_parser_args(parser)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def take_action(self, parsed_args):"},{"line_number":548,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":549,"context_line":"        (prior_role_id, implied_role_id) \u003d _parse_implied_params("},{"line_number":550,"context_line":"            identity_client, parsed_args)"},{"line_number":551,"context_line":"        identity_client.roles.delete_implied("},{"line_number":552,"context_line":"            prior_role_id, implied_role_id)"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"class ListImpliedRole(command.Lister):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_6dc36638","line":552,"range":{"start_line":543,"start_character":0,"end_line":552,"end_character":43},"updated":"2016-12-17 04:27:10.000000000","message":"same general comments apply","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"class ListImpliedRole(command.Lister):"},{"line_number":556,"context_line":"    \"\"\"List role inference rules. \"\"\""},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    _description \u003d _(\"List implied roles\")"},{"line_number":559,"context_line":"    _COLUMNS \u003d [\u0027prior_role_id\u0027, \u0027prior_role_name\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_8dbe02ac","line":556,"range":{"start_line":556,"start_character":0,"end_line":556,"end_character":37},"updated":"2016-12-17 04:27:10.000000000","message":"remove this line in favor of _description","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2aea88c6b4409ac0d925de04240f453640228ebd","unresolved":false,"context_lines":[{"line_number":559,"context_line":"    _COLUMNS \u003d [\u0027prior_role_id\u0027, \u0027prior_role_name\u0027,"},{"line_number":560,"context_line":"                \u0027implied_role_id\u0027, \u0027implied_role_name\u0027]"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def get_parser(self, prog_name):"},{"line_number":563,"context_line":"        parser \u003d super(ListImpliedRole, self).get_parser(prog_name)"},{"line_number":564,"context_line":"        return parser"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def take_action(self, parsed_args):"},{"line_number":567,"context_line":"        def _list_implied(response):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6eadb0_4dcf8a55","line":564,"range":{"start_line":562,"start_character":0,"end_line":564,"end_character":21},"updated":"2016-12-17 04:27:10.000000000","message":"remove this entirely if it\u0027s not used","commit_id":"dc3ea015347f9db49cb56d999eaab567e76acb0a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"932b78dd0cb8acdceb21ef3d00c340a57108bb1a","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"# TODO(ayoung) these return None if there is no match."},{"line_number":494,"context_line":"# If None, raise an exception instead"},{"line_number":495,"context_line":"def _parse_implied_params(identity_client, parsed_args):"},{"line_number":496,"context_line":"    prior_role_id \u003d None"},{"line_number":497,"context_line":"    implied_role_id \u003d None"}],"source_content_type":"text/x-python","patch_set":15,"id":"bff0334d_803d9290","line":494,"updated":"2017-04-10 18:24:20.000000000","message":"Why not do this now? If we don\u0027t raise an exception, there is no way for the user to know if it actually worked.","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3fca8e51e2c76810c968d50df079a16483ab6b25","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"# TODO(ayoung) these return None if there is no match."},{"line_number":494,"context_line":"# If None, raise an exception instead"},{"line_number":495,"context_line":"def _parse_implied_params(identity_client, parsed_args):"},{"line_number":496,"context_line":"    prior_role_id \u003d None"},{"line_number":497,"context_line":"    implied_role_id \u003d None"}],"source_content_type":"text/x-python","patch_set":15,"id":"bff0334d_1bd1f323","line":494,"in_reply_to":"bff0334d_803d9290","updated":"2017-04-10 18:51:08.000000000","message":"++","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"932b78dd0cb8acdceb21ef3d00c340a57108bb1a","unresolved":false,"context_lines":[{"line_number":544,"context_line":""},{"line_number":545,"context_line":"class DeleteImpliedRole(command.Command):"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    _description \u003d _(\"Delete implied roles\")"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    def get_parser(self, prog_name):"},{"line_number":550,"context_line":"        parser \u003d super(DeleteImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bff0334d_e0ed7ef0","line":547,"updated":"2017-04-10 18:24:20.000000000","message":"role or roles? I assume this just disassociates two roles?","commit_id":"6375f961eb9c4cea92ba4fc761d2a809bf277b9a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":494,"context_line":"    prior_role_id \u003d None"},{"line_number":495,"context_line":"    implied_role_id \u003d None"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    data \u003d identity_client.roles.list()"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    for role in data:"},{"line_number":500,"context_line":"        role_id_or_name \u003d (role.name, role.id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_899449ea","line":497,"updated":"2017-06-20 15:23:13.000000000","message":"s/data/roles/\n\ndata is an ambiguous term but it looks like what we\u0027re actually dealing with here is a list of roles from the identity server.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":494,"context_line":"    prior_role_id \u003d None"},{"line_number":495,"context_line":"    implied_role_id \u003d None"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    data \u003d identity_client.roles.list()"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    for role in data:"},{"line_number":500,"context_line":"        role_id_or_name \u003d (role.name, role.id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_19832606","line":497,"in_reply_to":"5f201791_899449ea","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    if prior_role_id is None or implied_role_id is None:"},{"line_number":508,"context_line":"        msg \u003d _(\"Unable to parse provided roles.\""},{"line_number":509,"context_line":"                \"See openstack --help for more details\")"},{"line_number":510,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    return (prior_role_id, implied_role_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_2971b5e1","line":509,"updated":"2017-06-20 15:23:13.000000000","message":"Would we ever hit this case if we make parsed_args.prior_role and parsed_args.implied_role mandatory? This feels like validation that we can have argparse do for us automatically.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    if prior_role_id is None or implied_role_id is None:"},{"line_number":508,"context_line":"        msg \u003d _(\"Unable to parse provided roles.\""},{"line_number":509,"context_line":"                \"See openstack --help for more details\")"},{"line_number":510,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    return (prior_role_id, implied_role_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_b9cd5286","line":509,"in_reply_to":"5f201791_2971b5e1","updated":"2017-06-28 13:10:30.000000000","message":"Good catch.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        parser.add_argument("},{"line_number":517,"context_line":"            \u0027--prior-role\u0027,"},{"line_number":518,"context_line":"            metavar\u003d\u0027\u003crole-name\u003e\u0027,"},{"line_number":519,"context_line":"            help\u003d\u0027prior role \u003crole\u003e (name or ID) implies another role\u0027,"},{"line_number":520,"context_line":"        )"},{"line_number":521,"context_line":"        parser.add_argument("},{"line_number":522,"context_line":"            \u0027--implied-role\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_c46228d9","line":519,"updated":"2017-06-20 15:23:13.000000000","message":"We should be able to mark these as required and remove the logic from line 507 - 512 since the parser inherits from osc_lib which eventually inherits from cliff\u0027s argument parser [0].\n\n[0] https://github.com/openstack/cliff/blob/master/cliff/_argparse.py#L21","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        parser.add_argument("},{"line_number":517,"context_line":"            \u0027--prior-role\u0027,"},{"line_number":518,"context_line":"            metavar\u003d\u0027\u003crole-name\u003e\u0027,"},{"line_number":519,"context_line":"            help\u003d\u0027prior role \u003crole\u003e (name or ID) implies another role\u0027,"},{"line_number":520,"context_line":"        )"},{"line_number":521,"context_line":"        parser.add_argument("},{"line_number":522,"context_line":"            \u0027--implied-role\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_f9b74af4","line":519,"in_reply_to":"5f201791_c46228d9","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":528,"context_line":""},{"line_number":529,"context_line":"class CreateImpliedRole(command.ShowOne):"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    _description \u003d _(\"Create implication betweeen prior and implied roles\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def get_parser(self, prog_name):"},{"line_number":534,"context_line":"        parser \u003d super(CreateImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_697d6de6","line":531,"updated":"2017-06-20 15:23:13.000000000","message":"between*","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":528,"context_line":""},{"line_number":529,"context_line":"class CreateImpliedRole(command.ShowOne):"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    _description \u003d _(\"Create implication betweeen prior and implied roles\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def get_parser(self, prog_name):"},{"line_number":534,"context_line":"        parser \u003d super(CreateImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_3695d133","line":531,"in_reply_to":"5f201791_697d6de6","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"class DeleteImpliedRole(command.Command):"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    _description \u003d _(\"Deletes implication from prior to implied role\")"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def get_parser(self, prog_name):"},{"line_number":553,"context_line":"        parser \u003d super(DeleteImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_a9726510","line":550,"updated":"2017-06-20 15:23:13.000000000","message":"nit s/implication/association/ ?\n\nSame comment above in case you decide to incorporate that feedback here.","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"class DeleteImpliedRole(command.Command):"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    _description \u003d _(\"Deletes implication from prior to implied role\")"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def get_parser(self, prog_name):"},{"line_number":553,"context_line":"        parser \u003d super(DeleteImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_7971fa43","line":550,"in_reply_to":"5f201791_a9726510","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1dcc7313e363f0dd809ce3def8d28a2b09f0f574","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                           implies[\u0027name\u0027])"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":584,"context_line":"        response \u003d identity_client.roles.list_role_inferences()"},{"line_number":585,"context_line":"        return (self._COLUMNS, _list_implied(response))"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_c41a2816","line":584,"updated":"2017-06-20 15:23:13.000000000","message":"list_role_inferences is currently deprecated and is going to be removed [0]. Let\u0027s use list_inference_roles instead [1].\n\n[0] https://github.com/openstack/python-keystoneclient/blob/ef49844248661671063567f98016e88943955ba0/keystoneclient/v3/roles.py#L384-L387\n[1] https://github.com/openstack/python-keystoneclient/blob/ef49844248661671063567f98016e88943955ba0/keystoneclient/v3/roles.py#L511-L524","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"af42526a6efe0c04b162d54607a17d03cd76655c","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                           implies[\u0027name\u0027])"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":584,"context_line":"        response \u003d identity_client.roles.list_role_inferences()"},{"line_number":585,"context_line":"        return (self._COLUMNS, _list_implied(response))"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f201791_567ccdea","line":584,"in_reply_to":"5f201791_c41a2816","updated":"2017-06-28 13:10:30.000000000","message":"Done","commit_id":"a5962851041fd19f5b9b8757781da5e0b75e357c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        return zip(*sorted(six.iteritems(role._info)))"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"def _parse_implied_params(identity_client, parsed_args):"},{"line_number":494,"context_line":"    prior_role_id \u003d None"},{"line_number":495,"context_line":"    implied_role_id \u003d None"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_8c4ed2be","line":493,"range":{"start_line":493,"start_character":4,"end_line":493,"end_character":25},"updated":"2017-06-27 15:32:39.000000000","message":"this should be renamed to something more accuate? _get_role_ids()? \n\na docstring explaining what it does would be great","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        return zip(*sorted(six.iteritems(role._info)))"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"def _parse_implied_params(identity_client, parsed_args):"},{"line_number":494,"context_line":"    prior_role_id \u003d None"},{"line_number":495,"context_line":"    implied_role_id \u003d None"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_a88cb135","line":493,"range":{"start_line":493,"start_character":4,"end_line":493,"end_character":25},"in_reply_to":"5f201791_8c4ed2be","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":510,"context_line":"def _add_implied_roles_parser_args(parser):"},{"line_number":511,"context_line":"        parser.add_argument("},{"line_number":512,"context_line":"            \u0027--prior-role\u0027,"},{"line_number":513,"context_line":"            metavar\u003d\u0027\u003crole-name\u003e\u0027,"},{"line_number":514,"context_line":"            help\u003d\u0027prior role \u003crole\u003e (name or ID) implies another role\u0027,"},{"line_number":515,"context_line":"            required\u003dTrue,"},{"line_number":516,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_cc6f2a29","line":513,"range":{"start_line":513,"start_character":22,"end_line":513,"end_character":31},"updated":"2017-06-27 15:32:39.000000000","message":"role*","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":510,"context_line":"def _add_implied_roles_parser_args(parser):"},{"line_number":511,"context_line":"        parser.add_argument("},{"line_number":512,"context_line":"            \u0027--prior-role\u0027,"},{"line_number":513,"context_line":"            metavar\u003d\u0027\u003crole-name\u003e\u0027,"},{"line_number":514,"context_line":"            help\u003d\u0027prior role \u003crole\u003e (name or ID) implies another role\u0027,"},{"line_number":515,"context_line":"            required\u003dTrue,"},{"line_number":516,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_48851d06","line":513,"range":{"start_line":513,"start_character":22,"end_line":513,"end_character":31},"in_reply_to":"5f201791_cc6f2a29","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"class CreateImpliedRole(command.ShowOne):"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    _description \u003d _(\"Create association between prior and implied roles\")"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def get_parser(self, prog_name):"},{"line_number":531,"context_line":"        parser \u003d super(CreateImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_2c7fbee0","line":528,"range":{"start_line":528,"start_character":22,"end_line":528,"end_character":28},"updated":"2017-06-27 15:32:39.000000000","message":"Creates an*","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"class CreateImpliedRole(command.ShowOne):"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    _description \u003d _(\"Create association between prior and implied roles\")"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def get_parser(self, prog_name):"},{"line_number":531,"context_line":"        parser \u003d super(CreateImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_e8750933","line":528,"range":{"start_line":528,"start_character":22,"end_line":528,"end_character":28},"in_reply_to":"5f201791_2c7fbee0","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":544,"context_line":""},{"line_number":545,"context_line":"class DeleteImpliedRole(command.Command):"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    _description \u003d _(\"Deletes association between prior and implied roles\")"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    def get_parser(self, prog_name):"},{"line_number":550,"context_line":"        parser \u003d super(DeleteImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_ec8426d5","line":547,"range":{"start_line":547,"start_character":22,"end_line":547,"end_character":29},"updated":"2017-06-27 15:32:39.000000000","message":"Deletes an*","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":544,"context_line":""},{"line_number":545,"context_line":"class DeleteImpliedRole(command.Command):"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    _description \u003d _(\"Deletes association between prior and implied roles\")"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    def get_parser(self, prog_name):"},{"line_number":550,"context_line":"        parser \u003d super(DeleteImpliedRole, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_c8700d43","line":547,"range":{"start_line":547,"start_character":22,"end_line":547,"end_character":29},"in_reply_to":"5f201791_ec8426d5","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":560,"context_line":""},{"line_number":561,"context_line":"class ListImpliedRole(command.Lister):"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    _description \u003d _(\"List implied role\")"},{"line_number":564,"context_line":"    _COLUMNS \u003d [\u0027prior-role-id\u0027, \u0027prior-role-name\u0027,"},{"line_number":565,"context_line":"                \u0027implied-role-id\u0027, \u0027implied-role-name\u0027]"},{"line_number":566,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_0c340249","line":563,"range":{"start_line":563,"start_character":35,"end_line":563,"end_character":39},"updated":"2017-06-27 15:32:39.000000000","message":"roles*","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":560,"context_line":""},{"line_number":561,"context_line":"class ListImpliedRole(command.Lister):"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    _description \u003d _(\"List implied role\")"},{"line_number":564,"context_line":"    _COLUMNS \u003d [\u0027prior-role-id\u0027, \u0027prior-role-name\u0027,"},{"line_number":565,"context_line":"                \u0027implied-role-id\u0027, \u0027implied-role-name\u0027]"},{"line_number":566,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_6897b93b","line":563,"range":{"start_line":563,"start_character":35,"end_line":563,"end_character":39},"in_reply_to":"5f201791_0c340249","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7f8c2a6c148da273446218ffbf2584ff4f291a1c","unresolved":false,"context_lines":[{"line_number":561,"context_line":"class ListImpliedRole(command.Lister):"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    _description \u003d _(\"List implied role\")"},{"line_number":564,"context_line":"    _COLUMNS \u003d [\u0027prior-role-id\u0027, \u0027prior-role-name\u0027,"},{"line_number":565,"context_line":"                \u0027implied-role-id\u0027, \u0027implied-role-name\u0027]"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_ac250e0b","line":564,"range":{"start_line":564,"start_character":17,"end_line":564,"end_character":30},"updated":"2017-06-27 15:32:39.000000000","message":"if these are the column headers, which i think they are, they should be in proper case, like \"Prior Role ID\" and \"Prior Role Name\". Note that cliff is smart enough to look for \"prior_role_id\" in the responses and will pick it up automatically.","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"b31f0c87b0ff28960ef0b6f93e738337ff7f5086","unresolved":false,"context_lines":[{"line_number":561,"context_line":"class ListImpliedRole(command.Lister):"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    _description \u003d _(\"List implied role\")"},{"line_number":564,"context_line":"    _COLUMNS \u003d [\u0027prior-role-id\u0027, \u0027prior-role-name\u0027,"},{"line_number":565,"context_line":"                \u0027implied-role-id\u0027, \u0027implied-role-name\u0027]"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_932daaff","line":564,"range":{"start_line":564,"start_character":17,"end_line":564,"end_character":30},"in_reply_to":"5f201791_ac250e0b","updated":"2017-06-28 15:14:02.000000000","message":"Done","commit_id":"8fe0727c1b0c1bbb7f3310b1b9fbfd558d6f8715"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        return zip(*sorted(six.iteritems(role._info)))"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"def _ger_role_ids(identity_client, parsed_args):"},{"line_number":494,"context_line":"    \"\"\"Return prior and implied role id(s)"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    If prior and implied role id(s) are retrievable from identity"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f201791_f9527d66","line":493,"range":{"start_line":493,"start_character":4,"end_line":493,"end_character":17},"updated":"2017-06-28 16:21:25.000000000","message":"s/ger/get","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        return zip(*sorted(six.iteritems(role._info)))"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"def _ger_role_ids(identity_client, parsed_args):"},{"line_number":494,"context_line":"    \"\"\"Return prior and implied role id(s)"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    If prior and implied role id(s) are retrievable from identity"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f201791_941c7078","line":493,"range":{"start_line":493,"start_character":4,"end_line":493,"end_character":17},"in_reply_to":"5f201791_f9527d66","updated":"2017-06-28 17:01:03.000000000","message":"*sigh* This is my least favorite type of mistake to make in public.","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"962fb51f192aaf541eaeeee83bb15a4981f9fba1","unresolved":false,"context_lines":[{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    def take_action(self, parsed_args):"},{"line_number":541,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":542,"context_line":"        (prior_role_id, implied_role_id) \u003d _ger_role_ids("},{"line_number":543,"context_line":"            identity_client, parsed_args)"},{"line_number":544,"context_line":"        response \u003d identity_client.roles.create_implied("},{"line_number":545,"context_line":"            prior_role_id, implied_role_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f201791_99c94927","line":542,"range":{"start_line":542,"start_character":49,"end_line":542,"end_character":50},"updated":"2017-06-28 16:21:25.000000000","message":"s/ger/get","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"0be5449c2e55f0cb7d857c93704ffe12db53bdb3","unresolved":false,"context_lines":[{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    def take_action(self, parsed_args):"},{"line_number":541,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":542,"context_line":"        (prior_role_id, implied_role_id) \u003d _ger_role_ids("},{"line_number":543,"context_line":"            identity_client, parsed_args)"},{"line_number":544,"context_line":"        response \u003d identity_client.roles.create_implied("},{"line_number":545,"context_line":"            prior_role_id, implied_role_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f201791_34159c49","line":542,"range":{"start_line":542,"start_character":49,"end_line":542,"end_character":50},"in_reply_to":"5f201791_99c94927","updated":"2017-06-28 17:01:03.000000000","message":"Done","commit_id":"ffe0dba5411e953fdcbbed252f726da8a4dc81a4"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2f8214488d0f7c26860041112c073e5f59edec9e","unresolved":false,"context_lines":[{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        role._info.pop(\u0027links\u0027)"},{"line_number":490,"context_line":"        return zip(*sorted(six.iteritems(role._info)))"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"def _get_role_ids(identity_client, parsed_args):"},{"line_number":494,"context_line":"    \"\"\"Return prior and implied role id(s)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_02c0d67a","line":491,"updated":"2017-06-30 19:57:41.000000000","message":"Implied roles are a top-level resource and should be in their own source file.  Also the tests.","commit_id":"de8b38b59159227a9ef9de03c314e9c2fdd02a3d"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2f8214488d0f7c26860041112c073e5f59edec9e","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    return (prior_role_id, implied_role_id)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"def _add_implied_roles_parser_args(parser):"},{"line_number":516,"context_line":"    \"\"\"Adds prior-role and implied-role arguments to a parser object\"\"\""},{"line_number":517,"context_line":"    parser.add_argument("},{"line_number":518,"context_line":"        \u0027--prior-role\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_e2683a88","line":515,"updated":"2017-06-30 19:57:41.000000000","message":"I really dislike doing this, it makes changes down the road harder.  A certain amount of duplication is expected in these commands, and makes the code easier to read and follow.","commit_id":"de8b38b59159227a9ef9de03c314e9c2fdd02a3d"}],"releasenotes/notes/add-implied-role-0cdafb131fbd7453.yaml":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2f8214488d0f7c26860041112c073e5f59edec9e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for Implied Role commands:"},{"line_number":5,"context_line":"    ``implied role create``, ``creates an association between prior and implied roles``,"},{"line_number":6,"context_line":"    ``implied role delete``, ``deletes an association between prior and implied roles`` and"},{"line_number":7,"context_line":"    ``implied role list``, ``list implied roles``"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"3f1d235d_a2d5a245","line":4,"updated":"2017-06-30 19:57:41.000000000","message":"This text should be a paragraph, not just another copy of the help text.  Have a look at other release notes to get a feel for the style we use.","commit_id":"de8b38b59159227a9ef9de03c314e9c2fdd02a3d"}]}
