)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"107c5ffd93073a1fd965407af8e0847742af0ea2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for 1.22 microversion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 1.22 microversion of placement adds support for"},{"line_number":10,"context_line":"excluding resource providers and allocations candidates"},{"line_number":11,"context_line":"with specified traits. A forbidden trait (as --required"},{"line_number":12,"context_line":"argument) should be prefixed with a ! sign."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fce034c_b3f37a73","line":10,"range":{"start_line":10,"start_character":33,"end_line":10,"end_character":55},"updated":"2019-04-15 15:04:07.000000000","message":"allocation candidates","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"0db6e29146e52430fd01bc16228079b695d298ed","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for 1.22 microversion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 1.22 microversion of placement adds support for"},{"line_number":10,"context_line":"excluding resource providers and allocations candidates"},{"line_number":11,"context_line":"with specified traits. A forbidden trait (as --required"},{"line_number":12,"context_line":"argument) should be prefixed with a ! sign."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fce034c_fd769ed8","line":10,"range":{"start_line":10,"start_character":33,"end_line":10,"end_character":55},"in_reply_to":"3fce034c_b3f37a73","updated":"2019-04-16 08:34:21.000000000","message":"Done","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"}],"osc_placement/resources/allocation_candidate.py":[{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"97dcc18a91e44b8e0c9039aeaac9d6fe509d523a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            self.check_version(version.ge(\u00271.22\u0027))"},{"line_number":141,"context_line":"            forbidden_traits \u003d \u0027,\u0027.join([\u0027!\u0027 + f for f in parsed_args.forbidden])"},{"line_number":142,"context_line":"            if \u0027required\u0027 in params:"},{"line_number":143,"context_line":"                params[\u0027required\u0027] +\u003d \u0027,\u0027 + forbidden_traits "},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                params[\u0027required\u0027] \u003d forbidden_traits"},{"line_number":146,"context_line":"        if \u0027aggregate_uuid\u0027 in parsed_args and parsed_args.aggregate_uuid:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_ed58a831","line":143,"range":{"start_line":143,"start_character":60,"end_line":143,"end_character":61},"updated":"2019-05-30 13:51:43.000000000","message":"whitespace to be removed","commit_id":"672d0b1f7e4e265a2fda231016a7c63fe75a30e5"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"f517aadfa07d234028f697b6d24ed28f51b53a59","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            self.check_version(version.ge(\u00271.22\u0027))"},{"line_number":141,"context_line":"            forbidden_traits \u003d \u0027,\u0027.join([\u0027!\u0027 + f for f in parsed_args.forbidden])"},{"line_number":142,"context_line":"            if \u0027required\u0027 in params:"},{"line_number":143,"context_line":"                params[\u0027required\u0027] +\u003d \u0027,\u0027 + forbidden_traits "},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                params[\u0027required\u0027] \u003d forbidden_traits"},{"line_number":146,"context_line":"        if \u0027aggregate_uuid\u0027 in parsed_args and parsed_args.aggregate_uuid:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_92b9f579","line":143,"range":{"start_line":143,"start_character":60,"end_line":143,"end_character":61},"in_reply_to":"bfb3d3c7_ed58a831","updated":"2019-05-31 07:00:52.000000000","message":"Done","commit_id":"672d0b1f7e4e265a2fda231016a7c63fe75a30e5"}],"osc_placement/resources/resource_provider.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2d54279c86e82de00b5a8e6ee3c9f3976f17786","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 \u0027must collectively contain all of the required traits. \u0027"},{"line_number":128,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":129,"context_line":"                 \u0027``--os-placement-api-version 1.18``.\\n\\n\u0027"},{"line_number":130,"context_line":"                 \u0027Starting from ``--os-placement-api-version 1.22`` \u0027"},{"line_number":131,"context_line":"                 \u0027the API allows prefixing a trait with a ! to specify \u0027"},{"line_number":132,"context_line":"                 \u0027traits which are forbidden from any resource provider. \u0027"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_bd956742","line":130,"updated":"2019-04-16 20:09:57.000000000","message":"Rather than this sort of weird ! logic on the --required option, why not just add a --forbidden option? I realize the ! matches the API, but doesn\u0027t seem very clear for a CLI, nor does it match how extra specs use forbidden traits which is arguably more clear to me from a UX standpoint than !required.\n\nThe one thing that could get complicated later is trying to support 1.32 which adds support to these APIs for specifying forbidden aggregates using member_of, so I\u0027m not sure how we\u0027d UX our way out of that if we try to add 1.32 support to the CLI but already used --forbidden for traits and then we want to also support forbidden aggregates.","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"8a1d17f3acc8cc30cd7f9816d8c1adffed4009d4","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 \u0027must collectively contain all of the required traits. \u0027"},{"line_number":128,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":129,"context_line":"                 \u0027``--os-placement-api-version 1.18``.\\n\\n\u0027"},{"line_number":130,"context_line":"                 \u0027Starting from ``--os-placement-api-version 1.22`` \u0027"},{"line_number":131,"context_line":"                 \u0027the API allows prefixing a trait with a ! to specify \u0027"},{"line_number":132,"context_line":"                 \u0027traits which are forbidden from any resource provider. \u0027"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_429caa5c","line":130,"in_reply_to":"3fce034c_bd956742","updated":"2019-05-08 10:08:01.000000000","message":"+1 on bash it works only with \\! which can be ok if documented","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"aff6c3e160258328d7556a40f3320a60caa382cf","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 \u0027must collectively contain all of the required traits. \u0027"},{"line_number":128,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":129,"context_line":"                 \u0027``--os-placement-api-version 1.18``.\\n\\n\u0027"},{"line_number":130,"context_line":"                 \u0027Starting from ``--os-placement-api-version 1.22`` \u0027"},{"line_number":131,"context_line":"                 \u0027the API allows prefixing a trait with a ! to specify \u0027"},{"line_number":132,"context_line":"                 \u0027traits which are forbidden from any resource provider. \u0027"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_18ad75e8","line":130,"in_reply_to":"3fce034c_bd956742","updated":"2019-05-13 15:22:39.000000000","message":"what about the following UI?\n\nfor traits: --required and --forbidden\nfor aggregate membership: --aggregate-uuid --forbidden-aggregate-uuid","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3fb9182915b701cb129aaa366deb1b514bc36616","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 \u0027must collectively contain all of the required traits. \u0027"},{"line_number":128,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":129,"context_line":"                 \u0027``--os-placement-api-version 1.18``.\\n\\n\u0027"},{"line_number":130,"context_line":"                 \u0027Starting from ``--os-placement-api-version 1.22`` \u0027"},{"line_number":131,"context_line":"                 \u0027the API allows prefixing a trait with a ! to specify \u0027"},{"line_number":132,"context_line":"                 \u0027traits which are forbidden from any resource provider. \u0027"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_a530c7e9","line":130,"in_reply_to":"bfb3d3c7_35573729","updated":"2019-05-27 08:47:52.000000000","message":"+1","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"2cde870e3248fc29ab6ef7658a170ad07a0a1aa2","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 \u0027must collectively contain all of the required traits. \u0027"},{"line_number":128,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":129,"context_line":"                 \u0027``--os-placement-api-version 1.18``.\\n\\n\u0027"},{"line_number":130,"context_line":"                 \u0027Starting from ``--os-placement-api-version 1.22`` \u0027"},{"line_number":131,"context_line":"                 \u0027the API allows prefixing a trait with a ! to specify \u0027"},{"line_number":132,"context_line":"                 \u0027traits which are forbidden from any resource provider. \u0027"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_ce04f31a","line":130,"in_reply_to":"bfb3d3c7_a530c7e9","updated":"2019-05-28 05:58:44.000000000","message":"+1","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"74c4f3a6803a443c06d0d308738a29db8c1cadff","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 \u0027must collectively contain all of the required traits. \u0027"},{"line_number":128,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":129,"context_line":"                 \u0027``--os-placement-api-version 1.18``.\\n\\n\u0027"},{"line_number":130,"context_line":"                 \u0027Starting from ``--os-placement-api-version 1.22`` \u0027"},{"line_number":131,"context_line":"                 \u0027the API allows prefixing a trait with a ! to specify \u0027"},{"line_number":132,"context_line":"                 \u0027traits which are forbidden from any resource provider. \u0027"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_35573729","line":130,"in_reply_to":"dfbec78f_18ad75e8","updated":"2019-05-24 15:50:11.000000000","message":"\u003e what about the following UI?\n \u003e \n \u003e for traits: --required and --forbidden\n \u003e for aggregate membership: --aggregate-uuid --forbidden-aggregate-uuid\n\nThat looks OK to me, it\u0027s better than using \"--required !\u003ctrait\u003e\" on the CLI IMO.","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"91819b3b560f6a6507b3802405e3f66c0689eed1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 \u0027must collectively contain all of the required traits. \u0027"},{"line_number":128,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":129,"context_line":"                 \u0027``--os-placement-api-version 1.18``.\\n\\n\u0027"},{"line_number":130,"context_line":"                 \u0027Starting from ``--os-placement-api-version 1.22`` \u0027"},{"line_number":131,"context_line":"                 \u0027the API allows prefixing a trait with a ! to specify \u0027"},{"line_number":132,"context_line":"                 \u0027traits which are forbidden from any resource provider. \u0027"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_92f61963","line":130,"in_reply_to":"dfbec78f_18ad75e8","updated":"2019-05-14 05:41:26.000000000","message":"Looks good to me. :) We may wait for others\u0027 opinions if they are okay with that.","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"97dcc18a91e44b8e0c9039aeaac9d6fe509d523a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            self.check_version(version.ge(\u00271.22\u0027))"},{"line_number":168,"context_line":"            forbidden_traits \u003d \u0027,\u0027.join([\u0027!\u0027 + f for f in parsed_args.forbidden])"},{"line_number":169,"context_line":"            if \u0027required\u0027 in filters:"},{"line_number":170,"context_line":"                filters[\u0027required\u0027] +\u003d \u0027,\u0027 + forbidden_traits "},{"line_number":171,"context_line":"            else:"},{"line_number":172,"context_line":"                filters[\u0027required\u0027] \u003d forbidden_traits"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_4d49b45d","line":170,"range":{"start_line":170,"start_character":61,"end_line":170,"end_character":62},"updated":"2019-05-30 13:51:43.000000000","message":"whitespace to be removed","commit_id":"672d0b1f7e4e265a2fda231016a7c63fe75a30e5"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"f517aadfa07d234028f697b6d24ed28f51b53a59","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            self.check_version(version.ge(\u00271.22\u0027))"},{"line_number":168,"context_line":"            forbidden_traits \u003d \u0027,\u0027.join([\u0027!\u0027 + f for f in parsed_args.forbidden])"},{"line_number":169,"context_line":"            if \u0027required\u0027 in filters:"},{"line_number":170,"context_line":"                filters[\u0027required\u0027] +\u003d \u0027,\u0027 + forbidden_traits "},{"line_number":171,"context_line":"            else:"},{"line_number":172,"context_line":"                filters[\u0027required\u0027] \u003d forbidden_traits"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_f2a95123","line":170,"range":{"start_line":170,"start_character":61,"end_line":170,"end_character":62},"in_reply_to":"bfb3d3c7_4d49b45d","updated":"2019-05-31 07:00:52.000000000","message":"Done","commit_id":"672d0b1f7e4e265a2fda231016a7c63fe75a30e5"}],"osc_placement/tests/functional/base.py":[{"author":{"_account_id":30237,"name":"Filip Pich","email":"filip_pich@o2.pl"},"change_message_id":"228fa5251e74f061443bcf7a37946ee6299adb2d","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"            output \u003d subprocess.check_output(to_exec, stderr\u003dsubprocess.STDOUT)"},{"line_number":45,"context_line":"            result \u003d (output or b\u0027\u0027).decode(\u0027utf-8\u0027)"},{"line_number":46,"context_line":"            with open(\"/tmp/test22\", \"a\") as text_file:"},{"line_number":47,"context_line":"                text_file.write(result)"},{"line_number":48,"context_line":"        except subprocess.CalledProcessError as e:"},{"line_number":49,"context_line":"            msg \u003d \u0027Command: \"%s\"\\noutput: %s\u0027 % (\u0027 \u0027.join(e.cmd), e.output)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_b2919949","line":46,"updated":"2019-05-31 08:53:59.000000000","message":"WTF","commit_id":"672d0b1f7e4e265a2fda231016a7c63fe75a30e5"}],"osc_placement/tests/functional/test_allocation_candidate.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"27f8fc1df83339a8f0ab7494362b8d3313fbc5c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3fce034c_d8ec5af5","line":228,"updated":"2019-04-11 13:43:59.000000000","message":"Let\u0027s add a test for microversion \u003c 1.22 to see if ! is rejected there.","commit_id":"2e12c3f70e1c5711345264e41441f42b5264383f"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"40fa59e8924c696b3fdc8cfe54dc7e1680ce28fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3fce034c_4d287933","line":228,"in_reply_to":"3fce034c_d8ec5af5","updated":"2019-04-15 11:30:08.000000000","message":"Done","commit_id":"2e12c3f70e1c5711345264e41441f42b5264383f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"107c5ffd93073a1fd965407af8e0847742af0ea2","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            required\u003d(\u0027!STORAGE_DISK_HDD\u0027, \u0027HW_CPU_X86_BMI\u0027,))"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.assertEqual(1, len(rps))"},{"line_number":227,"context_line":"        self.assertEqual(rps[0][\u0027resource provider\u0027], rp1[\u0027uuid\u0027])"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        rps \u003d self.allocation_candidate_list("},{"line_number":230,"context_line":"            resources\u003d(\u0027MEMORY_MB\u003d1024\u0027, \u0027DISK_GB\u003d80\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_fe16a9f1","line":227,"range":{"start_line":227,"start_character":25,"end_line":227,"end_character":65},"updated":"2019-04-15 15:04:07.000000000","message":"nit: this is in order of (actual, expected). this should be (expected, actual)","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"0db6e29146e52430fd01bc16228079b695d298ed","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            required\u003d(\u0027!STORAGE_DISK_HDD\u0027, \u0027HW_CPU_X86_BMI\u0027,))"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.assertEqual(1, len(rps))"},{"line_number":227,"context_line":"        self.assertEqual(rps[0][\u0027resource provider\u0027], rp1[\u0027uuid\u0027])"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        rps \u003d self.allocation_candidate_list("},{"line_number":230,"context_line":"            resources\u003d(\u0027MEMORY_MB\u003d1024\u0027, \u0027DISK_GB\u003d80\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_bd59f65a","line":227,"range":{"start_line":227,"start_character":25,"end_line":227,"end_character":65},"in_reply_to":"3fce034c_fe16a9f1","updated":"2019-04-16 08:34:21.000000000","message":"Done","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"}],"osc_placement/tests/functional/test_resource_provider.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"27f8fc1df83339a8f0ab7494362b8d3313fbc5c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3fce034c_d8fe9aad","line":345,"updated":"2019-04-11 13:43:59.000000000","message":"Let\u0027s add another test that shows that forbidden trait syntaxt (!) is rejected with microversion \u003c 1.22","commit_id":"2e12c3f70e1c5711345264e41441f42b5264383f"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"40fa59e8924c696b3fdc8cfe54dc7e1680ce28fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3fce034c_cd1b0919","line":345,"in_reply_to":"3fce034c_d8fe9aad","updated":"2019-04-15 11:30:08.000000000","message":"Done","commit_id":"2e12c3f70e1c5711345264e41441f42b5264383f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"107c5ffd93073a1fd965407af8e0847742af0ea2","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            required\u003d(\u0027!STORAGE_DISK_HDD\u0027, \u0027HW_CPU_X86_VMX\u0027,))"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        self.assertEqual(1, len(rps))"},{"line_number":342,"context_line":"        self.assertEqual(rps[0][\u0027uuid\u0027], rp1[\u0027uuid\u0027])"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        rps \u003d self.resource_provider_list("},{"line_number":345,"context_line":"            resources\u003d(\u0027MEMORY_MB\u003d1024\u0027, \u0027DISK_GB\u003d80\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_def08dcc","line":342,"range":{"start_line":342,"start_character":25,"end_line":342,"end_character":52},"updated":"2019-04-15 15:04:07.000000000","message":"nit: this is in order of (actual, expected). this should be (expected, actual)","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"0db6e29146e52430fd01bc16228079b695d298ed","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            required\u003d(\u0027!STORAGE_DISK_HDD\u0027, \u0027HW_CPU_X86_VMX\u0027,))"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        self.assertEqual(1, len(rps))"},{"line_number":342,"context_line":"        self.assertEqual(rps[0][\u0027uuid\u0027], rp1[\u0027uuid\u0027])"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        rps \u003d self.resource_provider_list("},{"line_number":345,"context_line":"            resources\u003d(\u0027MEMORY_MB\u003d1024\u0027, \u0027DISK_GB\u003d80\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_5d49f288","line":342,"range":{"start_line":342,"start_character":25,"end_line":342,"end_character":52},"in_reply_to":"3fce034c_def08dcc","updated":"2019-04-16 08:34:21.000000000","message":"Done","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"}],"releasenotes/notes/microversion-1.22-forbidden-traits-bc7acaf3006829a5.yaml":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"107c5ffd93073a1fd965407af8e0847742af0ea2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The `1.22 microversion`_ of placement adds support for"},{"line_number":5,"context_line":"    excluding resource providers and allocations candidates"},{"line_number":6,"context_line":"    with specified traits. A forbidden trait, as ``--required``"},{"line_number":7,"context_line":"    argument, should be prefixed with a ``!`` sign."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fce034c_f3a6e253","line":5,"range":{"start_line":5,"start_character":37,"end_line":5,"end_character":59},"updated":"2019-04-15 15:04:07.000000000","message":"allocation candidates","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"0db6e29146e52430fd01bc16228079b695d298ed","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The `1.22 microversion`_ of placement adds support for"},{"line_number":5,"context_line":"    excluding resource providers and allocations candidates"},{"line_number":6,"context_line":"    with specified traits. A forbidden trait, as ``--required``"},{"line_number":7,"context_line":"    argument, should be prefixed with a ``!`` sign."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fce034c_fd5f7e3e","line":5,"range":{"start_line":5,"start_character":37,"end_line":5,"end_character":59},"in_reply_to":"3fce034c_f3a6e253","updated":"2019-04-16 08:34:21.000000000","message":"Done","commit_id":"0459791e96b045c88ebd0f3711ae6a9b9383134f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b2d54279c86e82de00b5a8e6ee3c9f3976f17786","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    excluding resource providers and allocation candidates"},{"line_number":6,"context_line":"    with specified traits. A forbidden trait, as ``--required``"},{"line_number":7,"context_line":"    argument, should be prefixed with a ``!`` sign."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    .. _1.22 microversion: https://docs.openstack.org/placement/latest/placement-api-microversion-history.html#support-forbidden-traits-on-resource-providers-and-allocations-candidates"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fce034c_fdb68ffa","line":8,"updated":"2019-04-16 20:09:57.000000000","message":"Either here or better yet in the command docs, an example usage of this would be useful since this seems like a weird syntax. Why didn\u0027t we just use --forbidden rather than --required with !?","commit_id":"a809cdd4e72cd3ca44b50582beca48b9dd5be1c4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e81caf9c43c6c5077150035a1c76b0e14224d4ee","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The `1.22 microversion`_ of placement adds support for"},{"line_number":5,"context_line":"    excluding resource providers and allocation candidates"},{"line_number":6,"context_line":"    with specified traits. A forbidden trait may be specified"},{"line_number":7,"context_line":"    with ``--forbidden`` option."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    .. _1.22 microversion: https://docs.openstack.org/placement/latest/placement-api-microversion-history.html#support-forbidden-traits-on-resource-providers-and-allocations-candidates"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fb8cfa7_281e750c","line":7,"updated":"2019-06-03 12:19:29.000000000","message":"nit: not necessary but if there\u0027s another version, might mention --forbidden can can be multiple","commit_id":"e52fa969f9ee7ff2e58ce86c2a6261a80b819093"}]}
