)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":20,"context_line":"- Remove ``policies`` column in the output of"},{"line_number":21,"context_line":"``nova server-group-create``, ``nova server-group-get``,"},{"line_number":22,"context_line":"``nova server-group-list``, and added a new format ``policy``"},{"line_number":23,"context_line":"column which is a dictionary representation of a server group"},{"line_number":24,"context_line":"policy containing the ``name``, ``rules`` fields."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Depends-On: 3cd26f1e68b09ba7925e794ac8912566c239b6df"},{"line_number":27,"context_line":"blueprint: complex-anti-affinity-policies"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5f7c97a3_c81c44c4","line":24,"range":{"start_line":23,"start_character":7,"end_line":24,"end_character":49},"updated":"2018-07-14 12:24:56.000000000","message":"This is old now.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":20,"context_line":"- Remove ``policies`` column in the output of"},{"line_number":21,"context_line":"``nova server-group-create``, ``nova server-group-get``,"},{"line_number":22,"context_line":"``nova server-group-list``, and added a new format ``policy``"},{"line_number":23,"context_line":"column which is a dictionary representation of a server group"},{"line_number":24,"context_line":"policy containing the ``name``, ``rules`` fields."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Depends-On: 3cd26f1e68b09ba7925e794ac8912566c239b6df"},{"line_number":27,"context_line":"blueprint: complex-anti-affinity-policies"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5f7c97a3_489faf50","line":24,"range":{"start_line":23,"start_character":7,"end_line":24,"end_character":49},"in_reply_to":"5f7c97a3_c81c44c4","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d0628da751e31e90766087dc71f5a7b5a29635","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Added support for microversion 2.64, which includes the"},{"line_number":10,"context_line":"following changes:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"- The ``--rules`` options is added to the"},{"line_number":13,"context_line":"``nova server-group-create`` CLI that enables user to create"},{"line_number":14,"context_line":"server group with specific policy rules."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"5f7c97a3_b749d666","line":12,"range":{"start_line":12,"start_character":10,"end_line":12,"end_character":15},"updated":"2018-07-18 13:19:19.000000000","message":"--rule","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c95705d259f8a401eb544b82d95b4e4bc1472bf","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Added support for microversion 2.64, which includes the"},{"line_number":10,"context_line":"following changes:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"- The ``--rules`` options is added to the"},{"line_number":13,"context_line":"``nova server-group-create`` CLI that enables user to create"},{"line_number":14,"context_line":"server group with specific policy rules."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"5f7c97a3_9a54fffe","line":12,"range":{"start_line":12,"start_character":10,"end_line":12,"end_character":15},"in_reply_to":"5f7c97a3_b749d666","updated":"2018-07-18 14:06:27.000000000","message":"Done","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"}],"doc/source/cli/nova.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":2964,"context_line":"  Policy for the server groups."},{"line_number":2965,"context_line":""},{"line_number":2966,"context_line":"``--rules``"},{"line_number":2967,"context_line":"  Policy rules for the server groups. (Supported by API versions"},{"line_number":2968,"context_line":"  \u00272.64\u0027 - \u00272.latest\u0027. Currently, only the ``max_server_per_host`` rule"},{"line_number":2969,"context_line":"  is supported for the ``anti-affinity`` policy."},{"line_number":2970,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_88740c06","line":2967,"range":{"start_line":2967,"start_character":38,"end_line":2967,"end_character":39},"updated":"2018-07-14 12:24:56.000000000","message":"Missing closing )","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":2964,"context_line":"  Policy for the server groups."},{"line_number":2965,"context_line":""},{"line_number":2966,"context_line":"``--rules``"},{"line_number":2967,"context_line":"  Policy rules for the server groups. (Supported by API versions"},{"line_number":2968,"context_line":"  \u00272.64\u0027 - \u00272.latest\u0027. Currently, only the ``max_server_per_host`` rule"},{"line_number":2969,"context_line":"  is supported for the ``anti-affinity`` policy."},{"line_number":2970,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_f97ea6e1","line":2967,"range":{"start_line":2967,"start_character":38,"end_line":2967,"end_character":39},"in_reply_to":"5f7c97a3_88740c06","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"}],"novaclient/tests/functional/v2/test_server_groups.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    COMPUTE_API_VERSION \u003d \"2.13\""},{"line_number":21,"context_line":"    expected_metadata \u003d True"},{"line_number":22,"context_line":"    expected_new_policy \u003d False"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def test_create_server_group(self):"},{"line_number":25,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_0868fc1f","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":23},"updated":"2018-07-14 12:24:56.000000000","message":"This won\u0027t be \u0027new\u0027 in 2 years. Maybe name this \"expect_policy_rules\"?","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    COMPUTE_API_VERSION \u003d \"2.13\""},{"line_number":21,"context_line":"    expected_metadata \u003d True"},{"line_number":22,"context_line":"    expected_new_policy \u003d False"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def test_create_server_group(self):"},{"line_number":25,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_d963aa44","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":23},"in_reply_to":"5f7c97a3_0868fc1f","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.assertNotIn(sg, \u0027Metadata\u0027)"},{"line_number":38,"context_line":"        if self.expected_new_policy:"},{"line_number":39,"context_line":"            policy \u003d self._get_column_value_from_single_row_table("},{"line_number":40,"context_line":"                sg, \"Policy\")"},{"line_number":41,"context_line":"            self.assertIn(\"\u0027name\u0027\", policy)"},{"line_number":42,"context_line":"            self.assertIn(\"\u0027rules\u0027\", policy)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_list_server_groups(self):"},{"line_number":45,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_688170c2","line":42,"range":{"start_line":39,"start_character":12,"end_line":42,"end_character":44},"updated":"2018-07-14 12:24:56.000000000","message":"This has to be different now.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.assertNotIn(sg, \u0027Metadata\u0027)"},{"line_number":38,"context_line":"        if self.expected_new_policy:"},{"line_number":39,"context_line":"            policy \u003d self._get_column_value_from_single_row_table("},{"line_number":40,"context_line":"                sg, \"Policy\")"},{"line_number":41,"context_line":"            self.assertIn(\"\u0027name\u0027\", policy)"},{"line_number":42,"context_line":"            self.assertIn(\"\u0027rules\u0027\", policy)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_list_server_groups(self):"},{"line_number":45,"context_line":"        sg_id \u003d self._create_sg(\"affinity\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a896833c","line":42,"range":{"start_line":39,"start_character":12,"end_line":42,"end_character":44},"in_reply_to":"5f7c97a3_688170c2","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f05aa2d023b9a7d9645388554aa982938c63bd64","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            self._get_column_value_from_single_row_table(sg, \"Metadata\")"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.assertNotIn(sg, \u0027Metadata\u0027)"},{"line_number":38,"context_line":"        if self.expected_policy_rules:"},{"line_number":39,"context_line":"            self.assertEqual("},{"line_number":40,"context_line":"                \u0027affinity\u0027,"},{"line_number":41,"context_line":"                self._get_column_value_from_single_row_table(sg, \"Policy\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_37c86654","line":38,"updated":"2018-07-18 13:20:08.000000000","message":"Should probably have an else to assertNotIn(\u0027rules\u0027, sg) right?","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c95705d259f8a401eb544b82d95b4e4bc1472bf","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            self._get_column_value_from_single_row_table(sg, \"Metadata\")"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.assertNotIn(sg, \u0027Metadata\u0027)"},{"line_number":38,"context_line":"        if self.expected_policy_rules:"},{"line_number":39,"context_line":"            self.assertEqual("},{"line_number":40,"context_line":"                \u0027affinity\u0027,"},{"line_number":41,"context_line":"                self._get_column_value_from_single_row_table(sg, \"Policy\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_da4ef76c","line":38,"in_reply_to":"5f7c97a3_37c86654","updated":"2018-07-18 14:06:27.000000000","message":"Done","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d0628da751e31e90766087dc71f5a7b5a29635","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                self._get_column_value_from_single_row_table(sg, \"Rules\"))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class TestServerGroupClientV264(TestServerGroupClientV213):"},{"line_number":92,"context_line":"    \"\"\"Server groups v2.64 functional tests.\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    COMPUTE_API_VERSION \u003d \"2.64\""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_d79c92c0","line":91,"updated":"2018-07-18 13:19:19.000000000","message":"Why don\u0027t we override test_create_server_group and create an anti-affinity group with max_server_per_host and then we can assert that\u0027s in the CLI output.","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c95705d259f8a401eb544b82d95b4e4bc1472bf","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                self._get_column_value_from_single_row_table(sg, \"Rules\"))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class TestServerGroupClientV264(TestServerGroupClientV213):"},{"line_number":92,"context_line":"    \"\"\"Server groups v2.64 functional tests.\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    COMPUTE_API_VERSION \u003d \"2.64\""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_7a4fa368","line":91,"in_reply_to":"5f7c97a3_d79c92c0","updated":"2018-07-18 14:06:27.000000000","message":"Done","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"}],"novaclient/tests/unit/v2/fakes.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":2241,"context_line":"                 self.get_os_server_groups()[2][\u0027server_groups\u0027][0]}"},{"line_number":2242,"context_line":"        else:"},{"line_number":2243,"context_line":"            r \u003d {\"members\": [], \"id\": \"2cbd51f4-fafe-4cdb-801b-cf913a6f288b\","},{"line_number":2244,"context_line":"                 \u0027server_group\u0027: {\u0027name\u0027: \u0027ig1\u0027, \u0027policy\u0027: {"},{"line_number":2245,"context_line":"                     \u0027name\u0027: \u0027anti-affinity\u0027,"},{"line_number":2246,"context_line":"                     \u0027rules\u0027: {\u0027max_server_per_host\u0027: \u00273\u0027}}}}"},{"line_number":2247,"context_line":"        return (200, {}, r)"},{"line_number":2248,"context_line":""},{"line_number":2249,"context_line":"    def post_os_server_groups(self, body, **kw):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_28637847","line":2246,"range":{"start_line":2244,"start_character":49,"end_line":2246,"end_character":61},"updated":"2018-07-14 12:24:56.000000000","message":"Change.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":2241,"context_line":"                 self.get_os_server_groups()[2][\u0027server_groups\u0027][0]}"},{"line_number":2242,"context_line":"        else:"},{"line_number":2243,"context_line":"            r \u003d {\"members\": [], \"id\": \"2cbd51f4-fafe-4cdb-801b-cf913a6f288b\","},{"line_number":2244,"context_line":"                 \u0027server_group\u0027: {\u0027name\u0027: \u0027ig1\u0027, \u0027policy\u0027: {"},{"line_number":2245,"context_line":"                     \u0027name\u0027: \u0027anti-affinity\u0027,"},{"line_number":2246,"context_line":"                     \u0027rules\u0027: {\u0027max_server_per_host\u0027: \u00273\u0027}}}}"},{"line_number":2247,"context_line":"        return (200, {}, r)"},{"line_number":2248,"context_line":""},{"line_number":2249,"context_line":"    def post_os_server_groups(self, body, **kw):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a8af637a","line":2246,"range":{"start_line":2244,"start_character":49,"end_line":2246,"end_character":61},"in_reply_to":"5f7c97a3_28637847","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"}],"novaclient/tests/unit/v2/test_server_groups.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        super(ServerGroupsTestV264, self).setUp()"},{"line_number":115,"context_line":"        self.cs.api_version \u003d api_versions.APIVersion(\"2.64\")"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_server_group(self):"},{"line_number":118,"context_line":"        name \u003d \u0027ig1\u0027"},{"line_number":119,"context_line":"        policy \u003d \u0027anti-affinity\u0027"},{"line_number":120,"context_line":"        server_group \u003d self.cs.server_groups.create(name, policy)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a860e835","line":117,"updated":"2018-07-14 12:24:56.000000000","message":"This looks the same as the test in the parent class, is there a reason we need to override it?","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c2124cdd429da30e578617cef0e340926ffedb93","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        super(ServerGroupsTestV264, self).setUp()"},{"line_number":115,"context_line":"        self.cs.api_version \u003d api_versions.APIVersion(\"2.64\")"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_server_group(self):"},{"line_number":118,"context_line":"        name \u003d \u0027ig1\u0027"},{"line_number":119,"context_line":"        policy \u003d \u0027anti-affinity\u0027"},{"line_number":120,"context_line":"        server_group \u003d self.cs.server_groups.create(name, policy)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a8ce8329","line":117,"in_reply_to":"5f7c97a3_08977748","updated":"2018-07-16 23:53:32.000000000","message":"Oh, no, we need create group use policy instead of policies.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        super(ServerGroupsTestV264, self).setUp()"},{"line_number":115,"context_line":"        self.cs.api_version \u003d api_versions.APIVersion(\"2.64\")"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_server_group(self):"},{"line_number":118,"context_line":"        name \u003d \u0027ig1\u0027"},{"line_number":119,"context_line":"        policy \u003d \u0027anti-affinity\u0027"},{"line_number":120,"context_line":"        server_group \u003d self.cs.server_groups.create(name, policy)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_08977748","line":117,"in_reply_to":"5f7c97a3_a860e835","updated":"2018-07-16 23:50:19.000000000","message":"yep, we can remove it only left the next one is okay.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"}],"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0832d7dc9a727e1179ab9107308d4de936729b46","unresolved":false,"context_lines":[{"line_number":3748,"context_line":"                                   \u0027rules\u0027: {\u0027max_server_per_host\u0027: \u00273\u0027}"},{"line_number":3749,"context_line":"                               }"},{"line_number":3750,"context_line":"                           }})"},{"line_number":3751,"context_line":""},{"line_number":3752,"context_line":"    def test_create_server_group_with_rules_pre_264(self):"},{"line_number":3753,"context_line":"        self.assertRaises(SystemExit, self.run_command,"},{"line_number":3754,"context_line":"                          \u0027server-group-create sg1 affinity anti-affinity \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_8db30ced","line":3751,"updated":"2018-06-27 23:18:42.000000000","message":"Multiple \u0027--rules\u0027 test case is missing.","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"50a40e527b5739d27cf250a294382162b2b82104","unresolved":false,"context_lines":[{"line_number":3748,"context_line":"                                   \u0027rules\u0027: {\u0027max_server_per_host\u0027: \u00273\u0027}"},{"line_number":3749,"context_line":"                               }"},{"line_number":3750,"context_line":"                           }})"},{"line_number":3751,"context_line":""},{"line_number":3752,"context_line":"    def test_create_server_group_with_rules_pre_264(self):"},{"line_number":3753,"context_line":"        self.assertRaises(SystemExit, self.run_command,"},{"line_number":3754,"context_line":"                          \u0027server-group-create sg1 affinity anti-affinity \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_53c932a8","line":3751,"in_reply_to":"5f7c97a3_8db30ced","updated":"2018-07-11 07:59:57.000000000","message":"Done, and now we only support single rule {\u0027max_server_per_host\u0027: \u00273\u0027} for anti-affinity, but I agree client side should be tested.","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"14c253ddb6f5acaf61dc51ac61fd1bd55df3bfa4","unresolved":false,"context_lines":[{"line_number":3766,"context_line":"            exceptions.CommandError, self.run_command,"},{"line_number":3767,"context_line":"            \u0027server-group-create sg1 anti-affinity \u0027"},{"line_number":3768,"context_line":"            \u0027--rules max_server_per_host\u003dfoo\u0027, api_version\u003d\u00272.64\u0027)"},{"line_number":3769,"context_line":"        self.assertIn(\"Invalid \u0027max_server_per_host\u0027 value: foo\", result)"},{"line_number":3770,"context_line":""},{"line_number":3771,"context_line":"    def test_create_server_group_with_rules_pre_264(self):"},{"line_number":3772,"context_line":"        self.assertRaises(SystemExit, self.run_command,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_e2e39339","line":3769,"range":{"start_line":3769,"start_character":66,"end_line":3769,"end_character":72},"updated":"2018-07-12 08:25:47.000000000","message":"six.text_type(result)","commit_id":"c4e1ab9808dbb18db7720e3bd93a3f59d307d961"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"801408457d10c224a16585e2fde9b968e92c2d56","unresolved":false,"context_lines":[{"line_number":3766,"context_line":"            exceptions.CommandError, self.run_command,"},{"line_number":3767,"context_line":"            \u0027server-group-create sg1 anti-affinity \u0027"},{"line_number":3768,"context_line":"            \u0027--rules max_server_per_host\u003dfoo\u0027, api_version\u003d\u00272.64\u0027)"},{"line_number":3769,"context_line":"        self.assertIn(\"Invalid \u0027max_server_per_host\u0027 value: foo\", result)"},{"line_number":3770,"context_line":""},{"line_number":3771,"context_line":"    def test_create_server_group_with_rules_pre_264(self):"},{"line_number":3772,"context_line":"        self.assertRaises(SystemExit, self.run_command,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_02632f1b","line":3769,"range":{"start_line":3769,"start_character":66,"end_line":3769,"end_character":72},"in_reply_to":"5f7c97a3_e2e39339","updated":"2018-07-12 08:41:58.000000000","message":"Done","commit_id":"c4e1ab9808dbb18db7720e3bd93a3f59d307d961"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"fb20031d5b92529726a1b09a974dfb7a6f3bffd7","unresolved":false,"context_lines":[{"line_number":3767,"context_line":""},{"line_number":3768,"context_line":"    def test_create_server_group_with_rules_pre_264(self):"},{"line_number":3769,"context_line":"        self.assertRaises(SystemExit, self.run_command,"},{"line_number":3770,"context_line":"                          \u0027server-group-create sg1 affinity anti-affinity \u0027"},{"line_number":3771,"context_line":"                          \u0027--rule max_server_per_host\u003d3\u0027, api_version\u003d\u00272.63\u0027)"},{"line_number":3772,"context_line":""},{"line_number":3773,"context_line":"    def test_create_server_group_with_multiple_policies(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_6e9f0e51","line":3770,"range":{"start_line":3770,"start_character":27,"end_line":3770,"end_character":73},"updated":"2018-07-17 07:08:08.000000000","message":"server-group-create sg1 anti-affinity\n(Remove extra \u0027affinity\u0027.)","commit_id":"3e523446400d56d1668cd26db4d233b4320b8d20"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"faffdccc2e17bc5315472a3e15fbf0503139d8bc","unresolved":false,"context_lines":[{"line_number":3767,"context_line":""},{"line_number":3768,"context_line":"    def test_create_server_group_with_rules_pre_264(self):"},{"line_number":3769,"context_line":"        self.assertRaises(SystemExit, self.run_command,"},{"line_number":3770,"context_line":"                          \u0027server-group-create sg1 affinity anti-affinity \u0027"},{"line_number":3771,"context_line":"                          \u0027--rule max_server_per_host\u003d3\u0027, api_version\u003d\u00272.63\u0027)"},{"line_number":3772,"context_line":""},{"line_number":3773,"context_line":"    def test_create_server_group_with_multiple_policies(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_916def9a","line":3770,"range":{"start_line":3770,"start_character":27,"end_line":3770,"end_character":73},"in_reply_to":"5f7c97a3_6e9f0e51","updated":"2018-07-17 07:40:56.000000000","message":"Done","commit_id":"3e523446400d56d1668cd26db4d233b4320b8d20"}],"novaclient/v2/server_groups.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :param name: The name of the server group."},{"line_number":105,"context_line":"        :param policy: Policy name to associate with the server group."},{"line_number":106,"context_line":"        :param rules: The rules of policy which is a dict, can be applied to"},{"line_number":107,"context_line":"            the policy, now only `max_server_per_host`` for ``anti-affinity``"},{"line_number":108,"context_line":"            policy would be supported."},{"line_number":109,"context_line":"        :rtype: list of :class:`ServerGroup`"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_685ad082","line":106,"range":{"start_line":106,"start_character":22,"end_line":106,"end_character":31},"updated":"2018-07-14 12:24:56.000000000","message":"Let\u0027s note this is optional somehow.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :param name: The name of the server group."},{"line_number":105,"context_line":"        :param policy: Policy name to associate with the server group."},{"line_number":106,"context_line":"        :param rules: The rules of policy which is a dict, can be applied to"},{"line_number":107,"context_line":"            the policy, now only `max_server_per_host`` for ``anti-affinity``"},{"line_number":108,"context_line":"            policy would be supported."},{"line_number":109,"context_line":"        :rtype: list of :class:`ServerGroup`"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_8820674d","line":106,"range":{"start_line":106,"start_character":22,"end_line":106,"end_character":31},"in_reply_to":"5f7c97a3_685ad082","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        :param name: The name of the server group."},{"line_number":105,"context_line":"        :param policy: Policy name to associate with the server group."},{"line_number":106,"context_line":"        :param rules: The rules of policy which is a dict, can be applied to"},{"line_number":107,"context_line":"            the policy, now only `max_server_per_host`` for ``anti-affinity``"},{"line_number":108,"context_line":"            policy would be supported."},{"line_number":109,"context_line":"        :rtype: list of :class:`ServerGroup`"},{"line_number":110,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_4857d45b","line":107,"range":{"start_line":107,"start_character":33,"end_line":107,"end_character":34},"updated":"2018-07-14 12:24:56.000000000","message":"``","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        :param name: The name of the server group."},{"line_number":105,"context_line":"        :param policy: Policy name to associate with the server group."},{"line_number":106,"context_line":"        :param rules: The rules of policy which is a dict, can be applied to"},{"line_number":107,"context_line":"            the policy, now only `max_server_per_host`` for ``anti-affinity``"},{"line_number":108,"context_line":"            policy would be supported."},{"line_number":109,"context_line":"        :rtype: list of :class:`ServerGroup`"},{"line_number":110,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a825235d","line":107,"range":{"start_line":107,"start_character":33,"end_line":107,"end_character":34},"in_reply_to":"5f7c97a3_4857d45b","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"fb20031d5b92529726a1b09a974dfb7a6f3bffd7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    rules[key] \u003d int(rules[key])"},{"line_number":119,"context_line":"            except ValueError:"},{"line_number":120,"context_line":"                msg \u003d _(\"Invalid \u0027%(key)s\u0027 value: %(value)s\")"},{"line_number":121,"context_line":"                raise exceptions.CommandError(msg % {"},{"line_number":122,"context_line":"                    \u0027key\u0027: key, \u0027value\u0027: rules[key]})"},{"line_number":123,"context_line":"            body[\u0027server_group\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":124,"context_line":"        return self._create(\u0027/os-server-groups\u0027, body, \u0027server_group\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_8ef38a9f","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":45},"updated":"2018-07-17 07:08:08.000000000","message":"IMO, another exception is better because this \u0027create\u0027 method is not always called from CLI.\nSo change it to another exception and handling it in novaclient/v2/shell.py.","commit_id":"3e523446400d56d1668cd26db4d233b4320b8d20"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"faffdccc2e17bc5315472a3e15fbf0503139d8bc","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    rules[key] \u003d int(rules[key])"},{"line_number":119,"context_line":"            except ValueError:"},{"line_number":120,"context_line":"                msg \u003d _(\"Invalid \u0027%(key)s\u0027 value: %(value)s\")"},{"line_number":121,"context_line":"                raise exceptions.CommandError(msg % {"},{"line_number":122,"context_line":"                    \u0027key\u0027: key, \u0027value\u0027: rules[key]})"},{"line_number":123,"context_line":"            body[\u0027server_group\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":124,"context_line":"        return self._create(\u0027/os-server-groups\u0027, body, \u0027server_group\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_91440f1b","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":45},"in_reply_to":"5f7c97a3_8ef38a9f","updated":"2018-07-17 07:40:56.000000000","message":"Not sure should we change this, because I see some same type exception is raised from server[1] and flavor[2] methods.\n\n[1] https://github.com/openstack/python-novaclient/blob/7f10707/novaclient/v2/servers.py#L742\n\n[2] https://github.com/openstack/python-novaclient/blob/7f10707/novaclient/v2/flavors.py#L206","commit_id":"3e523446400d56d1668cd26db4d233b4320b8d20"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5a21768b32e664942aeab20f13426650f67edc9d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    rules[key] \u003d int(rules[key])"},{"line_number":119,"context_line":"            except ValueError:"},{"line_number":120,"context_line":"                msg \u003d _(\"Invalid \u0027%(key)s\u0027 value: %(value)s\")"},{"line_number":121,"context_line":"                raise exceptions.CommandError(msg % {"},{"line_number":122,"context_line":"                    \u0027key\u0027: key, \u0027value\u0027: rules[key]})"},{"line_number":123,"context_line":"            body[\u0027server_group\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":124,"context_line":"        return self._create(\u0027/os-server-groups\u0027, body, \u0027server_group\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_f1d9c327","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":45},"in_reply_to":"5f7c97a3_91440f1b","updated":"2018-07-17 07:51:10.000000000","message":"IMO, they are not good examples.","commit_id":"3e523446400d56d1668cd26db4d233b4320b8d20"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"70afb42f84bb6b63c03bbf1465dc868735d448da","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    rules[key] \u003d int(rules[key])"},{"line_number":119,"context_line":"            except ValueError:"},{"line_number":120,"context_line":"                msg \u003d _(\"Invalid \u0027%(key)s\u0027 value: %(value)s\")"},{"line_number":121,"context_line":"                raise exceptions.CommandError(msg % {"},{"line_number":122,"context_line":"                    \u0027key\u0027: key, \u0027value\u0027: rules[key]})"},{"line_number":123,"context_line":"            body[\u0027server_group\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":124,"context_line":"        return self._create(\u0027/os-server-groups\u0027, body, \u0027server_group\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_fdf41bd2","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":45},"updated":"2018-07-18 03:32:41.000000000","message":"I\u0027m not sure that it is appropriate.\nI would like to know other cores\u0027 opinions.","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d0628da751e31e90766087dc71f5a7b5a29635","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    rules[key] \u003d int(rules[key])"},{"line_number":119,"context_line":"            except ValueError:"},{"line_number":120,"context_line":"                msg \u003d _(\"Invalid \u0027%(key)s\u0027 value: %(value)s\")"},{"line_number":121,"context_line":"                raise exceptions.CommandError(msg % {"},{"line_number":122,"context_line":"                    \u0027key\u0027: key, \u0027value\u0027: rules[key]})"},{"line_number":123,"context_line":"            body[\u0027server_group\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":124,"context_line":"        return self._create(\u0027/os-server-groups\u0027, body, \u0027server_group\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_b73316c4","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":45},"in_reply_to":"5f7c97a3_ddcfdf51","updated":"2018-07-18 13:19:19.000000000","message":"It looks like the servers python API raises CommandError in one case, and the Flavor.create python API binding raises several CommandErrors. If we wanted to not raise CommandError explicitly, we could add a new exception, something like:\n\nclass InvalidServerGroupPolicyRule(ClientException)\n\nit doesn\u0027t matter much to me either way.","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"36941957c23d56682835d1ef2a78f5ad25fe3753","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    rules[key] \u003d int(rules[key])"},{"line_number":119,"context_line":"            except ValueError:"},{"line_number":120,"context_line":"                msg \u003d _(\"Invalid \u0027%(key)s\u0027 value: %(value)s\")"},{"line_number":121,"context_line":"                raise exceptions.CommandError(msg % {"},{"line_number":122,"context_line":"                    \u0027key\u0027: key, \u0027value\u0027: rules[key]})"},{"line_number":123,"context_line":"            body[\u0027server_group\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":124,"context_line":"        return self._create(\u0027/os-server-groups\u0027, body, \u0027server_group\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_ddcfdf51","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":45},"in_reply_to":"5f7c97a3_fdf41bd2","updated":"2018-07-18 03:47:22.000000000","message":"Sure, thanks for your review, we can change it after we get idea from others.","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"}],"novaclient/v2/shell.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0832d7dc9a727e1179ab9107308d4de936729b46","unresolved":false,"context_lines":[{"line_number":4535,"context_line":"        columns \u003d [\u0027Id\u0027, \u0027Name\u0027, \u0027Project Id\u0027, \u0027User Id\u0027,"},{"line_number":4536,"context_line":"                   \u0027Policy\u0027, \u0027Members\u0027]"},{"line_number":4537,"context_line":"    utils.print_list(server_group, columns)"},{"line_number":4538,"context_line":"       "},{"line_number":4539,"context_line":""},{"line_number":4540,"context_line":"@utils.arg("},{"line_number":4541,"context_line":"    \u0027--limit\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b29509e6","line":4538,"range":{"start_line":4538,"start_character":0,"end_line":4538,"end_character":7},"updated":"2018-06-27 23:18:42.000000000","message":"Unnecessary white spaces.","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"50a40e527b5739d27cf250a294382162b2b82104","unresolved":false,"context_lines":[{"line_number":4535,"context_line":"        columns \u003d [\u0027Id\u0027, \u0027Name\u0027, \u0027Project Id\u0027, \u0027User Id\u0027,"},{"line_number":4536,"context_line":"                   \u0027Policy\u0027, \u0027Members\u0027]"},{"line_number":4537,"context_line":"    utils.print_list(server_group, columns)"},{"line_number":4538,"context_line":"       "},{"line_number":4539,"context_line":""},{"line_number":4540,"context_line":"@utils.arg("},{"line_number":4541,"context_line":"    \u0027--limit\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_17f14f97","line":4538,"range":{"start_line":4538,"start_character":0,"end_line":4538,"end_character":7},"in_reply_to":"5f7c97a3_b29509e6","updated":"2018-07-11 07:59:57.000000000","message":"Done","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0832d7dc9a727e1179ab9107308d4de936729b46","unresolved":false,"context_lines":[{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"},{"line_number":4595,"context_line":"    help\u003d_(\u0027The rules of policy which is a dict, can be applied to\u0027"},{"line_number":4596,"context_line":"           \u0027the policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b21ae979","line":4595,"range":{"start_line":4595,"start_character":66,"end_line":4595,"end_character":67},"updated":"2018-06-27 23:18:42.000000000","message":"Add a white space.","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"50a40e527b5739d27cf250a294382162b2b82104","unresolved":false,"context_lines":[{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"},{"line_number":4595,"context_line":"    help\u003d_(\u0027The rules of policy which is a dict, can be applied to\u0027"},{"line_number":4596,"context_line":"           \u0027the policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b7edfbb9","line":4595,"range":{"start_line":4595,"start_character":66,"end_line":4595,"end_character":67},"in_reply_to":"5f7c97a3_b21ae979","updated":"2018-07-11 07:59:57.000000000","message":"Done","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":4588,"context_line":"    metavar\u003d\u0027\u003cpolicy\u003e\u0027,"},{"line_number":4589,"context_line":"    help\u003d_(\u0027Policy for the server group.\u0027))"},{"line_number":4590,"context_line":"@utils.arg("},{"line_number":4591,"context_line":"    \u0027--rules\u0027,"},{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_c84a04ac","line":4591,"range":{"start_line":4591,"start_character":7,"end_line":4591,"end_character":12},"updated":"2018-07-14 12:24:56.000000000","message":"Let\u0027s name this --rule since we append this to a list, so it looks weird to have multiple plural options.\n\nSo:\n\n@utils.arg(\n   \u0027--rule\u0027,\n   ...\n   dest\u003d\u0027rules\u0027,\n   action\u003d\u0027append\u0027,\n   ...)","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":4588,"context_line":"    metavar\u003d\u0027\u003cpolicy\u003e\u0027,"},{"line_number":4589,"context_line":"    help\u003d_(\u0027Policy for the server group.\u0027))"},{"line_number":4590,"context_line":"@utils.arg("},{"line_number":4591,"context_line":"    \u0027--rules\u0027,"},{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_e8d47b21","line":4591,"range":{"start_line":4591,"start_character":7,"end_line":4591,"end_character":12},"in_reply_to":"5f7c97a3_c84a04ac","updated":"2018-07-16 23:50:19.000000000","message":"Yeah, good point.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"},{"line_number":4595,"context_line":"    help\u003d_(\u0027The rules of policy which is a dict, can be applied to \u0027"},{"line_number":4596,"context_line":"           \u0027the policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a8c5480b","line":4595,"range":{"start_line":4595,"start_character":32,"end_line":4595,"end_character":47},"updated":"2018-07-14 12:24:56.000000000","message":"I\u0027d remove this - it\u0027s not specified as a dict on the command line.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"},{"line_number":4595,"context_line":"    help\u003d_(\u0027The rules of policy which is a dict, can be applied to \u0027"},{"line_number":4596,"context_line":"           \u0027the policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_c8cf3f89","line":4595,"range":{"start_line":4595,"start_character":32,"end_line":4595,"end_character":47},"in_reply_to":"5f7c97a3_a8c5480b","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"},{"line_number":4595,"context_line":"    help\u003d_(\u0027The rules of policy which is a dict, can be applied to \u0027"},{"line_number":4596,"context_line":"           \u0027the policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""},{"line_number":4599,"context_line":"    rules \u003d _meta_parsing(args.rules)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_48ccb433","line":4596,"range":{"start_line":4595,"start_character":49,"end_line":4596,"end_character":24},"updated":"2018-07-14 12:24:56.000000000","message":"This is a bit redundant. Maybe we can just copy what\u0027s in the API reference:\n\nhttps://review.openstack.org/#/c/567534/36/api-ref/source/parameters.yaml@5141\n\nMinus the \"which is a dict\" part.","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"318dbb44f714809b7fb80714677cd7b1faf621db","unresolved":false,"context_lines":[{"line_number":4592,"context_line":"    metavar\u003d\"\u003ckey\u003dvalue\u003e\","},{"line_number":4593,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4594,"context_line":"    default\u003d[],"},{"line_number":4595,"context_line":"    help\u003d_(\u0027The rules of policy which is a dict, can be applied to \u0027"},{"line_number":4596,"context_line":"           \u0027the policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""},{"line_number":4599,"context_line":"    rules \u003d _meta_parsing(args.rules)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_281113f9","line":4596,"range":{"start_line":4595,"start_character":49,"end_line":4596,"end_character":24},"in_reply_to":"5f7c97a3_48ccb433","updated":"2018-07-16 23:50:19.000000000","message":"Done","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d0628da751e31e90766087dc71f5a7b5a29635","unresolved":false,"context_lines":[{"line_number":2307,"context_line":"            # \u0027flavor\u0027 field name but just output the original name."},{"line_number":2308,"context_line":"            info[\u0027flavor\u0027] \u003d flavor[\u0027original_name\u0027]"},{"line_number":2309,"context_line":"        else:"},{"line_number":2310,"context_line":"            # Replace the \"flavor\" field with individual namespaced fields."},{"line_number":2311,"context_line":"            del info[\u0027flavor\u0027]"},{"line_number":2312,"context_line":"            for key in flavor.keys():"},{"line_number":2313,"context_line":"                info[\u0027flavor:\u0027 + key] \u003d flavor[key]"},{"line_number":2314,"context_line":"    else:"},{"line_number":2315,"context_line":"        # Prior to microversion 2.47 we just have the ID of the flavor so we"},{"line_number":2316,"context_line":"        # need to retrieve the flavor information (which may have changed"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_17bf6aca","line":2313,"range":{"start_line":2310,"start_character":12,"end_line":2313,"end_character":51},"updated":"2018-07-18 13:19:19.000000000","message":"This is how the instance.flavor gets namespaced, we could do something similar for server group rules if we did it like:\n\nrule:max_server_per_host\u003d3","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d0628da751e31e90766087dc71f5a7b5a29635","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"    info.pop(\u0027links\u0027, None)"},{"line_number":2350,"context_line":"    info.pop(\u0027addresses\u0027, None)"},{"line_number":2351,"context_line":""},{"line_number":2352,"context_line":"    utils.print_dict(info, wrap\u003dwrap)"},{"line_number":2353,"context_line":""},{"line_number":2354,"context_line":""},{"line_number":2355,"context_line":"@utils.arg("}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_176d2a66","line":2352,"range":{"start_line":2352,"start_character":4,"end_line":2352,"end_character":37},"updated":"2018-07-18 13:19:19.000000000","message":"But the problem is server show uses print_dict which puts the entries on the left side in rows, and for showing a server group we\u0027re using print_list which uses columns, so if we wanted to namespace the rules we\u0027d have to change the entire format of the table, which is a bigger change than we probably want to make now.","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d0628da751e31e90766087dc71f5a7b5a29635","unresolved":false,"context_lines":[{"line_number":4533,"context_line":"                   \u0027Policies\u0027, \u0027Members\u0027, \u0027Metadata\u0027]"},{"line_number":4534,"context_line":"    else:"},{"line_number":4535,"context_line":"        columns \u003d [\u0027Id\u0027, \u0027Name\u0027, \u0027Project Id\u0027, \u0027User Id\u0027,"},{"line_number":4536,"context_line":"                   \u0027Policy\u0027, \u0027Rules\u0027, \u0027Members\u0027]"},{"line_number":4537,"context_line":"    utils.print_list(server_group, columns)"},{"line_number":4538,"context_line":""},{"line_number":4539,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_d7d49221","line":4536,"range":{"start_line":4536,"start_character":30,"end_line":4536,"end_character":35},"updated":"2018-07-18 13:19:19.000000000","message":"This is going to just be a dict, right? I wonder if we should format that within the table output, like we do for the embedded instance.flavor for 2.49.","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0d0628da751e31e90766087dc71f5a7b5a29635","unresolved":false,"context_lines":[{"line_number":4593,"context_line":"    dest\u003d\u0027rules\u0027,"},{"line_number":4594,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4595,"context_line":"    default\u003d[],"},{"line_number":4596,"context_line":"    help\u003d_(\u0027The rules of policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""},{"line_number":4599,"context_line":"    rules \u003d _meta_parsing(args.rules)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_d72fb23b","line":4596,"updated":"2018-07-18 13:19:19.000000000","message":"This is a bit sparse, we could add (from the API reference):\n\nCurrently, only the ``max_server_per_host`` rule is supported for the\n    ``anti-affinity`` policy. The ``max_server_per_host`` rule allows\n    specifying how many members of the anti-affinity group can reside on the\n    same compute host. If not specified, only one member from the same\n    anti-affinity group can reside on a given host.\n\n--\n\nOr just leave that for the help docs.","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c95705d259f8a401eb544b82d95b4e4bc1472bf","unresolved":false,"context_lines":[{"line_number":4593,"context_line":"    dest\u003d\u0027rules\u0027,"},{"line_number":4594,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4595,"context_line":"    default\u003d[],"},{"line_number":4596,"context_line":"    help\u003d_(\u0027The rules of policy.\u0027))"},{"line_number":4597,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4598,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""},{"line_number":4599,"context_line":"    rules \u003d _meta_parsing(args.rules)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_1a2b0f7c","line":4596,"in_reply_to":"5f7c97a3_d72fb23b","updated":"2018-07-18 14:06:27.000000000","message":"Done","commit_id":"559c0a0b5a0e008d0aa6da5a910a1030f84f46a5"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"dad7c77800f419e9d4030e393dde10612065369c","unresolved":false,"context_lines":[{"line_number":4594,"context_line":"    action\u003d\u0027append\u0027,"},{"line_number":4595,"context_line":"    default\u003d[],"},{"line_number":4596,"context_line":"    help\u003d_(\u0027A rule for the policy. Currently, only the \u0027"},{"line_number":4597,"context_line":"           \u0027``max_server_per_host`` rule is supported for the \u0027"},{"line_number":4598,"context_line":"           \u0027``anti-affinity`` policy.\u0027))"},{"line_number":4599,"context_line":"def do_server_group_create(cs, args):"},{"line_number":4600,"context_line":"    \"\"\"Create a new server group with the specified details.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_45d51b19","line":4597,"range":{"start_line":4597,"start_character":12,"end_line":4597,"end_character":14},"updated":"2018-07-19 00:05:58.000000000","message":"nit: It is not reStructuredText. So \u0027 or \" had better be used.","commit_id":"6c398058a6234e3a59822bbcd9ca5d3d05107e96"}],"releasenotes/notes/microversion-v2_64-66366829ec65bea4.yaml.yaml":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0832d7dc9a727e1179ab9107308d4de936729b46","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added support for `microversion 2.64`_, which includes the following"},{"line_number":5,"context_line":"    changes:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    - The ``--rules`` options is added to the ``nova server-group-create``"},{"line_number":8,"context_line":"    CLI that enables user to create server group with specific policy"},{"line_number":9,"context_line":"    rules."},{"line_number":10,"context_line":"    - Remove ``metadata`` column in the output of ``nova server-group-create``,"},{"line_number":11,"context_line":"    ``nova server-group-get``, ``nova server-group-list``."},{"line_number":12,"context_line":"    - Remove ``policies`` column in the output of ``nova server-group-create``,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5f7c97a3_d28d25d5","line":9,"range":{"start_line":7,"start_character":0,"end_line":9,"end_character":10},"updated":"2018-06-27 23:18:42.000000000","message":"Indent.\n\n    - The ``--rules`` options is added to the ``nova server-group-create``\n      CLI that enables user to create server group with specific policy\n      rules.","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"50a40e527b5739d27cf250a294382162b2b82104","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added support for `microversion 2.64`_, which includes the following"},{"line_number":5,"context_line":"    changes:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    - The ``--rules`` options is added to the ``nova server-group-create``"},{"line_number":8,"context_line":"    CLI that enables user to create server group with specific policy"},{"line_number":9,"context_line":"    rules."},{"line_number":10,"context_line":"    - Remove ``metadata`` column in the output of ``nova server-group-create``,"},{"line_number":11,"context_line":"    ``nova server-group-get``, ``nova server-group-list``."},{"line_number":12,"context_line":"    - Remove ``policies`` column in the output of ``nova server-group-create``,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5f7c97a3_d7eaf79e","line":9,"range":{"start_line":7,"start_character":0,"end_line":9,"end_character":10},"in_reply_to":"5f7c97a3_d28d25d5","updated":"2018-07-11 07:59:57.000000000","message":"Done","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0832d7dc9a727e1179ab9107308d4de936729b46","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    - The ``--rules`` options is added to the ``nova server-group-create``"},{"line_number":8,"context_line":"    CLI that enables user to create server group with specific policy"},{"line_number":9,"context_line":"    rules."},{"line_number":10,"context_line":"    - Remove ``metadata`` column in the output of ``nova server-group-create``,"},{"line_number":11,"context_line":"    ``nova server-group-get``, ``nova server-group-list``."},{"line_number":12,"context_line":"    - Remove ``policies`` column in the output of ``nova server-group-create``,"},{"line_number":13,"context_line":"    ``nova server-group-get``, ``nova server-group-list``, and added a new"},{"line_number":14,"context_line":"    format ``policy`` column which is a dictionary representaion of a server"},{"line_number":15,"context_line":"    group policy containing the ``name``, ``rules`` fields."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    .. _microversion 2.64: https://docs.openstack.org/nova/latest/api_microversion_history.html#id58"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5f7c97a3_92b9ed7d","line":15,"range":{"start_line":10,"start_character":0,"end_line":15,"end_character":59},"updated":"2018-06-27 23:18:42.000000000","message":"ditto","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"50a40e527b5739d27cf250a294382162b2b82104","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    - The ``--rules`` options is added to the ``nova server-group-create``"},{"line_number":8,"context_line":"    CLI that enables user to create server group with specific policy"},{"line_number":9,"context_line":"    rules."},{"line_number":10,"context_line":"    - Remove ``metadata`` column in the output of ``nova server-group-create``,"},{"line_number":11,"context_line":"    ``nova server-group-get``, ``nova server-group-list``."},{"line_number":12,"context_line":"    - Remove ``policies`` column in the output of ``nova server-group-create``,"},{"line_number":13,"context_line":"    ``nova server-group-get``, ``nova server-group-list``, and added a new"},{"line_number":14,"context_line":"    format ``policy`` column which is a dictionary representaion of a server"},{"line_number":15,"context_line":"    group policy containing the ``name``, ``rules`` fields."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    .. _microversion 2.64: https://docs.openstack.org/nova/latest/api_microversion_history.html#id58"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5f7c97a3_77252316","line":15,"range":{"start_line":10,"start_character":0,"end_line":15,"end_character":59},"in_reply_to":"5f7c97a3_92b9ed7d","updated":"2018-07-11 07:59:57.000000000","message":"Done","commit_id":"2d23dafd69ada10b9ea077ce5ff192a31be80e4d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added support for `microversion 2.64`_, which includes the following"},{"line_number":5,"context_line":"    changes:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"      * The ``--rules`` options is added to the ``nova server-group-create``"},{"line_number":8,"context_line":"        CLI that enables user to create server group with specific policy"},{"line_number":9,"context_line":"        rules."},{"line_number":10,"context_line":"      * Remove ``metadata`` column in the output of ``nova server-group-create``,"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_28d138cb","line":7,"range":{"start_line":7,"start_character":16,"end_line":7,"end_character":21},"updated":"2018-07-14 12:24:56.000000000","message":"rule","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"30954a28c3662fadf91137ceba74d37973a0e329","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        ``nova server-group-get``, ``nova server-group-list``."},{"line_number":12,"context_line":"      * Remove ``policies`` column in the output of ``nova server-group-create``,"},{"line_number":13,"context_line":"        ``nova server-group-get``, ``nova server-group-list``, and added a new"},{"line_number":14,"context_line":"        format ``policy`` column which is a dictionary representaion of a server"},{"line_number":15,"context_line":"        group policy containing the ``name``, ``rules`` fields."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    .. _microversion 2.64: https://docs.openstack.org/nova/latest/api_microversion_history.html#id58"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_c8df64d5","line":15,"range":{"start_line":14,"start_character":33,"end_line":15,"end_character":63},"updated":"2018-07-14 12:24:56.000000000","message":"change","commit_id":"94e2daa98e2ca9d55f8b36a42d323c256401dc71"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"112c211a5ef0f7048748452bf662ed4b8b523f6d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added support for `microversion 2.64`_, which includes the following"},{"line_number":5,"context_line":"    changes:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"      * The ``--rule`` options is added to the ``nova server-group-create``"},{"line_number":8,"context_line":"        CLI that enables user to create server group with specific policy"},{"line_number":9,"context_line":"        rules."},{"line_number":10,"context_line":"      * Remove ``metadata`` column in the output of ``nova server-group-create``,"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"5f7c97a3_7d979deb","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":6},"updated":"2018-07-18 14:28:38.000000000","message":"This is intended too far:\n\nhttp://logs.openstack.org/61/578261/9/check/build-openstack-releasenotes/00008b3/html/unreleased.html","commit_id":"c45efc386070522be9ce0263534a9967dd39db45"}]}
