)]}'
{"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f74343562c46240991cba8702db569dddf876792","unresolved":false,"context_lines":[{"line_number":770,"context_line":"----"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"From this version of the API users can choose `aggregate-affinity` and"},{"line_number":773,"context_line":"`aggregate-anti-affinity` rules for server-groups. The `aggregate-affinity`"},{"line_number":774,"context_line":"policy for a server group indicates that new members of the server group should"},{"line_number":775,"context_line":"be placed on hosts that are in the same aggregate(s) associated with hosts"},{"line_number":776,"context_line":"where other members of the server group are placed. The"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf659307_8c22eca3","line":773,"range":{"start_line":773,"start_character":26,"end_line":773,"end_character":31},"updated":"2018-03-27 12:11:51.000000000","message":"\"policies\" is more common in here.","commit_id":"7b9cd6b1cd8d501fae3bccced0916a5b5b1c768c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"aa020c0e099bce7259a5382efc1a07f0cfa90242","unresolved":false,"context_lines":[{"line_number":770,"context_line":"----"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"From this version of the API users can choose `aggregate-affinity` and"},{"line_number":773,"context_line":"`aggregate-anti-affinity` rules for server-groups. The `aggregate-affinity`"},{"line_number":774,"context_line":"policy for a server group indicates that new members of the server group should"},{"line_number":775,"context_line":"be placed on hosts that are in the same aggregate(s) associated with hosts"},{"line_number":776,"context_line":"where other members of the server group are placed. The"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf659307_06745f98","line":773,"range":{"start_line":773,"start_character":26,"end_line":773,"end_character":31},"in_reply_to":"bf659307_8c22eca3","updated":"2018-03-28 05:12:13.000000000","message":"\"rule\" and \"policy\" can be used interchangeably in this case - it doesn\u0027t change the meaning. Moreover, there is explicitly said what aggregate-affinity and aggregate-anti-affinity are.","commit_id":"7b9cd6b1cd8d501fae3bccced0916a5b5b1c768c"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f74343562c46240991cba8702db569dddf876792","unresolved":false,"context_lines":[{"line_number":777,"context_line":"`aggregate-anti-affinity` policy enforces the opposite: ensure that instances"},{"line_number":778,"context_line":"launched in a server group land on hosts that are *not* associated with"},{"line_number":779,"context_line":"aggregates that other members of the server group are associated to."},{"line_number":780,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e WIP Support aggregate affinity filters"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bf659307_4c13745d","line":780,"range":{"start_line":780,"start_character":0,"end_line":780,"end_character":46},"updated":"2018-03-27 12:11:51.000000000","message":"oops","commit_id":"7b9cd6b1cd8d501fae3bccced0916a5b5b1c768c"}],"nova/api/openstack/compute/schemas/server_groups.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"422a981e9c20d8f5bd7f3285c5dd1e19742110e7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"create_v259 \u003d copy.deepcopy(create_v215)"},{"line_number":55,"context_line":"policies \u003d create_v259[\u0027properties\u0027][\u0027server_group\u0027][\u0027properties\u0027][\u0027policies\u0027]"},{"line_number":56,"context_line":"policies[\u0027items\u0027][0][\u0027enum\u0027].extend([\u0027aggregate-anti-affinity\u0027,"},{"line_number":57,"context_line":"                                     \u0027aggregate-affinity\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"server_groups_query_param \u003d {"},{"line_number":60,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8cb3f7_404aae80","line":57,"updated":"2017-12-20 14:04:41.000000000","message":"Seeing this part of the diff makes me wonder if we want to add soft-aggregate-[anti-]affinity while we\u0027re in here.","commit_id":"538fc786e7e0ebf041ce2f721fa7ee561aef672a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d04a866e52c5bac28b05cc9d545a4d55f4edf975","unresolved":false,"context_lines":[{"line_number":54,"context_line":"create_v259 \u003d copy.deepcopy(create_v215)"},{"line_number":55,"context_line":"policies \u003d create_v259[\u0027properties\u0027][\u0027server_group\u0027][\u0027properties\u0027][\u0027policies\u0027]"},{"line_number":56,"context_line":"policies[\u0027items\u0027][0][\u0027enum\u0027].extend([\u0027aggregate-anti-affinity\u0027,"},{"line_number":57,"context_line":"                                     \u0027aggregate-affinity\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"server_groups_query_param \u003d {"},{"line_number":60,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8cb3f7_34aa4885","line":57,"in_reply_to":"bf8cb3f7_404aae80","updated":"2017-12-20 15:45:02.000000000","message":"meh, I\u0027d prefer to add that (if absolutely, absolutely, critically necessary) in a later patch, even if that means another microversion bump.","commit_id":"538fc786e7e0ebf041ce2f721fa7ee561aef672a"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f74343562c46240991cba8702db569dddf876792","unresolved":false,"context_lines":[{"line_number":51,"context_line":"policies \u003d create_v215[\u0027properties\u0027][\u0027server_group\u0027][\u0027properties\u0027][\u0027policies\u0027]"},{"line_number":52,"context_line":"policies[\u0027items\u0027][0][\u0027enum\u0027].extend([\u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027])"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"create_v259 \u003d copy.deepcopy(create_v215)"},{"line_number":55,"context_line":"policies \u003d create_v259[\u0027properties\u0027][\u0027server_group\u0027][\u0027properties\u0027][\u0027policies\u0027]"},{"line_number":56,"context_line":"policies[\u0027items\u0027][0][\u0027enum\u0027].extend([\u0027aggregate-anti-affinity\u0027,"},{"line_number":57,"context_line":"                                     \u0027aggregate-affinity\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_8c574c03","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":11},"updated":"2018-03-27 12:11:51.000000000","message":"v261","commit_id":"7b9cd6b1cd8d501fae3bccced0916a5b5b1c768c"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f74343562c46240991cba8702db569dddf876792","unresolved":false,"context_lines":[{"line_number":52,"context_line":"policies[\u0027items\u0027][0][\u0027enum\u0027].extend([\u0027soft-anti-affinity\u0027, \u0027soft-affinity\u0027])"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"create_v259 \u003d copy.deepcopy(create_v215)"},{"line_number":55,"context_line":"policies \u003d create_v259[\u0027properties\u0027][\u0027server_group\u0027][\u0027properties\u0027][\u0027policies\u0027]"},{"line_number":56,"context_line":"policies[\u0027items\u0027][0][\u0027enum\u0027].extend([\u0027aggregate-anti-affinity\u0027,"},{"line_number":57,"context_line":"                                     \u0027aggregate-affinity\u0027])"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_0c4b3c59","line":55,"range":{"start_line":55,"start_character":11,"end_line":55,"end_character":22},"updated":"2018-03-27 12:11:51.000000000","message":"ditto","commit_id":"7b9cd6b1cd8d501fae3bccced0916a5b5b1c768c"}],"nova/api/openstack/compute/server_groups.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"f74343562c46240991cba8702db569dddf876792","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    @wsgi.expected_errors((400, 403))"},{"line_number":150,"context_line":"    @validation.schema(schema.create, \"2.0\", \"2.14\")"},{"line_number":151,"context_line":"    @validation.schema(schema.create_v215, \"2.15\", \"2.58\")"},{"line_number":152,"context_line":"    @validation.schema(schema.create_v259, \"2.59\")"},{"line_number":153,"context_line":"    def create(self, req, body):"},{"line_number":154,"context_line":"        \"\"\"Creates a new server group.\"\"\""},{"line_number":155,"context_line":"        context \u003d _authorize_context(req, \u0027create\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_6c6518e1","line":152,"range":{"start_line":152,"start_character":46,"end_line":152,"end_character":48},"updated":"2018-03-27 12:11:51.000000000","message":"ditto","commit_id":"7b9cd6b1cd8d501fae3bccced0916a5b5b1c768c"}],"nova/scheduler/filters/affinity_filter.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"422a981e9c20d8f5bd7f3285c5dd1e19742110e7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    REVERSE_CHECK \u003d False"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def host_passes(self, host_state, spec_obj):"},{"line_number":161,"context_line":"        # Only invoke the filter if \u0027anti-affinity\u0027 is configured"},{"line_number":162,"context_line":"        policies \u003d (spec_obj.instance_group.policies"},{"line_number":163,"context_line":"                    if spec_obj.instance_group else [])"},{"line_number":164,"context_line":"        if self.POLICY_NAME not in policies:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8cb3f7_c35008d8","line":161,"updated":"2017-12-20 14:04:41.000000000","message":"\u0027aggregate-affinity\u0027, not \u0027anti-affinity\u0027, right?","commit_id":"538fc786e7e0ebf041ce2f721fa7ee561aef672a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d04a866e52c5bac28b05cc9d545a4d55f4edf975","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    REVERSE_CHECK \u003d False"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def host_passes(self, host_state, spec_obj):"},{"line_number":161,"context_line":"        # Only invoke the filter if \u0027anti-affinity\u0027 is configured"},{"line_number":162,"context_line":"        policies \u003d (spec_obj.instance_group.policies"},{"line_number":163,"context_line":"                    if spec_obj.instance_group else [])"},{"line_number":164,"context_line":"        if self.POLICY_NAME not in policies:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8cb3f7_54afcc93","line":161,"in_reply_to":"bf8cb3f7_c35008d8","updated":"2017-12-20 15:45:02.000000000","message":"Done","commit_id":"538fc786e7e0ebf041ce2f721fa7ee561aef672a"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"422a981e9c20d8f5bd7f3285c5dd1e19742110e7","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # integer keys for aggregates. :( This means this isn\u0027t multi-cell"},{"line_number":189,"context_line":"        # safe. We would need to modify the host_aggregate_map and associated"},{"line_number":190,"context_line":"        # HostState.aggregates sets to contain UUIDs instead of IDs to make"},{"line_number":191,"context_line":"        # this multi-cell safe"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        # Grab all aggregates for all hosts in the server group and ensure we"},{"line_number":194,"context_line":"        # have an intersection with this host\u0027s aggregates"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8cb3f7_8309a0de","line":191,"updated":"2017-12-20 14:04:41.000000000","message":"++, nice find.","commit_id":"538fc786e7e0ebf041ce2f721fa7ee561aef672a"}],"nova/tests/functional/test_server_group.py":[{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"dfeaf83ca861e4ed542eb577909d4f13566ca99c","unresolved":false,"context_lines":[{"line_number":914,"context_line":"        self.agg2 \u003d self.admin_api.post_aggregate(payload)"},{"line_number":915,"context_line":""},{"line_number":916,"context_line":"        self.admin_api.add_host_to_aggregate(self.agg1[\u0027id\u0027], \u0027node1\u0027)"},{"line_number":917,"context_line":"        self.admin_api.add_host_to_aggregate(self.agg2[\u0027id\u0027], \u0027node2\u0027)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def _create_server_group(self, payload):"},{"line_number":920,"context_line":"        # We need to do this because _boot_a_server_to_group() ends up calling"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_64d6ac52","line":917,"updated":"2018-01-22 11:12:36.000000000","message":"Those will fail, since TestOpenStackClient doesn\u0027t have method `add_host_to_aggregate`. You\u0027ll need to get AggregateAPI from nova.compute.api, and missing context, like:\n\n\n  from nova.compute import api as compute_api\n  ..\n  self.agg_api \u003d compute_api.AggregateAPI()\n  ctxt \u003d context.get_admin_context()\n  self.agg_api.add_host_to_aggregate(ctxt, self.agg1[\u0027id\u0027], \u0027node1\u0027)\n  self.agg_api.add_host_to_aggregate(ctxt, self.agg2[\u0027id\u0027], \u0027node2\u0027)","commit_id":"b6349b0f2d525a22f55ae0a7424378a28d96a5ec"}]}
