)]}'
{"openstack_dashboard/api/microversions.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"01f82f9346bada6d2045d8ad29527f0249724b2f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \"locked_attribute\": [\"2.9\", \"2.42\"],"},{"line_number":32,"context_line":"        \"instance_description\": [\"2.19\", \"2.42\"],"},{"line_number":33,"context_line":"        \"remote_console_mks\": [\"2.8\", \"2.53\"],"},{"line_number":34,"context_line":"        \"servergroup_soft_policies\": [\"2.15\", \"2.53\"]"},{"line_number":35,"context_line":"    },"},{"line_number":36,"context_line":"    \"cinder\": {"},{"line_number":37,"context_line":"        \"consistency_groups\": [\"2.0\", \"3.10\"],"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_c1684b1e","line":34,"updated":"2018-01-31 19:55:50.000000000","message":"Who refers this?","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae77322767c262a6a33e3eb836877f190851e778","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \"locked_attribute\": [\"2.9\", \"2.42\"],"},{"line_number":32,"context_line":"        \"instance_description\": [\"2.19\", \"2.42\"],"},{"line_number":33,"context_line":"        \"remote_console_mks\": [\"2.8\", \"2.53\"],"},{"line_number":34,"context_line":"        \"servergroup_soft_policies\": [\"2.15\", \"2.53\"]"},{"line_number":35,"context_line":"    },"},{"line_number":36,"context_line":"    \"cinder\": {"},{"line_number":37,"context_line":"        \"consistency_groups\": [\"2.0\", \"3.10\"],"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa0c359_acb7a13a","line":34,"in_reply_to":"3fa0c359_623aa4cc","updated":"2018-02-18 12:49:24.000000000","message":"Thanks for clarification. It sounds reasonable to me.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"9f8126bdc109ef513539c9672f48a1c89b071170","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \"locked_attribute\": [\"2.9\", \"2.42\"],"},{"line_number":32,"context_line":"        \"instance_description\": [\"2.19\", \"2.42\"],"},{"line_number":33,"context_line":"        \"remote_console_mks\": [\"2.8\", \"2.53\"],"},{"line_number":34,"context_line":"        \"servergroup_soft_policies\": [\"2.15\", \"2.53\"]"},{"line_number":35,"context_line":"    },"},{"line_number":36,"context_line":"    \"cinder\": {"},{"line_number":37,"context_line":"        \"consistency_groups\": [\"2.0\", \"3.10\"],"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa0c359_623aa4cc","line":34,"in_reply_to":"5f93b717_c1684b1e","updated":"2018-02-11 11:53:42.000000000","message":"The server group object contains the policies field whose value may be anti-affinity, affinity, soft-anti-affinity, soft-affinity, where soft-anti-affinity, soft-affinity is nova microversion added at 2.15[1]. The reason to add is to define a policies collection[2], and then return to the server groups, through the collection for the table displayed in the policy column to find the appropriate value[3]. E.g:\nsoft-anti-affinity-\u003e Soft Anti Affinity.\n\n[1] https://developer.openstack.org/api-ref/compute/#create-server-group\n    https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id13\n[2] https://review.openstack.org/#/c/517754/16/openstack_dashboard/static/app/core/server_groups/server-groups.service.js#L61\n[3] https://review.openstack.org/#/c/517754/16/openstack_dashboard/static/app/core/server_groups/server-groups.service.js#L82","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"}],"openstack_dashboard/api/rest/nova.py":[{"author":{"_account_id":6763,"name":"jingliuqing","email":"jing.liuqing@99cloud.net","username":"jing"},"change_message_id":"3fb1e1f668341ea72b4e7f19469ba5908b861ee4","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @rest_utils.ajax()"},{"line_number":426,"context_line":"    def get(self, request):"},{"line_number":427,"context_line":"        \"\"\"Get a list of server groups associated with the current project."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        Example GET:"},{"line_number":430,"context_line":"        http://localhost/api/nova/servergroups"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_41fdb238","line":427,"range":{"start_line":427,"start_character":39,"end_line":427,"end_character":74},"updated":"2018-01-02 04:38:13.000000000","message":"nit , we get current project server groups or all server groups, so remove it","commit_id":"7aae5086ad40ce2e5ef7ee7ce8c116b5fcefb4a3"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"4c4a8f6fee8e089312b9c408ef7dcade7dc4f51e","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @rest_utils.ajax()"},{"line_number":426,"context_line":"    def get(self, request):"},{"line_number":427,"context_line":"        \"\"\"Get a list of server groups associated with the current project."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        Example GET:"},{"line_number":430,"context_line":"        http://localhost/api/nova/servergroups"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_470de435","line":427,"range":{"start_line":427,"start_character":39,"end_line":427,"end_character":74},"in_reply_to":"9f91af0f_41fdb238","updated":"2018-01-10 17:13:29.000000000","message":"Done","commit_id":"7aae5086ad40ce2e5ef7ee7ce8c116b5fcefb4a3"}],"openstack_dashboard/dashboards/admin/server_groups/panel.py":[{"author":{"_account_id":11885,"name":"Ying Zuo","email":"yingzuo4@gmail.com","username":"yingzuo"},"change_message_id":"a0bcdc09fd5cb2bd27d9756cc294579eefbcc284","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Server Groups\")"},{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\"compute\", \"context_is_admin\"),)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def allowed(self, context):"},{"line_number":33,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_406daa02","line":30,"updated":"2017-11-14 04:03:35.000000000","message":"we should use the \"os_compute_api:os-server-groups\" rule too.","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"502f883bfbb3993acbdf7c6a76b25abed406268d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Server Groups\")"},{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\"compute\", \"context_is_admin\"),)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def allowed(self, context):"},{"line_number":33,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_11b942e8","line":30,"in_reply_to":"1f485f77_406daa02","updated":"2017-11-14 05:47:39.000000000","message":"Done","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":11885,"name":"Ying Zuo","email":"yingzuo4@gmail.com","username":"yingzuo"},"change_message_id":"842cb5226c310391a8f9a690fcd75d649308f609","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\"compute\", \"context_is_admin\"),"},{"line_number":31,"context_line":"                    (\"compute\", \"os_compute_api:os-server-groups\"))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def allowed(self, context):"},{"line_number":34,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_e4146146","line":31,"updated":"2017-11-16 06:16:08.000000000","message":"Can you remove the rule \"context_is_admin\"?","commit_id":"f799de144d1c86e9f6b4333e59e4a4bfba7f7d4b"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"cb7fdfdd9010394cc87efd0b486853e3117603c6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\"compute\", \"context_is_admin\"),"},{"line_number":31,"context_line":"                    (\"compute\", \"os_compute_api:os-server-groups\"))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def allowed(self, context):"},{"line_number":34,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_c254b555","line":31,"in_reply_to":"1f485f77_e4146146","updated":"2017-11-16 08:27:22.000000000","message":"Done","commit_id":"f799de144d1c86e9f6b4333e59e4a4bfba7f7d4b"}],"openstack_dashboard/dashboards/project/server_groups/panel.py":[{"author":{"_account_id":11885,"name":"Ying Zuo","email":"yingzuo4@gmail.com","username":"yingzuo"},"change_message_id":"a0bcdc09fd5cb2bd27d9756cc294579eefbcc284","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class ServerGroups(horizon.Panel):"},{"line_number":27,"context_line":"    name \u003d _(\"Server Groups\")"},{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def allowed(self, context):"},{"line_number":32,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_20174e54","line":29,"updated":"2017-11-14 04:03:35.000000000","message":"we should set the policy rule \"os_compute_api:os-server-groups\" here too.","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"502f883bfbb3993acbdf7c6a76b25abed406268d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class ServerGroups(horizon.Panel):"},{"line_number":27,"context_line":"    name \u003d _(\"Server Groups\")"},{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def allowed(self, context):"},{"line_number":32,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_f1cfc67c","line":29,"in_reply_to":"1f485f77_20174e54","updated":"2017-11-14 05:47:39.000000000","message":"Done","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"01f82f9346bada6d2045d8ad29527f0249724b2f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Server Groups\")"},{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\"compute\", \"os_compute_api:os-server-groups\"),)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def allowed(self, context):"},{"line_number":33,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_2161ef05","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":65},"updated":"2018-01-31 19:55:50.000000000","message":"In Queens nova policy, this is now \"os_compute_api:os-server-groups:index\". Your version is deprecated in Pike.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"9f8126bdc109ef513539c9672f48a1c89b071170","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Server Groups\")"},{"line_number":28,"context_line":"    slug \u003d \"server_groups\""},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\"compute\", \"os_compute_api:os-server-groups\"),)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def allowed(self, context):"},{"line_number":33,"context_line":"        request \u003d context[\u0027request\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa0c359_623f04b4","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":65},"in_reply_to":"5f93b717_2161ef05","updated":"2018-02-11 11:53:42.000000000","message":"Done. Thanks for reminding.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"01f82f9346bada6d2045d8ad29527f0249724b2f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            return ("},{"line_number":36,"context_line":"                super(ServerGroups, self).allowed(context)"},{"line_number":37,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":38,"context_line":"                and nova.extension_supported(\u0027ServerGroups\u0027, request)"},{"line_number":39,"context_line":"            )"},{"line_number":40,"context_line":"        except Exception:"},{"line_number":41,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_2157af5a","line":38,"range":{"start_line":38,"start_character":16,"end_line":38,"end_character":69},"updated":"2018-01-31 19:55:50.000000000","message":"Using both micro version and extension sounds tricky. Can we use only micro version? As you may know, Nova drops extension support in Queens.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"9f8126bdc109ef513539c9672f48a1c89b071170","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            return ("},{"line_number":36,"context_line":"                super(ServerGroups, self).allowed(context)"},{"line_number":37,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":38,"context_line":"                and nova.extension_supported(\u0027ServerGroups\u0027, request)"},{"line_number":39,"context_line":"            )"},{"line_number":40,"context_line":"        except Exception:"},{"line_number":41,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa0c359_c277f89f","line":38,"range":{"start_line":38,"start_character":16,"end_line":38,"end_character":69},"in_reply_to":"5f93b717_2157af5a","updated":"2018-02-11 11:53:42.000000000","message":"Have removed the extensions of the judge.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5f983b8a45117ef2833c0c1eb70f3e89738edadf","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":37,"context_line":"            )"},{"line_number":38,"context_line":"        except Exception:"},{"line_number":39,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""},{"line_number":40,"context_line":"                      \"due to a problem communicating with the Nova endpoint. \""},{"line_number":41,"context_line":"                      \"Server Groups panel will not be displayed.\")"},{"line_number":42,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f9dbf25_3369f324","line":39,"updated":"2018-02-27 21:52:51.000000000","message":"Please, change it to LOG.exception. It will make troubleshooting easier","commit_id":"cdf2a114195244d07fe261e852762d4fd9677c44"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"fc62d216f61d7d712cab1f51a7a933b322a1513a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                and request.user.has_perms(self.permissions)"},{"line_number":37,"context_line":"            )"},{"line_number":38,"context_line":"        except Exception:"},{"line_number":39,"context_line":"            LOG.error(\"Call to list enabled services failed. This is likely \""},{"line_number":40,"context_line":"                      \"due to a problem communicating with the Nova endpoint. \""},{"line_number":41,"context_line":"                      \"Server Groups panel will not be displayed.\")"},{"line_number":42,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"df7087c5_1e14bb4d","line":39,"in_reply_to":"1f9dbf25_3369f324","updated":"2018-03-10 10:35:01.000000000","message":"Done","commit_id":"cdf2a114195244d07fe261e852762d4fd9677c44"}],"openstack_dashboard/enabled/_1040_project_server_groups_panel.py":[{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"28ddb062785a36ee6066808d3648c4abb0fa9925","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3f4b6375_91afd77b","updated":"2017-11-07 13:27:42.000000000","message":"Currently the server groups panel position is below the instances panel, but in creating instances page, the server groups is below the keypairs, so in order to maintain consistent, the server groups panel position needs to be readjusted.","commit_id":"fcb93311032fe4ac52eecdc4b20443affa66bca4"}],"openstack_dashboard/enabled/_1070_project_key_pairs_panel.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"01f82f9346bada6d2045d8ad29527f0249724b2f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"5f93b717_5cdae24a","updated":"2018-01-31 19:55:50.000000000","message":"You don\u0027t need to rename this. You can add server_groups as 1110 for example. Nobody uses 11xx and 12xx.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"9f8126bdc109ef513539c9672f48a1c89b071170","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"3fa0c359_826d70cd","in_reply_to":"5f93b717_5cdae24a","updated":"2018-02-11 11:53:42.000000000","message":"Done. Already using 1110.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"}],"openstack_dashboard/static/app/core/server_groups/server-groups.module.js":[{"author":{"_account_id":11885,"name":"Ying Zuo","email":"yingzuo4@gmail.com","username":"yingzuo"},"change_message_id":"a0bcdc09fd5cb2bd27d9756cc294579eefbcc284","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        allowed: serverGroupsService.getUserInfoSupportPromise"},{"line_number":61,"context_line":"      })"},{"line_number":62,"context_line":"      // The name is not unique, so we need to show the ID to"},{"line_number":63,"context_line":"      // distinguish."},{"line_number":64,"context_line":"      .append({"},{"line_number":65,"context_line":"        id: \u0027id\u0027,"},{"line_number":66,"context_line":"        priority: 1"}],"source_content_type":"text/javascript","patch_set":6,"id":"1f485f77_235ab829","line":63,"updated":"2017-11-14 04:03:35.000000000","message":"Thanks for the comment. We do avoid showing id but I guess it\u0027s okay here. Can we show the name field before the id?","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"502f883bfbb3993acbdf7c6a76b25abed406268d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        allowed: serverGroupsService.getUserInfoSupportPromise"},{"line_number":61,"context_line":"      })"},{"line_number":62,"context_line":"      // The name is not unique, so we need to show the ID to"},{"line_number":63,"context_line":"      // distinguish."},{"line_number":64,"context_line":"      .append({"},{"line_number":65,"context_line":"        id: \u0027id\u0027,"},{"line_number":66,"context_line":"        priority: 1"}],"source_content_type":"text/javascript","patch_set":6,"id":"1f485f77_91c41261","line":63,"in_reply_to":"1f485f77_235ab829","updated":"2017-11-14 05:47:39.000000000","message":"Done","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":6763,"name":"jingliuqing","email":"jing.liuqing@99cloud.net","username":"jing"},"change_message_id":"3fb1e1f668341ea72b4e7f19469ba5908b861ee4","unresolved":false,"context_lines":[{"line_number":55,"context_line":"      .append({"},{"line_number":56,"context_line":"        id: \u0027project_id\u0027,"},{"line_number":57,"context_line":"        priority: 1,"},{"line_number":58,"context_line":"        filters: [$memoize(keystone.getProjectName)],"},{"line_number":59,"context_line":"        policies: [{rules: [[\u0027identity\u0027, \u0027identity:get_project\u0027]]}],"},{"line_number":60,"context_line":"        allowed: serverGroupsService.getUserInfoSupportPromise"},{"line_number":61,"context_line":"      })"}],"source_content_type":"text/javascript","patch_set":10,"id":"9f91af0f_61e1d69a","line":58,"updated":"2018-01-02 04:38:13.000000000","message":"it seems that it will call multiple getProjectName while we have multiple server group.","commit_id":"7aae5086ad40ce2e5ef7ee7ce8c116b5fcefb4a3"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"4c4a8f6fee8e089312b9c408ef7dcade7dc4f51e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"      .append({"},{"line_number":56,"context_line":"        id: \u0027project_id\u0027,"},{"line_number":57,"context_line":"        priority: 1,"},{"line_number":58,"context_line":"        filters: [$memoize(keystone.getProjectName)],"},{"line_number":59,"context_line":"        policies: [{rules: [[\u0027identity\u0027, \u0027identity:get_project\u0027]]}],"},{"line_number":60,"context_line":"        allowed: serverGroupsService.getUserInfoSupportPromise"},{"line_number":61,"context_line":"      })"}],"source_content_type":"text/javascript","patch_set":10,"id":"7f96bb07_070fdc2e","line":58,"in_reply_to":"9f91af0f_61e1d69a","updated":"2018-01-10 17:13:29.000000000","message":"In fact, the number of keystone api calls depends on how many different projects are in the table: For example, in project/server groups table, the api is called only once because each server group belongs to the same project, and after the first call will not be called again, because $ memoize will save the last result. In contrast, the number of api calls in admin/server groups table depends on how many different projects there are.\nMore details can be viewed [1]:\n[1] https://github.com/openstack/horizon/blob/master/horizon/static/framework/util/filters/helpers.borrowed-from-underscore.js#L33","commit_id":"7aae5086ad40ce2e5ef7ee7ce8c116b5fcefb4a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"01f82f9346bada6d2045d8ad29527f0249724b2f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        name: \u0027name\u0027,"},{"line_number":71,"context_line":"        singleton: true"},{"line_number":72,"context_line":"      })"},{"line_number":73,"context_line":"      .append({"},{"line_number":74,"context_line":"        label: gettext(\u0027ID\u0027),"},{"line_number":75,"context_line":"        name: \u0027id\u0027,"},{"line_number":76,"context_line":"        singleton: true"},{"line_number":77,"context_line":"      })"},{"line_number":78,"context_line":"      .append({"},{"line_number":79,"context_line":"        label: gettext(\u0027Policy\u0027),"},{"line_number":80,"context_line":"        name: \u0027policy\u0027,"}],"source_content_type":"text/javascript","patch_set":15,"id":"5f93b717_011cf3be","line":77,"range":{"start_line":73,"start_character":6,"end_line":77,"end_character":8},"updated":"2018-01-31 19:55:50.000000000","message":"We usually do not show ID in tables.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae77322767c262a6a33e3eb836877f190851e778","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        name: \u0027name\u0027,"},{"line_number":71,"context_line":"        singleton: true"},{"line_number":72,"context_line":"      })"},{"line_number":73,"context_line":"      .append({"},{"line_number":74,"context_line":"        label: gettext(\u0027ID\u0027),"},{"line_number":75,"context_line":"        name: \u0027id\u0027,"},{"line_number":76,"context_line":"        singleton: true"},{"line_number":77,"context_line":"      })"},{"line_number":78,"context_line":"      .append({"},{"line_number":79,"context_line":"        label: gettext(\u0027Policy\u0027),"},{"line_number":80,"context_line":"        name: \u0027policy\u0027,"}],"source_content_type":"text/javascript","patch_set":15,"id":"3fa0c359_49dfef39","line":77,"range":{"start_line":73,"start_character":6,"end_line":77,"end_character":8},"in_reply_to":"3fa0c359_426be8b5","updated":"2018-02-18 12:49:24.000000000","message":"We usually do not show ID even when name is not unique, but in this case we have a few number of entries. It looks okay.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"9f8126bdc109ef513539c9672f48a1c89b071170","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        name: \u0027name\u0027,"},{"line_number":71,"context_line":"        singleton: true"},{"line_number":72,"context_line":"      })"},{"line_number":73,"context_line":"      .append({"},{"line_number":74,"context_line":"        label: gettext(\u0027ID\u0027),"},{"line_number":75,"context_line":"        name: \u0027id\u0027,"},{"line_number":76,"context_line":"        singleton: true"},{"line_number":77,"context_line":"      })"},{"line_number":78,"context_line":"      .append({"},{"line_number":79,"context_line":"        label: gettext(\u0027Policy\u0027),"},{"line_number":80,"context_line":"        name: \u0027policy\u0027,"}],"source_content_type":"text/javascript","patch_set":15,"id":"3fa0c359_426be8b5","line":77,"range":{"start_line":73,"start_character":6,"end_line":77,"end_character":8},"in_reply_to":"5f93b717_011cf3be","updated":"2018-02-11 11:53:42.000000000","message":"Since we can create a server group with a duplicate name, if we only show the name and the policy, we can not distinguish them, so the table adds the ID column.","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5f983b8a45117ef2833c0c1eb70f3e89738edadf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"/**"},{"line_number":2,"context_line":" * Copyright 2017 EasyStack, Inc."},{"line_number":3,"context_line":" *"},{"line_number":4,"context_line":" * Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":" * not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/javascript","patch_set":17,"id":"1f9dbf25_535b5f86","line":2,"updated":"2018-02-27 21:52:51.000000000","message":"Do we need this line? Honestly, I don\u0027t remember what is OpenStack guidelines for this","commit_id":"cdf2a114195244d07fe261e852762d4fd9677c44"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"fc62d216f61d7d712cab1f51a7a933b322a1513a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"/**"},{"line_number":2,"context_line":" * Copyright 2017 EasyStack, Inc."},{"line_number":3,"context_line":" *"},{"line_number":4,"context_line":" * Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":" * not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/javascript","patch_set":17,"id":"df7087c5_c9176b45","line":2,"in_reply_to":"1f9dbf25_535b5f86","updated":"2018-03-10 10:35:01.000000000","message":"Just find some relevant description from [1]. I agree that there is no need to add this, and I have modified this bp similar files.\n[1] https://wiki.openstack.org/wiki/Documentation/Copyright","commit_id":"cdf2a114195244d07fe261e852762d4fd9677c44"}],"openstack_dashboard/static/app/core/server_groups/server-groups.service.js":[{"author":{"_account_id":11885,"name":"Ying Zuo","email":"yingzuo4@gmail.com","username":"yingzuo"},"change_message_id":"a0bcdc09fd5cb2bd27d9756cc294579eefbcc284","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        function modifyItems(policies) {"},{"line_number":96,"context_line":"          response.data.items.map(function (item) {"},{"line_number":97,"context_line":"            // When creating the server group, the back-end limit"},{"line_number":98,"context_line":"            // the policy can not exceed one."},{"line_number":99,"context_line":"            if (item.policies.length) {"},{"line_number":100,"context_line":"              item.policy \u003d policies[item.policies[0]];"},{"line_number":101,"context_line":"            }"}],"source_content_type":"text/javascript","patch_set":6,"id":"1f485f77_23e078fa","line":98,"updated":"2017-11-14 04:03:35.000000000","message":"I would like to get more details on this restriction/requirement. Do you have a link for it?","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"502f883bfbb3993acbdf7c6a76b25abed406268d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        function modifyItems(policies) {"},{"line_number":96,"context_line":"          response.data.items.map(function (item) {"},{"line_number":97,"context_line":"            // When creating the server group, the back-end limit"},{"line_number":98,"context_line":"            // the policy can not exceed one."},{"line_number":99,"context_line":"            if (item.policies.length) {"},{"line_number":100,"context_line":"              item.policy \u003d policies[item.policies[0]];"},{"line_number":101,"context_line":"            }"}],"source_content_type":"text/javascript","patch_set":6,"id":"1f485f77_718ab61b","line":98,"in_reply_to":"1f485f77_23e078fa","updated":"2017-11-14 05:47:39.000000000","message":"Thanks for the review Ying.\nSome description of the server group policies, the following link can be used as reference:\n[1] https://developer.openstack.org/api-ref/compute/#create-server-group\n[2] https://review.openstack.org/#/c/415482/","commit_id":"b45f298745226f10b5c18d515d5f771f439a5f40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"01f82f9346bada6d2045d8ad29527f0249724b2f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"     * @description"},{"line_number":46,"context_line":"     * Returns a list for the server group policies."},{"line_number":47,"context_line":"     */"},{"line_number":48,"context_line":"    function getServerGroupPolicies() {"},{"line_number":49,"context_line":"      return nova.isFeatureSupported(\u0027servergroup_soft_policies\u0027)"},{"line_number":50,"context_line":"          .then(isSoftPoliciesSupported);"},{"line_number":51,"context_line":""}],"source_content_type":"text/javascript","patch_set":15,"id":"5f93b717_dcbcb207","line":48,"updated":"2018-01-31 19:55:50.000000000","message":"Hmm... this is not exposed. why is it defined?","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"9f8126bdc109ef513539c9672f48a1c89b071170","unresolved":false,"context_lines":[{"line_number":45,"context_line":"     * @description"},{"line_number":46,"context_line":"     * Returns a list for the server group policies."},{"line_number":47,"context_line":"     */"},{"line_number":48,"context_line":"    function getServerGroupPolicies() {"},{"line_number":49,"context_line":"      return nova.isFeatureSupported(\u0027servergroup_soft_policies\u0027)"},{"line_number":50,"context_line":"          .then(isSoftPoliciesSupported);"},{"line_number":51,"context_line":""}],"source_content_type":"text/javascript","patch_set":15,"id":"3fa0c359_c285b85b","line":48,"in_reply_to":"5f93b717_dcbcb207","updated":"2018-02-11 11:53:42.000000000","message":"This function is used in L76. As mentioned in [1], when the table displays the policy column, it does not directly show the value returned by the back-end, defining a collection to display a more meaningful value.\n\n［1］ https://review.openstack.org/#/c/517754/15/openstack_dashboard/api/microversions.py#L34","commit_id":"fbc757349761603887c1bf85ff14942b3ef5c366"}]}
