)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"``/os-server-groups`` API and GET"},{"line_number":12,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Add new format ``policy`` filed, which is a dictionary"},{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5f7c97a3_75d57f1a","line":14,"range":{"start_line":14,"start_character":28,"end_line":14,"end_character":33},"updated":"2018-07-05 17:19:38.000000000","message":"field","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":11,"context_line":"``/os-server-groups`` API and GET"},{"line_number":12,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Add new format ``policy`` filed, which is a dictionary"},{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5f7c97a3_ba1bc47d","line":14,"range":{"start_line":14,"start_character":28,"end_line":14,"end_character":33},"in_reply_to":"5f7c97a3_75d57f1a","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Part of blueprint: complex-anti-affinity-policies"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I6911e97bd7f8df92511e90518dba21c127e106a5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5f7c97a3_f5e0affa","line":18,"updated":"2018-07-05 17:19:38.000000000","message":"Should also mention that the POST server group create schema changed.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Part of blueprint: complex-anti-affinity-policies"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I6911e97bd7f8df92511e90518dba21c127e106a5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5f7c97a3_7a11ac5b","line":18,"in_reply_to":"5f7c97a3_f5e0affa","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"``/os-server-groups`` API and GET"},{"line_number":12,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Add new format ``policy`` field, which is a dictionary"},{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."},{"line_number":18,"context_line":"* Change the POST server group create schema."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_3b2696cd","line":16,"range":{"start_line":14,"start_character":0,"end_line":16,"end_character":20},"updated":"2018-07-12 11:32:36.000000000","message":"This is not true any more as the structure is flatted out","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Add new format ``policy`` field, which is a dictionary"},{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."},{"line_number":18,"context_line":"* Change the POST server group create schema."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_3616adf4","line":16,"range":{"start_line":16,"start_character":2,"end_line":16,"end_character":6},"updated":"2018-07-12 11:10:16.000000000","message":"policy","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Add new format ``policy`` field, which is a dictionary"},{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."},{"line_number":18,"context_line":"* Change the POST server group create schema."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_516573ae","line":16,"range":{"start_line":16,"start_character":2,"end_line":16,"end_character":6},"in_reply_to":"5f7c97a3_3616adf4","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":11,"context_line":"``/os-server-groups`` API and GET"},{"line_number":12,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"* Add new format ``policy`` field, which is a dictionary"},{"line_number":15,"context_line":"representation of a server group policy containing the fields"},{"line_number":16,"context_line":"``name``, ``rules``."},{"line_number":17,"context_line":"* Remove ``policies`` and ``metadata`` fields."},{"line_number":18,"context_line":"* Change the POST server group create schema."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_f1ffdfae","line":16,"range":{"start_line":14,"start_character":0,"end_line":16,"end_character":20},"in_reply_to":"5f7c97a3_3b2696cd","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"}],"api-ref/source/os-server-groups.inc":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"**Example List Server Groups: JSON response**"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-list-resp.json"},{"line_number":47,"context_line":"   :language: javascript"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Create Server Group"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_fa800649","line":46,"range":{"start_line":46,"start_character":20,"end_line":46,"end_character":87},"updated":"2018-06-06 07:50:19.000000000","message":"should update this to the latest version","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"**Example List Server Groups: JSON response**"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-list-resp.json"},{"line_number":47,"context_line":"   :language: javascript"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Create Server Group"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_50e2dfd6","line":46,"range":{"start_line":46,"start_character":20,"end_line":46,"end_character":87},"in_reply_to":"5f7c97a3_fa800649","updated":"2018-06-11 11:39:36.000000000","message":"Done","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-post-req.json"},{"line_number":72,"context_line":"   :language: javascript"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Response"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_9a95528b","line":71,"range":{"start_line":71,"start_character":24,"end_line":71,"end_character":86},"updated":"2018-06-06 07:50:19.000000000","message":"ditto","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-post-req.json"},{"line_number":72,"context_line":"   :language: javascript"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Response"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_f0e20bd4","line":71,"range":{"start_line":71,"start_character":24,"end_line":71,"end_character":86},"in_reply_to":"5f7c97a3_9a95528b","updated":"2018-06-11 11:39:36.000000000","message":"Done","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"**Example Create Server Group: JSON response**"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-post-resp.json"},{"line_number":90,"context_line":"   :language: javascript"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Show Server Group Details"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_5a8fba74","line":89,"range":{"start_line":89,"start_character":24,"end_line":89,"end_character":87},"updated":"2018-06-06 07:50:19.000000000","message":"ditto","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"**Example Create Server Group: JSON response**"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-post-resp.json"},{"line_number":90,"context_line":"   :language: javascript"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Show Server Group Details"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_10e8e7b0","line":89,"range":{"start_line":89,"start_character":24,"end_line":89,"end_character":87},"in_reply_to":"5f7c97a3_5a8fba74","updated":"2018-06-11 11:39:36.000000000","message":"Done","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"**Example Show Server Group Details: JSON response**"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-get-resp.json"},{"line_number":126,"context_line":"   :language: javascript"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Delete Server Group"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_1ae70249","line":125,"range":{"start_line":125,"start_character":25,"end_line":125,"end_character":86},"updated":"2018-06-06 07:50:19.000000000","message":"ditto","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"**Example Show Server Group Details: JSON response**"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":".. literalinclude:: ../../doc/api_samples/os-server-groups/server-groups-get-resp.json"},{"line_number":126,"context_line":"   :language: javascript"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Delete Server Group"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_d0cd8f5d","line":125,"range":{"start_line":125,"start_character":25,"end_line":125,"end_character":86},"in_reply_to":"5f7c97a3_1ae70249","updated":"2018-06-11 11:39:36.000000000","message":"Done","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab4a8dbdb6c7dd6752bd1a188f50ef8109ffa3e1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  - server_groups: server_groups_list"},{"line_number":37,"context_line":"  - id: server_group_id_body"},{"line_number":38,"context_line":"  - name: name_server_group"},{"line_number":39,"context_line":"  - policy: policy"},{"line_number":40,"context_line":"  - members: members"},{"line_number":41,"context_line":"  - project_id: project_id_server_group"},{"line_number":42,"context_line":"  - user_id: user_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_8e786f7e","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":18},"updated":"2018-06-21 02:22:05.000000000","message":"\u0027policies\u0027 should not be removed because policies is valid until microversion 2.63.\nIt should be as follows:\n\n  - name: name_server_group\n  - policies: policies\n  - policy: policy\n  - members: members","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a687b1113137392d6cd3386cbc919c48a43ce56f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  - server_groups: server_groups_list"},{"line_number":37,"context_line":"  - id: server_group_id_body"},{"line_number":38,"context_line":"  - name: name_server_group"},{"line_number":39,"context_line":"  - policy: policy"},{"line_number":40,"context_line":"  - members: members"},{"line_number":41,"context_line":"  - project_id: project_id_server_group"},{"line_number":42,"context_line":"  - user_id: user_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_7a902d4f","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":18},"in_reply_to":"5f7c97a3_8e786f7e","updated":"2018-06-21 07:19:32.000000000","message":"Done","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab4a8dbdb6c7dd6752bd1a188f50ef8109ffa3e1","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  - server_group: server_group"},{"line_number":66,"context_line":"  - name: name_server_group"},{"line_number":67,"context_line":"  - policy: policy"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_ae7d2b6e","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":18},"updated":"2018-06-21 02:22:05.000000000","message":"ditto","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a687b1113137392d6cd3386cbc919c48a43ce56f","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"  - server_group: server_group"},{"line_number":66,"context_line":"  - name: name_server_group"},{"line_number":67,"context_line":"  - policy: policy"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_3a96354b","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":18},"in_reply_to":"5f7c97a3_ae7d2b6e","updated":"2018-06-21 07:19:32.000000000","message":"Done","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab4a8dbdb6c7dd6752bd1a188f50ef8109ffa3e1","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  - server_group: server_group"},{"line_number":80,"context_line":"  - id: server_group_id_body"},{"line_number":81,"context_line":"  - name: name_server_group"},{"line_number":82,"context_line":"  - policy: policy"},{"line_number":83,"context_line":"  - members: members"},{"line_number":84,"context_line":"  - project_id: project_id_server_group"},{"line_number":85,"context_line":"  - user_id: user_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_4e96d796","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":18},"updated":"2018-06-21 02:22:05.000000000","message":"ditto","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a687b1113137392d6cd3386cbc919c48a43ce56f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  - server_group: server_group"},{"line_number":80,"context_line":"  - id: server_group_id_body"},{"line_number":81,"context_line":"  - name: name_server_group"},{"line_number":82,"context_line":"  - policy: policy"},{"line_number":83,"context_line":"  - members: members"},{"line_number":84,"context_line":"  - project_id: project_id_server_group"},{"line_number":85,"context_line":"  - user_id: user_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_da886123","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":18},"in_reply_to":"5f7c97a3_4e96d796","updated":"2018-06-21 07:19:32.000000000","message":"Done","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab4a8dbdb6c7dd6752bd1a188f50ef8109ffa3e1","unresolved":false,"context_lines":[{"line_number":115,"context_line":"  - server_group: server_group"},{"line_number":116,"context_line":"  - id: server_group_id_body"},{"line_number":117,"context_line":"  - name: name_server_group"},{"line_number":118,"context_line":"  - policy: policy"},{"line_number":119,"context_line":"  - members: members"},{"line_number":120,"context_line":"  - project_id: project_id_server_group"},{"line_number":121,"context_line":"  - user_id: user_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_2e891b6e","line":118,"range":{"start_line":118,"start_character":4,"end_line":118,"end_character":18},"updated":"2018-06-21 02:22:05.000000000","message":"ditto","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a687b1113137392d6cd3386cbc919c48a43ce56f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"  - server_group: server_group"},{"line_number":116,"context_line":"  - id: server_group_id_body"},{"line_number":117,"context_line":"  - name: name_server_group"},{"line_number":118,"context_line":"  - policy: policy"},{"line_number":119,"context_line":"  - members: members"},{"line_number":120,"context_line":"  - project_id: project_id_server_group"},{"line_number":121,"context_line":"  - user_id: user_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":13,"id":"5f7c97a3_9a7e6919","line":118,"range":{"start_line":118,"start_character":4,"end_line":118,"end_character":18},"in_reply_to":"5f7c97a3_2e891b6e","updated":"2018-06-21 07:19:32.000000000","message":"Done","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"51f7874a8f881558fd07f8d2972c5d876ea999e2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"  - name: name_server_group"},{"line_number":39,"context_line":"  - policies: policies"},{"line_number":40,"context_line":"  - members: members"},{"line_number":41,"context_line":"  - metadata: metadata_object "},{"line_number":42,"context_line":"  - project_id: project_id_server_group"},{"line_number":43,"context_line":"  - user_id: user_id_server_group"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":19,"id":"5f7c97a3_7e24b30e","side":"PARENT","line":41,"range":{"start_line":41,"start_character":2,"end_line":41,"end_character":30},"updated":"2018-07-03 12:09:29.000000000","message":"not sure about this one, should we also make a max version about this? I know this was always empty, but maybe it is the correct way to do it?","commit_id":"06661762e31c3464096b99b435669daaf33c9b4a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  - id: server_group_id_body"},{"line_number":38,"context_line":"  - name: name_server_group"},{"line_number":39,"context_line":"  - policies: policies"},{"line_number":40,"context_line":"  - policy: policy"},{"line_number":41,"context_line":"  - members: members"},{"line_number":42,"context_line":"  - metadata: metadata_server_group_max_2_63"},{"line_number":43,"context_line":"  - project_id: project_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"5f7c97a3_15af6b9d","line":40,"updated":"2018-07-05 17:19:38.000000000","message":"This goes at the end since it\u0027s new:\n\nhttps://wiki.openstack.org/wiki/NovaAPIRef#Parameter_Verification","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  - id: server_group_id_body"},{"line_number":38,"context_line":"  - name: name_server_group"},{"line_number":39,"context_line":"  - policies: policies"},{"line_number":40,"context_line":"  - policy: policy"},{"line_number":41,"context_line":"  - members: members"},{"line_number":42,"context_line":"  - metadata: metadata_server_group_max_2_63"},{"line_number":43,"context_line":"  - project_id: project_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"5f7c97a3_9dfda209","line":40,"in_reply_to":"5f7c97a3_15af6b9d","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"  - id: server_group_id_body"},{"line_number":84,"context_line":"  - name: name_server_group"},{"line_number":85,"context_line":"  - policies: policies"},{"line_number":86,"context_line":"  - policy: policy"},{"line_number":87,"context_line":"  - members: members"},{"line_number":88,"context_line":"  - metadata: metadata_server_group_max_2_63"},{"line_number":89,"context_line":"  - project_id: project_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"5f7c97a3_559e4369","line":86,"updated":"2018-07-05 17:19:38.000000000","message":"same as above about order","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":83,"context_line":"  - id: server_group_id_body"},{"line_number":84,"context_line":"  - name: name_server_group"},{"line_number":85,"context_line":"  - policies: policies"},{"line_number":86,"context_line":"  - policy: policy"},{"line_number":87,"context_line":"  - members: members"},{"line_number":88,"context_line":"  - metadata: metadata_server_group_max_2_63"},{"line_number":89,"context_line":"  - project_id: project_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"5f7c97a3_bd009e01","line":86,"in_reply_to":"5f7c97a3_559e4369","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"  - id: server_group_id_body"},{"line_number":122,"context_line":"  - name: name_server_group"},{"line_number":123,"context_line":"  - policies: policies"},{"line_number":124,"context_line":"  - policy: policy"},{"line_number":125,"context_line":"  - members: members"},{"line_number":126,"context_line":"  - metadata: metadata_server_group_max_2_63"},{"line_number":127,"context_line":"  - project_id: project_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"5f7c97a3_f58e6f30","line":124,"updated":"2018-07-05 17:19:38.000000000","message":"same","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":121,"context_line":"  - id: server_group_id_body"},{"line_number":122,"context_line":"  - name: name_server_group"},{"line_number":123,"context_line":"  - policies: policies"},{"line_number":124,"context_line":"  - policy: policy"},{"line_number":125,"context_line":"  - members: members"},{"line_number":126,"context_line":"  - metadata: metadata_server_group_max_2_63"},{"line_number":127,"context_line":"  - project_id: project_id_server_group"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"5f7c97a3_5d038a0c","line":124,"in_reply_to":"5f7c97a3_f58e6f30","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"  - metadata: metadata_server_group_max_2_63"},{"line_number":42,"context_line":"  - project_id: project_id_server_group"},{"line_number":43,"context_line":"  - user_id: user_id_server_group"},{"line_number":44,"context_line":"  - policy_name: policy_name"},{"line_number":45,"context_line":"  - policy_rules: policy_rules"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"**Example List Server Groups: JSON response**"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_de1214fe","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":30},"updated":"2018-07-11 05:37:01.000000000","message":"+1 on naming them as policy_*.\n\nonce we all agree on these we can update spec accordingly to reflect these changes.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  - server_group: server_group"},{"line_number":69,"context_line":"  - name: name_server_group"},{"line_number":70,"context_line":"  - policies: policies"},{"line_number":71,"context_line":"  - policy: policy"},{"line_number":72,"context_line":"  - policy.name: policy_name"},{"line_number":73,"context_line":"  - policy.rules: policy_rules"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_fee030fc","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":30},"updated":"2018-07-11 05:37:01.000000000","message":"you want these in nested dict? i think we should make them also as flat like response\n\n  - server_group: server_group\n  - name: name_server_group\n  - policies: policies\n  - policy_name: policy_name\n  - policy_rules: policy_rules_(request/optional)","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"52b43f89dd2cb7ad99bbc3f5aff33954a1c69043","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  - server_group: server_group"},{"line_number":69,"context_line":"  - name: name_server_group"},{"line_number":70,"context_line":"  - policies: policies"},{"line_number":71,"context_line":"  - policy: policy"},{"line_number":72,"context_line":"  - policy.name: policy_name"},{"line_number":73,"context_line":"  - policy.rules: policy_rules"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_9ca6cd0d","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":30},"in_reply_to":"5f7c97a3_4c05f114","updated":"2018-07-12 00:46:21.000000000","message":"ok, \"group and policy are 1:1\" is good point and it makes that rules are really for policy applied to that group and nothing else.\n\nI am ok for both.\nFor me\n -\"policy_name \u0026 policy_rules\" are better\n - \"policy \u0026 rules\" are good (not bad).\n\nSo if changing the name on object and notification not worth and large at this time i am ok with \u0027flat1\u0027 option in   http://paste.openstack.org/show/725526/","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a832b01fe814d554b391e1ca5f4f2451d34fc40","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  - server_group: server_group"},{"line_number":69,"context_line":"  - name: name_server_group"},{"line_number":70,"context_line":"  - policies: policies"},{"line_number":71,"context_line":"  - policy: policy"},{"line_number":72,"context_line":"  - policy.name: policy_name"},{"line_number":73,"context_line":"  - policy.rules: policy_rules"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_e9de2fda","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":30},"in_reply_to":"5f7c97a3_94b79dd8","updated":"2018-07-11 13:34:12.000000000","message":"Can someone summarize the discussion from the meeting or link to it here? We need to have consistent naming with the versioned notification payload, and internal object modeling, and request/response format, and I don\u0027t see why we can\u0027t make that flat and just leave the field names as \"policy\" and \"rules\". As mentioned here:\n\nhttps://review.openstack.org/#/c/563401/28/nova/notifications/objects/server_group.py@41\n\nGroup and policy are 1:1 and because of that the rules apply to the policy on the group, so I don\u0027t see the need to name then \u0027policy_rules\u0027 really. I mean, it would be fine, but it\u0027s not a big deal at this point IMO, and if we did name them policy_rules I would have wanted that to be the name in the object too, which right now is just _rules.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e70501434b257fd14972cdd093d67f707512adc1","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  - server_group: server_group"},{"line_number":69,"context_line":"  - name: name_server_group"},{"line_number":70,"context_line":"  - policies: policies"},{"line_number":71,"context_line":"  - policy: policy"},{"line_number":72,"context_line":"  - policy.name: policy_name"},{"line_number":73,"context_line":"  - policy.rules: policy_rules"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_4c05f114","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":30},"in_reply_to":"5f7c97a3_cc27c1b5","updated":"2018-07-11 14:19:52.000000000","message":"+1 for flat in the request/response. The \u0027flat 1\u0027 in http://paste.openstack.org/show/725526/ looks good to me","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"52b43f89dd2cb7ad99bbc3f5aff33954a1c69043","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  - server_group: server_group"},{"line_number":69,"context_line":"  - name: name_server_group"},{"line_number":70,"context_line":"  - policies: policies"},{"line_number":71,"context_line":"  - policy: policy"},{"line_number":72,"context_line":"  - policy.name: policy_name"},{"line_number":73,"context_line":"  - policy.rules: policy_rules"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_3ce1b92c","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":30},"in_reply_to":"5f7c97a3_e9de2fda","updated":"2018-07-12 00:46:21.000000000","message":"In API office hour, we discussed on 2 points-\n1. whether request also need to have flat format like response. IMO we need to have flat in both request and response. Yikun need more opinion on that. \n\n2. naming fields to policy_* as we are moving these new fields in flat format. I like to have policy_* for clear understanding of attributes by their name. This is not concluded and alex will give feedback on patch.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95008f8f6c81b29d3e75754d1ca3c281cb53284c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  - server_group: server_group"},{"line_number":69,"context_line":"  - name: name_server_group"},{"line_number":70,"context_line":"  - policies: policies"},{"line_number":71,"context_line":"  - policy: policy"},{"line_number":72,"context_line":"  - policy.name: policy_name"},{"line_number":73,"context_line":"  - policy.rules: policy_rules"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_cc27c1b5","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":30},"in_reply_to":"5f7c97a3_e9de2fda","updated":"2018-07-11 13:42:17.000000000","message":"This was the discussion during the nova api office hours:\n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2018-07-11.log.html#t2018-07-11T06:29:48","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  - server_group: server_group"},{"line_number":69,"context_line":"  - name: name_server_group"},{"line_number":70,"context_line":"  - policies: policies"},{"line_number":71,"context_line":"  - policy: policy"},{"line_number":72,"context_line":"  - policy.name: policy_name"},{"line_number":73,"context_line":"  - policy.rules: policy_rules"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"**Example Create Server Group: JSON request**"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":29,"id":"5f7c97a3_94b79dd8","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":30},"in_reply_to":"5f7c97a3_fee030fc","updated":"2018-07-11 07:37:27.000000000","message":"As I mentioned in API meeting, I\u0027m not sure should we also change the request format, let\u0027s see other idea.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"15cd84f47c595cc4cfedb43d6970f43e5d6b2936","unresolved":false,"context_lines":[{"line_number":5060,"context_line":"  description: |"},{"line_number":5061,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5062,"context_line":"    ``name``, ``rules``."},{"line_number":5063,"context_line":"    The ``name`` which is a string represents the name of policy, current valid"},{"line_number":5064,"context_line":"    policy ``name`` are:"},{"line_number":5065,"context_line":""},{"line_number":5066,"context_line":"    - ``anti-affinity`` - servers in this group must be scheduled to"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5f7c97a3_b2a5724a","line":5063,"updated":"2018-06-22 10:27:57.000000000","message":"missing \u0027field\u0027?","commit_id":"0d93ba23bc38be7cfa1724137d1b57ca5c2f3cb2"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"83aba32e2d70e3e103e7967478bc3f2423bfdaa3","unresolved":false,"context_lines":[{"line_number":5060,"context_line":"  description: |"},{"line_number":5061,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5062,"context_line":"    ``name``, ``rules``."},{"line_number":5063,"context_line":"    The ``name`` which is a string represents the name of policy, current valid"},{"line_number":5064,"context_line":"    policy ``name`` are:"},{"line_number":5065,"context_line":""},{"line_number":5066,"context_line":"    - ``anti-affinity`` - servers in this group must be scheduled to"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5f7c97a3_1623e3bf","line":5063,"in_reply_to":"5f7c97a3_b2a5724a","updated":"2018-06-25 02:18:49.000000000","message":"Done","commit_id":"0d93ba23bc38be7cfa1724137d1b57ca5c2f3cb2"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"864bed9131cb6574714dd4e24e93566425be7ec5","unresolved":false,"context_lines":[{"line_number":5040,"context_line":"  max_version: 2.56"},{"line_number":5041,"context_line":"policies:"},{"line_number":5042,"context_line":"  description: |"},{"line_number":5043,"context_line":"    A list of exactly one policy name to associate with the server group. The"},{"line_number":5044,"context_line":"    current valid policy names are:"},{"line_number":5045,"context_line":""},{"line_number":5046,"context_line":"    - ``anti-affinity`` - servers in this group must be scheduled to"},{"line_number":5047,"context_line":"      different hosts."},{"line_number":5048,"context_line":"    - ``affinity`` - servers in this group must be scheduled to the same host."},{"line_number":5049,"context_line":"    - ``soft-anti-affinity`` - servers in this group should be scheduled to"},{"line_number":5050,"context_line":"      different hosts if possible, but if not possible then they should still"},{"line_number":5051,"context_line":"      be scheduled instead of resulting in a build failure. This policy was"},{"line_number":5052,"context_line":"      added in microversion 2.15."},{"line_number":5053,"context_line":"    - ``soft-affinity`` - servers in this group should be scheduled to the same"},{"line_number":5054,"context_line":"      host if possible, but if not possible then they should still be scheduled"},{"line_number":5055,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5056,"context_line":"      microversion 2.15."},{"line_number":5057,"context_line":"  in: body"},{"line_number":5058,"context_line":"  required: true"},{"line_number":5059,"context_line":"  type: array"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"5f7c97a3_89d95785","line":5056,"range":{"start_line":5043,"start_character":0,"end_line":5056,"end_character":24},"updated":"2018-07-03 12:25:25.000000000","message":"should we mention that only the first one in the list will work.","commit_id":"947110352253785aedeed6a88424dcb04e72a274"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5117,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5118,"context_line":"      microversion 2.15."},{"line_number":5119,"context_line":""},{"line_number":5120,"context_line":"    Note that a group can only have one policy associated with it, and only the"},{"line_number":5121,"context_line":"    first one in the list will work."},{"line_number":5122,"context_line":"  in: body"},{"line_number":5123,"context_line":"  required: true"},{"line_number":5124,"context_line":"  type: array"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_157d2b1d","line":5121,"range":{"start_line":5120,"start_character":4,"end_line":5121,"end_character":36},"updated":"2018-07-05 17:19:38.000000000","message":"I don\u0027t think this is necessary since the description already says \"A list of exactly one policy name to associate with the server group.\"","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5117,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5118,"context_line":"      microversion 2.15."},{"line_number":5119,"context_line":""},{"line_number":5120,"context_line":"    Note that a group can only have one policy associated with it, and only the"},{"line_number":5121,"context_line":"    first one in the list will work."},{"line_number":5122,"context_line":"  in: body"},{"line_number":5123,"context_line":"  required: true"},{"line_number":5124,"context_line":"  type: array"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_7d06861d","line":5121,"range":{"start_line":5120,"start_character":4,"end_line":5121,"end_character":36},"in_reply_to":"5f7c97a3_157d2b1d","updated":"2018-07-10 04:16:36.000000000","message":"Done, yes, it\u0027s more clear","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5123,"context_line":"  required: true"},{"line_number":5124,"context_line":"  type: array"},{"line_number":5125,"context_line":"  max_version: 2.63"},{"line_number":5126,"context_line":"policy:"},{"line_number":5127,"context_line":"  description: |"},{"line_number":5128,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5129,"context_line":"    ``name``, ``rules``."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_b53eb723","line":5126,"updated":"2018-07-05 17:19:38.000000000","message":"nit: alternative to this, you could add new parameters for policy.name and policy.rules and then move the name description and rules descriptions into those parameters. Similar to how block_device_mapping_v2 parameters are split up.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5123,"context_line":"  required: true"},{"line_number":5124,"context_line":"  type: array"},{"line_number":5125,"context_line":"  max_version: 2.63"},{"line_number":5126,"context_line":"policy:"},{"line_number":5127,"context_line":"  description: |"},{"line_number":5128,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5129,"context_line":"    ``name``, ``rules``."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_fd49362e","line":5126,"in_reply_to":"5f7c97a3_b53eb723","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5126,"context_line":"policy:"},{"line_number":5127,"context_line":"  description: |"},{"line_number":5128,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5129,"context_line":"    ``name``, ``rules``."},{"line_number":5130,"context_line":"    The ``name`` field which is a string represents the name of policy, current"},{"line_number":5131,"context_line":"    valid policy ``name`` are:"},{"line_number":5132,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_f5774f3a","line":5129,"range":{"start_line":5129,"start_character":12,"end_line":5129,"end_character":13},"updated":"2018-07-05 17:19:38.000000000","message":"Use \"and\" instead of the comma when there are only 2 fields.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5126,"context_line":"policy:"},{"line_number":5127,"context_line":"  description: |"},{"line_number":5128,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5129,"context_line":"    ``name``, ``rules``."},{"line_number":5130,"context_line":"    The ``name`` field which is a string represents the name of policy, current"},{"line_number":5131,"context_line":"    valid policy ``name`` are:"},{"line_number":5132,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_fdadb6e6","line":5129,"range":{"start_line":5129,"start_character":12,"end_line":5129,"end_character":13},"in_reply_to":"5f7c97a3_f5774f3a","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5127,"context_line":"  description: |"},{"line_number":5128,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5129,"context_line":"    ``name``, ``rules``."},{"line_number":5130,"context_line":"    The ``name`` field which is a string represents the name of policy, current"},{"line_number":5131,"context_line":"    valid policy ``name`` are:"},{"line_number":5132,"context_line":""},{"line_number":5133,"context_line":"    - ``anti-affinity`` - servers in this group must be scheduled to"},{"line_number":5134,"context_line":"      different hosts."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_f59c2f5c","line":5131,"range":{"start_line":5130,"start_character":4,"end_line":5131,"end_character":30},"updated":"2018-07-05 17:19:38.000000000","message":"Re-word this as:\n\nThe ``name`` field represents the name of the policy. The\ncurrent valid policy names are:","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5127,"context_line":"  description: |"},{"line_number":5128,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5129,"context_line":"    ``name``, ``rules``."},{"line_number":5130,"context_line":"    The ``name`` field which is a string represents the name of policy, current"},{"line_number":5131,"context_line":"    valid policy ``name`` are:"},{"line_number":5132,"context_line":""},{"line_number":5133,"context_line":"    - ``anti-affinity`` - servers in this group must be scheduled to"},{"line_number":5134,"context_line":"      different hosts."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_3dd6ce54","line":5131,"range":{"start_line":5130,"start_character":4,"end_line":5131,"end_character":30},"in_reply_to":"5f7c97a3_f59c2f5c","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5135,"context_line":"    - ``affinity`` - servers in this group must be scheduled to the same host."},{"line_number":5136,"context_line":"    - ``soft-anti-affinity`` - servers in this group should be scheduled to"},{"line_number":5137,"context_line":"      different hosts if possible, but if not possible then they should still"},{"line_number":5138,"context_line":"      be scheduled instead of resulting in a build failure. This policy was"},{"line_number":5139,"context_line":"      added in microversion 2.15."},{"line_number":5140,"context_line":"    - ``soft-affinity`` - servers in this group should be scheduled to the same"},{"line_number":5141,"context_line":"      host if possible, but if not possible then they should still be scheduled"},{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_55b5e3ce","line":5139,"range":{"start_line":5138,"start_character":60,"end_line":5139,"end_character":33},"updated":"2018-07-05 17:19:38.000000000","message":"You don\u0027t need to say this because to even use this format you\u0027re already \u003e2.15.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5135,"context_line":"    - ``affinity`` - servers in this group must be scheduled to the same host."},{"line_number":5136,"context_line":"    - ``soft-anti-affinity`` - servers in this group should be scheduled to"},{"line_number":5137,"context_line":"      different hosts if possible, but if not possible then they should still"},{"line_number":5138,"context_line":"      be scheduled instead of resulting in a build failure. This policy was"},{"line_number":5139,"context_line":"      added in microversion 2.15."},{"line_number":5140,"context_line":"    - ``soft-affinity`` - servers in this group should be scheduled to the same"},{"line_number":5141,"context_line":"      host if possible, but if not possible then they should still be scheduled"},{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_fddb7676","line":5139,"range":{"start_line":5138,"start_character":60,"end_line":5139,"end_character":33},"in_reply_to":"5f7c97a3_55b5e3ce","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5139,"context_line":"      added in microversion 2.15."},{"line_number":5140,"context_line":"    - ``soft-affinity`` - servers in this group should be scheduled to the same"},{"line_number":5141,"context_line":"      host if possible, but if not possible then they should still be scheduled"},{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5143,"context_line":"      microversion 2.15."},{"line_number":5144,"context_line":""},{"line_number":5145,"context_line":"    The \"rules\" field which is a dict, can be applied to the policy, now only"},{"line_number":5146,"context_line":"    ``max_server_per_host`` for ``anti-affinity`` policy would be supported."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_15abeb70","line":5143,"range":{"start_line":5142,"start_character":47,"end_line":5143,"end_character":24},"updated":"2018-07-05 17:19:38.000000000","message":"same","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5139,"context_line":"      added in microversion 2.15."},{"line_number":5140,"context_line":"    - ``soft-affinity`` - servers in this group should be scheduled to the same"},{"line_number":5141,"context_line":"      host if possible, but if not possible then they should still be scheduled"},{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5143,"context_line":"      microversion 2.15."},{"line_number":5144,"context_line":""},{"line_number":5145,"context_line":"    The \"rules\" field which is a dict, can be applied to the policy, now only"},{"line_number":5146,"context_line":"    ``max_server_per_host`` for ``anti-affinity`` policy would be supported."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_bdd3be5e","line":5143,"range":{"start_line":5142,"start_character":47,"end_line":5143,"end_character":24},"in_reply_to":"5f7c97a3_15abeb70","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5143,"context_line":"      microversion 2.15."},{"line_number":5144,"context_line":""},{"line_number":5145,"context_line":"    The \"rules\" field which is a dict, can be applied to the policy, now only"},{"line_number":5146,"context_line":"    ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":5147,"context_line":"  in: body"},{"line_number":5148,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_d5c81357","line":5145,"range":{"start_line":5145,"start_character":7,"end_line":5145,"end_character":15},"updated":"2018-07-05 17:19:38.000000000","message":"``rules`` field, which is a dict, can be...","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5143,"context_line":"      microversion 2.15."},{"line_number":5144,"context_line":""},{"line_number":5145,"context_line":"    The \"rules\" field which is a dict, can be applied to the policy, now only"},{"line_number":5146,"context_line":"    ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":5147,"context_line":"  in: body"},{"line_number":5148,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_1d499230","line":5145,"range":{"start_line":5145,"start_character":7,"end_line":5145,"end_character":15},"in_reply_to":"5f7c97a3_d5c81357","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5143,"context_line":"      microversion 2.15."},{"line_number":5144,"context_line":""},{"line_number":5145,"context_line":"    The \"rules\" field which is a dict, can be applied to the policy, now only"},{"line_number":5146,"context_line":"    ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":5147,"context_line":"  in: body"},{"line_number":5148,"context_line":"  required: true"},{"line_number":5149,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_752d7ffb","line":5146,"range":{"start_line":5145,"start_character":67,"end_line":5146,"end_character":76},"updated":"2018-07-05 17:19:38.000000000","message":"Re-word this as:\n\n... applied to the policy. Currently, only the ``max_server_per_host`` rule is supported for the ``anti-affinity`` policy. The ``max_server_per_host`` rule allows specifying how many members of the anti-affinity group can reside on the same compute host. If not specified, only one member from the same anti-affinity group can reside on a given host.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5142,"context_line":"      instead of resulting in a build failure. This policy was added in"},{"line_number":5143,"context_line":"      microversion 2.15."},{"line_number":5144,"context_line":""},{"line_number":5145,"context_line":"    The \"rules\" field which is a dict, can be applied to the policy, now only"},{"line_number":5146,"context_line":"    ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":5147,"context_line":"  in: body"},{"line_number":5148,"context_line":"  required: true"},{"line_number":5149,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_3d448e18","line":5146,"range":{"start_line":5145,"start_character":67,"end_line":5146,"end_character":76},"in_reply_to":"5f7c97a3_752d7ffb","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":5120,"context_line":"  required: true"},{"line_number":5121,"context_line":"  type: array"},{"line_number":5122,"context_line":"  max_version: 2.63"},{"line_number":5123,"context_line":"policy:"},{"line_number":5124,"context_line":"  description: |"},{"line_number":5125,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5126,"context_line":"    ``name`` and ``rules``."},{"line_number":5127,"context_line":"  in: body"},{"line_number":5128,"context_line":"  required: true"},{"line_number":5129,"context_line":"  type: object"},{"line_number":5130,"context_line":"  min_version: 2.64"},{"line_number":5131,"context_line":"policy_name:"},{"line_number":5132,"context_line":"  description: |"},{"line_number":5133,"context_line":"    The ``name`` field represents the name of the policy. The current valid"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_3e7ea81b","line":5130,"range":{"start_line":5123,"start_character":0,"end_line":5130,"end_character":19},"updated":"2018-07-11 05:37:01.000000000","message":"this should not be needed if we make request also flat then dict.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":5130,"context_line":"  min_version: 2.64"},{"line_number":5131,"context_line":"policy_name:"},{"line_number":5132,"context_line":"  description: |"},{"line_number":5133,"context_line":"    The ``name`` field represents the name of the policy. The current valid"},{"line_number":5134,"context_line":"    policy names are:"},{"line_number":5135,"context_line":""},{"line_number":5136,"context_line":"    - ``anti-affinity`` - servers in this group must be scheduled to"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_9ea01ca7","line":5133,"range":{"start_line":5133,"start_character":10,"end_line":5133,"end_character":14},"updated":"2018-07-11 05:37:01.000000000","message":"policy_name","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":5130,"context_line":"  min_version: 2.64"},{"line_number":5131,"context_line":"policy_name:"},{"line_number":5132,"context_line":"  description: |"},{"line_number":5133,"context_line":"    The ``name`` field represents the name of the policy. The current valid"},{"line_number":5134,"context_line":"    policy names are:"},{"line_number":5135,"context_line":""},{"line_number":5136,"context_line":"    - ``anti-affinity`` - servers in this group must be scheduled to"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_d4bc35b7","line":5133,"range":{"start_line":5133,"start_character":10,"end_line":5133,"end_character":14},"in_reply_to":"5f7c97a3_9ea01ca7","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":5148,"context_line":"  min_version: 2.64"},{"line_number":5149,"context_line":"policy_rules:"},{"line_number":5150,"context_line":"  description: |"},{"line_number":5151,"context_line":"    The ``rules`` field, which is a dict, can be applied to the policy."},{"line_number":5152,"context_line":"    Currently, only the ``max_server_per_host`` rule is supported for the"},{"line_number":5153,"context_line":"    ``anti-affinity`` policy. The ``max_server_per_host`` rule allows"},{"line_number":5154,"context_line":"    specifying how many members of the anti-affinity group can reside on the"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_5eaa8484","line":5151,"range":{"start_line":5151,"start_character":10,"end_line":5151,"end_character":15},"updated":"2018-07-11 05:37:01.000000000","message":"policy_rules","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":5148,"context_line":"  min_version: 2.64"},{"line_number":5149,"context_line":"policy_rules:"},{"line_number":5150,"context_line":"  description: |"},{"line_number":5151,"context_line":"    The ``rules`` field, which is a dict, can be applied to the policy."},{"line_number":5152,"context_line":"    Currently, only the ``max_server_per_host`` rule is supported for the"},{"line_number":5153,"context_line":"    ``anti-affinity`` policy. The ``max_server_per_host`` rule allows"},{"line_number":5154,"context_line":"    specifying how many members of the anti-affinity group can reside on the"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_14c86d4b","line":5151,"range":{"start_line":5151,"start_character":10,"end_line":5151,"end_character":15},"in_reply_to":"5f7c97a3_5eaa8484","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":5153,"context_line":"    ``anti-affinity`` policy. The ``max_server_per_host`` rule allows"},{"line_number":5154,"context_line":"    specifying how many members of the anti-affinity group can reside on the"},{"line_number":5155,"context_line":"    same compute host. If not specified, only one member from the same"},{"line_number":5156,"context_line":"    anti-affinity group can reside on a given host."},{"line_number":5157,"context_line":"  in: body"},{"line_number":5158,"context_line":"  required: false"},{"line_number":5159,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_de95343f","line":5156,"range":{"start_line":5156,"start_character":50,"end_line":5156,"end_character":51},"updated":"2018-07-11 05:37:01.000000000","message":"you can also add that\n\"Requesting policy_rules with any other policy than ``anti-affinity`` will be 400.\"","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":5153,"context_line":"    ``anti-affinity`` policy. The ``max_server_per_host`` rule allows"},{"line_number":5154,"context_line":"    specifying how many members of the anti-affinity group can reside on the"},{"line_number":5155,"context_line":"    same compute host. If not specified, only one member from the same"},{"line_number":5156,"context_line":"    anti-affinity group can reside on a given host."},{"line_number":5157,"context_line":"  in: body"},{"line_number":5158,"context_line":"  required: false"},{"line_number":5159,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_f4ca9145","line":5156,"range":{"start_line":5156,"start_character":50,"end_line":5156,"end_character":51},"in_reply_to":"5f7c97a3_de95343f","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":5155,"context_line":"    same compute host. If not specified, only one member from the same"},{"line_number":5156,"context_line":"    anti-affinity group can reside on a given host."},{"line_number":5157,"context_line":"  in: body"},{"line_number":5158,"context_line":"  required: false"},{"line_number":5159,"context_line":"  type: object"},{"line_number":5160,"context_line":"  min_version: 2.64"},{"line_number":5161,"context_line":"pool:"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_1e75ec33","line":5158,"range":{"start_line":5158,"start_character":0,"end_line":5158,"end_character":17},"updated":"2018-07-11 05:37:01.000000000","message":"this is true for response. you need to make 2 version of policy_rule, one for request (like below) and one for response. \n\n\npolicy_rules_optional:\n  description: |\n    The ``policy_rules`` field, which is a dict, can be applied to the policy.\n    Currently, 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. Requesting policy_rules with any other policy than ``anti-affinity`` will be 400.\n  in: body\n  required: false\n  type: object\n  min_version: 2.64","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":5155,"context_line":"    same compute host. If not specified, only one member from the same"},{"line_number":5156,"context_line":"    anti-affinity group can reside on a given host."},{"line_number":5157,"context_line":"  in: body"},{"line_number":5158,"context_line":"  required: false"},{"line_number":5159,"context_line":"  type: object"},{"line_number":5160,"context_line":"  min_version: 2.64"},{"line_number":5161,"context_line":"pool:"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_540d858d","line":5158,"range":{"start_line":5158,"start_character":0,"end_line":5158,"end_character":17},"in_reply_to":"5f7c97a3_1e75ec33","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"    same compute host. If not specified, only one member from the same"},{"line_number":1021,"context_line":"    anti-affinity group can reside on a given host. Requesting policy rules"},{"line_number":1022,"context_line":"    with any other policy than ``anti-affinity`` will be 400."},{"line_number":1023,"context_line":"  in: query"},{"line_number":1024,"context_line":"  required: false"},{"line_number":1025,"context_line":"  type: object"},{"line_number":1026,"context_line":"  min_version: 2.64"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_364f8d36","line":1023,"range":{"start_line":1023,"start_character":6,"end_line":1023,"end_character":11},"updated":"2018-07-12 11:10:16.000000000","message":"this need to be body, as this attribute is in request body.","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ac101d0720999be7348f2c5939a2d905d028bbaa","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"    same compute host. If not specified, only one member from the same"},{"line_number":1021,"context_line":"    anti-affinity group can reside on a given host. Requesting policy rules"},{"line_number":1022,"context_line":"    with any other policy than ``anti-affinity`` will be 400."},{"line_number":1023,"context_line":"  in: query"},{"line_number":1024,"context_line":"  required: false"},{"line_number":1025,"context_line":"  type: object"},{"line_number":1026,"context_line":"  min_version: 2.64"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_5151f32f","line":1023,"range":{"start_line":1023,"start_character":6,"end_line":1023,"end_character":11},"in_reply_to":"5f7c97a3_364f8d36","updated":"2018-07-12 12:06:53.000000000","message":"++","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"    same compute host. If not specified, only one member from the same"},{"line_number":1021,"context_line":"    anti-affinity group can reside on a given host. Requesting policy rules"},{"line_number":1022,"context_line":"    with any other policy than ``anti-affinity`` will be 400."},{"line_number":1023,"context_line":"  in: query"},{"line_number":1024,"context_line":"  required: false"},{"line_number":1025,"context_line":"  type: object"},{"line_number":1026,"context_line":"  min_version: 2.64"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_f1cd9f92","line":1023,"range":{"start_line":1023,"start_character":6,"end_line":1023,"end_character":11},"in_reply_to":"5f7c97a3_364f8d36","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":5135,"context_line":"  max_version: 2.63"},{"line_number":5136,"context_line":"policy:"},{"line_number":5137,"context_line":"  description: |"},{"line_number":5138,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5139,"context_line":"    ``name`` and ``rules``."},{"line_number":5140,"context_line":"  in: body"},{"line_number":5141,"context_line":"  required: true"},{"line_number":5142,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_7b05ee14","line":5139,"range":{"start_line":5138,"start_character":3,"end_line":5139,"end_character":27},"updated":"2018-07-12 11:32:36.000000000","message":"This is not correct as we flattened the structure","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":5135,"context_line":"  max_version: 2.63"},{"line_number":5136,"context_line":"policy:"},{"line_number":5137,"context_line":"  description: |"},{"line_number":5138,"context_line":"    A dictionary representation of a server group policy containing the fields"},{"line_number":5139,"context_line":"    ``name`` and ``rules``."},{"line_number":5140,"context_line":"  in: body"},{"line_number":5141,"context_line":"  required: true"},{"line_number":5142,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_9119cb24","line":5139,"range":{"start_line":5138,"start_character":3,"end_line":5139,"end_character":27},"in_reply_to":"5f7c97a3_7b05ee14","updated":"2018-07-12 13:36:18.000000000","message":"yeah,we can remove it now","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"}],"doc/api_samples/os-server-groups/v2.64/server-groups-get-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"id\": \"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9\","},{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_7516dfa9","line":6,"range":{"start_line":6,"start_character":12,"end_line":6,"end_character":16},"updated":"2018-07-05 17:19:38.000000000","message":"too much indent","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"id\": \"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9\","},{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_1d72f27c","line":6,"range":{"start_line":6,"start_character":12,"end_line":6,"end_character":16},"in_reply_to":"5f7c97a3_7516dfa9","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"},{"line_number":10,"context_line":"        \"project_id\": \"6f70656e737461636b20342065766572\","}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_f5218ffd","line":7,"range":{"start_line":7,"start_character":49,"end_line":7,"end_character":52},"updated":"2018-07-05 17:19:38.000000000","message":"This should be an int, correct? I thought the json schema was going to validate that the value is a positive int. Oh but you\u0027re not casting back to an int from the DictOfStringsField in the InstanceGroupPolicy object. We should probably do that so we have a consistent representation of this rule for both POST and GET.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"},{"line_number":10,"context_line":"        \"project_id\": \"6f70656e737461636b20342065766572\","}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_3d6d6e98","line":7,"range":{"start_line":7,"start_character":49,"end_line":7,"end_character":52},"in_reply_to":"5f7c97a3_f5218ffd","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"209cf5def520dd36436139fda87536536b243efc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"server_group\": {"},{"line_number":3,"context_line":"        \"id\": \"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9\","},{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"            \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"            \"rules\": {\"max_server_per_host\": 3}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"},{"line_number":10,"context_line":"        \"project_id\": \"6f70656e737461636b20342065766572\","},{"line_number":11,"context_line":"        \"user_id\": \"fake\""}],"source_content_type":"application/json","patch_set":28,"id":"5f7c97a3_b7be69cb","line":8,"range":{"start_line":5,"start_character":8,"end_line":8,"end_character":10},"updated":"2018-07-10 18:35:01.000000000","message":"See:\n\nhttps://review.openstack.org/#/c/563401/28/nova/notifications/objects/server_group.py@41\n\nBut unless there is a good reason to use a nested dict for the policy name and rules, I think we should probably make this flat like in the versioned objects.","commit_id":"a2db557dbc565264c06d7a21de93ac7a1b3aa449"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"594254750817ff9eb7d7d319528b2005e006aca5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"server_group\": {"},{"line_number":3,"context_line":"        \"id\": \"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9\","},{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy_name\": \"anti-affinity\","},{"line_number":6,"context_line":"        \"policy_rules\": {\"max_server_per_host\": 3},"},{"line_number":7,"context_line":"        \"members\": [],"},{"line_number":8,"context_line":"        \"project_id\": \"6f70656e737461636b20342065766572\","}],"source_content_type":"application/json","patch_set":31,"id":"5f7c97a3_c905737b","line":5,"range":{"start_line":5,"start_character":9,"end_line":5,"end_character":20},"updated":"2018-07-11 13:28:44.000000000","message":"Let\u0027s just call this policy.","commit_id":"f890401e3cb20356255bb992c68dfb61a976add4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"594254750817ff9eb7d7d319528b2005e006aca5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"id\": \"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9\","},{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy_name\": \"anti-affinity\","},{"line_number":6,"context_line":"        \"policy_rules\": {\"max_server_per_host\": 3},"},{"line_number":7,"context_line":"        \"members\": [],"},{"line_number":8,"context_line":"        \"project_id\": \"6f70656e737461636b20342065766572\","},{"line_number":9,"context_line":"        \"user_id\": \"fake\""}],"source_content_type":"application/json","patch_set":31,"id":"5f7c97a3_692f7ff5","line":6,"range":{"start_line":6,"start_character":9,"end_line":6,"end_character":21},"updated":"2018-07-11 13:28:44.000000000","message":"And this rules.\n\nOtherwise this doesn\u0027t match the internal object modeling nor the versioned notification payload.","commit_id":"f890401e3cb20356255bb992c68dfb61a976add4"}],"doc/api_samples/os-server-groups/v2.64/server-groups-list-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"            \"name\": \"test\","},{"line_number":6,"context_line":"            \"policy\": {"},{"line_number":7,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":8,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":9,"context_line":"            },"},{"line_number":10,"context_line":"            \"members\": [],"},{"line_number":11,"context_line":"            \"project_id\": \"6f70656e737461636b20342065766572\","}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_358147c3","line":8,"range":{"start_line":8,"start_character":49,"end_line":8,"end_character":52},"updated":"2018-07-05 17:19:38.000000000","message":"same","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5,"context_line":"            \"name\": \"test\","},{"line_number":6,"context_line":"            \"policy\": {"},{"line_number":7,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":8,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":9,"context_line":"            },"},{"line_number":10,"context_line":"            \"members\": [],"},{"line_number":11,"context_line":"            \"project_id\": \"6f70656e737461636b20342065766572\","}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_fd6296a6","line":8,"range":{"start_line":8,"start_character":49,"end_line":8,"end_character":52},"in_reply_to":"5f7c97a3_358147c3","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"}],"doc/api_samples/os-server-groups/v2.64/server-groups-post-req.json":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"51f7874a8f881558fd07f8d2972c5d876ea999e2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"server_group\": {"},{"line_number":3,"context_line":"        \"name\": \"test\","},{"line_number":4,"context_line":"        \"policy\": {"},{"line_number":5,"context_line":"                \"name\": \"anti-affinity\""},{"line_number":6,"context_line":"        }"},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"application/json","patch_set":19,"id":"5f7c97a3_9e80af9e","line":6,"range":{"start_line":4,"start_character":8,"end_line":6,"end_character":9},"updated":"2018-07-03 12:09:29.000000000","message":"also add rules here might be a better example","commit_id":"947110352253785aedeed6a88424dcb04e72a274"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"server_group\": {"},{"line_number":3,"context_line":"        \"name\": \"test\","},{"line_number":4,"context_line":"        \"policy\": {"},{"line_number":5,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":6,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":7,"context_line":"        }"},{"line_number":8,"context_line":"    }"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_555f2374","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"updated":"2018-07-05 17:19:38.000000000","message":"too much indent","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"server_group\": {"},{"line_number":3,"context_line":"        \"name\": \"test\","},{"line_number":4,"context_line":"        \"policy\": {"},{"line_number":5,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":6,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":7,"context_line":"        }"},{"line_number":8,"context_line":"    }"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_1df752d6","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"in_reply_to":"5f7c97a3_555f2374","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"name\": \"test\","},{"line_number":4,"context_line":"        \"policy\": {"},{"line_number":5,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":6,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":7,"context_line":"        }"},{"line_number":8,"context_line":"    }"},{"line_number":9,"context_line":"}"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_b56c7733","line":6,"range":{"start_line":6,"start_character":49,"end_line":6,"end_character":52},"updated":"2018-07-05 17:19:38.000000000","message":"this should be an int","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"name\": \"test\","},{"line_number":4,"context_line":"        \"policy\": {"},{"line_number":5,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":6,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":7,"context_line":"        }"},{"line_number":8,"context_line":"    }"},{"line_number":9,"context_line":"}"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_3df24ee4","line":6,"range":{"start_line":6,"start_character":49,"end_line":6,"end_character":52},"in_reply_to":"5f7c97a3_b56c7733","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"}],"doc/api_samples/os-server-groups/v2.64/server-groups-post-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"id\": \"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9\","},{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_15552b52","line":6,"range":{"start_line":6,"start_character":12,"end_line":6,"end_character":16},"updated":"2018-07-05 17:19:38.000000000","message":"same","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"id\": \"5bbcc3c4-1da2-4437-a48a-66f15b1b13f9\","},{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_9d2cc24a","line":6,"range":{"start_line":6,"start_character":12,"end_line":6,"end_character":16},"in_reply_to":"5f7c97a3_15552b52","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"},{"line_number":10,"context_line":"        \"project_id\": \"6f70656e737461636b20342065766572\","}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_d5525368","line":7,"range":{"start_line":7,"start_character":49,"end_line":7,"end_character":52},"updated":"2018-07-05 17:19:38.000000000","message":"same","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":4,"context_line":"        \"name\": \"test\","},{"line_number":5,"context_line":"        \"policy\": {"},{"line_number":6,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":7,"context_line":"                \"rules\": {\"max_server_per_host\": \"3\"}"},{"line_number":8,"context_line":"        },"},{"line_number":9,"context_line":"        \"members\": [],"},{"line_number":10,"context_line":"        \"project_id\": \"6f70656e737461636b20342065766572\","}],"source_content_type":"application/json","patch_set":22,"id":"5f7c97a3_bd2f3e3c","line":7,"range":{"start_line":7,"start_character":49,"end_line":7,"end_character":52},"in_reply_to":"5f7c97a3_d5525368","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"15cd84f47c595cc4cfedb43d6970f43e5d6b2936","unresolved":false,"context_lines":[{"line_number":150,"context_line":"             responses."},{"line_number":151,"context_line":"    * 2.63 - Add support for applying trusted certificates when creating or"},{"line_number":152,"context_line":"             rebuilding a server."},{"line_number":153,"context_line":"    * 2.64 - Add new format ``policy`` filed containing ``name`` and ``rules``"},{"line_number":154,"context_line":"             and remove ``metadata`` field in response body of POST, GET"},{"line_number":155,"context_line":"             /os-server-groups API and GET /os-server-groups/{server_group_id}"},{"line_number":156,"context_line":"             API."}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_f239aad7","line":153,"range":{"start_line":153,"start_character":41,"end_line":153,"end_character":43},"updated":"2018-06-22 10:27:57.000000000","message":"el","commit_id":"0d93ba23bc38be7cfa1724137d1b57ca5c2f3cb2"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"83aba32e2d70e3e103e7967478bc3f2423bfdaa3","unresolved":false,"context_lines":[{"line_number":150,"context_line":"             responses."},{"line_number":151,"context_line":"    * 2.63 - Add support for applying trusted certificates when creating or"},{"line_number":152,"context_line":"             rebuilding a server."},{"line_number":153,"context_line":"    * 2.64 - Add new format ``policy`` filed containing ``name`` and ``rules``"},{"line_number":154,"context_line":"             and remove ``metadata`` field in response body of POST, GET"},{"line_number":155,"context_line":"             /os-server-groups API and GET /os-server-groups/{server_group_id}"},{"line_number":156,"context_line":"             API."}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_160c4340","line":153,"range":{"start_line":153,"start_character":41,"end_line":153,"end_character":43},"in_reply_to":"5f7c97a3_f239aad7","updated":"2018-06-25 02:18:49.000000000","message":"Done","commit_id":"0d93ba23bc38be7cfa1724137d1b57ca5c2f3cb2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":150,"context_line":"             responses."},{"line_number":151,"context_line":"    * 2.63 - Add support for applying trusted certificates when creating or"},{"line_number":152,"context_line":"             rebuilding a server."},{"line_number":153,"context_line":"    * 2.64 - Add new ``policy_name`` and ``policy_rules`` and remove"},{"line_number":154,"context_line":"             ``metadata`` field in response body of POST, GET"},{"line_number":155,"context_line":"             /os-server-groups API and GET /os-server-groups/{server_group_id}"},{"line_number":156,"context_line":"             API."},{"line_number":157,"context_line":"\"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_de7774d1","line":156,"range":{"start_line":153,"start_character":13,"end_line":156,"end_character":17},"updated":"2018-07-11 05:37:01.000000000","message":"Add support for the \"max_server_per_host\" policy rule for ``anti-affinity`` server group policy.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"             responses."},{"line_number":151,"context_line":"    * 2.63 - Add support for applying trusted certificates when creating or"},{"line_number":152,"context_line":"             rebuilding a server."},{"line_number":153,"context_line":"    * 2.64 - Add new ``policy_name`` and ``policy_rules`` and remove"},{"line_number":154,"context_line":"             ``metadata`` field in response body of POST, GET"},{"line_number":155,"context_line":"             /os-server-groups API and GET /os-server-groups/{server_group_id}"},{"line_number":156,"context_line":"             API."},{"line_number":157,"context_line":"\"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_34cb291e","line":156,"range":{"start_line":153,"start_character":13,"end_line":156,"end_character":17},"in_reply_to":"5f7c97a3_de7774d1","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":150,"context_line":"             responses."},{"line_number":151,"context_line":"    * 2.63 - Add support for applying trusted certificates when creating or"},{"line_number":152,"context_line":"             rebuilding a server."},{"line_number":153,"context_line":"    * 2.64 - Add support for the \"max_server_per_host\" policy rule for"},{"line_number":154,"context_line":"             ``anti-affinity`` server group policy."},{"line_number":155,"context_line":"\"\"\""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_44a121a8","line":154,"range":{"start_line":153,"start_character":13,"end_line":154,"end_character":51},"updated":"2018-07-12 21:49:32.000000000","message":"nit: this could be a bit more detailed to mention that the ``policies`` and ``metadata`` fields are removed and the ``policy`` (required) and ``rules`` (optional) fields were added.","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"             responses."},{"line_number":151,"context_line":"    * 2.63 - Add support for applying trusted certificates when creating or"},{"line_number":152,"context_line":"             rebuilding a server."},{"line_number":153,"context_line":"    * 2.64 - Add support for the \"max_server_per_host\" policy rule for"},{"line_number":154,"context_line":"             ``anti-affinity`` server group policy."},{"line_number":155,"context_line":"\"\"\""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_4074a837","line":154,"range":{"start_line":153,"start_character":13,"end_line":154,"end_character":51},"in_reply_to":"5f7c97a3_44a121a8","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":826,"context_line":"changes in response body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":827,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":830,"context_line":"  server group policy containing the fields ``name``, ``rules``."},{"line_number":831,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_75c9ff22","line":829,"range":{"start_line":829,"start_character":28,"end_line":829,"end_character":33},"updated":"2018-07-05 17:19:38.000000000","message":"field","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":826,"context_line":"changes in response body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":827,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":830,"context_line":"  server group policy containing the fields ``name``, ``rules``."},{"line_number":831,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_7d25265a","line":829,"range":{"start_line":829,"start_character":28,"end_line":829,"end_character":33},"in_reply_to":"5f7c97a3_75c9ff22","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":827,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":830,"context_line":"  server group policy containing the fields ``name``, ``rules``."},{"line_number":831,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_35cf0729","line":830,"range":{"start_line":830,"start_character":52,"end_line":830,"end_character":53},"updated":"2018-07-05 17:19:38.000000000","message":"and","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":827,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":830,"context_line":"  server group policy containing the fields ``name``, ``rules``."},{"line_number":831,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-rst","patch_set":22,"id":"5f7c97a3_1d20b248","line":830,"range":{"start_line":830,"start_character":52,"end_line":830,"end_character":53},"in_reply_to":"5f7c97a3_35cf0729","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":822,"context_line":"2.64"},{"line_number":823,"context_line":"----"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"Use new format policy in server group, this microversion brings the following"},{"line_number":826,"context_line":"changes in response body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":827,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add new fields ``policy_name`` and ``policy_rules``."},{"line_number":830,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-rst","patch_set":29,"id":"5f7c97a3_fe8270a6","line":830,"range":{"start_line":825,"start_character":0,"end_line":830,"end_character":46},"updated":"2018-07-11 05:37:01.000000000","message":"we need to mention API behavior and request changes also. how about something like below-\n\n    Enable users to define the policy rules on server group policy to meet more advanced policy requirement. This\n    microversion brings the following changes in server group APIs:\n\n    * Add new format ``policy`` field, which is a dictionary representation of a\n      server group policy containing the fields ``name`` and ``rules``. The\n      ``name`` represents the name of policy. The ``rules``\n      field which is a dict, can be applied to the policy, which currently\n      only support ``max_server_per_host`` for ``anti-affinity`` policy.\n\n    * The ``policy_name`` and ``policy_rules`` fields will be returned in response body of POST, GET\n    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:\n\n\n    * The ``policies`` and ``metadata`` fields have been removed from the response body of POST, GET\n    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:\n.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":822,"context_line":"2.64"},{"line_number":823,"context_line":"----"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"Use new format policy in server group, this microversion brings the following"},{"line_number":826,"context_line":"changes in response body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":827,"context_line":"``/os-server-groups/{server_group_id}`` API:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add new fields ``policy_name`` and ``policy_rules``."},{"line_number":830,"context_line":"* Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-rst","patch_set":29,"id":"5f7c97a3_d450b52f","line":830,"range":{"start_line":825,"start_character":0,"end_line":830,"end_character":46},"in_reply_to":"5f7c97a3_fe8270a6","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":826,"context_line":"advanced policy requirement. This microversion brings the following changes"},{"line_number":827,"context_line":"in server group APIs:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_566569ae","line":829,"range":{"start_line":829,"start_character":7,"end_line":829,"end_character":29},"updated":"2018-07-12 11:10:16.000000000","message":"as per current agreed naming - ``policy`` and ``rules``","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":826,"context_line":"advanced policy requirement. This microversion brings the following changes"},{"line_number":827,"context_line":"in server group APIs:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_d1b503ef","line":829,"range":{"start_line":829,"start_character":7,"end_line":829,"end_character":29},"in_reply_to":"5f7c97a3_566569ae","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":827,"context_line":"in server group APIs:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_1605b1c1","line":830,"range":{"start_line":830,"start_character":31,"end_line":830,"end_character":35},"updated":"2018-07-12 11:10:16.000000000","message":"ditto","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":827,"context_line":"in server group APIs:"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_71caef6f","line":830,"range":{"start_line":830,"start_character":31,"end_line":830,"end_character":35},"in_reply_to":"5f7c97a3_1605b1c1","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":835,"context_line":"  ``/os-server-groups/{server_group_id}`` API."},{"line_number":836,"context_line":"* The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_d60e59e3","line":833,"range":{"start_line":833,"start_character":6,"end_line":833,"end_character":42},"updated":"2018-07-12 11:10:16.000000000","message":"as per current agreed nameing - ``policy`` and ``rules``","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":835,"context_line":"  ``/os-server-groups/{server_group_id}`` API."},{"line_number":836,"context_line":"* The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_963301f8","line":833,"range":{"start_line":833,"start_character":6,"end_line":833,"end_character":21},"updated":"2018-07-12 11:32:36.000000000","message":"isn\u0027t it now called \u0027policy\u0027 ?","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":835,"context_line":"  ``/os-server-groups/{server_group_id}`` API."},{"line_number":836,"context_line":"* The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_562d698d","line":833,"range":{"start_line":833,"start_character":26,"end_line":833,"end_character":42},"updated":"2018-07-12 11:32:36.000000000","message":"isn\u0027t it now called \u0027rules\u0027?","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":835,"context_line":"  ``/os-server-groups/{server_group_id}`` API."},{"line_number":836,"context_line":"* The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_51c1f34d","line":833,"range":{"start_line":833,"start_character":26,"end_line":833,"end_character":42},"in_reply_to":"5f7c97a3_562d698d","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":835,"context_line":"  ``/os-server-groups/{server_group_id}`` API."},{"line_number":836,"context_line":"* The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_f19b5f76","line":833,"range":{"start_line":833,"start_character":6,"end_line":833,"end_character":21},"in_reply_to":"5f7c97a3_963301f8","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":830,"context_line":"  ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":835,"context_line":"  ``/os-server-groups/{server_group_id}`` API."},{"line_number":836,"context_line":"* The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-rst","patch_set":33,"id":"5f7c97a3_91c78b66","line":833,"range":{"start_line":833,"start_character":6,"end_line":833,"end_character":42},"in_reply_to":"5f7c97a3_d60e59e3","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add  ``policy`` and ``rules`` fields in the request of POST"},{"line_number":830,"context_line":"  ``/os-server-groups``. The ``policy`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy`` and ``rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"}],"source_content_type":"text/x-rst","patch_set":34,"id":"5f7c97a3_6499bd78","line":831,"range":{"start_line":831,"start_character":12,"end_line":831,"end_character":23},"updated":"2018-07-12 21:49:32.000000000","message":"field, which (add comma)","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":828,"context_line":""},{"line_number":829,"context_line":"* Add  ``policy`` and ``rules`` fields in the request of POST"},{"line_number":830,"context_line":"  ``/os-server-groups``. The ``policy`` represents the name of policy. The"},{"line_number":831,"context_line":"  ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":832,"context_line":"  currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":833,"context_line":"* The ``policy`` and ``rules`` fields will be returned in response"},{"line_number":834,"context_line":"  body of POST, GET ``/os-server-groups`` API and GET"}],"source_content_type":"text/x-rst","patch_set":34,"id":"5f7c97a3_a08a5c10","line":831,"range":{"start_line":831,"start_character":12,"end_line":831,"end_character":23},"in_reply_to":"5f7c97a3_6499bd78","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"}],"nova/api/openstack/compute/schemas/server_groups.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"sg_properties[\u0027required\u0027].remove(\u0027policies\u0027)"},{"line_number":58,"context_line":"sg_properties[\u0027required\u0027].append(\u0027policy\u0027)"},{"line_number":59,"context_line":"sg_properties[\u0027properties\u0027][\u0027policy\u0027] \u003d {"},{"line_number":60,"context_line":"    \u0027oneOf\u0027: [{"},{"line_number":61,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":62,"context_line":"        \u0027properties\u0027: {"},{"line_number":63,"context_line":"            \u0027name\u0027: {"},{"line_number":64,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":65,"context_line":"                \u0027enum\u0027: [\u0027anti-affinity\u0027],"},{"line_number":66,"context_line":"            },"},{"line_number":67,"context_line":"            \u0027rules\u0027: {"},{"line_number":68,"context_line":"                \u0027type\u0027: \u0027object\u0027,"},{"line_number":69,"context_line":"                \u0027properties\u0027: {"},{"line_number":70,"context_line":"                    \u0027max_server_per_host\u0027: parameter_types.positive_integer,"},{"line_number":71,"context_line":"                },"},{"line_number":72,"context_line":"                \u0027additionalProperties\u0027: False"},{"line_number":73,"context_line":"            }"},{"line_number":74,"context_line":"        },"},{"line_number":75,"context_line":"        \u0027required\u0027: [\u0027name\u0027],"},{"line_number":76,"context_line":"        \u0027additionalProperties\u0027: False"},{"line_number":77,"context_line":"    },"},{"line_number":78,"context_line":"    {"},{"line_number":79,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":80,"context_line":"        \u0027properties\u0027: {"},{"line_number":81,"context_line":"            \u0027name\u0027: {"},{"line_number":82,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":83,"context_line":"                \u0027enum\u0027: [\u0027affinity\u0027, \u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027],"},{"line_number":84,"context_line":"            },"},{"line_number":85,"context_line":"        },"},{"line_number":86,"context_line":"        \u0027required\u0027: [\u0027name\u0027],"},{"line_number":87,"context_line":"        \u0027additionalProperties\u0027: False"},{"line_number":88,"context_line":"    }"},{"line_number":89,"context_line":"]"},{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"server_groups_query_param \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_ba45ae17","line":89,"range":{"start_line":60,"start_character":0,"end_line":89,"end_character":1},"updated":"2018-06-06 07:50:19.000000000","message":"The logic seems correct, but the format here looks weird and made me confusing about the schema.","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":57,"context_line":"sg_properties[\u0027required\u0027].remove(\u0027policies\u0027)"},{"line_number":58,"context_line":"sg_properties[\u0027required\u0027].append(\u0027policy\u0027)"},{"line_number":59,"context_line":"sg_properties[\u0027properties\u0027][\u0027policy\u0027] \u003d {"},{"line_number":60,"context_line":"    \u0027oneOf\u0027: [{"},{"line_number":61,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":62,"context_line":"        \u0027properties\u0027: {"},{"line_number":63,"context_line":"            \u0027name\u0027: {"},{"line_number":64,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":65,"context_line":"                \u0027enum\u0027: [\u0027anti-affinity\u0027],"},{"line_number":66,"context_line":"            },"},{"line_number":67,"context_line":"            \u0027rules\u0027: {"},{"line_number":68,"context_line":"                \u0027type\u0027: \u0027object\u0027,"},{"line_number":69,"context_line":"                \u0027properties\u0027: {"},{"line_number":70,"context_line":"                    \u0027max_server_per_host\u0027: parameter_types.positive_integer,"},{"line_number":71,"context_line":"                },"},{"line_number":72,"context_line":"                \u0027additionalProperties\u0027: False"},{"line_number":73,"context_line":"            }"},{"line_number":74,"context_line":"        },"},{"line_number":75,"context_line":"        \u0027required\u0027: [\u0027name\u0027],"},{"line_number":76,"context_line":"        \u0027additionalProperties\u0027: False"},{"line_number":77,"context_line":"    },"},{"line_number":78,"context_line":"    {"},{"line_number":79,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":80,"context_line":"        \u0027properties\u0027: {"},{"line_number":81,"context_line":"            \u0027name\u0027: {"},{"line_number":82,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":83,"context_line":"                \u0027enum\u0027: [\u0027affinity\u0027, \u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027],"},{"line_number":84,"context_line":"            },"},{"line_number":85,"context_line":"        },"},{"line_number":86,"context_line":"        \u0027required\u0027: [\u0027name\u0027],"},{"line_number":87,"context_line":"        \u0027additionalProperties\u0027: False"},{"line_number":88,"context_line":"    }"},{"line_number":89,"context_line":"]"},{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"server_groups_query_param \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_90ecf7bb","line":89,"range":{"start_line":60,"start_character":0,"end_line":89,"end_character":1},"in_reply_to":"5f7c97a3_ba45ae17","updated":"2018-06-11 11:39:36.000000000","message":"Done","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":70,"context_line":"                    \u0027properties\u0027: {"},{"line_number":71,"context_line":"                        \u0027max_server_per_host\u0027:"},{"line_number":72,"context_line":"                            parameter_types.positive_integer,"},{"line_number":73,"context_line":"                    },"},{"line_number":74,"context_line":"                    \u0027additionalProperties\u0027: False"},{"line_number":75,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_f5fd0f3b","line":72,"range":{"start_line":72,"start_character":28,"end_line":72,"end_character":61},"updated":"2018-07-05 17:19:38.000000000","message":"I\u0027m not sure how the functional API sample tests are passing if the samples are using strings for this rather than integers. Does this cast strings to ints?\n\n--\n\npositive_integer \u003d {\n    \u0027type\u0027: [\u0027integer\u0027, \u0027string\u0027],\n    \u0027pattern\u0027: \u0027^[0-9]*$\u0027, \u0027minimum\u0027: 1, \u0027minLength\u0027: 1\n}\n\nI guess it does. Still, let\u0027s use positive integers in the API samples.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":70,"context_line":"                    \u0027properties\u0027: {"},{"line_number":71,"context_line":"                        \u0027max_server_per_host\u0027:"},{"line_number":72,"context_line":"                            parameter_types.positive_integer,"},{"line_number":73,"context_line":"                    },"},{"line_number":74,"context_line":"                    \u0027additionalProperties\u0027: False"},{"line_number":75,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_9dd12232","line":72,"range":{"start_line":72,"start_character":28,"end_line":72,"end_character":61},"in_reply_to":"5f7c97a3_f5fd0f3b","updated":"2018-07-10 04:16:36.000000000","message":"Yes, if we pass a string, it would be converted to int","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"sg_properties \u003d create_v264[\u0027properties\u0027][\u0027server_group\u0027]"},{"line_number":57,"context_line":"sg_properties[\u0027required\u0027].remove(\u0027policies\u0027)"},{"line_number":58,"context_line":"sg_properties[\u0027required\u0027].append(\u0027policy\u0027)"},{"line_number":59,"context_line":"sg_properties[\u0027properties\u0027][\u0027policy\u0027] \u003d {"},{"line_number":60,"context_line":"    \u0027oneOf\u0027: ["},{"line_number":61,"context_line":"        {"},{"line_number":62,"context_line":"            \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_debc54b7","line":59,"range":{"start_line":59,"start_character":27,"end_line":59,"end_character":38},"updated":"2018-07-11 05:37:01.000000000","message":"ditto.\n\nif we make request also flat then we cannot do rules validation in json schema . we can add validation part in code to check rules are only requested for \u0027anti-affinity\u0027 policy otherwise 400","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":61,"context_line":"    \u0027enum\u0027: [\u0027anti-affinity\u0027, \u0027affinity\u0027,"},{"line_number":62,"context_line":"             \u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027],"},{"line_number":63,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":64,"context_line":"}"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"sg_properties[\u0027properties\u0027][\u0027rules\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_c49a115f","line":63,"range":{"start_line":63,"start_character":4,"end_line":63,"end_character":34},"updated":"2018-07-12 21:49:32.000000000","message":"Is this necessary? Is it possible to provide additional items to a string field?","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":61,"context_line":"    \u0027enum\u0027: [\u0027anti-affinity\u0027, \u0027affinity\u0027,"},{"line_number":62,"context_line":"             \u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027],"},{"line_number":63,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":64,"context_line":"}"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"sg_properties[\u0027properties\u0027][\u0027rules\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_c08d182a","line":63,"range":{"start_line":63,"start_character":4,"end_line":63,"end_character":34},"in_reply_to":"5f7c97a3_c49a115f","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8f52f037f5b2a525faa98580f943c7dd7c2f0333","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":61,"context_line":"    \u0027enum\u0027: [\u0027anti-affinity\u0027, \u0027affinity\u0027,"},{"line_number":62,"context_line":"             \u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027],"},{"line_number":63,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":64,"context_line":"}"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"sg_properties[\u0027properties\u0027][\u0027rules\u0027] \u003d {"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a09c9c70","line":63,"range":{"start_line":63,"start_character":4,"end_line":63,"end_character":34},"in_reply_to":"5f7c97a3_c49a115f","updated":"2018-07-13 02:07:31.000000000","message":"yeah we can remove this, enum bits control that no other value accepted than mentioned in enum.","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"}],"nova/api/openstack/compute/server_groups.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f2f6fbe6561c994df9ffff2064606cc94a038174","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import collections"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":"from oslo_serialization import jsonutils"},{"line_number":22,"context_line":"import webob"},{"line_number":23,"context_line":"from webob import exc"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_c2178554","line":21,"range":{"start_line":21,"start_character":31,"end_line":21,"end_character":40},"updated":"2018-06-05 01:13:12.000000000","message":"oops","commit_id":"4524bf1b36a497b35f9f6fb15e2904ad4d315773"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                sgp.rules \u003d None"},{"line_number":208,"context_line":"                sg.policy \u003d sgp"},{"line_number":209,"context_line":"            sg.create()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        except ValueError as e:"},{"line_number":212,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de)"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_da0c2aee","line":210,"updated":"2018-06-06 07:50:19.000000000","message":"unrelated.","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                sgp.rules \u003d None"},{"line_number":208,"context_line":"                sg.policy \u003d sgp"},{"line_number":209,"context_line":"            sg.create()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        except ValueError as e:"},{"line_number":212,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de)"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_50309f56","line":210,"in_reply_to":"5f7c97a3_da0c2aee","updated":"2018-06-11 11:39:36.000000000","message":"Done","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    \"\"\"The Server group API controller for the OpenStack API.\"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _format_server_group(self, context, group, req,"},{"line_number":88,"context_line":"                             include_new_policy\u003dFalse, include_metadata\u003dTrue):"},{"line_number":89,"context_line":"        # the id field has its value as the uuid of the server group"},{"line_number":90,"context_line":"        # There is no \u0027uuid\u0027 key in server_group seen by clients."},{"line_number":91,"context_line":"        # In addition, clients see policies as a [\"policy-name\"] list;"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_958b7bbf","line":88,"range":{"start_line":88,"start_character":37,"end_line":88,"end_character":40},"updated":"2018-07-05 17:19:38.000000000","message":"nit: this won\u0027t be *new* in 3 years, maybe rename to include_policy_obj. Or, just do the version checking in this view builder type method - you already have the req variable to know the version. That would also save some duplication in the handler methods below. Also, then you don\u0027t need to have 2 parameters for the same microversion.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    \"\"\"The Server group API controller for the OpenStack API.\"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _format_server_group(self, context, group, req,"},{"line_number":88,"context_line":"                             include_new_policy\u003dFalse, include_metadata\u003dTrue):"},{"line_number":89,"context_line":"        # the id field has its value as the uuid of the server group"},{"line_number":90,"context_line":"        # There is no \u0027uuid\u0027 key in server_group seen by clients."},{"line_number":91,"context_line":"        # In addition, clients see policies as a [\"policy-name\"] list;"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_1dce7282","line":88,"range":{"start_line":88,"start_character":37,"end_line":88,"end_character":40},"in_reply_to":"5f7c97a3_958b7bbf","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            server_group[\u0027policy\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            server_group[\u0027policies\u0027] \u003d group.policies or []"},{"line_number":103,"context_line":"        # NOTE(danms): This has been exposed to the user, but never used."},{"line_number":104,"context_line":"        # Since we can\u0027t remove it, just make sure it\u0027s always empty."},{"line_number":105,"context_line":"        if include_metadata:"},{"line_number":106,"context_line":"            server_group[\u0027metadata\u0027] \u003d {}"},{"line_number":107,"context_line":"        members \u003d []"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_95a4db4d","line":104,"range":{"start_line":103,"start_character":8,"end_line":104,"end_character":69},"updated":"2018-07-05 17:19:38.000000000","message":"This note likely needs updating.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            server_group[\u0027policy\u0027][\u0027rules\u0027] \u003d rules"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            server_group[\u0027policies\u0027] \u003d group.policies or []"},{"line_number":103,"context_line":"        # NOTE(danms): This has been exposed to the user, but never used."},{"line_number":104,"context_line":"        # Since we can\u0027t remove it, just make sure it\u0027s always empty."},{"line_number":105,"context_line":"        if include_metadata:"},{"line_number":106,"context_line":"            server_group[\u0027metadata\u0027] \u003d {}"},{"line_number":107,"context_line":"        members \u003d []"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_ddbf9aa8","line":104,"range":{"start_line":103,"start_character":8,"end_line":104,"end_character":69},"in_reply_to":"5f7c97a3_95a4db4d","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            sg.name \u003d vals.get(\u0027name\u0027)"},{"line_number":196,"context_line":"            if api_version_request.is_supported("},{"line_number":197,"context_line":"                    req, GROUP_NEW_POLICY_MICROVERSION):"},{"line_number":198,"context_line":"                policy \u003d vals.get(\u0027policy\u0027)"},{"line_number":199,"context_line":"                sgp.policy \u003d policy.get(\u0027name\u0027)"},{"line_number":200,"context_line":"                sgp.rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":201,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_153f6bdf","line":198,"range":{"start_line":198,"start_character":25,"end_line":198,"end_character":43},"updated":"2018-07-05 17:19:38.000000000","message":"vals[\u0027policy\u0027] since policy is required, don\u0027t need to use get()","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            sg.name \u003d vals.get(\u0027name\u0027)"},{"line_number":196,"context_line":"            if api_version_request.is_supported("},{"line_number":197,"context_line":"                    req, GROUP_NEW_POLICY_MICROVERSION):"},{"line_number":198,"context_line":"                policy \u003d vals.get(\u0027policy\u0027)"},{"line_number":199,"context_line":"                sgp.policy \u003d policy.get(\u0027name\u0027)"},{"line_number":200,"context_line":"                sgp.rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":201,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_7de446df","line":198,"range":{"start_line":198,"start_character":25,"end_line":198,"end_character":43},"in_reply_to":"5f7c97a3_153f6bdf","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            if api_version_request.is_supported("},{"line_number":197,"context_line":"                    req, GROUP_NEW_POLICY_MICROVERSION):"},{"line_number":198,"context_line":"                policy \u003d vals.get(\u0027policy\u0027)"},{"line_number":199,"context_line":"                sgp.policy \u003d policy.get(\u0027name\u0027)"},{"line_number":200,"context_line":"                sgp.rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":201,"context_line":"            else:"},{"line_number":202,"context_line":"                policies \u003d vals.get(\u0027policies\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_3544e772","line":199,"range":{"start_line":199,"start_character":29,"end_line":199,"end_character":47},"updated":"2018-07-05 17:19:38.000000000","message":"same, policy[\u0027name\u0027] since it\u0027s required","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            if api_version_request.is_supported("},{"line_number":197,"context_line":"                    req, GROUP_NEW_POLICY_MICROVERSION):"},{"line_number":198,"context_line":"                policy \u003d vals.get(\u0027policy\u0027)"},{"line_number":199,"context_line":"                sgp.policy \u003d policy.get(\u0027name\u0027)"},{"line_number":200,"context_line":"                sgp.rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":201,"context_line":"            else:"},{"line_number":202,"context_line":"                policies \u003d vals.get(\u0027policies\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_1dcf5257","line":199,"range":{"start_line":199,"start_character":29,"end_line":199,"end_character":47},"in_reply_to":"5f7c97a3_3544e772","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"245cbb194403cfc499b3cb89c811f63c84dece55","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                    req, GROUP_NEW_POLICY_MICROVERSION):"},{"line_number":198,"context_line":"                policy \u003d vals.get(\u0027policy\u0027)"},{"line_number":199,"context_line":"                sgp.policy \u003d policy.get(\u0027name\u0027)"},{"line_number":200,"context_line":"                sgp.rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":201,"context_line":"            else:"},{"line_number":202,"context_line":"                policies \u003d vals.get(\u0027policies\u0027)"},{"line_number":203,"context_line":"                sgp.policy \u003d policies[0]"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_75301f9f","line":200,"range":{"start_line":200,"start_character":16,"end_line":200,"end_character":47},"updated":"2018-07-05 16:48:01.000000000","message":"Per my comment here:\n\nhttps://review.openstack.org/#/c/571465/15/nova/compute/manager.py@1289\n\nYou\u0027ll need to add a cross-cell minimum nova-compute service version check if max_server_per_host is in rules and the value is \u003e1.\n\nYou would use this method to do the check:\n\nhttps://github.com/openstack/nova/blob/187f80a32c8b5cdfc115e9b90f4818f3d9d1f8fe/nova/objects/service.py#L470","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f47d13362141c7d95cbfd2b91f500312e0533beb","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    req, GROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":187,"context_line":"                policy \u003d vals[\u0027policy\u0027]"},{"line_number":188,"context_line":"                rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":189,"context_line":"                if not _should_enable_custom_max_server_rules(context, rules):"},{"line_number":190,"context_line":"                    exp \u003d _(\"Can\u0027t create a group with \u0027max_server_per_host\u0027 \""},{"line_number":191,"context_line":"                            \"\u003e 1 until all compute services upgrade to Rocky \""},{"line_number":192,"context_line":"                            \"version.\")"},{"line_number":193,"context_line":"                    raise exc.HTTPConflict(explanation\u003dexp)"},{"line_number":194,"context_line":"                sg \u003d objects.InstanceGroup(context, policy\u003dpolicy[\u0027name\u0027],"},{"line_number":195,"context_line":"                                           rules\u003drules)"},{"line_number":196,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_44072f1e","line":193,"range":{"start_line":189,"start_character":15,"end_line":193,"end_character":59},"updated":"2018-07-10 08:46:41.000000000","message":"maybe also a todo or notes here about why this is added and when are you planning to remove it.","commit_id":"a2e3f158ddf36c967fca69bfccdefd484298ed4e"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"dd39a73135a2bcd3e41d1ccca1104d335e9706f9","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    req, GROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":187,"context_line":"                policy \u003d vals[\u0027policy\u0027]"},{"line_number":188,"context_line":"                rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":189,"context_line":"                if not _should_enable_custom_max_server_rules(context, rules):"},{"line_number":190,"context_line":"                    exp \u003d _(\"Can\u0027t create a group with \u0027max_server_per_host\u0027 \""},{"line_number":191,"context_line":"                            \"\u003e 1 until all compute services upgrade to Rocky \""},{"line_number":192,"context_line":"                            \"version.\")"},{"line_number":193,"context_line":"                    raise exc.HTTPConflict(explanation\u003dexp)"},{"line_number":194,"context_line":"                sg \u003d objects.InstanceGroup(context, policy\u003dpolicy[\u0027name\u0027],"},{"line_number":195,"context_line":"                                           rules\u003drules)"},{"line_number":196,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_25ab0c1e","line":193,"range":{"start_line":189,"start_character":15,"end_line":193,"end_character":59},"in_reply_to":"5f7c97a3_1f02e23e","updated":"2018-07-10 11:21:27.000000000","message":"Done","commit_id":"a2e3f158ddf36c967fca69bfccdefd484298ed4e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d7e0fc3973a7f0935cfb06509430e58867532bf0","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    req, GROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":187,"context_line":"                policy \u003d vals[\u0027policy\u0027]"},{"line_number":188,"context_line":"                rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":189,"context_line":"                if not _should_enable_custom_max_server_rules(context, rules):"},{"line_number":190,"context_line":"                    exp \u003d _(\"Can\u0027t create a group with \u0027max_server_per_host\u0027 \""},{"line_number":191,"context_line":"                            \"\u003e 1 until all compute services upgrade to Rocky \""},{"line_number":192,"context_line":"                            \"version.\")"},{"line_number":193,"context_line":"                    raise exc.HTTPConflict(explanation\u003dexp)"},{"line_number":194,"context_line":"                sg \u003d objects.InstanceGroup(context, policy\u003dpolicy[\u0027name\u0027],"},{"line_number":195,"context_line":"                                           rules\u003drules)"},{"line_number":196,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_1f02e23e","line":193,"range":{"start_line":189,"start_character":15,"end_line":193,"end_character":59},"in_reply_to":"5f7c97a3_44072f1e","updated":"2018-07-10 09:16:54.000000000","message":"As discussed F2F, you should check across all cells and switch context.","commit_id":"a2e3f158ddf36c967fca69bfccdefd484298ed4e"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"dd39a73135a2bcd3e41d1ccca1104d335e9706f9","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    req, GROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":187,"context_line":"                policy \u003d vals[\u0027policy\u0027]"},{"line_number":188,"context_line":"                rules \u003d policy.get(\u0027rules\u0027)"},{"line_number":189,"context_line":"                if not _should_enable_custom_max_server_rules(context, rules):"},{"line_number":190,"context_line":"                    exp \u003d _(\"Can\u0027t create a group with \u0027max_server_per_host\u0027 \""},{"line_number":191,"context_line":"                            \"\u003e 1 until all compute services upgrade to Rocky \""},{"line_number":192,"context_line":"                            \"version.\")"},{"line_number":193,"context_line":"                    raise exc.HTTPConflict(explanation\u003dexp)"},{"line_number":194,"context_line":"                sg \u003d objects.InstanceGroup(context, policy\u003dpolicy[\u0027name\u0027],"},{"line_number":195,"context_line":"                                           rules\u003drules)"},{"line_number":196,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_c5a57849","line":193,"range":{"start_line":189,"start_character":15,"end_line":193,"end_character":59},"in_reply_to":"5f7c97a3_44072f1e","updated":"2018-07-10 11:21:27.000000000","message":"Done","commit_id":"a2e3f158ddf36c967fca69bfccdefd484298ed4e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b9e37a00f04cad13cda782a29833d0e9ae167ab3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        server_group[\u0027name\u0027] \u003d group.name"},{"line_number":105,"context_line":"        if api_version_request.is_supported("},{"line_number":106,"context_line":"                req, min_version\u003dGROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":107,"context_line":"            server_group[\u0027policy\u0027] \u003d {}"},{"line_number":108,"context_line":"            server_group[\u0027policy\u0027][\u0027name\u0027] \u003d group.policy"},{"line_number":109,"context_line":"            server_group[\u0027policy\u0027][\u0027rules\u0027] \u003d group.rules or {}"},{"line_number":110,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_37b3390b","line":107,"updated":"2018-07-10 18:34:47.000000000","message":"I don\u0027t think we need to make this a nested object here. We flattened it in the data model because it\u0027s always 1:1, and I\u0027ve suggested that we do it in the notification as well.\n\nMatt was pointing out that in most cases where we have a nesting like this, it\u0027s for resources that you can request on their own, when embedded into other objects. This doesn\u0027t meet that criteria, so I think the extra bulk isn\u0027t worth it. Can we just move server_group[\u0027policy\u0027][\u0027name\u0027] to server_group[\u0027policy\u0027] and rules up a level?\n\nIf there is some reason why having them nested makes more sense, definitely speak up... :)","commit_id":"a2db557dbc565264c06d7a21de93ac7a1b3aa449"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        vals \u003d body[\u0027server_group\u0027]"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            if api_version_request.is_supported("},{"line_number":185,"context_line":"                    req, GROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":186,"context_line":"                policy \u003d vals[\u0027policy\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_d6aad982","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":12},"updated":"2018-07-12 11:10:16.000000000","message":"this try can be at same position i mean L201","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        vals \u003d body[\u0027server_group\u0027]"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            if api_version_request.is_supported("},{"line_number":185,"context_line":"                    req, GROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":186,"context_line":"                policy \u003d vals[\u0027policy\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_b193a74e","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":12},"in_reply_to":"5f7c97a3_d6aad982","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if api_version_request.is_supported("},{"line_number":106,"context_line":"                req, min_version\u003dGROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":107,"context_line":"            server_group[\u0027policy\u0027] \u003d group.policy"},{"line_number":108,"context_line":"            server_group[\u0027rules\u0027] \u003d group.rules or {}"},{"line_number":109,"context_line":"        else:"},{"line_number":110,"context_line":"            server_group[\u0027policies\u0027] \u003d group.policies or []"},{"line_number":111,"context_line":"            # NOTE(yikun): Before v2.64, a empty metadata is exposed to the"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_e4e14dd1","line":108,"range":{"start_line":108,"start_character":47,"end_line":108,"end_character":53},"updated":"2018-07-12 21:49:32.000000000","message":"This isn\u0027t necessary since InstanceGroup.rules will default to {}.","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if api_version_request.is_supported("},{"line_number":106,"context_line":"                req, min_version\u003dGROUP_POLICY_OBJ_MICROVERSION):"},{"line_number":107,"context_line":"            server_group[\u0027policy\u0027] \u003d group.policy"},{"line_number":108,"context_line":"            server_group[\u0027rules\u0027] \u003d group.rules or {}"},{"line_number":109,"context_line":"        else:"},{"line_number":110,"context_line":"            server_group[\u0027policies\u0027] \u003d group.policies or []"},{"line_number":111,"context_line":"            # NOTE(yikun): Before v2.64, a empty metadata is exposed to the"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_00a3109d","line":108,"range":{"start_line":108,"start_character":47,"end_line":108,"end_character":53},"in_reply_to":"5f7c97a3_e4e14dd1","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            policy \u003d vals[\u0027policy\u0027]"},{"line_number":187,"context_line":"            rules \u003d vals.get(\u0027rules\u0027, {})"},{"line_number":188,"context_line":"            if policy !\u003d \u0027anti-affinity\u0027 and rules:"},{"line_number":189,"context_line":"                msg \u003d _(\"Only anti-affinity policy support rules.\")"},{"line_number":190,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":191,"context_line":"            # NOTE(yikun): This should be removed in Stein version."},{"line_number":192,"context_line":"            if not _should_enable_custom_max_server_rules(context, rules):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a4cb5549","line":189,"range":{"start_line":189,"start_character":51,"end_line":189,"end_character":58},"updated":"2018-07-12 21:49:32.000000000","message":"supports","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            policy \u003d vals[\u0027policy\u0027]"},{"line_number":187,"context_line":"            rules \u003d vals.get(\u0027rules\u0027, {})"},{"line_number":188,"context_line":"            if policy !\u003d \u0027anti-affinity\u0027 and rules:"},{"line_number":189,"context_line":"                msg \u003d _(\"Only anti-affinity policy support rules.\")"},{"line_number":190,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":191,"context_line":"            # NOTE(yikun): This should be removed in Stein version."},{"line_number":192,"context_line":"            if not _should_enable_custom_max_server_rules(context, rules):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a0b33cec","line":189,"range":{"start_line":189,"start_character":51,"end_line":189,"end_character":58},"in_reply_to":"5f7c97a3_a4cb5549","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":191,"context_line":"            # NOTE(yikun): This should be removed in Stein version."},{"line_number":192,"context_line":"            if not _should_enable_custom_max_server_rules(context, rules):"},{"line_number":193,"context_line":"                msg \u003d _(\"Create a group with \u0027max_server_per_host\u0027 \u003e 1\""},{"line_number":194,"context_line":"                        \" is not yet available.\")"},{"line_number":195,"context_line":"                raise exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":196,"context_line":"            sg \u003d objects.InstanceGroup(context, policy\u003dpolicy,"},{"line_number":197,"context_line":"                                       rules\u003drules)"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_e42f0df3","line":194,"range":{"start_line":193,"start_character":16,"end_line":194,"end_character":49},"updated":"2018-07-12 21:49:32.000000000","message":"nit: I\u0027d slightly re-word this as:\n\n\"Creating an anti-affinity group with rule max_server_per_host \u003e 1 is not yet supported.\"","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":191,"context_line":"            # NOTE(yikun): This should be removed in Stein version."},{"line_number":192,"context_line":"            if not _should_enable_custom_max_server_rules(context, rules):"},{"line_number":193,"context_line":"                msg \u003d _(\"Create a group with \u0027max_server_per_host\u0027 \u003e 1\""},{"line_number":194,"context_line":"                        \" is not yet available.\")"},{"line_number":195,"context_line":"                raise exc.HTTPConflict(explanation\u003dmsg)"},{"line_number":196,"context_line":"            sg \u003d objects.InstanceGroup(context, policy\u003dpolicy,"},{"line_number":197,"context_line":"                                       rules\u003drules)"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_c0b678dc","line":194,"range":{"start_line":193,"start_character":16,"end_line":194,"end_character":49},"in_reply_to":"5f7c97a3_e42f0df3","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"}],"nova/tests/functional/api_sample_tests/api_samples/os-server-groups/v2.64/server-groups-post-req.json.tpl":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"118f22fdbe21274b3eee59273ace796078e0d760","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"name\": \"%(name)s\","},{"line_number":4,"context_line":"        \"policy\": {"},{"line_number":5,"context_line":"            \"name\": \"anti-affinity\","},{"line_number":6,"context_line":"            \"rules\": \"max_server_per_host\": \"3\""},{"line_number":7,"context_line":"        }"},{"line_number":8,"context_line":"    }"},{"line_number":9,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":21,"id":"5f7c97a3_b2da5b76","line":6,"range":{"start_line":6,"start_character":21,"end_line":6,"end_character":47},"updated":"2018-07-05 02:54:06.000000000","message":"missing {}","commit_id":"93d1ec0bdbe3dc0f3cccc61b119e3cf37eeb2ebd"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"bec42712c6493e5a922764aacf938ba93c7b1e82","unresolved":false,"context_lines":[{"line_number":3,"context_line":"        \"name\": \"%(name)s\","},{"line_number":4,"context_line":"        \"policy\": {"},{"line_number":5,"context_line":"            \"name\": \"anti-affinity\","},{"line_number":6,"context_line":"            \"rules\": \"max_server_per_host\": \"3\""},{"line_number":7,"context_line":"        }"},{"line_number":8,"context_line":"    }"},{"line_number":9,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":21,"id":"5f7c97a3_7215a3e5","line":6,"range":{"start_line":6,"start_character":21,"end_line":6,"end_character":47},"in_reply_to":"5f7c97a3_b2da5b76","updated":"2018-07-05 03:08:51.000000000","message":"Done","commit_id":"93d1ec0bdbe3dc0f3cccc61b119e3cf37eeb2ebd"}],"nova/tests/functional/test_server_group.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":702,"context_line":"            created_group \u003d self.api.post_server_groups(group)"},{"line_number":703,"context_line":"            created_groups.append(created_group)"},{"line_number":704,"context_line":"            self.assertEqual(group[\u0027name\u0027], created_group[\u0027name\u0027])"},{"line_number":705,"context_line":"            if self.microversion \u003c \"2.63\":"},{"line_number":706,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":707,"context_line":"            else:"},{"line_number":708,"context_line":"                if group[\u0027policy\u0027].get(\u0027rules\u0027):"},{"line_number":709,"context_line":"                    self.assertEqual(group[\u0027policy\u0027], created_group[\u0027policy\u0027])"},{"line_number":710,"context_line":"                else:"},{"line_number":711,"context_line":"                    self.assertEqual({\u0027name\u0027: group[\u0027policy\u0027][\u0027name\u0027],"},{"line_number":712,"context_line":"                                      \u0027rules\u0027: {}}, created_group[\u0027policy\u0027])"},{"line_number":713,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":714,"context_line":"            if self.microversion \u003c \"2.63\":"},{"line_number":715,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":716,"context_line":"            else:"},{"line_number":717,"context_line":"                self.assertFalse(hasattr(created_group, \u0027metadata\u0027))"},{"line_number":718,"context_line":"            self.assertIn(\u0027id\u0027, created_group)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"            group_details \u003d self.api.get_server_group(created_group[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_9ae47210","line":717,"range":{"start_line":705,"start_character":0,"end_line":717,"end_character":68},"updated":"2018-06-06 07:50:19.000000000","message":"maybe put it in the 263 tests will be clearner, but no big deal.","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":702,"context_line":"            created_group \u003d self.api.post_server_groups(group)"},{"line_number":703,"context_line":"            created_groups.append(created_group)"},{"line_number":704,"context_line":"            self.assertEqual(group[\u0027name\u0027], created_group[\u0027name\u0027])"},{"line_number":705,"context_line":"            if self.microversion \u003c \"2.63\":"},{"line_number":706,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":707,"context_line":"            else:"},{"line_number":708,"context_line":"                if group[\u0027policy\u0027].get(\u0027rules\u0027):"},{"line_number":709,"context_line":"                    self.assertEqual(group[\u0027policy\u0027], created_group[\u0027policy\u0027])"},{"line_number":710,"context_line":"                else:"},{"line_number":711,"context_line":"                    self.assertEqual({\u0027name\u0027: group[\u0027policy\u0027][\u0027name\u0027],"},{"line_number":712,"context_line":"                                      \u0027rules\u0027: {}}, created_group[\u0027policy\u0027])"},{"line_number":713,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":714,"context_line":"            if self.microversion \u003c \"2.63\":"},{"line_number":715,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":716,"context_line":"            else:"},{"line_number":717,"context_line":"                self.assertFalse(hasattr(created_group, \u0027metadata\u0027))"},{"line_number":718,"context_line":"            self.assertIn(\u0027id\u0027, created_group)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"            group_details \u003d self.api.get_server_group(created_group[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_3a343efb","line":717,"range":{"start_line":705,"start_character":0,"end_line":717,"end_character":68},"in_reply_to":"5f7c97a3_9ae47210","updated":"2018-06-11 11:39:36.000000000","message":"263 inherit from 215, so I only change this case to adapt 263 case.","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab4a8dbdb6c7dd6752bd1a188f50ef8109ffa3e1","unresolved":false,"context_lines":[{"line_number":702,"context_line":"            created_group \u003d self.api.post_server_groups(group)"},{"line_number":703,"context_line":"            created_groups.append(created_group)"},{"line_number":704,"context_line":"            self.assertEqual(group[\u0027name\u0027], created_group[\u0027name\u0027])"},{"line_number":705,"context_line":"            if self.microversion \u003c \"2.64\":"},{"line_number":706,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":707,"context_line":"            else:"},{"line_number":708,"context_line":"                if group[\u0027policy\u0027].get(\u0027rules\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_eebfa3cd","line":705,"range":{"start_line":705,"start_character":15,"end_line":705,"end_character":41},"updated":"2018-06-21 02:22:05.000000000","message":"APIVersionRequest should be used for comparison.","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a687b1113137392d6cd3386cbc919c48a43ce56f","unresolved":false,"context_lines":[{"line_number":702,"context_line":"            created_group \u003d self.api.post_server_groups(group)"},{"line_number":703,"context_line":"            created_groups.append(created_group)"},{"line_number":704,"context_line":"            self.assertEqual(group[\u0027name\u0027], created_group[\u0027name\u0027])"},{"line_number":705,"context_line":"            if self.microversion \u003c \"2.64\":"},{"line_number":706,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":707,"context_line":"            else:"},{"line_number":708,"context_line":"                if group[\u0027policy\u0027].get(\u0027rules\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_3a4075a2","line":705,"range":{"start_line":705,"start_character":15,"end_line":705,"end_character":41},"in_reply_to":"5f7c97a3_eebfa3cd","updated":"2018-06-21 07:19:32.000000000","message":"Done","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ab4a8dbdb6c7dd6752bd1a188f50ef8109ffa3e1","unresolved":false,"context_lines":[{"line_number":711,"context_line":"                    self.assertEqual({\u0027name\u0027: group[\u0027policy\u0027][\u0027name\u0027],"},{"line_number":712,"context_line":"                                      \u0027rules\u0027: {}}, created_group[\u0027policy\u0027])"},{"line_number":713,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":714,"context_line":"            if self.microversion \u003c \"2.64\":"},{"line_number":715,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":716,"context_line":"            else:"},{"line_number":717,"context_line":"                self.assertFalse(hasattr(created_group, \u0027metadata\u0027))"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_ce9f4763","line":714,"range":{"start_line":714,"start_character":15,"end_line":714,"end_character":41},"updated":"2018-06-21 02:22:05.000000000","message":"ditto","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a687b1113137392d6cd3386cbc919c48a43ce56f","unresolved":false,"context_lines":[{"line_number":711,"context_line":"                    self.assertEqual({\u0027name\u0027: group[\u0027policy\u0027][\u0027name\u0027],"},{"line_number":712,"context_line":"                                      \u0027rules\u0027: {}}, created_group[\u0027policy\u0027])"},{"line_number":713,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":714,"context_line":"            if self.microversion \u003c \"2.64\":"},{"line_number":715,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":716,"context_line":"            else:"},{"line_number":717,"context_line":"                self.assertFalse(hasattr(created_group, \u0027metadata\u0027))"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_da12a1b4","line":714,"range":{"start_line":714,"start_character":15,"end_line":714,"end_character":41},"in_reply_to":"5f7c97a3_ce9f4763","updated":"2018-06-21 07:19:32.000000000","message":"Done","commit_id":"4170be6a6fb746ec6be6e300eedc2a5a80bc7a01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":703,"context_line":"            created_group \u003d self.api.post_server_groups(group)"},{"line_number":704,"context_line":"            created_groups.append(created_group)"},{"line_number":705,"context_line":"            self.assertEqual(group[\u0027name\u0027], created_group[\u0027name\u0027])"},{"line_number":706,"context_line":"            ver \u003d versionutils.convert_version_to_tuple(self.microversion)"},{"line_number":707,"context_line":"            if ver \u003c (2, 64):"},{"line_number":708,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":709,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":710,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_150d2b3f","line":707,"range":{"start_line":706,"start_character":12,"end_line":707,"end_character":29},"updated":"2018-07-05 17:19:38.000000000","message":"nit: would be nicer to use the APIVersionRequest objects that we use in the handler code.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":703,"context_line":"            created_group \u003d self.api.post_server_groups(group)"},{"line_number":704,"context_line":"            created_groups.append(created_group)"},{"line_number":705,"context_line":"            self.assertEqual(group[\u0027name\u0027], created_group[\u0027name\u0027])"},{"line_number":706,"context_line":"            ver \u003d versionutils.convert_version_to_tuple(self.microversion)"},{"line_number":707,"context_line":"            if ver \u003c (2, 64):"},{"line_number":708,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":709,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":710,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_bd63be40","line":707,"range":{"start_line":706,"start_character":12,"end_line":707,"end_character":29},"in_reply_to":"5f7c97a3_150d2b3f","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                else:"},{"line_number":714,"context_line":"                    self.assertEqual({\u0027name\u0027: group[\u0027policy\u0027][\u0027name\u0027],"},{"line_number":715,"context_line":"                                      \u0027rules\u0027: {}}, created_group[\u0027policy\u0027])"},{"line_number":716,"context_line":"                self.assertFalse(hasattr(created_group, \u0027metadata\u0027))"},{"line_number":717,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":718,"context_line":"            self.assertIn(\u0027id\u0027, created_group)"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_48fc660b","line":716,"range":{"start_line":716,"start_character":33,"end_line":716,"end_character":40},"updated":"2018-07-05 17:19:38.000000000","message":"Won\u0027t this always be false since it\u0027s not an object. This is probably better:\n\nself.assertNotIn(\u0027metadata\u0027, created_group)","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":713,"context_line":"                else:"},{"line_number":714,"context_line":"                    self.assertEqual({\u0027name\u0027: group[\u0027policy\u0027][\u0027name\u0027],"},{"line_number":715,"context_line":"                                      \u0027rules\u0027: {}}, created_group[\u0027policy\u0027])"},{"line_number":716,"context_line":"                self.assertFalse(hasattr(created_group, \u0027metadata\u0027))"},{"line_number":717,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":718,"context_line":"            self.assertIn(\u0027id\u0027, created_group)"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_1d543253","line":716,"range":{"start_line":716,"start_character":33,"end_line":716,"end_character":40},"in_reply_to":"5f7c97a3_48fc660b","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":874,"context_line":"    auto_network \u003d True"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    def test_boot_server_with_anti_affinity_rules(self):"},{"line_number":877,"context_line":"        anti_affinity_max_2 \u003d {\u0027name\u0027: \u0027fake-name-1\u0027, \u0027policy\u0027: {"},{"line_number":878,"context_line":"            \u0027name\u0027: \u0027anti-affinity\u0027, \u0027rules\u0027: {\u0027max_server_per_host\u0027: \u00272\u0027}}}"},{"line_number":879,"context_line":"        created_group \u003d self.api.post_server_groups(anti_affinity_max_2)"},{"line_number":880,"context_line":"        self._boot_servers_to_group(created_group)"},{"line_number":881,"context_line":"        self._boot_servers_to_group(created_group)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_c80f162d","line":878,"range":{"start_line":877,"start_character":30,"end_line":878,"end_character":76},"updated":"2018-07-05 17:19:38.000000000","message":"Please expand this out, it\u0027s hard to read on 2 lines.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":874,"context_line":"    auto_network \u003d True"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    def test_boot_server_with_anti_affinity_rules(self):"},{"line_number":877,"context_line":"        anti_affinity_max_2 \u003d {\u0027name\u0027: \u0027fake-name-1\u0027, \u0027policy\u0027: {"},{"line_number":878,"context_line":"            \u0027name\u0027: \u0027anti-affinity\u0027, \u0027rules\u0027: {\u0027max_server_per_host\u0027: \u00272\u0027}}}"},{"line_number":879,"context_line":"        created_group \u003d self.api.post_server_groups(anti_affinity_max_2)"},{"line_number":880,"context_line":"        self._boot_servers_to_group(created_group)"},{"line_number":881,"context_line":"        self._boot_servers_to_group(created_group)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_dd49dab7","line":878,"range":{"start_line":877,"start_character":30,"end_line":878,"end_character":76},"in_reply_to":"5f7c97a3_c80f162d","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                expected_status\u003d\u0027ACTIVE\u0027, flavor\u003dNone):"},{"line_number":98,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":99,"context_line":"            self.api, \u0027some-server\u0027,"},{"line_number":100,"context_line":"            image_uuid\u003d\u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027)"},{"line_number":101,"context_line":"        if self.auto_network:"},{"line_number":102,"context_line":"            server.update({\u0027networks\u0027: \u0027auto\u0027})"},{"line_number":103,"context_line":"        if flavor:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_b6a5ddb6","line":100,"updated":"2018-07-12 11:32:36.000000000","message":"Yeah image api proxy is gone in newer microversions. I\u0027m OK to do this change in these tests for the old microversions too.","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                                expected_status\u003d\u0027ACTIVE\u0027, flavor\u003dNone):"},{"line_number":98,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":99,"context_line":"            self.api, \u0027some-server\u0027,"},{"line_number":100,"context_line":"            image_uuid\u003d\u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027)"},{"line_number":101,"context_line":"        if self.auto_network:"},{"line_number":102,"context_line":"            server.update({\u0027networks\u0027: \u0027auto\u0027})"},{"line_number":103,"context_line":"        if flavor:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_91646b4f","line":100,"in_reply_to":"5f7c97a3_b6a5ddb6","updated":"2018-07-12 13:36:18.000000000","message":"OK, thanks","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":99,"context_line":"            self.api, \u0027some-server\u0027,"},{"line_number":100,"context_line":"            image_uuid\u003d\u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027)"},{"line_number":101,"context_line":"        if self.auto_network:"},{"line_number":102,"context_line":"            server.update({\u0027networks\u0027: \u0027auto\u0027})"},{"line_number":103,"context_line":"        if flavor:"},{"line_number":104,"context_line":"            server[\u0027flavorRef\u0027] \u003d (\u0027http://fake.server/%s\u0027"},{"line_number":105,"context_line":"                                                  % flavor[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_d69e5905","line":102,"range":{"start_line":101,"start_character":1,"end_line":102,"end_character":47},"updated":"2018-07-12 11:32:36.000000000","message":"This could be simplyfied. Add networks\u003d[] to the above call to _build_minimal_create_server_request() that works for both old and new microversions so you don\u0027t need yet another class level field (auto_network)","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        server \u003d self._build_minimal_create_server_request("},{"line_number":99,"context_line":"            self.api, \u0027some-server\u0027,"},{"line_number":100,"context_line":"            image_uuid\u003d\u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027)"},{"line_number":101,"context_line":"        if self.auto_network:"},{"line_number":102,"context_line":"            server.update({\u0027networks\u0027: \u0027auto\u0027})"},{"line_number":103,"context_line":"        if flavor:"},{"line_number":104,"context_line":"            server[\u0027flavorRef\u0027] \u003d (\u0027http://fake.server/%s\u0027"},{"line_number":105,"context_line":"                                                  % flavor[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_71cbcf4a","line":102,"range":{"start_line":101,"start_character":1,"end_line":102,"end_character":47},"in_reply_to":"5f7c97a3_d69e5905","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":707,"context_line":"            if ver \u003c avr.APIVersionRequest(\"2.64\"):"},{"line_number":708,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":709,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":710,"context_line":"            else:"},{"line_number":711,"context_line":"                self.assertEqual(group[\u0027policy\u0027], created_group[\u0027policy\u0027])"},{"line_number":712,"context_line":"                self.assertEqual(group.get(\u0027rules\u0027, {}),"},{"line_number":713,"context_line":"                                 created_group[\u0027rules\u0027])"},{"line_number":714,"context_line":"                self.assertNotIn(\u0027metadata\u0027, created_group)"},{"line_number":715,"context_line":"                self.assertNotIn(\u0027policies\u0027, created_group)"},{"line_number":716,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":717,"context_line":"            self.assertIn(\u0027id\u0027, created_group)"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"            group_details \u003d self.api.get_server_group(created_group[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_76450516","line":716,"range":{"start_line":710,"start_character":0,"end_line":716,"end_character":1},"updated":"2018-07-12 11:32:36.000000000","message":"you have a separate test class for api verison 2.64 so test this part there. If you don\u0027t want to repeat the common asserts then factor out the metadata and policies checks to a function that you override in the ServerGroupTestV264 class","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":707,"context_line":"            if ver \u003c avr.APIVersionRequest(\"2.64\"):"},{"line_number":708,"context_line":"                self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":709,"context_line":"                self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":710,"context_line":"            else:"},{"line_number":711,"context_line":"                self.assertEqual(group[\u0027policy\u0027], created_group[\u0027policy\u0027])"},{"line_number":712,"context_line":"                self.assertEqual(group.get(\u0027rules\u0027, {}),"},{"line_number":713,"context_line":"                                 created_group[\u0027rules\u0027])"},{"line_number":714,"context_line":"                self.assertNotIn(\u0027metadata\u0027, created_group)"},{"line_number":715,"context_line":"                self.assertNotIn(\u0027policies\u0027, created_group)"},{"line_number":716,"context_line":"            self.assertEqual([], created_group[\u0027members\u0027])"},{"line_number":717,"context_line":"            self.assertIn(\u0027id\u0027, created_group)"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"            group_details \u003d self.api.get_server_group(created_group[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_9180eb9e","line":716,"range":{"start_line":710,"start_character":0,"end_line":716,"end_character":1},"in_reply_to":"5f7c97a3_76450516","updated":"2018-07-12 13:36:18.000000000","message":"Good idea, and it makes code more clear","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":863,"context_line":"class ServerGroupTestV264(ServerGroupTestV215):"},{"line_number":864,"context_line":"    api_major_version \u003d \u0027v2.1\u0027"},{"line_number":865,"context_line":"    microversion \u003d \u00272.64\u0027"},{"line_number":866,"context_line":"    anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-1\u0027, \u0027policy\u0027: \u0027anti-affinity\u0027,"},{"line_number":867,"context_line":"        \u0027rules\u0027: {\u0027max_server_per_host\u0027: 1}}"},{"line_number":868,"context_line":"    affinity \u003d {\u0027name\u0027: \u0027fake-name-2\u0027, \u0027policy\u0027: \u0027affinity\u0027}"},{"line_number":869,"context_line":"    soft_anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-3\u0027,"},{"line_number":870,"context_line":"                          \u0027policy\u0027: \u0027soft-anti-affinity\u0027}"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_162e1142","line":867,"range":{"start_line":866,"start_character":4,"end_line":867,"end_character":44},"updated":"2018-07-12 11:32:36.000000000","message":"Would the behavior be the same by default if you don\u0027t specify the max_server_per_host at all? I think that is a more interesting case of backward compatibility reasons.","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":863,"context_line":"class ServerGroupTestV264(ServerGroupTestV215):"},{"line_number":864,"context_line":"    api_major_version \u003d \u0027v2.1\u0027"},{"line_number":865,"context_line":"    microversion \u003d \u00272.64\u0027"},{"line_number":866,"context_line":"    anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-1\u0027, \u0027policy\u0027: \u0027anti-affinity\u0027,"},{"line_number":867,"context_line":"        \u0027rules\u0027: {\u0027max_server_per_host\u0027: 1}}"},{"line_number":868,"context_line":"    affinity \u003d {\u0027name\u0027: \u0027fake-name-2\u0027, \u0027policy\u0027: \u0027affinity\u0027}"},{"line_number":869,"context_line":"    soft_anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-3\u0027,"},{"line_number":870,"context_line":"                          \u0027policy\u0027: \u0027soft-anti-affinity\u0027}"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_8ca68e0d","line":867,"range":{"start_line":866,"start_character":4,"end_line":867,"end_character":44},"in_reply_to":"5f7c97a3_162e1142","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":865,"context_line":"    microversion \u003d \u00272.64\u0027"},{"line_number":866,"context_line":"    anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-1\u0027, \u0027policy\u0027: \u0027anti-affinity\u0027,"},{"line_number":867,"context_line":"        \u0027rules\u0027: {\u0027max_server_per_host\u0027: 1}}"},{"line_number":868,"context_line":"    affinity \u003d {\u0027name\u0027: \u0027fake-name-2\u0027, \u0027policy\u0027: \u0027affinity\u0027}"},{"line_number":869,"context_line":"    soft_anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-3\u0027,"},{"line_number":870,"context_line":"                          \u0027policy\u0027: \u0027soft-anti-affinity\u0027}"},{"line_number":871,"context_line":"    soft_affinity \u003d {\u0027name\u0027: \u0027fake-name-4\u0027, \u0027policy\u0027: \u0027soft-affinity\u0027}"},{"line_number":872,"context_line":"    auto_network \u003d True"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def test_boot_server_with_anti_affinity_rules(self):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_3668ed86","line":871,"range":{"start_line":868,"start_character":0,"end_line":871,"end_character":70},"updated":"2018-07-12 11:32:36.000000000","message":"I think you don\u0027t have to repeat this as it is the same as in the base class.","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":865,"context_line":"    microversion \u003d \u00272.64\u0027"},{"line_number":866,"context_line":"    anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-1\u0027, \u0027policy\u0027: \u0027anti-affinity\u0027,"},{"line_number":867,"context_line":"        \u0027rules\u0027: {\u0027max_server_per_host\u0027: 1}}"},{"line_number":868,"context_line":"    affinity \u003d {\u0027name\u0027: \u0027fake-name-2\u0027, \u0027policy\u0027: \u0027affinity\u0027}"},{"line_number":869,"context_line":"    soft_anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-3\u0027,"},{"line_number":870,"context_line":"                          \u0027policy\u0027: \u0027soft-anti-affinity\u0027}"},{"line_number":871,"context_line":"    soft_affinity \u003d {\u0027name\u0027: \u0027fake-name-4\u0027, \u0027policy\u0027: \u0027soft-affinity\u0027}"},{"line_number":872,"context_line":"    auto_network \u003d True"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def test_boot_server_with_anti_affinity_rules(self):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_911f8bb7","line":871,"range":{"start_line":868,"start_character":0,"end_line":871,"end_character":70},"in_reply_to":"5f7c97a3_3668ed86","updated":"2018-07-12 13:36:18.000000000","message":"It\u0027s not repeat, we change policies to policy. :)","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"31e8c93c9da7713f5fe917f9f690be188b99ecd5","unresolved":false,"context_lines":[{"line_number":865,"context_line":"    microversion \u003d \u00272.64\u0027"},{"line_number":866,"context_line":"    anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-1\u0027, \u0027policy\u0027: \u0027anti-affinity\u0027,"},{"line_number":867,"context_line":"        \u0027rules\u0027: {\u0027max_server_per_host\u0027: 1}}"},{"line_number":868,"context_line":"    affinity \u003d {\u0027name\u0027: \u0027fake-name-2\u0027, \u0027policy\u0027: \u0027affinity\u0027}"},{"line_number":869,"context_line":"    soft_anti_affinity \u003d {\u0027name\u0027: \u0027fake-name-3\u0027,"},{"line_number":870,"context_line":"                          \u0027policy\u0027: \u0027soft-anti-affinity\u0027}"},{"line_number":871,"context_line":"    soft_affinity \u003d {\u0027name\u0027: \u0027fake-name-4\u0027, \u0027policy\u0027: \u0027soft-affinity\u0027}"},{"line_number":872,"context_line":"    auto_network \u003d True"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def test_boot_server_with_anti_affinity_rules(self):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_95909251","line":871,"range":{"start_line":868,"start_character":0,"end_line":871,"end_character":70},"in_reply_to":"5f7c97a3_911f8bb7","updated":"2018-07-16 13:35:13.000000000","message":"You are right. My bad.","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":877,"context_line":"            \u0027policy\u0027: \u0027anti-affinity\u0027,"},{"line_number":878,"context_line":"            \u0027rules\u0027: {\u0027max_server_per_host\u0027: 2}"},{"line_number":879,"context_line":"        }"},{"line_number":880,"context_line":"        created_group \u003d self.api.post_server_groups(anti_affinity_max_2)"},{"line_number":881,"context_line":"        self._boot_servers_to_group(created_group)"},{"line_number":882,"context_line":"        self._boot_servers_to_group(created_group)"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"        # We have 2 computes so the fifth server won\u0027t fit into the same group"},{"line_number":885,"context_line":"        failed_server \u003d self._boot_a_server_to_group(created_group,"},{"line_number":886,"context_line":"                                                     expected_status\u003d\u0027ERROR\u0027)"},{"line_number":887,"context_line":"        self.assertEqual(\u0027No valid host was found. \u0027"},{"line_number":888,"context_line":"                         \u0027There are not enough hosts available.\u0027,"},{"line_number":889,"context_line":"                         failed_server[\u0027fault\u0027][\u0027message\u0027])"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_56132902","line":886,"range":{"start_line":880,"start_character":0,"end_line":886,"end_character":77},"updated":"2018-07-12 11:32:36.000000000","message":"Nice reuse of the existing tests pieces. Thanks!","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"5f7c97a3_f6b6f5fc","line":890,"updated":"2018-07-12 11:32:36.000000000","message":"I would also assert that both computes only have 2 servers running on it (so ensure that we don\u0027t have the 3-1 or 4-0 distribution case)","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"5f7c97a3_67e1cdfd","line":890,"in_reply_to":"5f7c97a3_f6b6f5fc","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        host.start()"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def _check_group_format(self, group, created_group):"},{"line_number":691,"context_line":"        self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":692,"context_line":"        self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":693,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_e4086d81","line":690,"updated":"2018-07-12 21:49:32.000000000","message":"Also assert that \u0027rules\u0027 isn\u0027t in the created_group?","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        host.start()"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def _check_group_format(self, group, created_group):"},{"line_number":691,"context_line":"        self.assertEqual(group[\u0027policies\u0027], created_group[\u0027policies\u0027])"},{"line_number":692,"context_line":"        self.assertEqual({}, created_group[\u0027metadata\u0027])"},{"line_number":693,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_80fe4068","line":690,"in_reply_to":"5f7c97a3_e4086d81","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":883,"context_line":"                         \u0027There are not enough hosts available.\u0027,"},{"line_number":884,"context_line":"                         failed_server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        hosts \u003d map(lambda x: x[\u0027OS-EXT-SRV-ATTR:host\u0027], servers1st + servers2nd)"},{"line_number":887,"context_line":"        # 4 servers"},{"line_number":888,"context_line":"        self.assertEqual(4, len(hosts))"},{"line_number":889,"context_line":"        # schedule to 2 host"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a41cb514","line":886,"range":{"start_line":886,"start_character":7,"end_line":886,"end_character":81},"updated":"2018-07-12 21:49:32.000000000","message":"pep8 failure - line too long:\n\nhttp://logs.openstack.org/34/567534/34/check/openstack-tox-pep8/3542bec/job-output.txt.gz#_2018-07-12_14_03_57_900534","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":883,"context_line":"                         \u0027There are not enough hosts available.\u0027,"},{"line_number":884,"context_line":"                         failed_server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        hosts \u003d map(lambda x: x[\u0027OS-EXT-SRV-ATTR:host\u0027], servers1st + servers2nd)"},{"line_number":887,"context_line":"        # 4 servers"},{"line_number":888,"context_line":"        self.assertEqual(4, len(hosts))"},{"line_number":889,"context_line":"        # schedule to 2 host"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_e0d5b4e7","line":886,"range":{"start_line":886,"start_character":7,"end_line":886,"end_character":81},"in_reply_to":"5f7c97a3_a41cb514","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        hosts \u003d map(lambda x: x[\u0027OS-EXT-SRV-ATTR:host\u0027], servers1st + servers2nd)"},{"line_number":887,"context_line":"        # 4 servers"},{"line_number":888,"context_line":"        self.assertEqual(4, len(hosts))"},{"line_number":889,"context_line":"        # schedule to 2 host"},{"line_number":890,"context_line":"        self.assertEqual(2, len(set(hosts)))"},{"line_number":891,"context_line":"        # each host has 2 servers"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_e422ad54","line":888,"range":{"start_line":888,"start_character":8,"end_line":888,"end_character":39},"updated":"2018-07-12 21:49:32.000000000","message":"You\u0027re hitting a TypeError here:\n\nhttp://logs.openstack.org/34/567534/34/check/nova-tox-functional-py35/18ca9db/job-output.txt.gz#_2018-07-12_14_15_59_617068\n\nb\"TypeError: object of type \u0027map\u0027 has no len()\"","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        hosts \u003d map(lambda x: x[\u0027OS-EXT-SRV-ATTR:host\u0027], servers1st + servers2nd)"},{"line_number":887,"context_line":"        # 4 servers"},{"line_number":888,"context_line":"        self.assertEqual(4, len(hosts))"},{"line_number":889,"context_line":"        # schedule to 2 host"},{"line_number":890,"context_line":"        self.assertEqual(2, len(set(hosts)))"},{"line_number":891,"context_line":"        # each host has 2 servers"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_c0043880","line":888,"range":{"start_line":888,"start_character":8,"end_line":888,"end_character":39},"in_reply_to":"5f7c97a3_e422ad54","updated":"2018-07-13 02:45:32.000000000","message":"yeah, we need do hosts \u003d [h for h in hosts], because the results of L886 change from list(in py2) to iterated obj(in py3)","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"}],"nova/tests/unit/api/openstack/compute/test_server_groups.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        attrs[\u0027policies\u0027] \u003d []"},{"line_number":63,"context_line":"    if \u0027policy\u0027 in attrs:"},{"line_number":64,"context_line":"        policy \u003d attrs.pop(\u0027policy\u0027)"},{"line_number":65,"context_line":"        policy[\u0027rules\u0027] \u003d policy.get(\u0027rules\u0027) or None"},{"line_number":66,"context_line":"        policy[\u0027policy\u0027] \u003d policy.get(\u0027name\u0027)"},{"line_number":67,"context_line":"        policy[\u0027group_id\u0027] \u003d 7"},{"line_number":68,"context_line":"        attrs[\u0027policy\u0027] \u003d objects.InstanceGroupPolicy(**policy)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_682a827e","line":65,"range":{"start_line":65,"start_character":46,"end_line":65,"end_character":53},"updated":"2018-07-05 17:19:38.000000000","message":"This is redundant with get()","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        attrs[\u0027policies\u0027] \u003d []"},{"line_number":63,"context_line":"    if \u0027policy\u0027 in attrs:"},{"line_number":64,"context_line":"        policy \u003d attrs.pop(\u0027policy\u0027)"},{"line_number":65,"context_line":"        policy[\u0027rules\u0027] \u003d policy.get(\u0027rules\u0027) or None"},{"line_number":66,"context_line":"        policy[\u0027policy\u0027] \u003d policy.get(\u0027name\u0027)"},{"line_number":67,"context_line":"        policy[\u0027group_id\u0027] \u003d 7"},{"line_number":68,"context_line":"        attrs[\u0027policy\u0027] \u003d objects.InstanceGroupPolicy(**policy)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_3dfd6e3a","line":65,"range":{"start_line":65,"start_character":46,"end_line":65,"end_character":53},"in_reply_to":"5f7c97a3_682a827e","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    if \u0027policy\u0027 in attrs:"},{"line_number":64,"context_line":"        policy \u003d attrs.pop(\u0027policy\u0027)"},{"line_number":65,"context_line":"        policy[\u0027rules\u0027] \u003d policy.get(\u0027rules\u0027) or None"},{"line_number":66,"context_line":"        policy[\u0027policy\u0027] \u003d policy.get(\u0027name\u0027)"},{"line_number":67,"context_line":"        policy[\u0027group_id\u0027] \u003d 7"},{"line_number":68,"context_line":"        attrs[\u0027policy\u0027] \u003d objects.InstanceGroupPolicy(**policy)"},{"line_number":69,"context_line":"        del attrs[\u0027policies\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_081bce6e","line":66,"range":{"start_line":66,"start_character":34,"end_line":66,"end_character":37},"updated":"2018-07-05 17:19:38.000000000","message":"name is required so don\u0027t use get()","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    if \u0027policy\u0027 in attrs:"},{"line_number":64,"context_line":"        policy \u003d attrs.pop(\u0027policy\u0027)"},{"line_number":65,"context_line":"        policy[\u0027rules\u0027] \u003d policy.get(\u0027rules\u0027) or None"},{"line_number":66,"context_line":"        policy[\u0027policy\u0027] \u003d policy.get(\u0027name\u0027)"},{"line_number":67,"context_line":"        policy[\u0027group_id\u0027] \u003d 7"},{"line_number":68,"context_line":"        attrs[\u0027policy\u0027] \u003d objects.InstanceGroupPolicy(**policy)"},{"line_number":69,"context_line":"        del attrs[\u0027policies\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_fdf29668","line":66,"range":{"start_line":66,"start_character":34,"end_line":66,"end_character":37},"in_reply_to":"5f7c97a3_081bce6e","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                                path, api_version\u003d\u00272.1\u0027, limited\u003dNone):"},{"line_number":230,"context_line":"        policies \u003d [\u0027anti-affinity\u0027]"},{"line_number":231,"context_line":"        policy \u003d {"},{"line_number":232,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":233,"context_line":"                \"rules\": {}"},{"line_number":234,"context_line":"        }"},{"line_number":235,"context_line":"        members \u003d []"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_e83532dc","line":232,"range":{"start_line":232,"start_character":12,"end_line":232,"end_character":16},"updated":"2018-07-05 17:19:38.000000000","message":"too much indent","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                                path, api_version\u003d\u00272.1\u0027, limited\u003dNone):"},{"line_number":230,"context_line":"        policies \u003d [\u0027anti-affinity\u0027]"},{"line_number":231,"context_line":"        policy \u003d {"},{"line_number":232,"context_line":"                \"name\": \"anti-affinity\","},{"line_number":233,"context_line":"                \"rules\": {}"},{"line_number":234,"context_line":"        }"},{"line_number":235,"context_line":"        members \u003d []"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_7db5267c","line":232,"range":{"start_line":232,"start_character":12,"end_line":232,"end_character":16},"in_reply_to":"5f7c97a3_e83532dc","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        names \u003d [\u0027default-x\u0027, \u0027test\u0027]"},{"line_number":238,"context_line":"        p_id \u003d fakes.FAKE_PROJECT_ID"},{"line_number":239,"context_line":"        u_id \u003d fakes.FAKE_USER_ID"},{"line_number":240,"context_line":"        ver \u003d versionutils.convert_version_to_tuple(api_version)"},{"line_number":241,"context_line":"        if ver \u003e\u003d (2, 64):"},{"line_number":242,"context_line":"            sg1 \u003d server_group_resp_template(id\u003duuidsentinel.sg1_id,"},{"line_number":243,"context_line":"                                             name\u003dnames[0],"},{"line_number":244,"context_line":"                                             policy\u003dpolicy,"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_c83876d5","line":241,"range":{"start_line":240,"start_character":8,"end_line":241,"end_character":26},"updated":"2018-07-05 17:19:38.000000000","message":"Use APIVersionRequest.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        names \u003d [\u0027default-x\u0027, \u0027test\u0027]"},{"line_number":238,"context_line":"        p_id \u003d fakes.FAKE_PROJECT_ID"},{"line_number":239,"context_line":"        u_id \u003d fakes.FAKE_USER_ID"},{"line_number":240,"context_line":"        ver \u003d versionutils.convert_version_to_tuple(api_version)"},{"line_number":241,"context_line":"        if ver \u003e\u003d (2, 64):"},{"line_number":242,"context_line":"            sg1 \u003d server_group_resp_template(id\u003duuidsentinel.sg1_id,"},{"line_number":243,"context_line":"                                             name\u003dnames[0],"},{"line_number":244,"context_line":"                                             policy\u003dpolicy,"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_3dab2e1e","line":241,"range":{"start_line":240,"start_character":8,"end_line":241,"end_character":26},"in_reply_to":"5f7c97a3_c83876d5","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":761,"context_line":"    def test_create_server_group_with_invalid_rules(self):"},{"line_number":762,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":763,"context_line":"        policy \u003d {"},{"line_number":764,"context_line":"            \u0027name\u0027: \u0027anti-affinity\u0027,"},{"line_number":765,"context_line":"            \u0027rules\u0027: {\u0027unknow_key\u0027: \u00273\u0027}"},{"line_number":766,"context_line":"        }"},{"line_number":767,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_a8409a33","line":764,"range":{"start_line":764,"start_character":21,"end_line":764,"end_character":34},"updated":"2018-07-05 17:19:38.000000000","message":"Let\u0027s add another test where you\u0027re trying to set max_server_per_host for the affinity group.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":761,"context_line":"    def test_create_server_group_with_invalid_rules(self):"},{"line_number":762,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":763,"context_line":"        policy \u003d {"},{"line_number":764,"context_line":"            \u0027name\u0027: \u0027anti-affinity\u0027,"},{"line_number":765,"context_line":"            \u0027rules\u0027: {\u0027unknow_key\u0027: \u00273\u0027}"},{"line_number":766,"context_line":"        }"},{"line_number":767,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_7d38c6eb","line":764,"range":{"start_line":764,"start_character":21,"end_line":764,"end_character":34},"in_reply_to":"5f7c97a3_a8409a33","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":763,"context_line":"        policy \u003d {"},{"line_number":764,"context_line":"            \u0027name\u0027: \u0027anti-affinity\u0027,"},{"line_number":765,"context_line":"            \u0027rules\u0027: {\u0027unknow_key\u0027: \u00273\u0027}"},{"line_number":766,"context_line":"        }"},{"line_number":767,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy)"},{"line_number":768,"context_line":"        result \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_c86636ef","line":765,"range":{"start_line":765,"start_character":36,"end_line":765,"end_character":39},"updated":"2018-07-05 17:19:38.000000000","message":"Should probably also have a negative test for the value where it\u0027s not a positive integer, so one where the value is 0 (not positive) and \u0027foo\u0027 (not integer).","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":763,"context_line":"        policy \u003d {"},{"line_number":764,"context_line":"            \u0027name\u0027: \u0027anti-affinity\u0027,"},{"line_number":765,"context_line":"            \u0027rules\u0027: {\u0027unknow_key\u0027: \u00273\u0027}"},{"line_number":766,"context_line":"        }"},{"line_number":767,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy)"},{"line_number":768,"context_line":"        result \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_882efe8a","line":765,"range":{"start_line":765,"start_character":23,"end_line":765,"end_character":29},"updated":"2018-07-05 17:19:38.000000000","message":"unknown","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":763,"context_line":"        policy \u003d {"},{"line_number":764,"context_line":"            \u0027name\u0027: \u0027anti-affinity\u0027,"},{"line_number":765,"context_line":"            \u0027rules\u0027: {\u0027unknow_key\u0027: \u00273\u0027}"},{"line_number":766,"context_line":"        }"},{"line_number":767,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy)"},{"line_number":768,"context_line":"        result \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_1d23d2bf","line":765,"range":{"start_line":765,"start_character":36,"end_line":765,"end_character":39},"in_reply_to":"5f7c97a3_c86636ef","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                    rules\u003dNone, api_version\u003d\u00272.1\u0027):"},{"line_number":122,"context_line":"        sgroup \u003d server_group_template()"},{"line_number":123,"context_line":"        ver \u003d avr.APIVersionRequest(api_version)"},{"line_number":124,"context_line":"        if ver \u003c avr.APIVersionRequest(\"2.64\"):"},{"line_number":125,"context_line":"            sgroup[\u0027policies\u0027] \u003d policies"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            sgroup[\u0027rules\u0027] \u003d rules or {}"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_f1959f95","line":124,"updated":"2018-07-12 11:32:36.000000000","message":"Instead of the conditional I suggest to override _create_server_group_normal in ServerGroupTestV264 with the new behavior","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                    rules\u003dNone, api_version\u003d\u00272.1\u0027):"},{"line_number":122,"context_line":"        sgroup \u003d server_group_template()"},{"line_number":123,"context_line":"        ver \u003d avr.APIVersionRequest(api_version)"},{"line_number":124,"context_line":"        if ver \u003c avr.APIVersionRequest(\"2.64\"):"},{"line_number":125,"context_line":"            sgroup[\u0027policies\u0027] \u003d policies"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            sgroup[\u0027rules\u0027] \u003d rules or {}"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_acb02aff","line":124,"in_reply_to":"5f7c97a3_f1959f95","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                                          body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":132,"context_line":"        self.assertEqual(res_dict[\u0027server_group\u0027][\u0027name\u0027], \u0027test\u0027)"},{"line_number":133,"context_line":"        self.assertTrue(uuidutils.is_uuid_like(res_dict[\u0027server_group\u0027][\u0027id\u0027]))"},{"line_number":134,"context_line":"        if ver \u003c avr.APIVersionRequest(\"2.64\"):"},{"line_number":135,"context_line":"            self.assertEqual(res_dict[\u0027server_group\u0027][\u0027policies\u0027], policies)"},{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            self.assertEqual(res_dict[\u0027server_group\u0027][\u0027policy\u0027], policy)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_515b3321","line":134,"updated":"2018-07-12 11:32:36.000000000","message":"ditto","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                                          body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":132,"context_line":"        self.assertEqual(res_dict[\u0027server_group\u0027][\u0027name\u0027], \u0027test\u0027)"},{"line_number":133,"context_line":"        self.assertTrue(uuidutils.is_uuid_like(res_dict[\u0027server_group\u0027][\u0027id\u0027]))"},{"line_number":134,"context_line":"        if ver \u003c avr.APIVersionRequest(\"2.64\"):"},{"line_number":135,"context_line":"            self.assertEqual(res_dict[\u0027server_group\u0027][\u0027policies\u0027], policies)"},{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            self.assertEqual(res_dict[\u0027server_group\u0027][\u0027policy\u0027], policy)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_ccb566ef","line":134,"in_reply_to":"5f7c97a3_515b3321","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b19b69253f7f77ba56b2662ecca77207fa7961f2","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        self.assertEqual(res_dict[\u0027server_group\u0027][\u0027policy\u0027], policy)"},{"line_number":736,"context_line":"        self.assertEqual(res_dict[\u0027server_group\u0027][\u0027rules\u0027], rules)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def test_create_server_group_with_new_policy_before_264(self):"},{"line_number":739,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003d\u00272.63\u0027)"},{"line_number":740,"context_line":"        policy \u003d \u0027anti-affinity\u0027"},{"line_number":741,"context_line":"        rules \u003d {\u0027max_server_per_host\u0027: 3}"},{"line_number":742,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy, rules\u003drules)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_b11c0767","line":739,"range":{"start_line":738,"start_character":49,"end_line":739,"end_character":57},"updated":"2018-07-12 11:32:36.000000000","message":"This feels strange in the ServerGroupTestV264 test class, I think you can move it to the base class","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        self.assertEqual(res_dict[\u0027server_group\u0027][\u0027policy\u0027], policy)"},{"line_number":736,"context_line":"        self.assertEqual(res_dict[\u0027server_group\u0027][\u0027rules\u0027], rules)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def test_create_server_group_with_new_policy_before_264(self):"},{"line_number":739,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003d\u00272.63\u0027)"},{"line_number":740,"context_line":"        policy \u003d \u0027anti-affinity\u0027"},{"line_number":741,"context_line":"        rules \u003d {\u0027max_server_per_host\u0027: 3}"},{"line_number":742,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy, rules\u003drules)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_c798e16a","line":739,"range":{"start_line":738,"start_character":49,"end_line":739,"end_character":57},"in_reply_to":"5f7c97a3_b11c0767","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":772,"context_line":"            self.assertIn("},{"line_number":773,"context_line":"                \"Invalid input for field/attribute\", str(result)"},{"line_number":774,"context_line":"            )"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":777,"context_line":"                return_value\u003d32)"},{"line_number":778,"context_line":"    def test_create_server_group_with_low_version_compute_service(self,"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_b62f1df4","line":775,"range":{"start_line":775,"start_character":0,"end_line":775,"end_character":0},"updated":"2018-07-12 11:10:16.000000000","message":"also can you add more negative tests like-\n\n- \u0027policies\u0027 not allowed with \u003e\u003d 2.64\n- \u0027policy\u0027 ^ \u0027rules\u0027 not allowed with \u003c 2.64. for this you need to split this tests into 2 by sending \u0027policy\u0027 and \u0027rules\u0027 separately  - test_create_server_group_with_new_policy_before_264\n\n- \u0027metadata\u0027 not returned in response.\n\n- any additionalProperties with \u003e\u003d2.64\n\n- \u0027policy\u0027 and \u0027rules\u0027 are not mandatory in POST request for \u003e\u003d2.64\n\n- any other policy then [\u0027anti-affinity\u0027, \u0027affinity\u0027,\n             \u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027] for \u003e\u003d2.64","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":772,"context_line":"            self.assertIn("},{"line_number":773,"context_line":"                \"Invalid input for field/attribute\", str(result)"},{"line_number":774,"context_line":"            )"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":777,"context_line":"                return_value\u003d32)"},{"line_number":778,"context_line":"    def test_create_server_group_with_low_version_compute_service(self,"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_c0619812","line":775,"range":{"start_line":775,"start_character":0,"end_line":775,"end_character":0},"in_reply_to":"5f7c97a3_6023e459","updated":"2018-07-13 02:45:32.000000000","message":"oh ha, got it and done:\nhttps://review.openstack.org/#/c/567534/35..36/nova/tests/unit/api/openstack/compute/test_server_groups.py@817","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5c2231690eb7121caf85eba40e43ae7533f9cb34","unresolved":false,"context_lines":[{"line_number":772,"context_line":"            self.assertIn("},{"line_number":773,"context_line":"                \"Invalid input for field/attribute\", str(result)"},{"line_number":774,"context_line":"            )"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":777,"context_line":"                return_value\u003d32)"},{"line_number":778,"context_line":"    def test_create_server_group_with_low_version_compute_service(self,"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_6023e459","line":775,"range":{"start_line":775,"start_character":0,"end_line":775,"end_character":0},"in_reply_to":"5f7c97a3_a7cb651b","updated":"2018-07-13 02:00:46.000000000","message":"\u003e5. a)I mean not to pass policy and then check validation error. \nb)not to pass rules and check no error- this is covered on test you pointed.","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":772,"context_line":"            self.assertIn("},{"line_number":773,"context_line":"                \"Invalid input for field/attribute\", str(result)"},{"line_number":774,"context_line":"            )"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":777,"context_line":"                return_value\u003d32)"},{"line_number":778,"context_line":"    def test_create_server_group_with_low_version_compute_service(self,"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_a7cb651b","line":775,"range":{"start_line":775,"start_character":0,"end_line":775,"end_character":0},"in_reply_to":"5f7c97a3_b62f1df4","updated":"2018-07-12 13:36:18.000000000","message":"1. will added\n2. will added\n3. already test in functional test https://review.openstack.org/#/c/567534/33/nova/tests/functional/test_server_group.py@714\n4. will added\n5. you mean only pass policy? https://review.openstack.org/#/c/567534/33/nova/tests/unit/api/openstack/compute/test_server_groups.py@713\n6. will added","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003d\u00272.63\u0027)"},{"line_number":132,"context_line":"        policy \u003d \u0027anti-affinity\u0027"},{"line_number":133,"context_line":"        rules \u003d {\u0027max_server_per_host\u0027: 3}"},{"line_number":134,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy)"},{"line_number":135,"context_line":"        result \u003d self.assertRaises("},{"line_number":136,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":137,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a4503561","line":134,"updated":"2018-07-12 21:49:32.000000000","message":"So in this one we fail because \u0027policy\u0027 isn\u0027t an acceptable request key before 2.64. Please add a comment.","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003d\u00272.63\u0027)"},{"line_number":132,"context_line":"        policy \u003d \u0027anti-affinity\u0027"},{"line_number":133,"context_line":"        rules \u003d {\u0027max_server_per_host\u0027: 3}"},{"line_number":134,"context_line":"        sgroup \u003d server_group_template(policy\u003dpolicy)"},{"line_number":135,"context_line":"        result \u003d self.assertRaises("},{"line_number":136,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":137,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_2023ac08","line":134,"in_reply_to":"5f7c97a3_a4503561","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":137,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":138,"context_line":"        self.assertIn("},{"line_number":139,"context_line":"            \"Invalid input for field/attribute server_group\", str(result)"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":"        sgroup \u003d server_group_template(rules\u003drules)"},{"line_number":142,"context_line":"        result \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_447921f9","line":139,"range":{"start_line":139,"start_character":62,"end_line":139,"end_character":65},"updated":"2018-07-12 21:49:32.000000000","message":"Use six.text_type rather than casting to str().","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":137,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":138,"context_line":"        self.assertIn("},{"line_number":139,"context_line":"            \"Invalid input for field/attribute server_group\", str(result)"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":"        sgroup \u003d server_group_template(rules\u003drules)"},{"line_number":142,"context_line":"        result \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_401ee8bc","line":139,"range":{"start_line":139,"start_character":62,"end_line":139,"end_character":65},"in_reply_to":"5f7c97a3_447921f9","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.assertIn("},{"line_number":139,"context_line":"            \"Invalid input for field/attribute server_group\", str(result)"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":"        sgroup \u003d server_group_template(rules\u003drules)"},{"line_number":142,"context_line":"        result \u003d self.assertRaises("},{"line_number":143,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":144,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_644a1dae","line":141,"updated":"2018-07-12 21:49:32.000000000","message":"And in this one, it fails because \u0027rules\u0027 isn\u0027t accepted in the request before 2.64. Again, please leave a comment.","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.assertIn("},{"line_number":139,"context_line":"            \"Invalid input for field/attribute server_group\", str(result)"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":"        sgroup \u003d server_group_template(rules\u003drules)"},{"line_number":142,"context_line":"        result \u003d self.assertRaises("},{"line_number":143,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":144,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_0018f0ca","line":141,"in_reply_to":"5f7c97a3_644a1dae","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":144,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":145,"context_line":"        self.assertIn("},{"line_number":146,"context_line":"            \"Invalid input for field/attribute server_group\", str(result)"},{"line_number":147,"context_line":"        )"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def test_create_server_group(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a467d552","line":146,"range":{"start_line":146,"start_character":62,"end_line":146,"end_character":65},"updated":"2018-07-12 21:49:32.000000000","message":"same","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":144,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":145,"context_line":"        self.assertIn("},{"line_number":146,"context_line":"            \"Invalid input for field/attribute server_group\", str(result)"},{"line_number":147,"context_line":"        )"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def test_create_server_group(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a0749c05","line":146,"range":{"start_line":146,"start_character":62,"end_line":146,"end_character":65},"in_reply_to":"5f7c97a3_a467d552","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                self.validation_error, self.controller.create,"},{"line_number":781,"context_line":"                req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":782,"context_line":"            self.assertIn("},{"line_number":783,"context_line":"                \"Invalid input for field/attribute\", str(result)"},{"line_number":784,"context_line":"            )"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_c4d211d0","line":783,"range":{"start_line":783,"start_character":53,"end_line":783,"end_character":56},"updated":"2018-07-12 21:49:32.000000000","message":"six.text_type","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                self.validation_error, self.controller.create,"},{"line_number":781,"context_line":"                req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":782,"context_line":"            self.assertIn("},{"line_number":783,"context_line":"                \"Invalid input for field/attribute\", str(result)"},{"line_number":784,"context_line":"            )"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_808160c5","line":783,"range":{"start_line":783,"start_character":53,"end_line":783,"end_character":56},"in_reply_to":"5f7c97a3_c4d211d0","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":804,"context_line":"    def test_policies_since_264(self):"},{"line_number":805,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":806,"context_line":"        sgroup \u003d server_group_template(policies\u003d[\u0027anti-affinity\u0027])"},{"line_number":807,"context_line":"        self.assertRaises("},{"line_number":808,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":809,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":810,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_04ea4973","line":807,"updated":"2018-07-12 21:49:32.000000000","message":"Assert that the failure is because \u0027policies\u0027 isn\u0027t allowed in the request \u003e\u003d 2.64.","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":804,"context_line":"    def test_policies_since_264(self):"},{"line_number":805,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":806,"context_line":"        sgroup \u003d server_group_template(policies\u003d[\u0027anti-affinity\u0027])"},{"line_number":807,"context_line":"        self.assertRaises("},{"line_number":808,"context_line":"            self.validation_error, self.controller.create,"},{"line_number":809,"context_line":"            req, body\u003d{\u0027server_group\u0027: sgroup})"},{"line_number":810,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_20688c20","line":807,"in_reply_to":"5f7c97a3_04ea4973","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    def test_additional_params(self):"},{"line_number":834,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":835,"context_line":"        sgroup \u003d server_group_template(unknow\u003d\u0027unknow\u0027)"},{"line_number":836,"context_line":"        self.assertRaises(self.validation_error, self.controller.create,"},{"line_number":837,"context_line":"                          req, body\u003d{\u0027server_group\u0027: sgroup})"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_64f8dd49","line":835,"range":{"start_line":835,"start_character":39,"end_line":835,"end_character":45},"updated":"2018-07-12 21:49:32.000000000","message":"unknown","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    def test_additional_params(self):"},{"line_number":834,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":835,"context_line":"        sgroup \u003d server_group_template(unknow\u003d\u0027unknow\u0027)"},{"line_number":836,"context_line":"        self.assertRaises(self.validation_error, self.controller.create,"},{"line_number":837,"context_line":"                          req, body\u003d{\u0027server_group\u0027: sgroup})"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f7c97a3_a4fef536","line":835,"range":{"start_line":835,"start_character":47,"end_line":835,"end_character":53},"updated":"2018-07-12 21:49:32.000000000","message":"unknown","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"}],"releasenotes/notes/complex-anti-affinity-policies-dcf4719e859093be.yaml":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6fa98dc2e268ea7acaf2f7b138cb6d3236241ba6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.63 uses new format ``policy`` in server group, this"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"5f7c97a3_3a875e64","line":14,"range":{"start_line":2,"start_character":0,"end_line":14,"end_character":50},"updated":"2018-06-06 07:50:19.000000000","message":"should we mention that we added a \u0027rules\u0027 field to the db probably in the update section? I\u0027m not sure, just wondering","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"7044f97c35c23137fee96da21c98d678e2316da4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.63 uses new format ``policy`` in server group, this"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"5f7c97a3_70e03b98","line":14,"range":{"start_line":2,"start_character":0,"end_line":14,"end_character":50},"in_reply_to":"5f7c97a3_3a875e64","updated":"2018-06-11 11:39:36.000000000","message":"I thought we only need record the changes which have impact on user. We can get more idea from other reviewers.","commit_id":"69cbf3b6595dafc6f3e55638126fe9b9e0a68a4b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.64 uses new format ``policy`` in server group, this"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_885cbe1a","line":4,"range":{"start_line":4,"start_character":68,"end_line":4,"end_character":71},"updated":"2018-07-05 17:19:38.000000000","message":". This","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.64 uses new format ``policy`` in server group, this"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_bd1bbe7d","line":4,"range":{"start_line":4,"start_character":68,"end_line":4,"end_character":71},"in_reply_to":"5f7c97a3_885cbe1a","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_689da2b9","line":8,"range":{"start_line":8,"start_character":32,"end_line":8,"end_character":37},"updated":"2018-07-05 17:19:38.000000000","message":"field","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_5d0e2a3d","line":8,"range":{"start_line":8,"start_character":32,"end_line":8,"end_character":37},"in_reply_to":"5f7c97a3_689da2b9","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_28a32a01","line":9,"range":{"start_line":9,"start_character":56,"end_line":9,"end_character":57},"updated":"2018-07-05 17:19:38.000000000","message":"and","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_1d0c3240","line":9,"range":{"start_line":9,"start_character":56,"end_line":9,"end_character":57},"in_reply_to":"5f7c97a3_28a32a01","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_c894f68e","line":10,"range":{"start_line":10,"start_character":62,"end_line":10,"end_character":64},"updated":"2018-07-05 17:19:38.000000000","message":". The","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_48e6a64c","line":10,"range":{"start_line":10,"start_character":68,"end_line":10,"end_character":75},"updated":"2018-07-05 17:19:38.000000000","message":"``rules``","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_68860268","line":10,"range":{"start_line":10,"start_character":15,"end_line":10,"end_character":32},"updated":"2018-07-05 17:19:38.000000000","message":"you can remove this part","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_3d07ae1f","line":10,"range":{"start_line":10,"start_character":68,"end_line":10,"end_character":75},"in_reply_to":"5f7c97a3_48e6a64c","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_dd01da08","line":10,"range":{"start_line":10,"start_character":15,"end_line":10,"end_character":32},"in_reply_to":"5f7c97a3_68860268","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_fdfcd60d","line":10,"range":{"start_line":10,"start_character":62,"end_line":10,"end_character":64},"in_reply_to":"5f7c97a3_c894f68e","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_28f1ea00","line":11,"range":{"start_line":11,"start_character":59,"end_line":11,"end_character":67},"updated":"2018-07-05 17:19:38.000000000","message":"which currently only supports...","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    * Add new format ``policy`` filed, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name``, ``rules``. The"},{"line_number":10,"context_line":"      ``name`` which is a string represents the name of policy, The \"rules\""},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_f0587d25","line":11,"range":{"start_line":11,"start_character":59,"end_line":11,"end_character":67},"in_reply_to":"5f7c97a3_28f1ea00","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"66c12f95a011a4cb11e405980bbed52b1a3008c3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_88dfde65","line":14,"range":{"start_line":14,"start_character":6,"end_line":14,"end_character":50},"updated":"2018-07-05 17:19:38.000000000","message":"The ``policies`` and ``metadata`` fields have been removed.","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"667e721aaa587e7bfe02b2a79a89035528af18ce","unresolved":false,"context_lines":[{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, now only"},{"line_number":12,"context_line":"      ``max_server_per_host`` for ``anti-affinity`` policy would be supported."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * Remove ``policies`` and ``metadata`` fields."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_909909d1","line":14,"range":{"start_line":14,"start_character":6,"end_line":14,"end_character":50},"in_reply_to":"5f7c97a3_88dfde65","updated":"2018-07-10 04:16:36.000000000","message":"Done","commit_id":"03c60c2f83d63c8163cfcc4e5e0f5728655c1eff"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.64 uses new format ``policy`` in server group. This"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_3eb22898","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":45},"updated":"2018-07-11 05:37:01.000000000","message":"Enable users to define the policy rules on server group policy to meet more advanced policy requirement. This\n    microversion brings the following changes in server group APIs:","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.64 uses new format ``policy`` in server group. This"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_376a4bb5","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":45},"in_reply_to":"5f7c97a3_3eb22898","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.64 uses new format ``policy`` in server group. This"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name`` and ``rules``. The"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_de6d3430","line":6,"range":{"start_line":5,"start_character":46,"end_line":6,"end_character":82},"updated":"2018-07-11 05:37:01.000000000","message":"this can go in bullet to mention changes in API functionality, request and response body.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The microversion 2.64 uses new format ``policy`` in server group. This"},{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name`` and ``rules``. The"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_576fc7c3","line":6,"range":{"start_line":5,"start_character":46,"end_line":6,"end_character":82},"in_reply_to":"5f7c97a3_de6d3430","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name`` and ``rules``. The"},{"line_number":10,"context_line":"      ``name`` represents the name of policy. The ``rules``"},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_3e56a860","line":8,"range":{"start_line":8,"start_character":6,"end_line":8,"end_character":9},"updated":"2018-07-11 05:37:01.000000000","message":"POST ``/os-server-groups`` API will accept the...","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    microversion brings the following changes in response body of POST, GET"},{"line_number":6,"context_line":"    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name`` and ``rules``. The"},{"line_number":10,"context_line":"      ``name`` represents the name of policy. The ``rules``"},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_f76373dd","line":8,"range":{"start_line":8,"start_character":6,"end_line":8,"end_character":9},"in_reply_to":"5f7c97a3_3e56a860","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name`` and ``rules``. The"},{"line_number":10,"context_line":"      ``name`` represents the name of policy. The ``rules``"},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"},{"line_number":12,"context_line":"      only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_7e5c2080","line":12,"range":{"start_line":10,"start_character":46,"end_line":12,"end_character":72},"updated":"2018-07-11 05:37:01.000000000","message":"we can give more information about these rules, something like: \n\nThe ``rules`` field which is a dict, can be applied to the policy to meet more advanced policy requirement. Currently nova support ``max_server_per_host`` for ``anti-affinity`` policy only.\n\nThe \"max_server_per_host\" rule for ``anti-affinity`` policy means that add the max limit on the number of Instances in a group on a given host.","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add new format ``policy`` field, which is a dictionary representation of a"},{"line_number":9,"context_line":"      server group policy containing the fields ``name`` and ``rules``. The"},{"line_number":10,"context_line":"      ``name`` represents the name of policy. The ``rules``"},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"},{"line_number":12,"context_line":"      only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_17614fd5","line":12,"range":{"start_line":10,"start_character":46,"end_line":12,"end_character":72},"in_reply_to":"5f7c97a3_7e5c2080","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"      ``name`` represents the name of policy. The ``rules``"},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"},{"line_number":12,"context_line":"      only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_1ed2ccd0","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":0},"updated":"2018-07-11 05:37:01.000000000","message":"2nd bullet can be for response body change-\n\nThe ``policy_name`` and ``policy_rules`` fields will be returned in response body of POST, GET\n    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"      ``name`` represents the name of policy. The ``rules``"},{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"},{"line_number":12,"context_line":"      only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_b75dfb17","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":0},"in_reply_to":"5f7c97a3_1ed2ccd0","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fe60c90ae0a7d7214c8a89e88769d983710380d3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"},{"line_number":12,"context_line":"      only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_7eb8a077","line":14,"range":{"start_line":14,"start_character":57,"end_line":14,"end_character":64},"updated":"2018-07-11 05:37:01.000000000","message":"removed from response body of POST, GET\n    ``/os-server-groups`` API and GET ``/os-server-groups/{server_group_id}`` API:","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2ceea355092155272c76736ef4319cc4207ba67d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"      field which is a dict, can be applied to the policy, which currently"},{"line_number":12,"context_line":"      only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f7c97a3_979a3fc2","line":14,"range":{"start_line":14,"start_character":57,"end_line":14,"end_character":64},"in_reply_to":"5f7c97a3_7eb8a077","updated":"2018-07-11 07:37:27.000000000","message":"Done","commit_id":"8a7a373d722cbf5ef5f038db95984743c615a251"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    advanced policy requirement. This microversion brings the following changes"},{"line_number":6,"context_line":"    in server group APIs:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_b622bd53","line":8,"range":{"start_line":8,"start_character":11,"end_line":8,"end_character":33},"updated":"2018-07-12 11:10:16.000000000","message":"as per current agreed naming - ``policy`` and ``rules``","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    advanced policy requirement. This microversion brings the following changes"},{"line_number":6,"context_line":"    in server group APIs:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_c7b1c1e2","line":8,"range":{"start_line":8,"start_character":11,"end_line":8,"end_character":33},"in_reply_to":"5f7c97a3_b622bd53","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    in server group APIs:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy_name`` and ``policy_rules`` fields will be returned in response"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_d6273963","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":42},"updated":"2018-07-12 11:10:16.000000000","message":"ditto","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    in server group APIs:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``name`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy_name`` and ``policy_rules`` fields will be returned in response"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_67c6ad4d","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":42},"in_reply_to":"5f7c97a3_d6273963","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"11d28f6cd5d0f06e3a896bb89e4400473a6da247","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":13,"context_line":"      body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":14,"context_line":"      ``/os-server-groups/{server_group_id}`` API."},{"line_number":15,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_761c2514","line":12,"range":{"start_line":12,"start_character":10,"end_line":12,"end_character":46},"updated":"2018-07-12 11:10:16.000000000","message":"as per current agreed naming - ``policy`` and ``rules``","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"59c08e15a93f05f64f1c663f3ecb07a731e48c58","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      ``/os-server-groups``. The ``name`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy_name`` and ``policy_rules`` fields will be returned in response"},{"line_number":13,"context_line":"      body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":14,"context_line":"      ``/os-server-groups/{server_group_id}`` API."},{"line_number":15,"context_line":"    * The ``policies`` and ``metadata`` fields have been removed from the response"}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_87c3c939","line":12,"range":{"start_line":12,"start_character":10,"end_line":12,"end_character":46},"in_reply_to":"5f7c97a3_761c2514","updated":"2018-07-12 13:36:18.000000000","message":"Done","commit_id":"3e5d332184a56ee992dded0709a4cd23d8421029"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Enable users to define the policy rules on server group policy to meet more"},{"line_number":5,"context_line":"    advanced policy requirement. This microversion brings the following changes"},{"line_number":6,"context_line":"    in server group APIs:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``policy`` and ``rules`` fields in the request of POST"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"5f7c97a3_2490a5f3","line":5,"range":{"start_line":5,"start_character":33,"end_line":5,"end_character":51},"updated":"2018-07-12 21:49:32.000000000","message":"You should mention the actual microversion number in the release note.","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Enable users to define the policy rules on server group policy to meet more"},{"line_number":5,"context_line":"    advanced policy requirement. This microversion brings the following changes"},{"line_number":6,"context_line":"    in server group APIs:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``policy`` and ``rules`` fields in the request of POST"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"5f7c97a3_6030c456","line":5,"range":{"start_line":5,"start_character":33,"end_line":5,"end_character":51},"in_reply_to":"5f7c97a3_2490a5f3","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``policy`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``policy`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy`` and ``rules`` fields will be returned in response"},{"line_number":13,"context_line":"      body of POST, GET ``/os-server-groups`` API and GET"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"5f7c97a3_4495a1e2","line":10,"range":{"start_line":10,"start_character":16,"end_line":10,"end_character":27},"updated":"2018-07-12 21:49:32.000000000","message":"field, which","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Add  ``policy`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``policy`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy`` and ``rules`` fields will be returned in response"},{"line_number":13,"context_line":"      body of POST, GET ``/os-server-groups`` API and GET"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"5f7c97a3_8033a061","line":10,"range":{"start_line":10,"start_character":16,"end_line":10,"end_character":27},"in_reply_to":"5f7c97a3_4495a1e2","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebac6c099e6c945d377f94bb99ff32b37ef35d31","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    * Add  ``policy`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``policy`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy`` and ``rules`` fields will be returned in response"},{"line_number":13,"context_line":"      body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":14,"context_line":"      ``/os-server-groups/{server_group_id}`` API."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"5f7c97a3_049fa902","line":11,"range":{"start_line":11,"start_character":21,"end_line":11,"end_character":28},"updated":"2018-07-12 21:49:32.000000000","message":"supports","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"4af2f20ed828c270d5a3498fc101a30fedbf1f4a","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    * Add  ``policy`` and ``rules`` fields in the request of POST"},{"line_number":9,"context_line":"      ``/os-server-groups``. The ``policy`` represents the name of policy. The"},{"line_number":10,"context_line":"      ``rules`` field which is a dict, can be applied to the policy, which"},{"line_number":11,"context_line":"      currently only support ``max_server_per_host`` for ``anti-affinity`` policy."},{"line_number":12,"context_line":"    * The ``policy`` and ``rules`` fields will be returned in response"},{"line_number":13,"context_line":"      body of POST, GET ``/os-server-groups`` API and GET"},{"line_number":14,"context_line":"      ``/os-server-groups/{server_group_id}`` API."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"5f7c97a3_203acc34","line":11,"range":{"start_line":11,"start_character":21,"end_line":11,"end_character":28},"in_reply_to":"5f7c97a3_049fa902","updated":"2018-07-13 02:45:32.000000000","message":"Done","commit_id":"37843af6b392a9ba814485a4ec2eb6e7e5f247fc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"059de3cb206742c0bc4bc66343c27ef7ca05b307","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Enable users to define the policy rules on server group policy to meet"},{"line_number":5,"context_line":"    more advanced policy requirement. This microversion 2.64 brings the"},{"line_number":6,"context_line":"    following changes in server group APIs:"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5f7c97a3_17db54ea","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":43},"updated":"2018-07-13 08:13:37.000000000","message":"nit: just \u0027rules\u0027 - otherwise you say \u0027policy\u0027 in this sentence 3 times which seems excessive :)\n\nMaybe just re-word this first paragraph as:\n\n\"Microversion 2.64 is added and enables users to define rules on server group policy to meet more advanced policy requirements. This microversion brings the following changes in server group APIs:\"","commit_id":"5cdb1ce26b0ec53c231723bcc6ce880aa8f43f0f"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"66ee7e07fd0a77e116ea9e2494937975b23fef07","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Enable users to define the policy rules on server group policy to meet"},{"line_number":5,"context_line":"    more advanced policy requirement. This microversion 2.64 brings the"},{"line_number":6,"context_line":"    following changes in server group APIs:"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5f7c97a3_72a096f4","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":43},"in_reply_to":"5f7c97a3_17db54ea","updated":"2018-07-13 08:36:29.000000000","message":"Haha, thanks for you review late at night, I will re-word this in follow up. \n\nHave a good night. : )","commit_id":"5cdb1ce26b0ec53c231723bcc6ce880aa8f43f0f"}]}
