)]}'
{"etc/nova/rootwrap.d/compute.filters":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a6e66997b7a49d4dd4e120fd42c1b8af448136e9","unresolved":false,"context_lines":[{"line_number":208,"context_line":"# and (implicitly) the actual python code invoked."},{"line_number":209,"context_line":"privsep-rootwrap-os_brick: RegExpFilter, privsep-helper, root, privsep-helper, --config-file, /etc/(?!\\.\\.).*, --privsep_context, os_brick.privileged.default, --privsep_sock_path, /tmp/.*"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"privsep-rootwrap-dac_admin: RegExpFilter, privsep-helper, root, privsep-helper, --config-file, /etc/(?!\\.\\.).*, --privsep_context, nova.privsep.dac_admin_pctxt, --privsep_sock_path, /tmp/.*"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# nova/virt/libvirt/storage/dmcrypt.py:"}],"source_content_type":"application/octet-stream","patch_set":32,"id":"7f287b81_8dd04bf9","line":211,"updated":"2017-09-06 12:28:08.000000000","message":"this going to need changelogs for the adds for sure","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[{"line_number":208,"context_line":"# and (implicitly) the actual python code invoked."},{"line_number":209,"context_line":"privsep-rootwrap-os_brick: RegExpFilter, privsep-helper, root, privsep-helper, --config-file, /etc/(?!\\.\\.).*, --privsep_context, os_brick.privileged.default, --privsep_sock_path, /tmp/.*"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"privsep-rootwrap-dac_admin: RegExpFilter, privsep-helper, root, privsep-helper, --config-file, /etc/(?!\\.\\.).*, --privsep_context, nova.privsep.dac_admin_pctxt, --privsep_sock_path, /tmp/.*"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# nova/virt/libvirt/storage/dmcrypt.py:"}],"source_content_type":"application/octet-stream","patch_set":32,"id":"7f287b81_73d05df8","line":211,"in_reply_to":"7f287b81_8dd04bf9","updated":"2017-09-06 16:27:05.000000000","message":"Presumably a single changelog entry of \"update your rootwrap config\" is sufficient? Or do you want a separate upgrade entry for each of these entries (there are several in this chain)?","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}],"nova/privsep.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4ed8176b90335011d7adf6372b7cc13cfe94e046","unresolved":false,"context_lines":[{"line_number":31,"context_line":")"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# NOTE(mikal): the interface here is lightly modelled on python\u0027s os module"},{"line_number":35,"context_line":"# to make things a bit more intuitative."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@cap_sys_admin.entrypoint"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_ad1c876a","line":34,"range":{"start_line":34,"start_character":66,"end_line":34,"end_character":68},"updated":"2017-06-30 10:14:38.000000000","message":"os.path?","commit_id":"068b799e7147d2892961e8549c272c94076caec0"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8821f54317e16f5c0da6e5a5e6361261f11b9e50","unresolved":false,"context_lines":[{"line_number":31,"context_line":")"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# NOTE(mikal): the interface here is lightly modelled on python\u0027s os module"},{"line_number":35,"context_line":"# to make things a bit more intuitative."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@cap_sys_admin.entrypoint"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_69a2b1b0","line":34,"range":{"start_line":34,"start_character":66,"end_line":34,"end_character":68},"in_reply_to":"3f1d235d_ad1c876a","updated":"2017-07-03 12:15:56.000000000","message":"No, os -- readlink() for example is in os, not os.path.","commit_id":"068b799e7147d2892961e8549c272c94076caec0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4ed8176b90335011d7adf6372b7cc13cfe94e046","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# NOTE(mikal): the interface here is lightly modelled on python\u0027s os module"},{"line_number":35,"context_line":"# to make things a bit more intuitative."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"@cap_sys_admin.entrypoint"},{"line_number":38,"context_line":"def readfile(path):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_ea0dc53e","line":35,"range":{"start_line":35,"start_character":28,"end_line":35,"end_character":39},"updated":"2017-06-30 10:14:38.000000000","message":"intuitive","commit_id":"068b799e7147d2892961e8549c272c94076caec0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4ed8176b90335011d7adf6372b7cc13cfe94e046","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    os.chmod(path, mode)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class path(object):"},{"line_number":80,"context_line":"    @staticmethod"},{"line_number":81,"context_line":"    @cap_sys_admin.entrypoint"},{"line_number":82,"context_line":"    def exists(path):"},{"line_number":83,"context_line":"        return os.path.exists(path)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_cd0fc32c","line":82,"range":{"start_line":79,"start_character":0,"end_line":82,"end_character":21},"updated":"2017-06-30 10:14:38.000000000","message":"just call this path_exists - we don\u0027t need to model os.path exactly","commit_id":"068b799e7147d2892961e8549c272c94076caec0"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"91d188789967f1804df5558920c632a081697fc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1f1a1f67_9420b94b","updated":"2017-07-21 04:59:57.000000000","message":"I wonder if it isn\u0027t better to structure this as:\n\n nova/pribsep/__init__.py:\n  dac_admin \u003d priv_context.PrivContext(...)\n nova/pribsep/dac_admin.py\n  All the entry points\n\nThat way as we add more helpers the code is separate.\n\nHaving said that, we can easily do it as a refactor in the future.","commit_id":"60a97eb82f2bdb7fdc1b5c6ccc01f48bbeb4d884"}],"nova/privsep/__init__.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"10748d7cb054e91d1ccc87959a70052575ca095a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \u0027nova\u0027,"},{"line_number":24,"context_line":"    cfg_section\u003d\u0027nova_privileged\u0027,"},{"line_number":25,"context_line":"    pypath\u003d__name__ + \u0027.dac_admin_pctxt\u0027,"},{"line_number":26,"context_line":"    # NOTE(tonyb): These map to CAP_CHOWN, CAP_DAC_OVERRIDE,"},{"line_number":27,"context_line":"    #              CAP_DAC_READ_SEARCH  and CAP_FOWNER.  Some do not have"},{"line_number":28,"context_line":"    #              symbolic names in oslo.privsep yet.  See capabilites(7)"},{"line_number":29,"context_line":"    #              for more information"},{"line_number":30,"context_line":"    capabilities\u003d[0, 1, 2, 3],"},{"line_number":31,"context_line":")"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_2dcff829","line":29,"range":{"start_line":26,"start_character":0,"end_line":29,"end_character":39},"updated":"2017-07-27 04:27:23.000000000","message":"For the record this is fixed in  I1e6f7bff66495cdb83428a6c3b62804e5d20fc3b so once that is released we can up the minimum in g-r and switch to the symbolic names.  Clearly that\u0027s queens material but then again so is privsep ;P","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a6e66997b7a49d4dd4e120fd42c1b8af448136e9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_privsep import priv_context"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# NOTE(tonyb): DAC \u003d\u003d Discriminatory Access Control.  Basically this context"},{"line_number":21,"context_line":"#              can bypass permissions checks in the file-system."},{"line_number":22,"context_line":"dac_admin_pctxt \u003d priv_context.PrivContext("},{"line_number":23,"context_line":"    \u0027nova\u0027,"},{"line_number":24,"context_line":"    cfg_section\u003d\u0027nova_privileged\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_0d069b87","line":21,"updated":"2017-09-06 12:28:08.000000000","message":"would be ideal to have this link to the privsep docs describing all of this","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_privsep import priv_context"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# NOTE(tonyb): DAC \u003d\u003d Discriminatory Access Control.  Basically this context"},{"line_number":21,"context_line":"#              can bypass permissions checks in the file-system."},{"line_number":22,"context_line":"dac_admin_pctxt \u003d priv_context.PrivContext("},{"line_number":23,"context_line":"    \u0027nova\u0027,"},{"line_number":24,"context_line":"    cfg_section\u003d\u0027nova_privileged\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_733e1d2a","line":21,"in_reply_to":"7f287b81_0d069b87","updated":"2017-09-06 16:27:05.000000000","message":"I\u0027m not sure I follow. DAC is a kernel concept and privsep doesn\u0027t know anything about it past that its a set of capabilities we requested. So, I don\u0027t think this is documented in privsep if I understand your question.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"26b3c228c1e07d735b1eb4d9d40539abcd5e770c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_privsep import priv_context"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# NOTE(tonyb): DAC \u003d\u003d Discriminatory Access Control.  Basically this context"},{"line_number":21,"context_line":"#              can bypass permissions checks in the file-system."},{"line_number":22,"context_line":"dac_admin_pctxt \u003d priv_context.PrivContext("},{"line_number":23,"context_line":"    \u0027nova\u0027,"},{"line_number":24,"context_line":"    cfg_section\u003d\u0027nova_privileged\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_de67154d","line":21,"in_reply_to":"7f287b81_733e1d2a","updated":"2017-09-06 17:06:28.000000000","message":"yeh, that\u0027s fine. Less about DAC as a concept, and more about how prvisep does this.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"ba5024f73eca07278908eea82df57dc6b359e5db","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_privsep import priv_context"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# NOTE(tonyb): DAC \u003d\u003d Discriminatory Access Control.  Basically this context"},{"line_number":21,"context_line":"#              can bypass permissions checks in the file-system."},{"line_number":22,"context_line":"dac_admin_pctxt \u003d priv_context.PrivContext("},{"line_number":23,"context_line":"    \u0027nova\u0027,"},{"line_number":24,"context_line":"    cfg_section\u003d\u0027nova_privileged\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_febe5163","line":21,"in_reply_to":"7f287b81_de67154d","updated":"2017-09-06 17:08:31.000000000","message":"I think this will become clearer when other contexts get added later in the series too...","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}],"nova/privsep/dac_admin.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"10748d7cb054e91d1ccc87959a70052575ca095a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"def readfile(path):"},{"line_number":27,"context_line":"    if not os.path.exists(path):"},{"line_number":28,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":29,"context_line":"    with open(path, \u0027r\u0027) as f:"},{"line_number":30,"context_line":"        return f.read()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_ad7e48ac","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":23},"updated":"2017-07-27 04:27:23.000000000","message":"I wonder if it\u0027s worth making this a kwarg? so we can pass \u0027rb\u0027 if we need to.\n\nI guess that isn\u0027t a problematic thing to add later.","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"66eb25adb2cf113aeabced81607a25f0f6208f3f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"def readfile(path):"},{"line_number":27,"context_line":"    if not os.path.exists(path):"},{"line_number":28,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":29,"context_line":"    with open(path, \u0027r\u0027) as f:"},{"line_number":30,"context_line":"        return f.read()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_ae01773a","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":23},"in_reply_to":"ff346bd7_8347acbc","updated":"2017-07-28 00:56:30.000000000","message":"Yeah that could work.","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"548abc1333afe3f20ed94b6fd7a70b95ecd3d020","unresolved":false,"context_lines":[{"line_number":26,"context_line":"def readfile(path):"},{"line_number":27,"context_line":"    if not os.path.exists(path):"},{"line_number":28,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":29,"context_line":"    with open(path, \u0027r\u0027) as f:"},{"line_number":30,"context_line":"        return f.read()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_8347acbc","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":23},"in_reply_to":"ff346bd7_ad7e48ac","updated":"2017-07-28 00:32:52.000000000","message":"Yeah, I wonder if exposing the mode is a bad idea. Perhaps a kwarg that says \"open as binary\" and then we calculate the mode in the method?","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"d60655ac9d15be7597c6389760f56502039695f7","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@nova.privsep.dac_admin_pctxt.entrypoint"},{"line_number":50,"context_line":"def chown(path, uid, gid):"},{"line_number":51,"context_line":"    if not os.path.exists(path):"},{"line_number":52,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":53,"context_line":"    return os.chown(path, uid, gid)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_0d31fb0b","line":50,"updated":"2017-09-06 12:31:47.000000000","message":"additional -1. Based on where this is used, it would be really nice to make uid and gid optional, so we stop putting magic -1s into calls later. \n\nSo just uid\u003d-1, gid\u003d-1 in the param list and be done with it, then call the params explicitly.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@nova.privsep.dac_admin_pctxt.entrypoint"},{"line_number":50,"context_line":"def chown(path, uid, gid):"},{"line_number":51,"context_line":"    if not os.path.exists(path):"},{"line_number":52,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":53,"context_line":"    return os.chown(path, uid, gid)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_1371190d","line":50,"in_reply_to":"7f287b81_0d31fb0b","updated":"2017-09-06 16:27:05.000000000","message":"Done","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a6e66997b7a49d4dd4e120fd42c1b8af448136e9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    @staticmethod"},{"line_number":70,"context_line":"    @nova.privsep.dac_admin_pctxt.entrypoint"},{"line_number":71,"context_line":"    def exists(path):"},{"line_number":72,"context_line":"        return os.path.exists(path)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_ad8547d1","line":72,"updated":"2017-09-06 12:28:08.000000000","message":"interesting, I\u0027m a little surprised these methods aren\u0027t provided with privsep","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    @staticmethod"},{"line_number":70,"context_line":"    @nova.privsep.dac_admin_pctxt.entrypoint"},{"line_number":71,"context_line":"    def exists(path):"},{"line_number":72,"context_line":"        return os.path.exists(path)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_33765508","line":72,"in_reply_to":"7f287b81_ad8547d1","updated":"2017-09-06 16:27:05.000000000","message":"privsep secretly wants you to put the business logic down at this later, I just haven\u0027t found a case where that makes me comfortable yet. So, it doesn\u0027t really provide anything past a mechanism, and then you get to do the implementation.\n\nIts possible much of this could one day move to privsep, but we\u0027re the first people I can find to do this sort of thing.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}],"nova/test.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"10748d7cb054e91d1ccc87959a70052575ca095a","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self.useFixture(nova_fixtures.ForbidNewLegacyNotificationFixture())"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        # NOTE(mikal): make sure we don\u0027t load a privsep helper accidentally"},{"line_number":315,"context_line":"        self.useFixture(nova_fixtures.PrivsepNoHelperFixture())"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _setup_cells(self):"},{"line_number":318,"context_line":"        \"\"\"Setup a normal cellsv2 environment."}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_0d49d489","line":315,"range":{"start_line":315,"start_character":38,"end_line":315,"end_character":60},"updated":"2017-07-27 04:27:23.000000000","message":"This is oh so helpful!","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"548abc1333afe3f20ed94b6fd7a70b95ecd3d020","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self.useFixture(nova_fixtures.ForbidNewLegacyNotificationFixture())"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        # NOTE(mikal): make sure we don\u0027t load a privsep helper accidentally"},{"line_number":315,"context_line":"        self.useFixture(nova_fixtures.PrivsepNoHelperFixture())"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _setup_cells(self):"},{"line_number":318,"context_line":"        \"\"\"Setup a normal cellsv2 environment."}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_431784a5","line":315,"range":{"start_line":315,"start_character":38,"end_line":315,"end_character":60},"in_reply_to":"ff346bd7_0d49d489","updated":"2017-07-28 00:32:52.000000000","message":"You\u0027re welcome?","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"}],"nova/tests/fixtures.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f76a398b72f0455925765cd1e2cbfdb197252286","unresolved":false,"context_lines":[{"line_number":1541,"context_line":"            raise_exc\u003dFalse)"},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":""},{"line_number":1544,"context_line":"class UnHelperfulClientChannel(privsep_daemon._ClientChannel):"},{"line_number":1545,"context_line":"    def __init__(self, context):"},{"line_number":1546,"context_line":"        raise Exception(\u0027You have attempted to start a privsep helper. \u0027"},{"line_number":1547,"context_line":"                        \u0027This is not allowed in the gate, and \u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_6453ee6c","line":1544,"range":{"start_line":1544,"start_character":6,"end_line":1544,"end_character":17},"updated":"2017-09-06 18:44:19.000000000","message":"This is cute but probably would be better called \"RaisingPrivsepClientChannel\" or similar.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}],"nova/tests/unit/virt/disk/vfs/test_localfs.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"91d188789967f1804df5558920c632a081697fc9","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        vfs.setup()"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        self.assertTrue(mkdtemp.called)"},{"line_number":224,"context_line":"        NbdMount.assert_called_once_with(self.qcowfile, \u0027tmp/\u0027, None)"},{"line_number":225,"context_line":"        mounter.do_mount.assert_called_once_with()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @mock.patch.object(tempfile, \u0027mkdtemp\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_743abd34","line":224,"range":{"start_line":224,"start_character":56,"end_line":224,"end_character":62},"updated":"2017-07-21 04:59:57.000000000","message":"Unrelated change?","commit_id":"60a97eb82f2bdb7fdc1b5c6ccc01f48bbeb4d884"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"91d188789967f1804df5558920c632a081697fc9","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        vfs.setup(mount\u003dFalse)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        self.assertTrue(mkdtemp.called)"},{"line_number":239,"context_line":"        NbdMount.assert_called_once_with(self.qcowfile, \u0027tmp/\u0027, None)"},{"line_number":240,"context_line":"        self.assertFalse(mounter.do_mount.called)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_141389ba","line":239,"range":{"start_line":239,"start_character":56,"end_line":239,"end_character":62},"updated":"2017-07-21 04:59:57.000000000","message":"Unrelated change?","commit_id":"60a97eb82f2bdb7fdc1b5c6ccc01f48bbeb4d884"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"10748d7cb054e91d1ccc87959a70052575ca095a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.virt.image import model as imgmodel"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class fake_proc(object):"},{"line_number":31,"context_line":"    def __init__(self):"},{"line_number":32,"context_line":"        self.returncode \u003d None"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def wait(self):"},{"line_number":35,"context_line":"        return 100"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class VirtDiskVFSLocalFSTestPaths(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_2ba9208f","line":35,"range":{"start_line":30,"start_character":0,"end_line":35,"end_character":18},"updated":"2017-07-27 04:27:23.000000000","message":"Is this still needed?  I don\u0027t see it used anywhere","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"548abc1333afe3f20ed94b6fd7a70b95ecd3d020","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.virt.image import model as imgmodel"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class fake_proc(object):"},{"line_number":31,"context_line":"    def __init__(self):"},{"line_number":32,"context_line":"        self.returncode \u003d None"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def wait(self):"},{"line_number":35,"context_line":"        return 100"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class VirtDiskVFSLocalFSTestPaths(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_43cae41a","line":35,"range":{"start_line":30,"start_character":0,"end_line":35,"end_character":18},"in_reply_to":"ff346bd7_2ba9208f","updated":"2017-07-28 00:32:52.000000000","message":"Good catch. I\u0027ll remove it.","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"10748d7cb054e91d1ccc87959a70052575ca095a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027makedirs\u0027)"},{"line_number":81,"context_line":"    def test_makepath(self, mkdir, read_link):"},{"line_number":82,"context_line":"        vfs \u003d vfsimpl.VFSLocalFS(self.qcowfile)"},{"line_number":83,"context_line":"        vfs.imgdir \u003d \u0027/scratch/dir\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        vfs.make_path(\u0027/some/dir\u0027)"},{"line_number":86,"context_line":"        read_link.assert_called()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_0ba89cd8","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":35},"updated":"2017-07-27 04:27:23.000000000","message":"We\u0027re setting this in all the tests but as we\u0027ve mocked out the only use of it VFSLocalFS._canonical_path() do we need this in all the tests?","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"548abc1333afe3f20ed94b6fd7a70b95ecd3d020","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027makedirs\u0027)"},{"line_number":81,"context_line":"    def test_makepath(self, mkdir, read_link):"},{"line_number":82,"context_line":"        vfs \u003d vfsimpl.VFSLocalFS(self.qcowfile)"},{"line_number":83,"context_line":"        vfs.imgdir \u003d \u0027/scratch/dir\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        vfs.make_path(\u0027/some/dir\u0027)"},{"line_number":86,"context_line":"        read_link.assert_called()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_4e08cbd8","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":35},"in_reply_to":"ff346bd7_0ba89cd8","updated":"2017-07-28 00:32:52.000000000","message":"Nope, these are still used...\n\n\n\n nova.tests.unit.virt.disk.vfs.test_localfs.VirtDiskVFSLocalFSTest.test_makepath\n -------------------------------------------------------------------------------\n \n Captured traceback:\n ~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"/srv/src/openstack/nova/.tox/py27/local/lib/python2.7/site-packages/mock/mock.py\", line 1305, in patched\n        return func(*args, **keywargs)\n      File \"nova/tests/unit/virt/disk/vfs/test_localfs.py\", line 72, in test_makepath\n        vfs.make_path(\u0027/some/dir\u0027)\n      File \"nova/virt/disk/vfs/localfs.py\", line 103, in make_path\n        dac_admin.makedirs(self._canonical_path(path))\n      File \"nova/virt/disk/vfs/localfs.py\", line 45, in _canonical_path\n        if not canonpath.startswith(os.path.realpath(self.imgdir) + \u0027/\u0027):\n      File \"/srv/src/openstack/nova/.tox/py27/lib/python2.7/posixpath.py\", line 375, in realpath\n        path, ok \u003d _joinrealpath(\u0027\u0027, filename, {})\n      File \"/srv/src/openstack/nova/.tox/py27/lib/python2.7/posixpath.py\", line 381, in _joinrealpath\n        if isabs(rest):\n      File \"/srv/src/openstack/nova/.tox/py27/lib/python2.7/posixpath.py\", line 54, in isabs\n        return s.startswith(\u0027/\u0027)\n    AttributeError: \u0027NoneType\u0027 object has no attribute \u0027startswith\u0027","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"d7fe396f13a61939fedc4de588e31e4f0fa24a78","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027makedirs\u0027)"},{"line_number":81,"context_line":"    def test_makepath(self, mkdir, read_link):"},{"line_number":82,"context_line":"        vfs \u003d vfsimpl.VFSLocalFS(self.qcowfile)"},{"line_number":83,"context_line":"        vfs.imgdir \u003d \u0027/scratch/dir\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        vfs.make_path(\u0027/some/dir\u0027)"},{"line_number":86,"context_line":"        read_link.assert_called()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_0e0d238f","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":35},"in_reply_to":"ff346bd7_4e08cbd8","updated":"2017-07-28 00:53:39.000000000","message":"Yeah of course.  Thanks for checking.","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"10748d7cb054e91d1ccc87959a70052575ca095a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        read_link.assert_called()"},{"line_number":87,"context_line":"        mkdir.assert_called_with(read_link.return_value)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        read_link.reset_mock()"},{"line_number":90,"context_line":"        mkdir.reset_mock()"},{"line_number":91,"context_line":"        vfs.make_path(\u0027/other/dir\u0027)"},{"line_number":92,"context_line":"        read_link.assert_called()"},{"line_number":93,"context_line":"        mkdir.assert_called_with(read_link.return_value)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027readlink\u0027)"},{"line_number":96,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027writefile\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_0b73fcb2","line":93,"range":{"start_line":89,"start_character":0,"end_line":93,"end_character":56},"updated":"2017-07-27 04:27:23.000000000","message":"I wonder if this is actually helpful.  Sure it mirrors the original code but I think that was kinda strange also.","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"548abc1333afe3f20ed94b6fd7a70b95ecd3d020","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        read_link.assert_called()"},{"line_number":87,"context_line":"        mkdir.assert_called_with(read_link.return_value)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        read_link.reset_mock()"},{"line_number":90,"context_line":"        mkdir.reset_mock()"},{"line_number":91,"context_line":"        vfs.make_path(\u0027/other/dir\u0027)"},{"line_number":92,"context_line":"        read_link.assert_called()"},{"line_number":93,"context_line":"        mkdir.assert_called_with(read_link.return_value)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027readlink\u0027)"},{"line_number":96,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027writefile\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_cefb9bbe","line":93,"range":{"start_line":89,"start_character":0,"end_line":93,"end_character":56},"in_reply_to":"ff346bd7_0b73fcb2","updated":"2017-07-28 00:32:52.000000000","message":"Yeah, I can\u0027t explain what value doing this thing twice adds. That said, I worry that\u0027s because I\u0027ve missed something.","commit_id":"c56a005db5af78c76e57b9f1bb71c15a52d836d0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f76a398b72f0455925765cd1e2cbfdb197252286","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if append:"},{"line_number":120,"context_line":"            files[path][\"content\"] +\u003d kwargs[\"process_input\"]"},{"line_number":121,"context_line":"        else:"},{"line_number":122,"context_line":"            files[path][\"content\"] \u003d kwargs[\"process_input\"]"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class VirtDiskVFSLocalFSTestPaths(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_e4cc7e36","side":"PARENT","line":122,"updated":"2017-09-06 18:44:19.000000000","message":"Excellent to see this gone. Just added a greater surface area for bugs IMHO.","commit_id":"019f7ecb88e031d7c56472c378473e48b26ea59d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f76a398b72f0455925765cd1e2cbfdb197252286","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.qcowfile \u003d imgmodel.LocalFileImage(\u0027/dummy.qcow2\u0027,"},{"line_number":67,"context_line":"                                                imgmodel.FORMAT_QCOW2)"},{"line_number":68,"context_line":"        self.rawfile \u003d imgmodel.LocalFileImage(\u0027/dummy.img\u0027,"},{"line_number":69,"context_line":"                                               imgmodel.FORMAT_RAW)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @mock.patch.object(nova.privsep.dac_admin, \u0027readlink\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_04f1ca6b","line":68,"updated":"2017-09-06 18:44:19.000000000","message":"Changing from \" to \u0027 ? :) Kinda unnecessary...","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}],"nova/tests/unit/virt/xenapi/test_xenapi.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"91d188789967f1804df5558920c632a081697fc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1f1a1f67_2f9ab06d","updated":"2017-07-21 04:59:57.000000000","message":"It took me far to long to get why this is needed even though I was certain it was.","commit_id":"60a97eb82f2bdb7fdc1b5c6ccc01f48bbeb4d884"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a6e66997b7a49d4dd4e120fd42c1b8af448136e9","unresolved":false,"context_lines":[{"line_number":967,"context_line":"        mkdir.assert_called()"},{"line_number":968,"context_line":"        chown.assert_called()"},{"line_number":969,"context_line":"        chmod.assert_called()"},{"line_number":970,"context_line":"        write_file.assert_called()"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @testtools.skipIf(test_utils.is_osx(),"},{"line_number":973,"context_line":"                      \u0027IPv6 pretty-printing broken on OSX, see bug 1409135\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_4de4a3ac","line":970,"updated":"2017-09-06 12:28:08.000000000","message":"assert_called doesn\u0027t exist until python 3.6... any idea what version of mock backport it is in?","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[{"line_number":967,"context_line":"        mkdir.assert_called()"},{"line_number":968,"context_line":"        chown.assert_called()"},{"line_number":969,"context_line":"        chmod.assert_called()"},{"line_number":970,"context_line":"        write_file.assert_called()"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @testtools.skipIf(test_utils.is_osx(),"},{"line_number":973,"context_line":"                      \u0027IPv6 pretty-printing broken on OSX, see bug 1409135\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_64409136","line":970,"in_reply_to":"7f287b81_4de4a3ac","updated":"2017-09-06 16:27:05.000000000","message":"It was backported in this commit: https://github.com/testing-cabal/mock/commit/7ca5d3afe293d5e4d769c1cb2dfccb0688ba1292\n\nWhich is two years old.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}],"nova/virt/disk/vfs/localfs.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a6e66997b7a49d4dd4e120fd42c1b8af448136e9","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        canonpath \u003d self._canonical_path(path)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if user is None:"},{"line_number":137,"context_line":"            user \u003d -1"},{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            user \u003d pwd.getpwnam(user).pw_uid"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_4dfdc338","line":137,"updated":"2017-09-06 12:28:08.000000000","message":"-1 is magic for \"don\u0027t do that?\". Would be nice if we had a more descriptive way of expressing that.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        canonpath \u003d self._canonical_path(path)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if user is None:"},{"line_number":137,"context_line":"            user \u003d -1"},{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            user \u003d pwd.getpwnam(user).pw_uid"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7f287b81_44a915db","line":137,"in_reply_to":"7f287b81_4dfdc338","updated":"2017-09-06 16:27:05.000000000","message":"Done","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}],"releasenotes/notes/privsep-localfs-4548989d1cbe3aeb.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8c6196c72ea9eab1f125f417b4e30912028e7cb8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Privsep transitions. Nova is transitioning from using the older style"},{"line_number":4,"context_line":"    rootwrap privilege escalation path to the new style Oslo privsep path"},{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7f287b81_ef0c803a","line":5,"range":{"start_line":2,"start_character":0,"end_line":5,"end_character":74},"updated":"2017-09-05 15:38:33.000000000","message":"I thought we only use \u0027prelude\u0027 for the final release note?","commit_id":"74800a4e58b68287d22acdaa9e56217b2d7cf96a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b966235bc869f8be87c0021a87007fb58d4978e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Privsep transitions. Nova is transitioning from using the older style"},{"line_number":4,"context_line":"    rootwrap privilege escalation path to the new style Oslo privsep path"},{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7f287b81_c1862214","line":5,"range":{"start_line":2,"start_character":0,"end_line":5,"end_character":74},"in_reply_to":"7f287b81_8a05ea7c","updated":"2017-09-06 09:48:29.000000000","message":"From [1],\n\n  \u0027prelude\u0027...is targeted to be filled in close to the\n  release time for providing details about the soon-ish\n  release. Don’t use them unless you know exactly what you\n  are doing.\n\nAs such, if you plan to do all this work in a large series, I\u0027d suggest creating a generic reno and adding to it with successive patches.\n\n[1] https://docs.openstack.org/nova/latest/contributor/releasenotes.html","commit_id":"74800a4e58b68287d22acdaa9e56217b2d7cf96a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6c6550b073b5181a33988a4a72bc0373f8f031d5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Privsep transitions. Nova is transitioning from using the older style"},{"line_number":4,"context_line":"    rootwrap privilege escalation path to the new style Oslo privsep path"},{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7f287b81_e1835e03","line":5,"range":{"start_line":2,"start_character":0,"end_line":5,"end_character":74},"in_reply_to":"7f287b81_8a05ea7c","updated":"2017-09-06 09:47:14.000000000","message":"We have a bit of documentation explaining that here https://docs.openstack.org/nova/latest/contributor/releasenotes.html#when-a-release-note-is-needed\n\nI\u0027d consider that above paragraph as reasonable enough to be commented out in a \"feature\" section and we could mention in the usual prelude change we provide every cycle at the time of queens-3 that we now use privsep.","commit_id":"74800a4e58b68287d22acdaa9e56217b2d7cf96a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f41353d3b60ce50c0e91270faaa1fc05213e3c0c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Privsep transitions. Nova is transitioning from using the older style"},{"line_number":4,"context_line":"    rootwrap privilege escalation path to the new style Oslo privsep path"},{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7f287b81_8a05ea7c","line":5,"range":{"start_line":2,"start_character":0,"end_line":5,"end_character":74},"in_reply_to":"7f287b81_ef0c803a","updated":"2017-09-05 16:30:56.000000000","message":"So, all I was trying to do here was provide a grouping for all of the release notes which will fall under this category. I\u0027m not much fussed how I do that though and generally don\u0027t know much about reno, suggestions welcome!","commit_id":"74800a4e58b68287d22acdaa9e56217b2d7cf96a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b966235bc869f8be87c0021a87007fb58d4978e","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7f287b81_a1a2f698","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":60},"updated":"2017-09-06 09:48:29.000000000","message":"If you want to take the \"one giant reno\" approach, you could rework this as so:\n\n  The following modules have transitioned to using privsep:\n\n  - ``nova.virt.disk.localfs``\n\n...and expand upon that list as you go","commit_id":"74800a4e58b68287d22acdaa9e56217b2d7cf96a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6220b2391231d98f25ff121442f3888945274d2f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7f287b81_0e7b2ebe","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":60},"in_reply_to":"7f287b81_93f509f0","updated":"2017-09-06 15:51:19.000000000","message":"I can\u0027t quite visualize what this would look like...but it sounds good. Go for it","commit_id":"74800a4e58b68287d22acdaa9e56217b2d7cf96a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"7d3b305f8551d59ff761a2c590927614d3f88413","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7f287b81_93f509f0","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":60},"in_reply_to":"7f287b81_a1a2f698","updated":"2017-09-06 15:04:31.000000000","message":"So, I suspect our users don\u0027t care about what internal modules have changed, and a dev would work that out with grep. So I think I more need to provide a heads up that things have changed (privsep is used at all), and then perhaps a status update per release explaining what is still to do. Comments welcome though.","commit_id":"74800a4e58b68287d22acdaa9e56217b2d7cf96a"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a6e66997b7a49d4dd4e120fd42c1b8af448136e9","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Privsep transitions. Nova is transitioning from using the older style"},{"line_number":4,"context_line":"    rootwrap privilege escalation path to the new style Oslo privsep path"},{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":32,"id":"7f287b81_ed97cfea","line":5,"updated":"2017-09-06 12:28:08.000000000","message":"prelude is usually done during release.","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Privsep transitions. Nova is transitioning from using the older style"},{"line_number":4,"context_line":"    rootwrap privilege escalation path to the new style Oslo privsep path"},{"line_number":5,"context_line":"    this should improve performance and security of Nova in the long term."},{"line_number":6,"context_line":"security:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    nova.virt.disk.localfs has transitioned to using privsep"}],"source_content_type":"text/x-yaml","patch_set":32,"id":"7f287b81_e4836155","line":5,"in_reply_to":"7f287b81_ed97cfea","updated":"2017-09-06 16:27:05.000000000","message":"Done","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a6e66997b7a49d4dd4e120fd42c1b8af448136e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"7f287b81_ada1c748","line":9,"updated":"2017-09-06 12:28:08.000000000","message":"Need an upgrade for the rootwrap rules","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0ec39502910c7e8f3f0da677248797ed9c178c13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"7f287b81_c4862566","line":9,"in_reply_to":"7f287b81_ada1c748","updated":"2017-09-06 16:27:05.000000000","message":"Done","commit_id":"c05e14f557eb76742fda447d38a00fb1a26e8b1f"}]}
