)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8393b8f9144e7d376b2f885c1f1c4f2bd1fbe42d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\u0027pci-passthrough-sriov\u0027 spec."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I7ecc1dbc3ccc60e174c0057412896d3896d2648e"},{"line_number":16,"context_line":"Fixes-bug: 1381017"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a740942_7aeec9b5","line":16,"updated":"2015-12-04 16:18:30.000000000","message":"s/Fixes-bug/Closes-Bug","commit_id":"79162e0701e8423c466503d6a63dc5409cffcc27"}],"nova/conf/pci.py":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"364fa5b6cad81a018dae4e6ffcda0dcf3f907d67","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova.i18n import _"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"pci_alias_opt \u003d cfg.MultiStrOpt("},{"line_number":22,"context_line":"    \u0027pci_alias\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_d9f18f96","line":19,"updated":"2015-12-08 12:19:49.000000000","message":"AFAIK we don\u0027t translate the config options help. At least we didn\u0027t in any of the other config options.","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5528d376db50cd79cb840875820d3753116e134f","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova.i18n import _"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"pci_alias_opt \u003d cfg.MultiStrOpt("},{"line_number":22,"context_line":"    \u0027pci_alias\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_d0f4fc5b","line":19,"updated":"2015-12-08 13:41:11.000000000","message":"We do in some places, such as here:\n\nhttps://github.com/openstack/nova/blob/60c5c2798004984738d171055dbc2a6fd37a85fe/nova/image/download/file.py#L29\n\nHowever, it seems to be varied. I\u0027ve dropped it in the next patch, but I can always re-add it. As you\u0027re leading this effort (afaik), I\u0027ll fall back on your judgement: should I include this or drop it?","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"929e55c9300650e9e6103b2faae37ccbfd6a95b9","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova.i18n import _"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"pci_alias_opt \u003d cfg.MultiStrOpt("},{"line_number":22,"context_line":"    \u0027pci_alias\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_c215079c","line":19,"in_reply_to":"7a740942_d0f4fc5b","updated":"2015-12-08 15:49:19.000000000","message":"True, that\u0027s one. Overall there are below 10 occurences IIRC. I suggest to drop it. If we want to introduce translation to the config options in general then we will have a common base to do it.","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"364fa5b6cad81a018dae4e6ffcda0dcf3f907d67","unresolved":false,"context_lines":[{"line_number":30,"context_line":"           \u0027\"vendor_id\": \"8086\", \u0027"},{"line_number":31,"context_line":"           \u0027\"device_type\": \"ACCEL\" \u0027"},{"line_number":32,"context_line":"           \u0027} defines an alias for the Intel QuickAssist card. (multi \u0027"},{"line_number":33,"context_line":"           \u0027valued).\u0027))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"pci_passthrough_whitelist_opt \u003d cfg.MultiStrOpt("},{"line_number":36,"context_line":"    \u0027pci_passthrough_whitelist\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_79141b4c","line":33,"updated":"2015-12-08 12:19:49.000000000","message":"I think it\u0027s worth mentioning that the allowed value for this config option must be a list of valid JSON values. It gets parsed as JSON in the \"nova.pci.request\" module. The same below for the other config option (it\u0027s parsed as JSON in \"nova.pci.Whitelist\"). An example how this could look like:\n\n        help\u003d_(\"\"\"\n    An alias for a PCI passthrough device requirement. \n\n    This allows users to specify the alias in the extra_spec for a flavor,\n    without needing to repeat all the PCI property requirements. \n\n    Possible values:\n\n    * A list of JSON values which describe the aliases. For example: \n      pci_alias \u003d {\"name\": \"QuickAssist\",\n                   \"product_id\": \"0443\",\n                   \"vendor_id\": \"8086\",\n                   \"device_type\": \"ACCEL\"} \n      defines an alias for the Intel QuickAssist card. (multi valued).\n      Valid key for the aliases are: \n        * \"name\"\n        * \"product_id\"\n        * \"vendor_id\"\n        * \"device_type\"\n        * \u003c??others??\u003e\n\n    Services which consume this:\n\n    * nova-compute\n\n    Related options:\n\n    * None\n    \"\"\")","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5528d376db50cd79cb840875820d3753116e134f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"           \u0027\"vendor_id\": \"8086\", \u0027"},{"line_number":31,"context_line":"           \u0027\"device_type\": \"ACCEL\" \u0027"},{"line_number":32,"context_line":"           \u0027} defines an alias for the Intel QuickAssist card. (multi \u0027"},{"line_number":33,"context_line":"           \u0027valued).\u0027))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"pci_passthrough_whitelist_opt \u003d cfg.MultiStrOpt("},{"line_number":36,"context_line":"    \u0027pci_passthrough_whitelist\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_b085b05a","line":33,"in_reply_to":"7a740942_79141b4c","updated":"2015-12-08 13:41:11.000000000","message":"Better. Done.","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"364fa5b6cad81a018dae4e6ffcda0dcf3f907d67","unresolved":false,"context_lines":[{"line_number":35,"context_line":"pci_passthrough_whitelist_opt \u003d cfg.MultiStrOpt("},{"line_number":36,"context_line":"    \u0027pci_passthrough_whitelist\u0027,"},{"line_number":37,"context_line":"    default\u003d[],"},{"line_number":38,"context_line":"    help\u003d_(\u0027White list of PCI devices available to VMs. For example: \u0027"},{"line_number":39,"context_line":"           \u0027pci_passthrough_whitelist \u003d \u0027"},{"line_number":40,"context_line":"           \u0027[{\"vendor_id\": \"1137\", \"product_id\": \"0071\", \u0027"},{"line_number":41,"context_line":"           \u0027(\"address\": \"0000:0a:00.1\" | \"devname\": \"eth0\"), \u0027"},{"line_number":42,"context_line":"           \u0027\"physical_network\": \"physnet1\"}], where \"( X | Y ) indicates \u0027"},{"line_number":43,"context_line":"           \u0027mutually exclusive options. Note that any missing fields are \u0027"},{"line_number":44,"context_line":"           \u0027automatically wildcarded.\u0027))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"ALL_OPTS \u003d [pci_alias_opt,"},{"line_number":47,"context_line":"            pci_passthrough_whitelist_opt]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_fceb19da","line":44,"range":{"start_line":38,"start_character":0,"end_line":44,"end_character":38},"updated":"2015-12-08 12:19:49.000000000","message":"I guess only the nova-compute service will be affected by these two options, right?","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"929e55c9300650e9e6103b2faae37ccbfd6a95b9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"           \u0027(\"address\": \"0000:0a:00.1\" | \"devname\": \"eth0\"), \u0027"},{"line_number":42,"context_line":"           \u0027\"physical_network\": \"physnet1\"}], where \"( X | Y ) indicates \u0027"},{"line_number":43,"context_line":"           \u0027mutually exclusive options. Note that any missing fields are \u0027"},{"line_number":44,"context_line":"           \u0027automatically wildcarded.\u0027))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"ALL_OPTS \u003d [pci_alias_opt,"},{"line_number":47,"context_line":"            pci_passthrough_whitelist_opt]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_a4e6c841","line":44,"in_reply_to":"7a740942_50956c84","updated":"2015-12-08 15:49:19.000000000","message":"Besides reading code, there is a brute-force way:\n* set up a devstack node\n* set crap in the \"local.conf\" for that config option\n* start the stack and fire tempest\n* look in the logs which service complains\nI didn\u0027t find a more clever way to do it. I\u0027m not sure if an import dependency analysis starting on the service starter script in \"nova/cmd\" would bring valid results, I didn\u0027t try it.","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5528d376db50cd79cb840875820d3753116e134f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"           \u0027(\"address\": \"0000:0a:00.1\" | \"devname\": \"eth0\"), \u0027"},{"line_number":42,"context_line":"           \u0027\"physical_network\": \"physnet1\"}], where \"( X | Y ) indicates \u0027"},{"line_number":43,"context_line":"           \u0027mutually exclusive options. Note that any missing fields are \u0027"},{"line_number":44,"context_line":"           \u0027automatically wildcarded.\u0027))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"ALL_OPTS \u003d [pci_alias_opt,"},{"line_number":47,"context_line":"            pci_passthrough_whitelist_opt]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_50956c84","line":44,"in_reply_to":"7a740942_fceb19da","updated":"2015-12-08 13:41:11.000000000","message":"AFAIK, yes - they only make sense in the context of nova-compute. I\u0027ve no idea how I could validate this, however? Suggestions?","commit_id":"ced7aadaad80f952742ef0877d632bcadfca0152"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"87b63e519bfda0e736e1719ada61770b046eec55","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* A list of JSON values which describe the aliases. For example:"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    pci_alias \u003d { \u0027"},{"line_number":33,"context_line":"      \"name\": \"QuickAssist\", \u0027"},{"line_number":34,"context_line":"      \"product_id\": \"0443\", \u0027"},{"line_number":35,"context_line":"      \"vendor_id\": \"8086\", \u0027"},{"line_number":36,"context_line":"      \"device_type\": \"ACCEL\" \u0027"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  defines an alias for the Intel QuickAssist card. (multi valued). Valid key"},{"line_number":40,"context_line":"  values are :"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_27597a8e","line":37,"range":{"start_line":32,"start_character":16,"end_line":37,"end_character":5},"updated":"2015-12-08 16:25:18.000000000","message":"According to JSONlint this is not a valid example. The single quotes are not not necessary. It should be:\n\n    pci_alias \u003d {\n      \"name\": \"QuickAssist\",\n      \"product_id\": \"0443\",\n      \"vendor_id\": \"8086\",\n      \"device_type\": \"ACCEL\"\n    }","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"18d6231fd7b5f481ebaaa73a1fa24287e6285db4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"      \"product_id\": \"0443\", \u0027"},{"line_number":35,"context_line":"      \"vendor_id\": \"8086\", \u0027"},{"line_number":36,"context_line":"      \"device_type\": \"ACCEL\" \u0027"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  defines an alias for the Intel QuickAssist card. (multi valued). Valid key"},{"line_number":40,"context_line":"  values are :"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_38843b09","line":37,"in_reply_to":"7a740942_27597a8e","updated":"2015-12-10 09:14:49.000000000","message":"The quotes are remnants from the multiline conversion (i.e. typos). Fixed.","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"87b63e519bfda0e736e1719ada61770b046eec55","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Possible values:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* A JSON dictionary which describe a whitelisted PCI device. It should take"},{"line_number":64,"context_line":"  the following format:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    [\"device_id\": \"\u003cid\u003e\",] [\"product_id\": \"\u003cid\u003e\",]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e4de10dc","line":63,"updated":"2015-12-08 16:25:18.000000000","message":"The for loop in the Whitelist class [1] makes me think that this is \n* a single JSON dictionary or \n* a list with JSON dictionaries\n\n[1] https://github.com/openstack/nova/blob/60c5c2798004984738d171055dbc2a6fd37a85fe/nova/pci/whitelist.py#L51","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"18d6231fd7b5f481ebaaa73a1fa24287e6285db4","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Possible values:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* A JSON dictionary which describe a whitelisted PCI device. It should take"},{"line_number":64,"context_line":"  the following format:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    [\"device_id\": \"\u003cid\u003e\",] [\"product_id\": \"\u003cid\u003e\",]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_78bc03bb","line":63,"in_reply_to":"7a740942_e4de10dc","updated":"2015-12-10 09:14:49.000000000","message":"I used the spec, which may not be correct. Added Michael Still in the hopes that he can help answer this, but I\u0027ll investigate tomorrow myself if necessary.","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"87b63e519bfda0e736e1719ada61770b046eec55","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    {\"tag\": \"\u003ctag_value\u003e\",}"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  where \u0027[\u0027 indicates zero or one occurrences, \u0027{\u0027 indicates zero or multiple"},{"line_number":72,"context_line":"  occurrences, and \u0027|\u0027 mutually exclusive options. Note that any missing"},{"line_number":73,"context_line":"  fields are automatically wildcarded. For example:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_8a95d533","line":72,"range":{"start_line":72,"start_character":14,"end_line":72,"end_character":49},"updated":"2015-12-08 16:25:18.000000000","message":"Maybe adding an example which would fail would be helpful. I had to read it multiple times to understand it, but I\u0027m not in my right mind today. I guess this fails:\n\n    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\",\n                                 \"physical_network\":\"physnet\",\n                                 \"address\":\"*:0a:00.*\"}\n\nIs that right?","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"18d6231fd7b5f481ebaaa73a1fa24287e6285db4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    {\"tag\": \"\u003ctag_value\u003e\",}"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  where \u0027[\u0027 indicates zero or one occurrences, \u0027{\u0027 indicates zero or multiple"},{"line_number":72,"context_line":"  occurrences, and \u0027|\u0027 mutually exclusive options. Note that any missing"},{"line_number":73,"context_line":"  fields are automatically wildcarded. For example:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\","}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_98da0f16","line":72,"in_reply_to":"7a740942_8a95d533","updated":"2015-12-10 09:14:49.000000000","message":"Agreed and Done.","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"87b63e519bfda0e736e1719ada61770b046eec55","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    pci_passthrough_whitelist \u003d {\"vendor_id\":\"1137\",\"product_id\":\"0071\"}"},{"line_number":82,"context_line":"    pci_passthrough_whitelist \u003d {\"vendor_id\":\"1137\",\"product_id\":\"0071\","},{"line_number":83,"context_line":"                                 \"address\": \"0000:0a:00.1\","},{"line_number":84,"context_line":"                                 \"physical_network\":\"physnet1\"}"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Services which consume this:"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_cad51de5","line":84,"updated":"2015-12-08 16:25:18.000000000","message":"An example with a list of dicts would be cool. Assuming I understand the code right that this is a valid choice.","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"18d6231fd7b5f481ebaaa73a1fa24287e6285db4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    pci_passthrough_whitelist \u003d {\"vendor_id\":\"1137\",\"product_id\":\"0071\"}"},{"line_number":82,"context_line":"    pci_passthrough_whitelist \u003d {\"vendor_id\":\"1137\",\"product_id\":\"0071\","},{"line_number":83,"context_line":"                                 \"address\": \"0000:0a:00.1\","},{"line_number":84,"context_line":"                                 \"physical_network\":\"physnet1\"}"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Services which consume this:"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_58e027cd","line":84,"in_reply_to":"7a740942_cad51de5","updated":"2015-12-10 09:14:49.000000000","message":"Done.","commit_id":"fcc184c474edb5ca54ef07b4224ec59ef8eb2721"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"1179bf6aea9c786fa98f7283e4489a14d4457781","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  where \u0027[\u0027 indicates zero or one occurrences, \u0027{\u0027 indicates zero or multiple"},{"line_number":72,"context_line":"  occurrences, and \u0027|\u0027 mutually exclusive options. Note that any missing"},{"line_number":73,"context_line":"  fields are automatically wildcarded. This field can be specified multiple"},{"line_number":74,"context_line":"  times. For example:"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\","}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_588fd729","line":73,"range":{"start_line":73,"start_character":39,"end_line":73,"end_character":75},"updated":"2016-01-14 16:49:09.000000000","message":"Please remove that sentence. That\u0027s misleading. That\u0027s what it tries to say is in the second bullet point below as \"A JSON list of JSON dictionaries\".","commit_id":"9848f4e6dd21b0cacefa300c4163fb3933cce485"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"1179bf6aea9c786fa98f7283e4489a14d4457781","unresolved":false,"context_lines":[{"line_number":71,"context_line":"  where \u0027[\u0027 indicates zero or one occurrences, \u0027{\u0027 indicates zero or multiple"},{"line_number":72,"context_line":"  occurrences, and \u0027|\u0027 mutually exclusive options. Note that any missing"},{"line_number":73,"context_line":"  fields are automatically wildcarded. This field can be specified multiple"},{"line_number":74,"context_line":"  times. For example:"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\","},{"line_number":77,"context_line":"                                 \"physical_network\":\"physnet\"}"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_1885df05","line":74,"range":{"start_line":74,"start_character":9,"end_line":74,"end_character":20},"updated":"2016-01-14 16:49:09.000000000","message":"\"Valid examples are:\"\n\nThe plural here is important to show that these are valid each by itself and not combined.","commit_id":"9848f4e6dd21b0cacefa300c4163fb3933cce485"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"64b1a557c4dc6d6a2f7dd4928198ba11393c53b9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* A list of JSON values which describe the aliases. For example:"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    pci_alias \u003d {"},{"line_number":33,"context_line":"      \"name\": \"QuickAssist\","},{"line_number":34,"context_line":"      \"product_id\": \"0443\","},{"line_number":35,"context_line":"      \"vendor_id\": \"8086\","},{"line_number":36,"context_line":"      \"device_type\": \"type-PCI\""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fcf663f8","line":33,"updated":"2016-01-26 12:49:35.000000000","message":"This is called QuicAssist in the current code. Which is correct? Or does it not matter? You\u0027ve also missed the OR operation hint from the doc comment in nova/pci/request.py.","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9693371d7d88323306e9a8c0bc3caf0a693954db","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* A list of JSON values which describe the aliases. For example:"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    pci_alias \u003d {"},{"line_number":33,"context_line":"      \"name\": \"QuickAssist\","},{"line_number":34,"context_line":"      \"product_id\": \"0443\","},{"line_number":35,"context_line":"      \"vendor_id\": \"8086\","},{"line_number":36,"context_line":"      \"device_type\": \"type-PCI\""}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_ce58328d","line":33,"in_reply_to":"9a68dd71_e2b23e06","updated":"2016-02-23 10:50:27.000000000","message":"+1 this is metadata.","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65a2740c80022715415534753cc48b3091fce670","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* A list of JSON values which describe the aliases. For example:"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    pci_alias \u003d {"},{"line_number":33,"context_line":"      \"name\": \"QuickAssist\","},{"line_number":34,"context_line":"      \"product_id\": \"0443\","},{"line_number":35,"context_line":"      \"vendor_id\": \"8086\","},{"line_number":36,"context_line":"      \"device_type\": \"type-PCI\""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_e2b23e06","line":33,"in_reply_to":"9a68dd71_fcf663f8","updated":"2016-01-26 13:14:53.000000000","message":"You\u0027re talking about this, presumably:\n\n    https://github.com/openstack/nova/blob/1ae9221b0a1cf7ac86eeccbb794c84a115c55f84/nova/pci/request.py#L19\n\nThat looks like a typo and should be fixed, albeit in a separate commit. In any case the ``name`` field is metadata so it shouldn\u0027t matter","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"64b1a557c4dc6d6a2f7dd4928198ba11393c53b9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"      \"vendor_id\": \"8086\","},{"line_number":36,"context_line":"      \"device_type\": \"type-PCI\""},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  defines an alias for the Intel QuickAssist card. (multi valued). Valid key"},{"line_number":40,"context_line":"  values are :"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_fceae3ab","line":38,"updated":"2016-01-26 12:49:35.000000000","message":"I am also confused here because that JSON blob isn\u0027t loadable by json.loads(). What is the magic here?\n\n\u003e\u003e\u003e foo\u003d\"\"\"pci_alias \u003d {\n...       \"name\": \"QuickAssist\",\n...       \"product_id\": \"0443\",\n...       \"vendor_id\": \"8086\",\n...       \"device_type\": \"type-PCI\"\n...     }\"\"\"\n\u003e\u003e\u003e json.loads(foo)\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py\", line 326, in loads\n    return _default_decoder.decode(s)\n  File \"/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py\", line 366, in decode\n    obj, end \u003d self.raw_decode(s, idx\u003d_w(s, 0).end())\n  File \"/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py\", line 384, in raw_decode\n    raise ValueError(\"No JSON object could be decoded\")\nValueError: No JSON object could be decoded\n\nSpecifically, the \"pci_alias \u003d\" bit at the start isn\u0027t valid json.","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9693371d7d88323306e9a8c0bc3caf0a693954db","unresolved":false,"context_lines":[{"line_number":35,"context_line":"      \"vendor_id\": \"8086\","},{"line_number":36,"context_line":"      \"device_type\": \"type-PCI\""},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  defines an alias for the Intel QuickAssist card. (multi valued). Valid key"},{"line_number":40,"context_line":"  values are :"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_0c07c318","line":38,"in_reply_to":"3a57f1b5_2b526b14","updated":"2016-02-23 10:50:27.000000000","message":"Its multi-string right, so its not a list, its multiple entries for the same config key.\n\nWe should totally try and come up with something more specific in a follow up patch.","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"7d142e0c658bfa2ba3eca9bcf2fd9674e84e14c5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"      \"vendor_id\": \"8086\","},{"line_number":36,"context_line":"      \"device_type\": \"type-PCI\""},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  defines an alias for the Intel QuickAssist card. (multi valued). Valid key"},{"line_number":40,"context_line":"  values are :"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a57f1b5_2b526b14","line":38,"in_reply_to":"9a68dd71_029d1259","updated":"2016-02-10 01:55:14.000000000","message":"In that case, is it unreasonable to clarify that here? Something like:\n\n\"An example, in config parser format:\"\n\nPerhaps we should also have a list example because we can have more than one value here, right?","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65a2740c80022715415534753cc48b3091fce670","unresolved":false,"context_lines":[{"line_number":35,"context_line":"      \"vendor_id\": \"8086\","},{"line_number":36,"context_line":"      \"device_type\": \"type-PCI\""},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  defines an alias for the Intel QuickAssist card. (multi valued). Valid key"},{"line_number":40,"context_line":"  values are :"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_029d1259","line":38,"in_reply_to":"9a68dd71_fceae3ab","updated":"2016-01-26 13:14:53.000000000","message":"To the best of my knowledge, this gives an example option as provided in a \u0027nova.conf\u0027 file. Those files are in \u0027configparser\u0027 format. The variable value itself is valid JSON and should be loadable.","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"64b1a557c4dc6d6a2f7dd4928198ba11393c53b9","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  where \u0027[\u0027 indicates zero or one occurrences, \u0027{\u0027 indicates zero or multiple"},{"line_number":72,"context_line":"  occurrences, and \u0027|\u0027 mutually exclusive options. Note that any missing"},{"line_number":73,"context_line":"  fields are automatically wildcarded. Valid examples are:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\","},{"line_number":76,"context_line":"                                 \"physical_network\":\"physnet\"}"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_dc427f68","line":73,"updated":"2016-01-26 12:49:35.000000000","message":"That syntax is amazing.","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9693371d7d88323306e9a8c0bc3caf0a693954db","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  where \u0027[\u0027 indicates zero or one occurrences, \u0027{\u0027 indicates zero or multiple"},{"line_number":72,"context_line":"  occurrences, and \u0027|\u0027 mutually exclusive options. Note that any missing"},{"line_number":73,"context_line":"  fields are automatically wildcarded. Valid examples are:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\","},{"line_number":76,"context_line":"                                 \"physical_network\":\"physnet\"}"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_ee5d3648","line":73,"in_reply_to":"9a68dd71_82a9027e","updated":"2016-02-23 10:50:27.000000000","message":"yeah, this one is growing out of hand, there were some ideas for replacing it.","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65a2740c80022715415534753cc48b3091fce670","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  where \u0027[\u0027 indicates zero or one occurrences, \u0027{\u0027 indicates zero or multiple"},{"line_number":72,"context_line":"  occurrences, and \u0027|\u0027 mutually exclusive options. Note that any missing"},{"line_number":73,"context_line":"  fields are automatically wildcarded. Valid examples are:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    pci_passthrough_whitelist \u003d {\"devname\":\"eth0\","},{"line_number":76,"context_line":"                                 \"physical_network\":\"physnet\"}"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a68dd71_82a9027e","line":73,"in_reply_to":"9a68dd71_dc427f68","updated":"2016-01-26 13:14:53.000000000","message":"Don\u0027t know if serious or not :) In any case, not my syntax!","commit_id":"f99f9b99bb2c9e81711861c1b7d61b4e4cd6afca"}],"nova/pci/whitelist.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8393b8f9144e7d376b2f885c1f1c4f2bd1fbe42d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                           \u0027) indicates mutually exclusive options. Note \u0027"},{"line_number":34,"context_line":"                           \u0027that any missing fields are automatically \u0027"},{"line_number":35,"context_line":"                           \u0027wildcarded.\u0027)),"},{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":"CONF.register_opts(pci_opts)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_bad751be","line":36,"updated":"2015-12-04 16:18:30.000000000","message":"we should rather take the opportunity to move that option to a new nova.conf.pci module like it\u0027s explained in http://specs.openstack.org/openstack/nova-specs/specs/mitaka/approved/centralize-config-options.html#technical-view\n\nSee also http://lists.openstack.org/pipermail/openstack-dev/2015-December/081271.html if you need guidance or ping me (bauzas)","commit_id":"79162e0701e8423c466503d6a63dc5409cffcc27"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"0debe0440ff5f208a4b060e08c41e1784b5fc371","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                           \u0027) indicates mutually exclusive options. Note \u0027"},{"line_number":34,"context_line":"                           \u0027that any missing fields are automatically \u0027"},{"line_number":35,"context_line":"                           \u0027wildcarded.\u0027)),"},{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":"CONF.register_opts(pci_opts)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_35993220","line":36,"in_reply_to":"7a740942_bad751be","updated":"2015-12-04 16:34:35.000000000","message":"Agreed","commit_id":"79162e0701e8423c466503d6a63dc5409cffcc27"}]}
