)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"bb9b6ca35040743ea14918ca45e324e39ff58b02","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This proposes \u0027pci_passthrough_whitelist_sections\u0027, which is a config"},{"line_number":13,"context_line":"variable to list a number of individual sections that describe the"},{"line_number":14,"context_line":"same PCI-passthrough options."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This modifies class PciHostDevicesWhiteList() to take both the json"},{"line_number":17,"context_line":"strings from pci_passthrough_whitelist and dictionaries from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a890539_c90a4b89","line":14,"updated":"2014-11-17 15:27:48.000000000","message":"Can you describe the new config option value syntax here too","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"d9580f017283f985983db88d1271206e64e6e910","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This proposes \u0027pci_passthrough_whitelist_sections\u0027, which is a config"},{"line_number":13,"context_line":"variable to list a number of individual sections that describe the"},{"line_number":14,"context_line":"same PCI-passthrough options."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This modifies class PciHostDevicesWhiteList() to take both the json"},{"line_number":17,"context_line":"strings from pci_passthrough_whitelist and dictionaries from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a890539_6e8dc7d2","line":14,"in_reply_to":"5a890539_c90a4b89","updated":"2014-11-18 04:38:14.000000000","message":"Done","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"bb9b6ca35040743ea14918ca45e324e39ff58b02","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[1] http://lists.openstack.org/pipermail/openstack-dev/2014-October/049341.html"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I4b860e3f7901b00b1c78f7df1f2219132f347239"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a890539_0901b369","line":26,"updated":"2014-11-17 15:27:48.000000000","message":"Needs DocImpact tag.","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"d9580f017283f985983db88d1271206e64e6e910","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[1] http://lists.openstack.org/pipermail/openstack-dev/2014-October/049341.html"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I4b860e3f7901b00b1c78f7df1f2219132f347239"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a890539_8ebf5360","line":26,"in_reply_to":"5a890539_0901b369","updated":"2014-11-18 04:38:14.000000000","message":"Done","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"}],"nova/pci/whitelist.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"e2094c65cf1c40c80c4a0f0225ada305cae2dcb1","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    specified by `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"       [DEFAULT]"},{"line_number":101,"context_line":"       pci_passthrough_whitelist_sections \u003d foo_pci, bar_pci"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"       [foo_pci]"},{"line_number":104,"context_line":"       product_id \u003d 1520"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8c0949_9500b102","line":101,"updated":"2014-11-07 09:53:33.000000000","message":"I think that this is fine. But I\u0027d rather to make it a bit simpler for the user and define each section as:\n [pci_passthrough_devices-foo]\n [pci_passthrough_devices-bar]\n\nBut some people may think that the other way is simpler. It\u0027s just my preference.","commit_id":"1421d9d89db692b79dd47e03acc0ce9e145aaaee"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"bb428869c4eaad7cf5dfe65a8187b3e7f824bc1d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    specified by `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"       [DEFAULT]"},{"line_number":101,"context_line":"       pci_passthrough_whitelist_sections \u003d foo_pci, bar_pci"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"       [foo_pci]"},{"line_number":104,"context_line":"       product_id \u003d 1520"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_7762c4d9","line":101,"in_reply_to":"7a8c0949_9500b102","updated":"2014-11-10 23:31:58.000000000","message":"Mixing in \"-\" is bad news, but I guess you\u0027re saying automatically match on a common section-prefix?  My only concern with that is that I think that\u0027s a fairly unique approach, where-as the \"foo \u003d section_a,section_b\" approach has some precedent with logging etc.","commit_id":"1421d9d89db692b79dd47e03acc0ce9e145aaaee"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"e2094c65cf1c40c80c4a0f0225ada305cae2dcb1","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    #"},{"line_number":123,"context_line":"    # To avoid having to re-write large-parts of the back-end at this"},{"line_number":124,"context_line":"    # point, we convert this back to the json representation and pass"},{"line_number":125,"context_line":"    # it through."},{"line_number":126,"context_line":"    opts \u003d ["},{"line_number":127,"context_line":"        cfg.StrOpt(\u0027name\u0027, default\u003d\u0027\u0027),"},{"line_number":128,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027, default\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8c0949_a2bd716a","line":125,"updated":"2014-11-07 09:53:33.000000000","message":"Can you make this patch depend on https://review.openstack.org/#/c/130833/? No need to convert it back to json in that case.","commit_id":"1421d9d89db692b79dd47e03acc0ce9e145aaaee"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"bb428869c4eaad7cf5dfe65a8187b3e7f824bc1d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    #"},{"line_number":123,"context_line":"    # To avoid having to re-write large-parts of the back-end at this"},{"line_number":124,"context_line":"    # point, we convert this back to the json representation and pass"},{"line_number":125,"context_line":"    # it through."},{"line_number":126,"context_line":"    opts \u003d ["},{"line_number":127,"context_line":"        cfg.StrOpt(\u0027name\u0027, default\u003d\u0027\u0027),"},{"line_number":128,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027, default\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_1726e0b7","line":125,"in_reply_to":"7a8c0949_a2bd716a","updated":"2014-11-10 23:31:58.000000000","message":"Even with that change, PciHostDevicesWhiteList().__init__() takes just one argument as a list of json strings to parse.  That change only modifies the parsing of the json strings, so it can handle specs encoded as either a list or a dict.\n\nSo I\u0027m of the opinion we should stick with this approach of leaving PciHostDevicesWhiteList() alone and just passing it JSON objects\n\nIn the future, it might make sense to have all parsing done here in get_pci_devices_filter(), and simply pass a list-of-dicts to PciHostDevicesWhiteList() just to keep related things a bit more together.","commit_id":"1421d9d89db692b79dd47e03acc0ce9e145aaaee"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"e2094c65cf1c40c80c4a0f0225ada305cae2dcb1","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        json.append(jsonutils.dumps(details_dict))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    all_whitelists \u003d CONF.pci_passthrough_whitelist + json"},{"line_number":157,"context_line":"    return PciHostDevicesWhiteList(all_whitelists)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8c0949_c2643d4b","line":156,"updated":"2014-11-07 09:53:33.000000000","message":"shall we make this either pci_passthrough_whitelist or the new format? If the new format exists, use that, otherwise try the old format.","commit_id":"1421d9d89db692b79dd47e03acc0ce9e145aaaee"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"bb428869c4eaad7cf5dfe65a8187b3e7f824bc1d","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        json.append(jsonutils.dumps(details_dict))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    all_whitelists \u003d CONF.pci_passthrough_whitelist + json"},{"line_number":157,"context_line":"    return PciHostDevicesWhiteList(all_whitelists)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_774ba459","line":156,"in_reply_to":"7a8c0949_c2643d4b","updated":"2014-11-10 23:31:58.000000000","message":"Possibly, or we could warn?  I don\u0027t see any harm in keeping both, although we should probably boost documentation around these options...","commit_id":"1421d9d89db692b79dd47e03acc0ce9e145aaaee"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"b659d3b0866c47a95bd4814dfabf7ffab359afaa","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                       default\u003d\u0027\u0027,"},{"line_number":31,"context_line":"                       help\u003d\u0027Comma-separated list of sections which define \u0027"},{"line_number":32,"context_line":"                       \u0027PCI white-lists.\u0027"},{"line_number":33,"context_line":"                   ),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"},{"line_number":36,"context_line":"CONF.register_opts(pci_opts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_6b3e59ba","line":33,"updated":"2014-11-11 06:47:13.000000000","message":"I suggest to add more info regarding syntax of the entries, since this message will be used to generate documentation.","commit_id":"5d02444e1c9f9b5691eed8e335a37016d1ee5891"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"7a3f4b83ab647917a4d0e423787c40074b51de35","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                       default\u003d\u0027\u0027,"},{"line_number":31,"context_line":"                       help\u003d\u0027Comma-separated list of sections which define \u0027"},{"line_number":32,"context_line":"                       \u0027PCI white-lists.\u0027"},{"line_number":33,"context_line":"                   ),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"},{"line_number":36,"context_line":"CONF.register_opts(pci_opts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_a8f74bf4","line":33,"in_reply_to":"5a890539_6b3e59ba","updated":"2014-11-12 03:02:31.000000000","message":"Done","commit_id":"5d02444e1c9f9b5691eed8e335a37016d1ee5891"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"b659d3b0866c47a95bd4814dfabf7ffab359afaa","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def get_pci_devices_filter():"},{"line_number":94,"context_line":"    \"\"\"Construct PCI device white-list"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    Concatenate `pci_passthrough_whitelist`"},{"line_number":97,"context_line":"    :class:`PciHostDevicesWhiteList` JSON option with sections as"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_eb796994","line":94,"updated":"2014-11-11 06:47:13.000000000","message":"devices","commit_id":"5d02444e1c9f9b5691eed8e335a37016d1ee5891"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"7a3f4b83ab647917a4d0e423787c40074b51de35","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def get_pci_devices_filter():"},{"line_number":94,"context_line":"    \"\"\"Construct PCI device white-list"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    Concatenate `pci_passthrough_whitelist`"},{"line_number":97,"context_line":"    :class:`PciHostDevicesWhiteList` JSON option with sections as"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_08bf7ffc","line":94,"in_reply_to":"5a890539_eb796994","updated":"2014-11-12 03:02:31.000000000","message":"Done","commit_id":"5d02444e1c9f9b5691eed8e335a37016d1ee5891"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"b659d3b0866c47a95bd4814dfabf7ffab359afaa","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    # point, we convert this back to the json representation and pass"},{"line_number":125,"context_line":"    # it through."},{"line_number":126,"context_line":"    opts \u003d ["},{"line_number":127,"context_line":"        cfg.StrOpt(\u0027name\u0027, default\u003d\u0027\u0027),"},{"line_number":128,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027, default\u003d\u0027\u0027),"},{"line_number":129,"context_line":"        cfg.StrOpt(\u0027product_id\u0027, default\u003d\u0027\u0027),"},{"line_number":130,"context_line":"        cfg.StrOpt(\u0027address\u0027, default\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_6b6579e0","line":127,"updated":"2014-11-11 06:47:13.000000000","message":"I would suggest to define constants for each key","commit_id":"5d02444e1c9f9b5691eed8e335a37016d1ee5891"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"7a3f4b83ab647917a4d0e423787c40074b51de35","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    # point, we convert this back to the json representation and pass"},{"line_number":125,"context_line":"    # it through."},{"line_number":126,"context_line":"    opts \u003d ["},{"line_number":127,"context_line":"        cfg.StrOpt(\u0027name\u0027, default\u003d\u0027\u0027),"},{"line_number":128,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027, default\u003d\u0027\u0027),"},{"line_number":129,"context_line":"        cfg.StrOpt(\u0027product_id\u0027, default\u003d\u0027\u0027),"},{"line_number":130,"context_line":"        cfg.StrOpt(\u0027address\u0027, default\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_a82aeb29","line":127,"in_reply_to":"5a890539_6b6579e0","updated":"2014-11-12 03:02:31.000000000","message":"I don\u0027t think there is a sensible default here as it is up to the user to define these.  But it would make more sense to just drop the default arg, I agree","commit_id":"5d02444e1c9f9b5691eed8e335a37016d1ee5891"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"34ce34069181191f3fa080553fa4d0d5bf2390a8","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                return spec"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def get_pci_devices_filter():"},{"line_number":96,"context_line":"    \"\"\"Construct PCI devices white-list"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    Concatenate `pci_passthrough_whitelist`"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_93963693","line":95,"updated":"2014-11-12 13:58:37.000000000","message":"some thoughts on structuring the code:\n\ndef get_pci_devices_filter():\n    return PciHostDevicesWhiteList(CONF.pci_passthrough_whitelist_sections,\n                                         CONF.pci_passthrough_whitelist)\n\nChange the init in the PciHostDevicesWhiteList() as\n\ndef __init__(self, new_wl, old_wl):\n    self.specs \u003d []\n    if new_wl:\n        self.specs \u003d self._parse_white_list_from_sections(new_wl)\n    elif old_wl:\n        self.specs \u003d self._parse_white_list_from_config(old_wl)\n   \nIf you still prefer to combine the two, \u0027elif\u0027 can be changed to \u0027if\u0027 in above and add on to self.specs.\n\nself._parse_white_list_from_sections() is basically what you have in below. But no need to do json translation any more.","commit_id":"f6247e38247a1e73c3169acc207409ca34be663e"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"9c8e0509b5641a753131ab20d1c72b8bae74cd2b","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                return spec"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def get_pci_devices_filter():"},{"line_number":96,"context_line":"    \"\"\"Construct PCI devices white-list"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    Concatenate `pci_passthrough_whitelist`"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_43594635","line":95,"in_reply_to":"5a890539_93963693","updated":"2014-11-13 05:21:22.000000000","message":"I don\u0027t think this is quite right -- moving _parse_white_list_from_sections into PciHostDevicesWhiteList class means that it needs to start parsing the config file -- PciHostDevicesWhiteList seems to be an abstraction.  Certainly that seems to be the design for the unit-tests\n\nI think it\u0027s better to parse the config-file in get_pci_devices_filter() and just pass dictionaries to the class so it doesn\u0027t need to access CONF at all.\n\nI\u0027ve split it into two separate lists and added a warning in the updated patch.  TBH not sure the code is really any better, but it would make it easier to deprecate.","commit_id":"f6247e38247a1e73c3169acc207409ca34be663e"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"34ce34069181191f3fa080553fa4d0d5bf2390a8","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            if attr:"},{"line_number":156,"context_line":"                details_dict[field] \u003d attr"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        json.append(jsonutils.dumps(details_dict))"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    all_whitelists \u003d CONF.pci_passthrough_whitelist + json"},{"line_number":161,"context_line":"    return PciHostDevicesWhiteList(all_whitelists)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_d3e7de3e","line":158,"updated":"2014-11-12 13:58:37.000000000","message":"And if this is made to depend on https://review.openstack.org/#/c/130833/4/, the above line can be changed as:\n                spec \u003d devspec.PciDeviceSpec(details_dict)\n                self.specs.append(spec)","commit_id":"f6247e38247a1e73c3169acc207409ca34be663e"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"9c8e0509b5641a753131ab20d1c72b8bae74cd2b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            if attr:"},{"line_number":156,"context_line":"                details_dict[field] \u003d attr"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        json.append(jsonutils.dumps(details_dict))"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    all_whitelists \u003d CONF.pci_passthrough_whitelist + json"},{"line_number":161,"context_line":"    return PciHostDevicesWhiteList(all_whitelists)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_635c8226","line":158,"in_reply_to":"5a890539_d3e7de3e","updated":"2014-11-13 05:21:22.000000000","message":"In the updated patch, we create PciDeviceSpec objects directly from dictionaries passed to PciHostDevicesWhiteList()","commit_id":"f6247e38247a1e73c3169acc207409ca34be663e"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"7bdbb104e0e26345f31ca2b572f3ff75aa2e6c2c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    \"\"\"Construct PCI devices white-list"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    Concatenate `pci_passthrough_whitelist`"},{"line_number":130,"context_line":"    :class:`PciHostDevicesWhiteList` JSON option with sections as"},{"line_number":131,"context_line":"    specified by `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"       [DEFAULT]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_8c30ade9","line":130,"updated":"2014-11-13 14:31:27.000000000","message":"Had a hard time reading this, especially in reference to \"JSON option\".  As a result of this patch, the class PciHostDeviceWhiteList will contain all the white lists that is specified by both the old format and the new one. Maybe worth a little bit rewording here.","commit_id":"d8c7a2ee7f270552e1a71df9eb83793f27333a99"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"3ee8d310f320f8ee18f74a901773b06fb0433b41","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    \"\"\"Construct PCI devices white-list"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    Concatenate `pci_passthrough_whitelist`"},{"line_number":130,"context_line":"    :class:`PciHostDevicesWhiteList` JSON option with sections as"},{"line_number":131,"context_line":"    specified by `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"       [DEFAULT]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_cb67e3b5","line":130,"in_reply_to":"5a890539_8c30ade9","updated":"2014-11-14 03:27:23.000000000","message":"Done","commit_id":"d8c7a2ee7f270552e1a71df9eb83793f27333a99"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"7bdbb104e0e26345f31ca2b572f3ff75aa2e6c2c","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    # options as defined by the sections provided in comma-separated"},{"line_number":154,"context_line":"    # list \u0027pci_passthrough_whitelist_sections\u0027"},{"line_number":155,"context_line":"    opts \u003d ["},{"line_number":156,"context_line":"        cfg.StrOpt(\u0027name\u0027),"},{"line_number":157,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027),"},{"line_number":158,"context_line":"        cfg.StrOpt(\u0027product_id\u0027),"},{"line_number":159,"context_line":"        cfg.StrOpt(\u0027address\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_869b2e71","line":156,"updated":"2014-11-13 14:31:27.000000000","message":"it\u0027s \u0027devname\u0027 in the devspec.","commit_id":"d8c7a2ee7f270552e1a71df9eb83793f27333a99"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"3ee8d310f320f8ee18f74a901773b06fb0433b41","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    # options as defined by the sections provided in comma-separated"},{"line_number":154,"context_line":"    # list \u0027pci_passthrough_whitelist_sections\u0027"},{"line_number":155,"context_line":"    opts \u003d ["},{"line_number":156,"context_line":"        cfg.StrOpt(\u0027name\u0027),"},{"line_number":157,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027),"},{"line_number":158,"context_line":"        cfg.StrOpt(\u0027product_id\u0027),"},{"line_number":159,"context_line":"        cfg.StrOpt(\u0027address\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_eb073fc8","line":156,"in_reply_to":"5a890539_869b2e71","updated":"2014-11-14 03:27:23.000000000","message":"Done","commit_id":"d8c7a2ee7f270552e1a71df9eb83793f27333a99"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"7bdbb104e0e26345f31ca2b572f3ff75aa2e6c2c","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        details \u003d getattr(CONF, section)"},{"line_number":175,"context_line":"        details_dict \u003d {}"},{"line_number":176,"context_line":"        for field in [\u0027name\u0027, \u0027vendor_id\u0027, \u0027product_id\u0027,"},{"line_number":177,"context_line":"                      \u0027address\u0027, \u0027physical_network\u0027]:"},{"line_number":178,"context_line":"            attr \u003d getattr(details, field)"},{"line_number":179,"context_line":"            if attr:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_4678662b","line":176,"updated":"2014-11-13 14:31:27.000000000","message":"\u0027devname\u0027 instead.","commit_id":"d8c7a2ee7f270552e1a71df9eb83793f27333a99"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"3ee8d310f320f8ee18f74a901773b06fb0433b41","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        details \u003d getattr(CONF, section)"},{"line_number":175,"context_line":"        details_dict \u003d {}"},{"line_number":176,"context_line":"        for field in [\u0027name\u0027, \u0027vendor_id\u0027, \u0027product_id\u0027,"},{"line_number":177,"context_line":"                      \u0027address\u0027, \u0027physical_network\u0027]:"},{"line_number":178,"context_line":"            attr \u003d getattr(details, field)"},{"line_number":179,"context_line":"            if attr:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_0b0d6be9","line":176,"in_reply_to":"5a890539_4678662b","updated":"2014-11-14 03:27:23.000000000","message":"Done","commit_id":"d8c7a2ee7f270552e1a71df9eb83793f27333a99"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"e35851c25c7be58033921b352e78c86f58fcdc40","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                       default\u003d\u0027\u0027,"},{"line_number":35,"context_line":"                       help\u003d\u0027Comma-separated list of sections which define \u0027"},{"line_number":36,"context_line":"                       \u0027PCI white-lists.  Sub-sections specified in this \u0027"},{"line_number":37,"context_line":"                       \u0027list can define any of: name, vendor_id, product_id, \u0027"},{"line_number":38,"context_line":"                       \u0027address and physical_network.\u0027"},{"line_number":39,"context_line":"                   ),"},{"line_number":40,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_081ba481","line":37,"updated":"2014-11-14 12:41:54.000000000","message":"Sorry one more change: name--\u003e devname.","commit_id":"dc30230deb84b67c4d26157e7dc7292d76271b1d"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"f2b17cdcc96d220d0d26f6819419ce4d09832345","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                       default\u003d\u0027\u0027,"},{"line_number":35,"context_line":"                       help\u003d\u0027Comma-separated list of sections which define \u0027"},{"line_number":36,"context_line":"                       \u0027PCI white-lists.  Sub-sections specified in this \u0027"},{"line_number":37,"context_line":"                       \u0027list can define any of: name, vendor_id, product_id, \u0027"},{"line_number":38,"context_line":"                       \u0027address and physical_network.\u0027"},{"line_number":39,"context_line":"                   ),"},{"line_number":40,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_b82e3d8a","line":37,"in_reply_to":"5a890539_081ba481","updated":"2014-11-17 01:15:17.000000000","message":"Done","commit_id":"dc30230deb84b67c4d26157e7dc7292d76271b1d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"bb9b6ca35040743ea14918ca45e324e39ff58b02","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"pci_opts \u003d [cfg.MultiStrOpt(\u0027pci_passthrough_whitelist\u0027,"},{"line_number":28,"context_line":"                            default\u003d[],"},{"line_number":29,"context_line":"                            help\u003d\u0027White list of PCI devices available to VMs. \u0027"},{"line_number":30,"context_line":"                            \u0027For example: pci_passthrough_whitelist \u003d  \u0027"},{"line_number":31,"context_line":"                            \u0027[{\"vendor_id\": \"8086\", \"product_id\": \"0443\"}]\u0027"},{"line_number":32,"context_line":"                        ),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_e934674b","line":29,"updated":"2014-11-17 15:27:48.000000000","message":"Add \u0027DEPRECATED\u0027 as the first word of the help syntax","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"d9580f017283f985983db88d1271206e64e6e910","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"pci_opts \u003d [cfg.MultiStrOpt(\u0027pci_passthrough_whitelist\u0027,"},{"line_number":28,"context_line":"                            default\u003d[],"},{"line_number":29,"context_line":"                            help\u003d\u0027White list of PCI devices available to VMs. \u0027"},{"line_number":30,"context_line":"                            \u0027For example: pci_passthrough_whitelist \u003d  \u0027"},{"line_number":31,"context_line":"                            \u0027[{\"vendor_id\": \"8086\", \"product_id\": \"0443\"}]\u0027"},{"line_number":32,"context_line":"                        ),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_ee6ff7f9","line":29,"in_reply_to":"5a890539_e934674b","updated":"2014-11-18 04:38:14.000000000","message":"Done","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"bb9b6ca35040743ea14918ca45e324e39ff58b02","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"       [DEFAULT]"},{"line_number":135,"context_line":"       pci_passthrough_whitelist_sections \u003d foo_pci, bar_pci"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"       [foo_pci]"},{"line_number":138,"context_line":"       product_id \u003d 1520"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_e9e707aa","line":135,"updated":"2014-11-17 15:27:48.000000000","message":"While we\u0027re doing this I think it would be nice to put the main option into a dedicated option group called \"pci\", and have a mandatory name prefix of \u0027pci_rule_\u0027 for all the sub-groups (which doesn\u0027t need to be included in the section list) eg\n\n [pci]\n device_whitelist_rules \u003d foo, bar\n\n [pci_rule_foo]\n product_id \u003d 1520\n vendor_id \u003d 8086\n ...\n \n [pci_rule_bar]\n .....","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"18296428109186f216a48faa99f45656d8bb680f","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"       [DEFAULT]"},{"line_number":135,"context_line":"       pci_passthrough_whitelist_sections \u003d foo_pci, bar_pci"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"       [foo_pci]"},{"line_number":138,"context_line":"       product_id \u003d 1520"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_4792a84c","line":135,"in_reply_to":"5a890539_8253a715","updated":"2014-11-18 10:50:38.000000000","message":"We have had a general goal of moving all config options out of the global namespace into groups related to the broad functionality. So moving this under a [pci] group is the right thing todo.\n\nThis whole config setup is non-obvious and people will need to read the documentation to figure out how to set PCI whitelist rules, so I don\u0027t think my proposal makes it any worse than it is already going to be.\n\nAlso, having a mandatory name prefix is important to avoid upgrade problems later. ie, consider if Nova later adds a group [foo] for some bit of code, and the user had chosen to use \u0027[foo]\u0027 for their pci address rule group. This will cause no end of pain. Having a mandatory prefix of \u0027pci_rule_\u0027 on the group name really is what we need todo here.","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"d9580f017283f985983db88d1271206e64e6e910","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"       [DEFAULT]"},{"line_number":135,"context_line":"       pci_passthrough_whitelist_sections \u003d foo_pci, bar_pci"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"       [foo_pci]"},{"line_number":138,"context_line":"       product_id \u003d 1520"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_8253a715","line":135,"in_reply_to":"5a890539_e9e707aa","updated":"2014-11-18 04:38:14.000000000","message":"\u003e have a mandatory name prefix of \u0027pci_rule_\u0027 for all the sub-groups (which doesn\u0027t need to be included in the section list)\n\nI\u0027m pretty strongly opposed to that idea, because it\u0027s will be non-obvious to anyone looking at the config-file without reading the fine-print in the documentation about how everything relates.\n\nThe intrinsic documentation of having \"_sections\" in the config var name, along with sections fully named as per the arguments should be pretty clear to someone who has zero context on this.\n\nI don\u0027t see much benefit moving it under [pci] rather than just a default pci_* namespaced variable","commit_id":"f59b1f7dca141d9e05369d03453d393afebc3358"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"efebc114f6981a5295caef5b17cce5dd1ce4cbb4","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"       [DEFAULT]"},{"line_number":136,"context_line":"       pci_passthrough_whitelist_sections \u003d foo_pci, bar_pci"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"       [foo_pci]"},{"line_number":139,"context_line":"       product_id \u003d 1520"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_a7e98cb8","line":136,"updated":"2014-11-18 10:51:29.000000000","message":"As before this needs to move to a \u0027[pci]\u0027 group","commit_id":"2d95b2192b881decc755cdb6dd78f369560bc5a2"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"5c4d9e8692367ef8b929f68bcbf6cab6be99503e","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    `pci_passthrough_whitelist_sections`.  For example::"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"       [DEFAULT]"},{"line_number":136,"context_line":"       pci_passthrough_whitelist_sections \u003d foo_pci, bar_pci"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"       [foo_pci]"},{"line_number":139,"context_line":"       product_id \u003d 1520"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_8fd003cb","line":136,"in_reply_to":"5a890539_a7e98cb8","updated":"2014-11-19 03:48:01.000000000","message":"Done","commit_id":"2d95b2192b881decc755cdb6dd78f369560bc5a2"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"efebc114f6981a5295caef5b17cce5dd1ce4cbb4","unresolved":false,"context_lines":[{"line_number":143,"context_line":"       vendor_id \u003d 1137"},{"line_number":144,"context_line":"       product_id \u003d 0071"},{"line_number":145,"context_line":"       address \u003d *:0a:00.*"},{"line_number":146,"context_line":"       physical_network \u003d physnet1"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    \"\"\""},{"line_number":149,"context_line":"    # pci_passthrough_whitelist is a json-string as described above."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_87e650e6","line":146,"updated":"2014-11-18 10:51:29.000000000","message":"See my comments on patchset 6 about needing a mandatory  pci_rule prefix here.","commit_id":"2d95b2192b881decc755cdb6dd78f369560bc5a2"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"5c4d9e8692367ef8b929f68bcbf6cab6be99503e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"       vendor_id \u003d 1137"},{"line_number":144,"context_line":"       product_id \u003d 0071"},{"line_number":145,"context_line":"       address \u003d *:0a:00.*"},{"line_number":146,"context_line":"       physical_network \u003d physnet1"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    \"\"\""},{"line_number":149,"context_line":"    # pci_passthrough_whitelist is a json-string as described above."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_cf004b38","line":146,"in_reply_to":"5a890539_87e650e6","updated":"2014-11-19 03:48:01.000000000","message":"Done","commit_id":"2d95b2192b881decc755cdb6dd78f369560bc5a2"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"a5f10552de2c7c969dfa8c46977e5182eb59a7bd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    # So have an alternative of concatenating together pci whitelist"},{"line_number":155,"context_line":"    # options as defined by the sections provided in comma-separated"},{"line_number":156,"context_line":"    # list \u0027pci_passthrough_whitelist_sections\u0027"},{"line_number":157,"context_line":"    opts \u003d ["},{"line_number":158,"context_line":"        cfg.StrOpt(\u0027devname\u0027),"},{"line_number":159,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027),"},{"line_number":160,"context_line":"        cfg.StrOpt(\u0027product_id\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_50c09b4f","line":157,"updated":"2014-11-18 14:02:54.000000000","message":"These options need to be registered with a discovery function in order to appear in the sample configuration file created by the oslo.config sample generator. See http://docs.openstack.org/developer/oslo.config/generator.html for details.","commit_id":"2d95b2192b881decc755cdb6dd78f369560bc5a2"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"5c4d9e8692367ef8b929f68bcbf6cab6be99503e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    # So have an alternative of concatenating together pci whitelist"},{"line_number":155,"context_line":"    # options as defined by the sections provided in comma-separated"},{"line_number":156,"context_line":"    # list \u0027pci_passthrough_whitelist_sections\u0027"},{"line_number":157,"context_line":"    opts \u003d ["},{"line_number":158,"context_line":"        cfg.StrOpt(\u0027devname\u0027),"},{"line_number":159,"context_line":"        cfg.StrOpt(\u0027vendor_id\u0027),"},{"line_number":160,"context_line":"        cfg.StrOpt(\u0027product_id\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_afa3ff4d","line":157,"in_reply_to":"5a890539_50c09b4f","updated":"2014-11-19 03:48:01.000000000","message":"Maybe I\u0027m missing something, but I couldn\u0027t see how to do this based on the way things are right now.  The opts are pulled via _list_opts [1] by basically a dir() on the module, so options defined outside of global scope aren\u0027t ever found.\n\nanyway, i reworked things to have these config options as a global in the next review.  For a sample of the example-config file output, see [2]\n\n[1] https://git.openstack.org/cgit/openstack/nova/tree/nova/openstack/common/config/generator.py#n176\n\n[2] http://paste.openstack.org/show/134578/","commit_id":"2d95b2192b881decc755cdb6dd78f369560bc5a2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f03d2a435de2ab82f423fbf80491bea1a743990c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    cfg.StrOpt(\u0027address\u0027, help\u003d\"PCI Address, e.g. *:0a:00.*\"),"},{"line_number":72,"context_line":"    cfg.StrOpt(\u0027physical_network\u0027, help\u003d\"Physical network, e.g. physnet1\")"},{"line_number":73,"context_line":"]"},{"line_number":74,"context_line":"pci_rule_sample_group \u003d cfg.OptGroup(name\u003d\u0027pci_rule_sample\u0027,"},{"line_number":75,"context_line":"                                     title\u003d\"PCI passthrough rule sample\")"},{"line_number":76,"context_line":"CONF.register_opts(pci_passthrough_opts,"},{"line_number":77,"context_line":"                   pci_rule_sample_group)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa81d914_725193d7","line":74,"range":{"start_line":74,"start_character":0,"end_line":74,"end_character":21},"updated":"2015-01-29 22:05:24.000000000","message":"I think the fact that we have to have a sample section in our config as a template for how this should work points directly at what I hate about doing this in our .ini file. This _really_ begs for a format where expressing this sort of structure is a natural thing, IMHO.","commit_id":"6b1c2d517ef8ed3259fd07a0ebc3f4b67ef1289a"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"e9b32a9ab108204aea2e4cc07f4ab1a3620a6673","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    cfg.StrOpt(\u0027address\u0027, help\u003d\"PCI Address, e.g. *:0a:00.*\"),"},{"line_number":72,"context_line":"    cfg.StrOpt(\u0027physical_network\u0027, help\u003d\"Physical network, e.g. physnet1\")"},{"line_number":73,"context_line":"]"},{"line_number":74,"context_line":"pci_rule_sample_group \u003d cfg.OptGroup(name\u003d\u0027pci_rule_sample\u0027,"},{"line_number":75,"context_line":"                                     title\u003d\"PCI passthrough rule sample\")"},{"line_number":76,"context_line":"CONF.register_opts(pci_passthrough_opts,"},{"line_number":77,"context_line":"                   pci_rule_sample_group)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_e00dd136","line":74,"in_reply_to":"fa81d914_725193d7","updated":"2015-03-12 02:43:24.000000000","message":"I think this is a mis-categorisation of what\u0027s going on here ... nova creates a sample config file and this just makes sure it\u0027s in there like everything else","commit_id":"6b1c2d517ef8ed3259fd07a0ebc3f4b67ef1289a"},{"author":{"_account_id":15701,"name":"venkatesh","email":"p.venkatesh551@gmail.com","username":"venkatesh"},"change_message_id":"f5eaa47ed8069536c74815da42aec97d9233e406","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        super(PciHostDevicesWhiteList, self).__init__()"},{"line_number":137,"context_line":"        self.specs \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if config_whitelist_spec:"},{"line_number":140,"context_line":"            for spec in config_whitelist_spec:"},{"line_number":141,"context_line":"                self.specs.append(devspec.PciDeviceSpec(spec))"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_63ec3b2a","line":139,"updated":"2015-08-07 06:11:39.000000000","message":"if condition is redundant","commit_id":"ce6a4a224824fddc97dde2c51ab7b4d0b2fc5eab"},{"author":{"_account_id":15701,"name":"venkatesh","email":"p.venkatesh551@gmail.com","username":"venkatesh"},"change_message_id":"f5eaa47ed8069536c74815da42aec97d9233e406","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            for spec in config_whitelist_spec:"},{"line_number":141,"context_line":"                self.specs.append(devspec.PciDeviceSpec(spec))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if json_whitelist_spec:"},{"line_number":144,"context_line":"            self.specs.extend("},{"line_number":145,"context_line":"                self._parse_white_list_from_config(json_whitelist_spec))"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_633afb9a","line":143,"updated":"2015-08-07 06:11:39.000000000","message":"if condition is redundant","commit_id":"ce6a4a224824fddc97dde2c51ab7b4d0b2fc5eab"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"52bf68cdc65cf9e09a4fa11fcd2af24648cfe1a4","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_serialization import jsonutils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova import exception"},{"line_number":22,"context_line":"from nova.i18n import _, _LW"},{"line_number":23,"context_line":"from nova.pci import devspec"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_6beab7dc","line":22,"updated":"2015-08-21 12:54:14.000000000","message":"You use _LW nowhere. Why you added it?","commit_id":"df7a05e0ab27531e0d1830c94e023508a9382b2f"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"52bf68cdc65cf9e09a4fa11fcd2af24648cfe1a4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.i18n import _, _LW"},{"line_number":23,"context_line":"from nova.pci import devspec"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# we are moving new things into the [pci] group, don\u0027t add stuff here"},{"line_number":28,"context_line":"old_pci_opts \u003d [cfg.MultiStrOpt(\u0027pci_passthrough_whitelist\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_0b321ba7","line":25,"updated":"2015-08-21 12:54:14.000000000","message":"We have LOG in line 80","commit_id":"df7a05e0ab27531e0d1830c94e023508a9382b2f"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"52bf68cdc65cf9e09a4fa11fcd2af24648cfe1a4","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                                      from the configuration sections specified"},{"line_number":134,"context_line":"                                      by `[pci]` `whitelist_sections`"},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":"        super(WhiteList, self).__init__()"},{"line_number":137,"context_line":"        self.specs \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if config_whitelist_spec:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_ab33ef60","line":136,"updated":"2015-08-21 12:54:14.000000000","message":"Maybe Whitelist? instead of WhiteList","commit_id":"df7a05e0ab27531e0d1830c94e023508a9382b2f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c167567bcc92f1741e7cc775c0c8d5fd2b671d0f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                                help\u003d\u0027DEPRECATED: White list of PCI devices \u0027"},{"line_number":29,"context_line":"                                \u0027available to VMs. \u0027"},{"line_number":30,"context_line":"                                \u0027For example: pci_passthrough_whitelist \u003d  \u0027"},{"line_number":31,"context_line":"                                \u0027[{\"vendor_id\": \"8086\", \"product_id\": \"0443\"}]\u0027"},{"line_number":32,"context_line":"                            ),"},{"line_number":33,"context_line":"]"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_5a2eed8c","line":31,"updated":"2015-09-04 15:12:09.000000000","message":"please include:\ndeprecated_for_removal\u003dTrue\n\nhttp://docs.openstack.org/developer/oslo.config/opts.html#oslo_config.cfg.Opt","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"066d7a28f1f4678e9fb4cfcdd7df17d9034b545a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":46,"context_line":"               help\u003d\u0027Comma-separated list of sections which define \u0027"},{"line_number":47,"context_line":"               \u0027PCI white-lists.  Subsection names specified in this \u0027"},{"line_number":48,"context_line":"               \u0027list must begin with \"pci_rule\".  They can can define \u0027"},{"line_number":49,"context_line":"               \u0027any of: devname, vendor_id, \u0027"},{"line_number":50,"context_line":"               \u0027product_id, address and physical_network.  \u0027"},{"line_number":51,"context_line":"               \u0027See [pci_rule_sample] in example config\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_400ae927","line":48,"updated":"2015-08-27 15:51:05.000000000","message":"nit: s/can can/can/","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"a2165689bc9736dde5b6fde62167fe8567e242aa","unresolved":false,"context_lines":[{"line_number":59,"context_line":"CONF.register_opts(old_pci_opts)"},{"line_number":60,"context_line":"CONF.register_opts(pci_opts, pci_group)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# This has to be here here as a global to allow the magic that creates"},{"line_number":63,"context_line":"# the sample config-file to have a sample pci_rule* .  The real"},{"line_number":64,"context_line":"# sections are built dynamically in get_pci_devices_filter()"},{"line_number":65,"context_line":"pci_passthrough_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_785678cf","line":62,"updated":"2015-12-07 21:15:57.000000000","message":"Remove one \"here\".","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"2c201392c93b7e2197329a5901abff5bd05ac3a7","unresolved":false,"context_lines":[{"line_number":72,"context_line":"pci_rule_sample_group \u003d cfg.OptGroup(name\u003d\u0027pci_rule_sample\u0027,"},{"line_number":73,"context_line":"                                     title\u003d\"PCI passthrough rule sample\")"},{"line_number":74,"context_line":"CONF.register_opts(pci_passthrough_opts,"},{"line_number":75,"context_line":"                   pci_rule_sample_group)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_ca8a8abf","line":75,"updated":"2015-08-27 18:36:44.000000000","message":"It is not necessary to register a fake group for the sample config generator. Define a list_opts() function to return the [(\u0027fake-group-name\u0027, pci_passthrough_opts)] and you\u0027ll get the sample without polluting the runtime environment.","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c167567bcc92f1741e7cc775c0c8d5fd2b671d0f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"pci_rule_sample_group \u003d cfg.OptGroup(name\u003d\u0027pci_rule_sample\u0027,"},{"line_number":73,"context_line":"                                     title\u003d\"PCI passthrough rule sample\")"},{"line_number":74,"context_line":"CONF.register_opts(pci_passthrough_opts,"},{"line_number":75,"context_line":"                   pci_rule_sample_group)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_fa826151","line":75,"in_reply_to":"da20952f_ca8a8abf","updated":"2015-09-04 15:12:09.000000000","message":"I guess update this:\nhttps://github.com/openstack/nova/blob/master/nova/opts.py#L66","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"066d7a28f1f4678e9fb4cfcdd7df17d9034b545a","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"def _get_pci_devices_filter():"},{"line_number":162,"context_line":"    \"\"\"Construct PCI devices white-list"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    Concatenate the `pci_passthrough_whitelist` JSON-based white-lists"},{"line_number":165,"context_line":"    (see :class:`WhiteList` for parsing details) with individual"}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_db4b4c58","line":162,"updated":"2015-08-27 15:51:05.000000000","message":"Nit: s/white-list/whitelist","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"066d7a28f1f4678e9fb4cfcdd7df17d9034b545a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    \"\"\"Construct PCI devices white-list"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    Concatenate the `pci_passthrough_whitelist` JSON-based white-lists"},{"line_number":165,"context_line":"    (see :class:`WhiteList` for parsing details) with individual"},{"line_number":166,"context_line":"    white-list sections as specified by `[pci]` `whitelist_sections`."},{"line_number":167,"context_line":"    For example::"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_3b6608ee","line":165,"updated":"2015-08-27 15:51:05.000000000","message":"Nit: s/WhiteList/Whitelist/","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"066d7a28f1f4678e9fb4cfcdd7df17d9034b545a","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    Concatenate the `pci_passthrough_whitelist` JSON-based white-lists"},{"line_number":165,"context_line":"    (see :class:`WhiteList` for parsing details) with individual"},{"line_number":166,"context_line":"    white-list sections as specified by `[pci]` `whitelist_sections`."},{"line_number":167,"context_line":"    For example::"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"       [pci]"}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_db626cd8","line":166,"updated":"2015-08-27 15:51:05.000000000","message":"Nit: s/white-list/whitelist/","commit_id":"415fce3da28665c97bed5ecd62f84a02d04646a9"}]}
