)]}'
{"magnum/api/controllers/v1/cluster.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                          default\u003dNone)"},{"line_number":104,"context_line":"    \"\"\"The name of the nova ssh keypair\"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    node_count \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d1)"},{"line_number":107,"context_line":"    \"\"\"The node count for this cluster. Default to 1 if not set\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    master_count \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d1), default\u003d1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_0a17b6ef","line":106,"updated":"2020-02-27 15:22:52.000000000","message":"To conform to api microversions, I believe old microversion requests should fail if they send \"0\".","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"}],"magnum/api/controllers/v1/cluster_actions.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    This class enforces type checking and value constraints."},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    node_count \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), mandatory\u003dTrue)"},{"line_number":48,"context_line":"    \"\"\"The expected node count after resize.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    nodes_to_remove \u003d wsme.wsattr([wtypes.text], mandatory\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_4acb6e71","line":47,"updated":"2020-02-27 15:22:52.000000000","message":"As per previous comment, needs to still fail in the older version, technically.\nhttps://specs.openstack.org/openstack/api-wg/guidelines/microversion_specification.html","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"}],"magnum/api/controllers/v1/nodegroup.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                       default\u003d\u0027worker\u0027)"},{"line_number":106,"context_line":"    \"\"\"The role of the nodes included in this nodegroup\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    min_node_count \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":109,"context_line":"    \"\"\"The minimum allowed nodes for this nodegroup. Default to 0 if not set\"\"\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    max_node_count \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003dNone)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_ea77ba39","line":108,"range":{"start_line":108,"start_character":64,"end_line":108,"end_character":73},"updated":"2020-02-27 15:22:52.000000000","message":"I don\u0027t think you want to change the default, its quite confusing. Allowing zero should be enough.","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    min_node_count \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":109,"context_line":"    \"\"\"The minimum allowed nodes for this nodegroup. Default to 0 if not set\"\"\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    max_node_count \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003dNone)"},{"line_number":112,"context_line":"    \"\"\"The maximum allowed nodes for this nodegroup. Default to None if not set\"\"\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    is_default \u003d types.BooleanType()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_0aa81675","line":111,"range":{"start_line":111,"start_character":51,"end_line":111,"end_character":63},"updated":"2020-02-27 15:22:52.000000000","message":"Same as previous comments on on minimum.","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"}],"magnum/api/controllers/v1/types.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            msg \u003d _(\"\u0027%s\u0027 is a mandatory attribute and can not be removed\")"},{"line_number":210,"context_line":"            raise wsme.exc.ClientSideError(msg % patch.path)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if patch.op !\u003d \u0027remove\u0027:"},{"line_number":213,"context_line":"            if not patch.value and type(patch.value) is not int:"},{"line_number":214,"context_line":"                msg \u003d _(\"\u0027add\u0027 and \u0027replace\u0027 operations need a value\")"},{"line_number":215,"context_line":"                raise wsme.exc.ClientSideError(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        ret \u003d {\u0027path\u0027: patch.path, \u0027op\u0027: patch.op}"},{"line_number":218,"context_line":"        if patch.value or type(patch.value) is int:"},{"line_number":219,"context_line":"            ret[\u0027value\u0027] \u003d patch.value"},{"line_number":220,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_aa2b02e9","line":220,"range":{"start_line":212,"start_character":0,"end_line":220,"end_character":18},"updated":"2020-02-27 15:22:52.000000000","message":"Maybe add a note this is either a string or an int? It looks very bad, otherwise.\n\nAs with the minimum, I think you must only change this for new microversion, old microversion should say the same.","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"}],"magnum/objects/nodegroup.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \u0027node_count\u0027: fields.IntegerField(nullable\u003dFalse, default\u003d1),"},{"line_number":47,"context_line":"        \u0027role\u0027: fields.StringField(),"},{"line_number":48,"context_line":"        \u0027max_node_count\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027min_node_count\u0027: fields.IntegerField(nullable\u003dFalse, default\u003d0),"},{"line_number":50,"context_line":"        \u0027is_default\u0027: fields.BooleanField(default\u003dFalse),"},{"line_number":51,"context_line":"        \u0027stack_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027status\u0027: m_fields.ClusterStatusField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_8a5de6ea","line":49,"updated":"2020-02-27 15:22:52.000000000","message":"I don\u0027t think you need this, just explicitly set 0.","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"}],"magnum/tests/unit/api/controllers/v1/test_cluster.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        bdict[\u0027node_count\u0027] \u003d 0"},{"line_number":622,"context_line":"        response \u003d self.post_json(\u0027/clusters\u0027, bdict, expect_errors\u003dTrue)"},{"line_number":623,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":624,"context_line":"        self.assertEqual(400, response.status_int)"},{"line_number":625,"context_line":"        self.assertTrue(response.json[\u0027errors\u0027])"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def test_create_cluster_with_node_count_negative(self):"},{"line_number":628,"context_line":"        bdict \u003d apiutils.cluster_post_data()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_0a4496b6","side":"PARENT","line":625,"range":{"start_line":624,"start_character":0,"end_line":625,"end_character":48},"updated":"2020-02-27 15:22:52.000000000","message":"I think you need to add a new test for a -1 node count, as that should trigger 400?","commit_id":"fa45002e21ef6de3b4a9da35d590a4c5b3d0d7a4"}],"magnum/tests/unit/api/controllers/v1/test_nodegroup.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.assertEqual(0, response.json[\u0027min_node_count\u0027])"},{"line_number":331,"context_line":"        self.assertEqual(1, response.json[\u0027node_count\u0027])"},{"line_number":332,"context_line":"        self.assertIsNone(response.json[\u0027max_node_count\u0027])"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    @mock.patch(\u0027oslo_utils.timeutils.utcnow\u0027)"},{"line_number":335,"context_line":"    def test_create_nodegroup_invalid_node_count(self, mock_utcnow):"},{"line_number":336,"context_line":"        ng_dict \u003d apiutils.nodegroup_post_data(node_count\u003d7, max_node_count\u003d5)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_6a83cacd","line":333,"updated":"2020-02-27 15:22:52.000000000","message":"Needs to be test in here for the case were node count is 0 when you create a node group, I think.","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c3e3d9a93ea47c16b1fc71d126944d4ed3888c7e","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        response \u003d self.get_json(self.url + self.nodegroup.uuid)"},{"line_number":586,"context_line":"        # Removing the min_node_count just restores the default value"},{"line_number":587,"context_line":"        self.assertEqual(0, response[\u0027min_node_count\u0027])"},{"line_number":588,"context_line":"        return_updated_at \u003d timeutils.parse_isotime("},{"line_number":589,"context_line":"            response[\u0027updated_at\u0027]).replace(tzinfo\u003dNone)"},{"line_number":590,"context_line":"        self.assertEqual(test_time, return_updated_at)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_2a2872e0","line":587,"updated":"2020-02-27 15:22:52.000000000","message":"This seems like a very BAD API change. Needs a microversion. I suggest you don\u0027t change this.","commit_id":"e6495eaa08c968a6431e9df397ac2de5f9a930ea"}]}
