)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"df2280f0793778601c314787dd31cd79e2ff4140","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-02 07:27:43 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support secondary zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If9fd6351087fcfd1873cb9adb2bcf753ce42700d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a890539_d5bce76e","line":8,"updated":"2014-12-02 19:16:01.000000000","message":"Documentation should probably be added in this commit?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-02-24 16:15:12 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support secondary zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If9fd6351087fcfd1873cb9adb2bcf753ce42700d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"ba7be1f8_6b39e7d7","line":8,"updated":"2015-02-27 18:43:39.000000000","message":"Personally, it might be helpful to go ahead an summarize what a secondary zone is for folks not extremely familiar with DNS concepts. *cough* me *cough*.","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"}],"designate/api/v1/domains.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    central_api \u003d central_rpcapi.CentralAPI.get_instance()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    # A V1 zone only supports being a primary (No notion of a type)"},{"line_number":67,"context_line":"    values[\u0027type\u0027] \u003d \u0027PRIMARY\u0027"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    domain \u003d central_api.create_domain(context, objects.Domain(**values))"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_1605d2c1","line":67,"updated":"2015-03-01 14:16:20.000000000","message":"We\u0027ll also want to filter the get/update methods to block type !\u003d PRIMARY zones, allowing people to update a zone when they only have part of the information likely will leave users very confused :)","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"c83053daa43f4569af6c5aeb5222007c214fce90","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    return response"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"@blueprint.route(\u0027/domains\u0027, methods\u003d[\u0027GET\u0027])"},{"line_number":79,"context_line":"def get_domains():"},{"line_number":80,"context_line":"    context \u003d flask.request.environ.get(\u0027context\u0027)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9a80dd14_d042c43c","line":78,"updated":"2015-03-16 12:57:18.000000000","message":"should we be adding type\u003dPRIMARY in the criterion here?","commit_id":"a3527d6fd76fc4de9d117a53cd77d3813b762613"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"c83053daa43f4569af6c5aeb5222007c214fce90","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return flask.jsonify(domains_schema.filter({\u0027domains\u0027: domains}))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@blueprint.route(\u0027/domains/\u003cuuid:domain_id\u003e\u0027, methods\u003d[\u0027GET\u0027])"},{"line_number":89,"context_line":"def get_domain(domain_id):"},{"line_number":90,"context_line":"    context \u003d flask.request.environ.get(\u0027context\u0027)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9a80dd14_30440046","line":88,"updated":"2015-03-16 12:57:18.000000000","message":"should we be adding type\u003dPRIMARY in the criterion here?","commit_id":"a3527d6fd76fc4de9d117a53cd77d3813b762613"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"c83053daa43f4569af6c5aeb5222007c214fce90","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    return flask.jsonify(domain_schema.filter(domain))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"@blueprint.route(\u0027/domains/\u003cuuid:domain_id\u003e\u0027, methods\u003d[\u0027PUT\u0027])"},{"line_number":99,"context_line":"def update_domain(domain_id):"},{"line_number":100,"context_line":"    context \u003d flask.request.environ.get(\u0027context\u0027)"},{"line_number":101,"context_line":"    values \u003d flask.request.json"}],"source_content_type":"text/x-python","patch_set":40,"id":"9a80dd14_70791892","line":98,"updated":"2015-03-16 12:57:18.000000000","message":"should we be adding type\u003dPRIMARY in the criterion here?","commit_id":"a3527d6fd76fc4de9d117a53cd77d3813b762613"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"c83053daa43f4569af6c5aeb5222007c214fce90","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    return flask.jsonify(domain_schema.filter(domain))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"@blueprint.route(\u0027/domains/\u003cuuid:domain_id\u003e\u0027, methods\u003d[\u0027DELETE\u0027])"},{"line_number":123,"context_line":"def delete_domain(domain_id):"},{"line_number":124,"context_line":"    context \u003d flask.request.environ.get(\u0027context\u0027)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9a80dd14_906cccd1","line":122,"updated":"2015-03-16 12:57:18.000000000","message":"should we be adding type\u003dPRIMARY in the criterion here?","commit_id":"a3527d6fd76fc4de9d117a53cd77d3813b762613"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"c83053daa43f4569af6c5aeb5222007c214fce90","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    return flask.Response(status\u003d200)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"@blueprint.route(\u0027/domains/\u003cuuid:domain_id\u003e/servers\u0027, methods\u003d[\u0027GET\u0027])"},{"line_number":133,"context_line":"def get_domain_servers(domain_id):"},{"line_number":134,"context_line":"    context \u003d flask.request.environ.get(\u0027context\u0027)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"9a80dd14_d069e4be","line":132,"updated":"2015-03-16 12:57:18.000000000","message":"should we be adding type\u003dPRIMARY in the criterion here?","commit_id":"a3527d6fd76fc4de9d117a53cd77d3813b762613"}],"designate/api/v2/controllers/zones.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    _collection_schema \u003d schema.Schema(\u0027v2\u0027, \u0027zones\u0027)"},{"line_number":52,"context_line":"    SORT_KEYS \u003d [\u0027created_at\u0027, \u0027id\u0027, \u0027updated_at\u0027, \u0027name\u0027, \u0027tenant_id\u0027,"},{"line_number":53,"context_line":"                 \u0027serial\u0027, \u0027ttl\u0027, \u0027status\u0027]"},{"line_number":54,"context_line":"    SECONDARY_KEYS \u003d [\"type\", \"masters\", \"pool_id\"]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    nameservers \u003d nameservers.NameServersController()"},{"line_number":57,"context_line":"    recordsets \u003d recordsets.RecordSetsController()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_53476f4b","line":54,"updated":"2014-11-12 13:53:38.000000000","message":"I\u0027m trying to understand what this actually does, but I can\u0027t see it! either way, type and pool_id should be in SORT_KEYS list aswell...","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"}],"designate/api/v2/controllers/zones/__init__.py":[{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        \"\"\"\u0027Normal\u0027 zone creation\"\"\""},{"line_number":152,"context_line":"        body \u003d request.body_dict"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        mgmt_email \u003d CONF[\u0027service:central\u0027].managed_resource_email"},{"line_number":155,"context_line":"        # Validate the request conforms to the schema"},{"line_number":156,"context_line":"        if \u0027zone\u0027 in body and body[\u0027zone\u0027].get(\u0027type\u0027) \u003d\u003d \u0027SECONDARY\u0027:"},{"line_number":157,"context_line":"            body[\u0027zone\u0027][\u0027email\u0027] \u003d mgmt_email"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_65261818","line":154,"updated":"2014-12-03 07:18:43.000000000","message":"Could you move the above line to within the if statement, so that it is executed only for secondary zones?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        \"\"\"\u0027Normal\u0027 zone creation\"\"\""},{"line_number":152,"context_line":"        body \u003d request.body_dict"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        mgmt_email \u003d CONF[\u0027service:central\u0027].managed_resource_email"},{"line_number":155,"context_line":"        # Validate the request conforms to the schema"},{"line_number":156,"context_line":"        if \u0027zone\u0027 in body and body[\u0027zone\u0027].get(\u0027type\u0027) \u003d\u003d \u0027SECONDARY\u0027:"},{"line_number":157,"context_line":"            body[\u0027zone\u0027][\u0027email\u0027] \u003d mgmt_email"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_471a866f","line":154,"in_reply_to":"5a890539_65261818","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        mgmt_email \u003d CONF[\u0027service:central\u0027].managed_resource_email"},{"line_number":155,"context_line":"        # Validate the request conforms to the schema"},{"line_number":156,"context_line":"        if \u0027zone\u0027 in body and body[\u0027zone\u0027].get(\u0027type\u0027) \u003d\u003d \u0027SECONDARY\u0027:"},{"line_number":157,"context_line":"            body[\u0027zone\u0027][\u0027email\u0027] \u003d mgmt_email"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        self._resource_schema.validate(body)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_5732b15e","line":156,"updated":"2014-12-03 07:18:43.000000000","message":"If \u0027type\u0027 is not specified, we would get a 500. It would be good if we need to specify the type only for \u0027SECONDARY\u0027 zones i.e. the type would default to \u0027PRIMARY\u0027","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        mgmt_email \u003d CONF[\u0027service:central\u0027].managed_resource_email"},{"line_number":155,"context_line":"        # Validate the request conforms to the schema"},{"line_number":156,"context_line":"        if \u0027zone\u0027 in body and body[\u0027zone\u0027].get(\u0027type\u0027) \u003d\u003d \u0027SECONDARY\u0027:"},{"line_number":157,"context_line":"            body[\u0027zone\u0027][\u0027email\u0027] \u003d mgmt_email"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        self._resource_schema.validate(body)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c2d239d0","line":156,"in_reply_to":"5a890539_5732b15e","updated":"2014-12-03 18:31:12.000000000","message":"This will actually work, .get(\u0027type\u0027) will return None if the field doesn\u0027t exist, which won\u0027t \u003d\u003d \u0027SECONDARY\u0027 .. That said, if someone doesn\u0027t supply the \"zone\" as part of the API call, we\u0027ll return a HTTP 500. All this code should be moved to after the validation has happened.","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        mgmt_email \u003d CONF[\u0027service:central\u0027].managed_resource_email"},{"line_number":155,"context_line":"        # Validate the request conforms to the schema"},{"line_number":156,"context_line":"        if \u0027zone\u0027 in body and body[\u0027zone\u0027].get(\u0027type\u0027) \u003d\u003d \u0027SECONDARY\u0027:"},{"line_number":157,"context_line":"            body[\u0027zone\u0027][\u0027email\u0027] \u003d mgmt_email"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        self._resource_schema.validate(body)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_e7d0d2f9","line":156,"in_reply_to":"5a890539_c2d239d0","updated":"2014-12-08 09:52:57.000000000","message":"There\u0027s a problem with that since you need to specify the default email BEFORE the validation happens if not the schema validation fails.","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        attrs \u003d _unpack_masters(values)"},{"line_number":165,"context_line":"        zone \u003d objects.Domain(**values)"},{"line_number":166,"context_line":"        zone.attributes \u003d attrs"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        # Create the zone"},{"line_number":169,"context_line":"        zone \u003d self.central_api.create_domain(context, zone)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c5f50c52","line":166,"updated":"2014-12-03 07:18:43.000000000","message":"Should the above lines (except for the zone assignment) be done only for a secondary zone?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        attrs \u003d _unpack_masters(values)"},{"line_number":165,"context_line":"        zone \u003d objects.Domain(**values)"},{"line_number":166,"context_line":"        zone.attributes \u003d attrs"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        # Create the zone"},{"line_number":169,"context_line":"        zone \u003d self.central_api.create_domain(context, zone)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_42de49db","line":166,"in_reply_to":"5a890539_c5f50c52","updated":"2014-12-03 18:31:12.000000000","message":"++","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        attrs \u003d _unpack_masters(values)"},{"line_number":165,"context_line":"        zone \u003d objects.Domain(**values)"},{"line_number":166,"context_line":"        zone.attributes \u003d attrs"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        # Create the zone"},{"line_number":169,"context_line":"        zone \u003d self.central_api.create_domain(context, zone)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_07f5de82","line":166,"in_reply_to":"5a890539_c5f50c52","updated":"2014-12-08 09:52:57.000000000","message":"Unsure of how to best structure this then since the *masters* key needs to be removed before it tries to create the domain object.","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                # records are taken care of in _create_zone)."},{"line_number":194,"context_line":"                check_origin\u003dFalse)"},{"line_number":195,"context_line":"            domain \u003d dnsutils.from_dnspython_zone(dnspython_zone)"},{"line_number":196,"context_line":"            domain.type \u003d \u0027PRIMARY\u0027"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            for rrset in list(domain.recordsets):"},{"line_number":199,"context_line":"                if rrset.type in (\u0027NS\u0027, \u0027SOA\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_829af111","line":196,"updated":"2014-12-03 18:31:12.000000000","message":"I\u0027m thinking we shouldn\u0027t have to manually specify this anywhere we create a domain object, it should simply be the default if no value is supplied","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                # records are taken care of in _create_zone)."},{"line_number":194,"context_line":"                check_origin\u003dFalse)"},{"line_number":195,"context_line":"            domain \u003d dnsutils.from_dnspython_zone(dnspython_zone)"},{"line_number":196,"context_line":"            domain.type \u003d \u0027PRIMARY\u0027"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            for rrset in list(domain.recordsets):"},{"line_number":199,"context_line":"                if rrset.type in (\u0027NS\u0027, \u0027SOA\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_e73e1229","line":196,"in_reply_to":"5a890539_829af111","updated":"2014-12-08 09:52:57.000000000","message":"Where would you want that logic in that case ?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            values \u003d self._view.load(context, request, body, zone.type)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"            attrs \u003d _unpack_masters(values)"},{"line_number":263,"context_line":"            zone.attributes \u003d attrs"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"            # Update and persist the resource"},{"line_number":266,"context_line":"            zone.update(values)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_b76af517","line":263,"updated":"2014-12-03 07:18:43.000000000","message":"How about doing this only for secondary zones?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            values \u003d self._view.load(context, request, body, zone.type)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"            attrs \u003d _unpack_masters(values)"},{"line_number":263,"context_line":"            zone.attributes \u003d attrs"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"            # Update and persist the resource"},{"line_number":266,"context_line":"            zone.update(values)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_87170ea3","line":263,"in_reply_to":"5a890539_b76af517","updated":"2014-12-08 09:52:57.000000000","message":"Same as above ^","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"5dc9f09f6d97f5eee84900f564a0685a8a28c99f","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            values \u003d self._view.load(context, request, body)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"            attrs \u003d _unpack_masters(values)"},{"line_number":274,"context_line":"            zone.attributes \u003d attrs"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"            # Update and persist the resource"},{"line_number":277,"context_line":"            zone.update(values)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_7f0c293c","line":274,"updated":"2015-02-09 23:09:35.000000000","message":"If the zone is secondary and the masters is updated - then I think the transferred_at should be set to None, so that notify_zone_changed in mdns can transfer the zone from the new master","commit_id":"ba6cdfa0b7dcb8d5d291c91ca75d2f49c3d3699a"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        attrs \u003d _unpack_masters(values)"},{"line_number":172,"context_line":"        zone \u003d objects.Domain(**values)"},{"line_number":173,"context_line":"        zone.attributes \u003d attrs"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        # Set the initial Serial to 0, it will populated by AXFR later."},{"line_number":176,"context_line":"        if zone.type \u003d\u003d \"SECONDARY\":"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_56266a69","line":173,"updated":"2015-03-01 14:16:20.000000000","message":"At the mid-cycle we had a very lengthy conversation on the use of pool attributes, and eventually settled on the idea that they were a bad idea, and that we should instead have dedicated objects and tables for things like a zone\u0027s \"masters\" - But, these wouldn\u0027t necessarily be exposed as a API resource, or even central methods etc. I think this falls into the same category and probably wants the same attention applied to it. We should raise this at the next weekly meeting to discuss.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        attrs \u003d _unpack_masters(values)"},{"line_number":172,"context_line":"        zone \u003d objects.Domain(**values)"},{"line_number":173,"context_line":"        zone.attributes \u003d attrs"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        # Set the initial Serial to 0, it will populated by AXFR later."},{"line_number":176,"context_line":"        if zone.type \u003d\u003d \"SECONDARY\":"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_0ca44049","line":173,"in_reply_to":"ba7be1f8_56266a69","updated":"2015-03-10 13:45:41.000000000","message":"This is agreed to fix post K","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"2616426c2ade4e9762d1788219f2d3e7795d0ca8","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            domain \u003d dnsutils.from_dnspython_zone(dnspython_zone)"},{"line_number":207,"context_line":"            domain.type \u003d \u0027PRIMARY\u0027"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"            for rrset in list(domain.recordsets):"},{"line_number":210,"context_line":"                if rrset.type in (\u0027NS\u0027, \u0027SOA\u0027):"},{"line_number":211,"context_line":"                    domain.recordsets.remove(rrset)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_73aa7c1a","line":209,"updated":"2015-03-02 17:12:24.000000000","message":"Is there a reason for using `list(domain.recordsets)` vs. the previous version? I\u0027m going to take a guess and assume it is because the list copies values and you can safely delete them later in the loop. \n\nAssuming my guess is correct, it probably is a good idea to pull the value into its own variable:\n\n  # Copy our recordsets in order to avoid deleting items in the list while  \n  # iterating over them at the same time.\n  domain_recordset \u003d domain.recordsets\n\n  for rrset in domain_recordsets:\n\nIt is pretty easy to assume the list() is unnecessary otherwise. At the very least a comment would be helpful.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"b6ea93bede218c1b62db9e759fff3915e50e6715","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            domain \u003d dnsutils.from_dnspython_zone(dnspython_zone)"},{"line_number":207,"context_line":"            domain.type \u003d \u0027PRIMARY\u0027"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"            for rrset in list(domain.recordsets):"},{"line_number":210,"context_line":"                if rrset.type in (\u0027NS\u0027, \u0027SOA\u0027):"},{"line_number":211,"context_line":"                    domain.recordsets.remove(rrset)"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_5b1d8e65","line":209,"in_reply_to":"ba7be1f8_73aa7c1a","updated":"2015-03-02 17:31:44.000000000","message":"On it\u0027s own,  this won\u0027t actually work:\n\n    domain_recordset \u003d domain.recordsets\n    \nSince domain_recordset will be a reference to the mutable instance of the RecordSetList class, and we\u0027ll hit the same bug.. We would need to do either this:\n\n    domain_recordset \u003d list(domain.recordsets)\n\nor this (This is more expensive than the `list()` endre used..):\n\n    domain_recordset \u003d copy.deepcopy(domain.recordsets)","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"87938bfd772bf3127591667092b12dfb5735c2e4","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        # Convert from APIv2 -\u003e Central format"},{"line_number":156,"context_line":"        values \u003d self._view.load(context, request, body)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        zone \u003d objects.Domain(**values)"},{"line_number":159,"context_line":"        zone.masters \u003d values.pop(\u0027masters\u0027, [])"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Create the zone"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_6d9f3651","line":158,"updated":"2015-03-11 17:14:39.000000000","message":"Should this from objects.Domain.from_dict(values)?","commit_id":"34ba32c1c12ce7e1a0a6b8c42a3aa9def9017387"}],"designate/api/v2/views/zones/__init__.py":[{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    _resource_name \u003d \u0027zone\u0027"},{"line_number":27,"context_line":"    _collection_name \u003d \u0027zones\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    ZONE_KEYS \u003d [\u0027name\u0027, \u0027description\u0027, \u0027type\u0027]"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def show_basic(self, context, request, zone):"},{"line_number":32,"context_line":"        \"\"\"Basic view of a zone\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e819f8d1","line":29,"updated":"2014-12-03 07:18:43.000000000","message":"Why not have \u0027email\u0027 in this list? Also how is domain.ttl set for secondary zones or is it not relevant for secondary zones?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    _resource_name \u003d \u0027zone\u0027"},{"line_number":27,"context_line":"    _collection_name \u003d \u0027zones\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    ZONE_KEYS \u003d [\u0027name\u0027, \u0027description\u0027, \u0027type\u0027]"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def show_basic(self, context, request, zone):"},{"line_number":32,"context_line":"        \"\"\"Basic view of a zone\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_826831f6","line":29,"in_reply_to":"5a890539_e819f8d1","updated":"2014-12-03 18:31:12.000000000","message":"It\u0027s not relevant, as it get\u0027s pulled in from the AXFR","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if zone.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":52,"context_line":"            values[\u0027masters\u0027] \u003d zone.get_masters()"},{"line_number":53,"context_line":"        return values"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def load(self, context, request, body, type_\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_82367101","line":52,"updated":"2014-12-03 18:31:12.000000000","message":"I think we should always return all the fields back out as part of the API, which means we should just move this into the dict above and return it straight away.. ALSO... `if zone.obj_attr_is_set(\u0027attributes\u0027):` really belongs inside that get_masters method..","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if zone.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":52,"context_line":"            values[\u0027masters\u0027] \u003d zone.get_masters()"},{"line_number":53,"context_line":"        return values"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def load(self, context, request, body, type_\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_e725320b","line":52,"in_reply_to":"5a890539_82367101","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \"\"\"Extract a \"central\" compatible dict from an API call\"\"\""},{"line_number":57,"context_line":"        zone_type \u003d type_ or body[self._resource_name][\u0027type\u0027]"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # Seperate valid keys based on PRIMARY / SECONDARY"},{"line_number":60,"context_line":"        if zone_type \u003d\u003d \u0027PRIMARY\u0027:"},{"line_number":61,"context_line":"            valid \u003d self.ZONE_KEYS + [\u0027email\u0027, \u0027ttl\u0027]"},{"line_number":62,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_9d1c1468","line":59,"updated":"2014-12-03 18:31:12.000000000","message":"Isn\u0027t everything \"valid keys\", and it\u0027s up to the Schema to decide if the supplied content is semantically valid? Right now, a create with {\"name\": \"foo.com.\", \"type\": \"PRIMARY\", \"masters\": [\"4.3.2.1\"]} will succeed - When it should not... This removes the need for adding the \"type_\" field too...","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            \"links\": self._get_resource_links(request, zone)"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        values[\u0027masters\u0027] \u003d zone.masters"},{"line_number":54,"context_line":"        return values"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def load(self, context, request, body):"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_451172ab","line":53,"updated":"2015-02-27 18:43:39.000000000","message":"Is there a reason this happens outside of the initial dict declaration?","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \"updated_at\": zone[\u0027updated_at\u0027],"},{"line_number":49,"context_line":"            \"transferred_at\": zone[\u0027transferred_at\u0027],"},{"line_number":50,"context_line":"            \"links\": self._get_resource_links(request, zone),"},{"line_number":51,"context_line":"            \"masters\": zone.masters"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        return values"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_d6f09acb","line":51,"updated":"2015-03-01 14:16:20.000000000","message":"Can we move masters up above the \"links\" entry? All the current views have a failry fixed \"id, ...., *_at, links\" pattern.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \"updated_at\": zone[\u0027updated_at\u0027],"},{"line_number":49,"context_line":"            \"transferred_at\": zone[\u0027transferred_at\u0027],"},{"line_number":50,"context_line":"            \"links\": self._get_resource_links(request, zone),"},{"line_number":51,"context_line":"            \"masters\": zone.masters"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        return values"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_8f0bc222","line":51,"in_reply_to":"ba7be1f8_d6f09acb","updated":"2015-03-10 13:45:41.000000000","message":"Done","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def load(self, context, request, body):"},{"line_number":57,"context_line":"        \"\"\"Extract a \"central\" compatible dict from an API call\"\"\""},{"line_number":58,"context_line":"        return self._load(context, request, body, self.ZONE_KEYS)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_16ba32e1","line":58,"updated":"2015-03-01 14:16:20.000000000","message":"Since self.ZONE_KEYS is only used in 1 place, can we keep it consistent with the other views and move it back in here? As we go to cleanup this views (Graham has a patchset for this..) It\u0027s always easier if things are consistent :)","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def load(self, context, request, body):"},{"line_number":57,"context_line":"        \"\"\"Extract a \"central\" compatible dict from an API call\"\"\""},{"line_number":58,"context_line":"        return self._load(context, request, body, self.ZONE_KEYS)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_af15e640","line":58,"in_reply_to":"ba7be1f8_16ba32e1","updated":"2015-03-10 13:45:41.000000000","message":"Done","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"87938bfd772bf3127591667092b12dfb5735c2e4","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def load(self, context, request, body):"},{"line_number":55,"context_line":"        \"\"\"Extract a \"central\" compatible dict from an API call\"\"\""},{"line_number":56,"context_line":"        zone_keys \u003d [\u0027name\u0027, \u0027description\u0027, \u0027type\u0027, \u0027email\u0027, \u0027masters\u0027, \u0027ttl\u0027]"},{"line_number":57,"context_line":"        return self._load(context, request, body, zone_keys)"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_28ec4cc7","line":56,"updated":"2015-03-11 17:14:39.000000000","message":"Is there a reason to switch this from a tuple to a list? It doesn\u0027t look like it makes a difference to the `_load` method, but I\u0027m curious if there are other reasons. \n\nUsing a list is totally fine by me!\n\nAs an aside, I timed doing the inclusion check with a tuple vs. a list. In ipython: \n\n  % foo \u003d tuple(range(0, 11))\n  % timeit 10 in foo\n  % bar \u003d list(range(0, 11))\n  % timeit 10 in bar\n\nThe timings were the same (170ns), but, the list version did have a message:\n\n  The slowest run took 11.07 times longer than the fastest. This could mean that an intermediate result is being cached\n\nI\u0027m not drawing any conclusions, but it seemed interesting!","commit_id":"34ba32c1c12ce7e1a0a6b8c42a3aa9def9017387"}],"designate/central/service.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        # last, in order to ensure BIND etc do not read the zone file before"},{"line_number":777,"context_line":"        # all changes have been committed to the zone file."},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        if created_domain.type \u003d\u003d \u0027PRIMARY\u0027:"},{"line_number":780,"context_line":"            self._create_ns(context, created_domain, servers)"},{"line_number":781,"context_line":"            self._create_soa(context, created_domain)"},{"line_number":782,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_b3ffb366","line":779,"updated":"2014-11-12 13:53:38.000000000","message":"Maybe these if \u003d\u003d PRIMARY checks should just be moved into the create/update ns/soa methods?","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":963,"context_line":""},{"line_number":964,"context_line":"        if domain.type \u003d\u003d \u0027SECONDARY\u0027:"},{"line_number":965,"context_line":"            msg \u003d \u0027Not allowed to create RecordSet in a SECONDARY zone\u0027"},{"line_number":966,"context_line":"            raise exceptions.BadRequest(msg)"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        target \u003d {"},{"line_number":969,"context_line":"            \u0027domain_id\u0027: domain_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_13c6c749","line":966,"updated":"2014-11-12 13:53:38.000000000","message":"I\u0027d prefer to see a more specific exception for this, as it\u0027s something we\u0027ll want to be able to gracefully show end users in the CLI etc etc maybe something like `ReadOnlyZone`","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"df2280f0793778601c314787dd31cd79e2ff4140","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                                          zone[\u0027minimum\u0027])"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _create_soa(self, context, zone):"},{"line_number":455,"context_line":"        if zone.type !\u003d \u0027PRIMARY\u0027:"},{"line_number":456,"context_line":"            return"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        # Need elevated context to get the servers"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_d04dd573","line":455,"updated":"2014-12-02 19:16:01.000000000","message":"This is little odd, I can accept that it probably needs to be there, but perhaps a comment explaining why it\u0027s happening would be appropriate?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                                          zone[\u0027minimum\u0027])"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _create_soa(self, context, zone):"},{"line_number":455,"context_line":"        if zone.type !\u003d \u0027PRIMARY\u0027:"},{"line_number":456,"context_line":"            return"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        # Need elevated context to get the servers"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_d2a2b299","line":455,"in_reply_to":"5a890539_d04dd573","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    # NS Recordset Methods"},{"line_number":496,"context_line":"    def _create_ns(self, context, zone, servers):"},{"line_number":497,"context_line":"        if zone.type !\u003d \u0027PRIMARY\u0027:"},{"line_number":498,"context_line":"            return"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        # Create an NS record for each server"},{"line_number":501,"context_line":"        ns_values \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e12112b5","line":498,"updated":"2014-12-03 07:18:43.000000000","message":"The name servers are associated with being in a pool. I thought primary and secondary zones would be treated the same within the pool. If not, how do we expect to get the ns records - via an AXFR? Would it then makre more sense to have secondary zones in a different pool?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    # NS Recordset Methods"},{"line_number":496,"context_line":"    def _create_ns(self, context, zone, servers):"},{"line_number":497,"context_line":"        if zone.type !\u003d \u0027PRIMARY\u0027:"},{"line_number":498,"context_line":"            return"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        # Create an NS record for each server"},{"line_number":501,"context_line":"        ns_values \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_1d47444d","line":498,"in_reply_to":"5a890539_e12112b5","updated":"2014-12-03 18:31:12.000000000","message":"As we need to be able to import DNSSEC signed secondary zones, we have to let the end user do all the records in the zone.. including the NS RRSet, they\u0027ll be expected to add they appropriate NS records on their side and we\u0027ll sync them in via AXFR. If they put the wrong values in, it\u0027s no \"harm\" to us other than maybe being a little confusing..","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        # Create the NS and SOA recordsets for the new domain. SOA must be"},{"line_number":924,"context_line":"        # last, in order to ensure BIND etc do not read the zone file before"},{"line_number":925,"context_line":"        # all changes have been committed to the zone file."},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"        self._create_ns(context, created_domain, servers)"},{"line_number":928,"context_line":"        self._create_soa(context, created_domain)"},{"line_number":929,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_fd6438e6","line":926,"updated":"2014-12-03 18:31:12.000000000","message":"supernit: Let\u0027s remove the spurious newline since another patchset is necessary anyway ;\u0027)","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        # Create the NS and SOA recordsets for the new domain. SOA must be"},{"line_number":924,"context_line":"        # last, in order to ensure BIND etc do not read the zone file before"},{"line_number":925,"context_line":"        # all changes have been committed to the zone file."},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"        self._create_ns(context, created_domain, servers)"},{"line_number":928,"context_line":"        self._create_soa(context, created_domain)"},{"line_number":929,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_92990a71","line":926,"in_reply_to":"5a890539_fd6438e6","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    def _update_soa(self, context, zone):"},{"line_number":445,"context_line":"        # NOTE: We should not be updating SOA records when a zone is SECONDARY."},{"line_number":446,"context_line":"        if zone.type !\u003d \u0027PRIMARY\u0027:"},{"line_number":447,"context_line":"            return"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        nameservers \u003d self.get_domain_servers(context, zone[\u0027id\u0027])"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_45409256","line":447,"updated":"2015-02-27 18:43:39.000000000","message":"I\u0027m just throwing this out there. Would it makes sense to implement this check as a decorator? It might be helpful reading the code if it were:\n\n  @require_primary_zone()\n  def _update_soa(self, context, zone):\n\nThat separates the update algorithm from the necessary filtering.\n\nAgain, just an idea!","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        # Set the serial number if one isn\u0027t provided yet."},{"line_number":859,"context_line":"        if domain.serial is None:"},{"line_number":860,"context_line":"            domain.serial \u003d utils.increment_serial()"},{"line_number":861,"context_line":""},{"line_number":862,"context_line":"        domain \u003d self.storage.create_domain(context, domain)"},{"line_number":863,"context_line":"        nameservers \u003d self.get_domain_servers(context, domain[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_36bd76d8","line":860,"updated":"2015-03-01 14:16:20.000000000","message":"I wonder if we should instead of doing this, and the matching `if type \u003d\u003d SECONDARY; serial \u003d0` in the view, we could instead pass the domain into `utils.increment_serial()` and do the `if type \u003d\u003d SECONDARY` in there - that way, we don\u0027t have to remember not to call this on certain zone types.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        # Set the serial number if one isn\u0027t provided yet."},{"line_number":859,"context_line":"        if domain.serial is None:"},{"line_number":860,"context_line":"            domain.serial \u003d utils.increment_serial()"},{"line_number":861,"context_line":""},{"line_number":862,"context_line":"        domain \u003d self.storage.create_domain(context, domain)"},{"line_number":863,"context_line":"        nameservers \u003d self.get_domain_servers(context, domain[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_cf221ab8","line":860,"in_reply_to":"ba7be1f8_36bd76d8","updated":"2015-03-10 13:45:41.000000000","message":"I modified _increment_domain_serial to reflect this.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"87938bfd772bf3127591667092b12dfb5735c2e4","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                                          zone[\u0027minimum\u0027])"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    def _create_soa(self, context, zone):"},{"line_number":487,"context_line":"        # Need elevated context to get the servers"},{"line_number":488,"context_line":"        elevated_context \u003d context.elevated()"},{"line_number":489,"context_line":"        elevated_context.all_tenants \u003d True"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_a8459cb4","line":487,"updated":"2015-03-11 17:14:39.000000000","message":"+1 for comments even though I don\u0027t know what elevating the context does ;)","commit_id":"34ba32c1c12ce7e1a0a6b8c42a3aa9def9017387"}],"designate/context.py":[{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"0821fe24700a51d12e4eba73d672ab9d30e301c9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.service_catalog \u003d service_catalog"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.all_tenants \u003d all_tenants"},{"line_number":59,"context_line":"        self.write_secondary \u003d write_secondary"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if not hasattr(local.store, \u0027context\u0027):"},{"line_number":62,"context_line":"            self.update_store()"}],"source_content_type":"text/x-python","patch_set":25,"id":"da86d52c_9928eb87","line":59,"updated":"2015-02-03 21:30:31.000000000","message":"Just curiosity, why is this wrapped up in context ass opposed to policy?","commit_id":"8e5842768eaa224eaeddade92cf33063a4d06e0b"}],"designate/exceptions.py":[{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"class DuplicateDomainAttribute(Duplicate):"},{"line_number":238,"context_line":"    error_type \u003d \u0027duplicate_pool_attribute\u0027"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"class MethodNotAllowed(Base):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_2395e332","line":238,"updated":"2014-12-03 07:18:43.000000000","message":"The error type should be updated.","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"class DuplicateDomainAttribute(Duplicate):"},{"line_number":238,"context_line":"    error_type \u003d \u0027duplicate_pool_attribute\u0027"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"class MethodNotAllowed(Base):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_f2c6ce48","line":238,"in_reply_to":"5a890539_2395e332","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"}],"designate/objects/domain.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def masters_from_attributes(attributes):"},{"line_number":19,"context_line":"    return [i.value for i in attributes if i.key \u003d\u003d \u0027master\u0027]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Domain(base.DictObjectMixin, base.SoftDeleteObjectMixin,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_534a0fad","line":19,"updated":"2014-11-12 13:53:38.000000000","message":"I\u0027m not sure this belongs here, I think it would be better as a public method on the object.. maybe this? \n\n    domain.get_masters()","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        },"},{"line_number":42,"context_line":"        \u0027type\u0027: {},"},{"line_number":43,"context_line":"        \u0027transferred_at\u0027: {},"},{"line_number":44,"context_line":"        \u0027attributes\u0027: {},"},{"line_number":45,"context_line":"    }"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_f354db55","line":44,"updated":"2014-11-12 13:53:38.000000000","message":"This kinda feels like a relation: True since the data is coming from elsewhere?","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"32d07270413f59eaad91242fbca47d7c4c57f443","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027transferred_at\u0027: {},"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def get_masters(self):"},{"line_number":46,"context_line":"        if self.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":47,"context_line":"            return [i.value for i in self.attributes if i.key \u003d\u003d \u0027master\u0027]"},{"line_number":48,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_a4921749","line":45,"updated":"2015-02-09 22:38:58.000000000","message":"Could we define this as a property - masters - similar to what is currently in recordsets for action and status - https://github.com/openstack/designate/blob/master/designate/objects/recordset.py#L20","commit_id":"ba6cdfa0b7dcb8d5d291c91ca75d2f49c3d3699a"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        if self.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":50,"context_line":"            return [i.value for i in self.attributes if i.key \u003d\u003d \u0027master\u0027]"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            return []"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DomainList(base.ListObjectMixin, base.DesignateObject,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_76b7eef5","line":52,"updated":"2015-03-01 14:16:20.000000000","message":"If we decide to keep attributes in place as is, I\u0027d prefer to see the \"unpack masters\" method in the view moved to a property setter method here","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        if self.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":50,"context_line":"            return [i.value for i in self.attributes if i.key \u003d\u003d \u0027master\u0027]"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            return []"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DomainList(base.ListObjectMixin, base.DesignateObject,"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_eafa6c41","line":52,"in_reply_to":"ba7be1f8_76b7eef5","updated":"2015-03-10 13:45:41.000000000","message":"Done","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"}],"designate/resources/schemas/v2/zone.json":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"        \"zone\": {"},{"line_number":14,"context_line":"            \"type\": \"object\","},{"line_number":15,"context_line":"            \"additionalProperties\": false,"},{"line_number":16,"context_line":"            \"required\": [\"name\", \"email\", \"type\"],"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"            \"properties\": {"},{"line_number":19,"context_line":"                \"id\": {"}],"source_content_type":"application/json","patch_set":1,"id":"5a890539_9399d721","line":16,"updated":"2014-11-12 13:53:38.000000000","message":"I don\u0027t think type should be required, we should default to PRIMARY as it\u0027s the 99.9% use case.","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    \"description\": \"Zone Type\","},{"line_number":47,"context_line":"                    \"enum\": [\"PRIMARY\", \"SECONDARY\"]"},{"line_number":48,"context_line":"                },"},{"line_number":49,"context_line":"                \"masters\": {"},{"line_number":50,"context_line":"                    \"type\": \"array\","},{"line_number":51,"context_line":"                    \"items\": {"},{"line_number":52,"context_line":"                        \"type\": \"string\""}],"source_content_type":"application/json","patch_set":10,"id":"5a890539_dd4a1c26","line":49,"updated":"2014-12-03 18:31:12.000000000","message":"I\u0027m not 100% confident this section is correct JSONSchema, But I can\u0027t see why I think that ;)","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    \"description\": \"Zone Type\","},{"line_number":47,"context_line":"                    \"enum\": [\"PRIMARY\", \"SECONDARY\"]"},{"line_number":48,"context_line":"                },"},{"line_number":49,"context_line":"                \"masters\": {"},{"line_number":50,"context_line":"                    \"type\": \"array\","},{"line_number":51,"context_line":"                    \"items\": {"},{"line_number":52,"context_line":"                        \"type\": \"string\""}],"source_content_type":"application/json","patch_set":10,"id":"3a961159_f2cdee5e","line":49,"in_reply_to":"5a890539_dd4a1c26","updated":"2014-12-08 09:52:57.000000000","message":"Care to elaborate?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"0821fe24700a51d12e4eba73d672ab9d30e301c9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                    }"},{"line_number":141,"context_line":"                },"},{"line_number":142,"context_line":"                {"},{"line_number":143,"context_line":"                    \"description\": \"Seconday zone\","},{"line_number":144,"context_line":"                    \"properties\": {"},{"line_number":145,"context_line":"                        \"type\": {"},{"line_number":146,"context_line":"                            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":25,"id":"da86d52c_196a3bb3","line":143,"updated":"2015-02-03 21:30:31.000000000","message":"*Secondary","commit_id":"8e5842768eaa224eaeddade92cf33063a4d06e0b"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":14,"context_line":"            \"type\": \"object\","},{"line_number":15,"context_line":"            \"additionalProperties\": false,"},{"line_number":16,"context_line":"            \"required\": [\"name\"],"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"            \"properties\": {"},{"line_number":19,"context_line":"                \"id\": {"},{"line_number":20,"context_line":"                    \"type\": \"string\","}],"source_content_type":"application/json","patch_set":31,"id":"ba7be1f8_90aba6d5","line":17,"updated":"2015-02-27 18:43:39.000000000","message":"Does the email get inherited or set automatically when the zone is secondary?","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \"masters\": {"},{"line_number":50,"context_line":"                    \"type\": \"array\","},{"line_number":51,"context_line":"                    \"items\": {"},{"line_number":52,"context_line":"                        \"type\": \"string\""},{"line_number":53,"context_line":"                    },"},{"line_number":54,"context_line":"                    \"description\": \"Masters for this Zone\","},{"line_number":55,"context_line":"                    \"uniqueItems\": true"}],"source_content_type":"application/json","patch_set":33,"id":"ba7be1f8_96cd4289","line":52,"updated":"2015-03-01 14:16:20.000000000","message":"We\u0027ll want to add a regex here to validate the format of the strings, e.g. something that matches \"\u003cIP\u003e[:\u003cport\u003e]\".\n\nAlso - This (the \"generic\" schema that matches both primary and secondary) should be setup to match both - e.g. masters should be type \u003d [\u0027array\u0027, \u0027null\u0027]","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \"masters\": {"},{"line_number":50,"context_line":"                    \"type\": \"array\","},{"line_number":51,"context_line":"                    \"items\": {"},{"line_number":52,"context_line":"                        \"type\": \"string\""},{"line_number":53,"context_line":"                    },"},{"line_number":54,"context_line":"                    \"description\": \"Masters for this Zone\","},{"line_number":55,"context_line":"                    \"uniqueItems\": true"}],"source_content_type":"application/json","patch_set":33,"id":"9a80dd14_a0b17548","line":52,"in_reply_to":"ba7be1f8_96cd4289","updated":"2015-03-10 13:45:41.000000000","message":"Done","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"366b12e3ae17676711606ac4e7bcf66bd17ae97c","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                                \"type\": \"string\""},{"line_number":166,"context_line":"                            },"},{"line_number":167,"context_line":"                            \"description\": \"Masters for this Zone\","},{"line_number":168,"context_line":"                            \"uniqueItems\": true"},{"line_number":169,"context_line":"                        }"},{"line_number":170,"context_line":"                    }"},{"line_number":171,"context_line":"                }"}],"source_content_type":"application/json","patch_set":33,"id":"ba7be1f8_76d44ebd","line":168,"updated":"2015-03-01 14:51:03.000000000","message":"Masters needs a minItems \u003d 1 here","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"87938bfd772bf3127591667092b12dfb5735c2e4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                    \"type\": [\"array\", \"null\"],"},{"line_number":52,"context_line":"                    \"items\": {"},{"line_number":53,"context_line":"                        \"type\": \"string\","},{"line_number":54,"context_line":"                        \"pattern\": \"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?::(6553[0-5]|655[0-2]\\\\d|65[0-4]\\\\d\\\\d|6[0-4]\\\\d{3}|[1-5]\\\\d{4}|[1-9]\\\\d{0,3}|0))?$\""},{"line_number":55,"context_line":"                    },"},{"line_number":56,"context_line":"                    \"description\": \"Masters for this Zone\","},{"line_number":57,"context_line":"                    \"uniqueItems\": true"}],"source_content_type":"application/json","patch_set":35,"id":"9a80dd14_08122862","line":54,"updated":"2015-03-11 17:14:39.000000000","message":"Is there a way to implement a replacement in our JSON template bit that could encapsulate this where it could be commented and reused? I gather it is an IP regex, but it would be good to point that out somewhere so someone (like myself!) doesn\u0027t come along and change it willy nilly or creates a different definition somewhere else. \n\nThis is not a blocker.","commit_id":"34ba32c1c12ce7e1a0a6b8c42a3aa9def9017387"}],"designate/storage/impl_sqlalchemy/__init__.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            tables.domains, domain, exceptions.DuplicateDomain,"},{"line_number":268,"context_line":"            [\u0027attributes\u0027, \u0027recordsets\u0027])"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if domain.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":271,"context_line":"            for attrib in domain.attributes:"},{"line_number":272,"context_line":"                attrib.domain_id \u003d domain.id"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_f325bbc2","line":270,"updated":"2014-11-12 13:53:38.000000000","message":"So, 2 things.. 1) I think the storage layer should expose the CRUD methods for domain_attributes directly similar to pools, and 2) central should use those methods to load and save the attributes only when necessary, rather than doing them both in here..","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                attrib.domain_id \u003d domain.id"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"                self._create(tables.domain_attributes, attrib,"},{"line_number":275,"context_line":"                             exceptions.DuplicatePoolAttribute)"},{"line_number":276,"context_line":"        else:"},{"line_number":277,"context_line":"            domain.attributes \u003d objects.DomainAttributeList()"},{"line_number":278,"context_line":"        domain.obj_reset_changes(\u0027attributes\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_d3a35f4d","line":275,"updated":"2014-11-12 13:53:38.000000000","message":"PoolAttribute? ;)","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def get_domain(self, context, domain_id):"},{"line_number":288,"context_line":"        domain \u003d self._find_domains(context, {\u0027id\u0027: domain_id}, one\u003dTrue)"},{"line_number":289,"context_line":"        self._populate_domain_attributes(context, domain)"},{"line_number":290,"context_line":"        return domain"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def find_domains(self, context, criterion\u003dNone, marker\u003dNone, limit\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_ddf85cc6","line":289,"updated":"2014-12-03 18:31:12.000000000","message":"Can these \"self._populate_domain_attributes\" calls be moved into the _find_domain method so we don\u0027t have to duplicate them everywhere?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def get_domain(self, context, domain_id):"},{"line_number":288,"context_line":"        domain \u003d self._find_domains(context, {\u0027id\u0027: domain_id}, one\u003dTrue)"},{"line_number":289,"context_line":"        self._populate_domain_attributes(context, domain)"},{"line_number":290,"context_line":"        return domain"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def find_domains(self, context, criterion\u003dNone, marker\u003dNone, limit\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_d2af122a","line":289,"in_reply_to":"5a890539_ddf85cc6","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            exceptions.DomainNotFound,"},{"line_number":315,"context_line":"            [\u0027attributes\u0027, \u0027recordsets\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        if domain.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":318,"context_line":"            # Gather the Attribute ID\u0027s we have"},{"line_number":319,"context_line":"            have \u003d set([r.id for r in self._find_domain_attributes("},{"line_number":320,"context_line":"                context, {\u0027domain_id\u0027: domain.id})])"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_7dd84853","line":317,"updated":"2014-12-03 18:31:12.000000000","message":"The comparison etc code below likely belongs in the update_domain_attribute method?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            exceptions.DomainNotFound,"},{"line_number":315,"context_line":"            [\u0027attributes\u0027, \u0027recordsets\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        if domain.obj_attr_is_set(\u0027attributes\u0027):"},{"line_number":318,"context_line":"            # Gather the Attribute ID\u0027s we have"},{"line_number":319,"context_line":"            have \u003d set([r.id for r in self._find_domain_attributes("},{"line_number":320,"context_line":"                context, {\u0027domain_id\u0027: domain.id})])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_6d04c315","line":317,"in_reply_to":"5a890539_7dd84853","updated":"2014-12-08 09:52:57.000000000","message":"No, this is like the update_pool code and you\u0027ll see","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"32d07270413f59eaad91242fbca47d7c4c57f443","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            sort_key, sort_dir)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if one:"},{"line_number":234,"context_line":"            self._populate_domain_attributes(context, domains)"},{"line_number":235,"context_line":"        else:"},{"line_number":236,"context_line":"            domains.total_count \u003d self.count_domains(context, criterion)"},{"line_number":237,"context_line":"            for d in domains:"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_f37bfb26","line":234,"updated":"2015-02-09 22:38:58.000000000","message":"To be consistent with _find_recordsets, could you define _populate_domain_attributes as an inner function - _load_relations.\n\nSee https://github.com/openstack/designate/blob/master/designate/storage/impl_sqlalchemy/__init__.py#L333","commit_id":"ba6cdfa0b7dcb8d5d291c91ca75d2f49c3d3699a"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"87938bfd772bf3127591667092b12dfb5735c2e4","unresolved":false,"context_lines":[{"line_number":386,"context_line":"                   limit\u003dNone, sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":387,"context_line":"        return self._find_domain_attributes(context, criterion, marker\u003dmarker,"},{"line_number":388,"context_line":"                                            limit\u003dlimit, sort_key\u003dsort_key,"},{"line_number":389,"context_line":"                                            sort_dir\u003dsort_dir)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def find_domain_attribute(self, context, criterion):"},{"line_number":392,"context_line":"        return self._find_domain_attributes(context, criterion, one\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_758b781e","line":389,"updated":"2015-03-11 17:14:39.000000000","message":"Does this method get called outside this object? Ag didn\u0027t find anything.\n\nIf so, why not just use the public (non \"_\" prefix) method and add the indirection if necessary?","commit_id":"34ba32c1c12ce7e1a0a6b8c42a3aa9def9017387"}],"designate/storage/impl_sqlalchemy/migrate_repo/versions/045_secondary_zones.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5a890539_530a0e22","updated":"2014-11-12 13:53:38.000000000","message":"Sadly.. #45 is now taken ;)","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    type_.create(domains_table, populate_default\u003dFalse)"},{"line_number":63,"context_line":"    transferred_at.create(domains_table, populate_default\u003dFalse)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    domains_table.c.email.alter(Column(\u0027email\u0027, String(255), nullable\u003dTrue))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    domain_attributes.create()"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_1375e697","line":65,"updated":"2014-11-12 13:53:38.000000000","message":"Is this really nullable, we supply the managed resource email?","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    domains_table.c.masters.drop()"},{"line_number":84,"context_line":"    domains_table.c.type_.drop()"},{"line_number":85,"context_line":"    domains_table.c.transferred_at.drop()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_b36332dc","line":85,"updated":"2014-11-12 13:53:38.000000000","message":"I *think* this will cause the unique_domain_name constraint to be dropped. God I hate this bug.\n\nAlso, if we keep the email nullable thing, we\u0027ll need to undo that here too.","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"}],"designate/storage/impl_sqlalchemy/migrate_repo/versions/051_secondary_zones.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    dialect \u003d migrate_engine.url.get_dialect().name"},{"line_number":72,"context_line":"    if dialect.startswith(\u0027sqlite\u0027):"},{"line_number":73,"context_line":"        constraint \u003d UniqueConstraint("},{"line_number":74,"context_line":"            \u0027name\u0027, \u0027deleted\u0027, name\u003d\u0027unique_domain_name\u0027, table\u003ddomains_table)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        # Add missing unique index"},{"line_number":77,"context_line":"        constraint.create()"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_f6c2fe51","line":74,"updated":"2015-03-01 14:16:20.000000000","message":"I hate SQLite. We need to stop \"supporting\" it.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"}],"designate/storage/impl_sqlalchemy/tables.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    Column(\u0027tenant_id\u0027, String(36), default\u003dNone, nullable\u003dTrue),"},{"line_number":94,"context_line":"    Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":95,"context_line":"    Column(\u0027email\u0027, String(255), nullable\u003dTrue),"},{"line_number":96,"context_line":"    Column(\u0027description\u0027, Unicode(160), nullable\u003dTrue),"},{"line_number":97,"context_line":"    Column(\"type\", Enum(name\u003d\u0027type\u0027, *ZONE_TYPES), nullable\u003dFalse),"},{"line_number":98,"context_line":"    Column(\u0027transferred_at\u0027, DateTime, default\u003dNone),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_9341d63b","line":95,"updated":"2014-11-12 13:53:38.000000000","message":"Is this really nullable? We supply the managed_resource_email?","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"df2280f0793778601c314787dd31cd79e2ff4140","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":96,"context_line":"    Column(\u0027email\u0027, String(255), nullable\u003dFalse),"},{"line_number":97,"context_line":"    Column(\u0027description\u0027, Unicode(160), nullable\u003dTrue),"},{"line_number":98,"context_line":"    Column(\"type\", Enum(name\u003d\u0027type\u0027, *ZONE_TYPES), nullable\u003dFalse),"},{"line_number":99,"context_line":"    Column(\u0027transferred_at\u0027, DateTime, default\u003dNone),"},{"line_number":100,"context_line":"    Column(\u0027ttl\u0027, Integer, default\u003dCONF.default_ttl, nullable\u003dFalse),"},{"line_number":101,"context_line":"    Column(\u0027serial\u0027, Integer, default\u003dtimeutils.utcnow_ts, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_309b7967","line":98,"updated":"2014-12-02 19:16:01.000000000","message":"Seems like you\u0027ve got default\u003dPRIMARY in the migration but not here, is that an issue?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a8b551bb32f604c072756b2330efeccfeffbd313","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":96,"context_line":"    Column(\u0027email\u0027, String(255), nullable\u003dFalse),"},{"line_number":97,"context_line":"    Column(\u0027description\u0027, Unicode(160), nullable\u003dTrue),"},{"line_number":98,"context_line":"    Column(\"type\", Enum(name\u003d\u0027type\u0027, *ZONE_TYPES), nullable\u003dFalse),"},{"line_number":99,"context_line":"    Column(\u0027transferred_at\u0027, DateTime, default\u003dNone),"},{"line_number":100,"context_line":"    Column(\u0027ttl\u0027, Integer, default\u003dCONF.default_ttl, nullable\u003dFalse),"},{"line_number":101,"context_line":"    Column(\u0027serial\u0027, Integer, default\u003dtimeutils.utcnow_ts, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_fd919852","line":98,"in_reply_to":"5a890539_309b7967","updated":"2014-12-03 18:31:12.000000000","message":"Yes, default\u003d is a runtime arg .. It should be here..\n\nOn the other hand, in the migration, it should be supplied as server_default\u003d\u0027PRIMARY\u0027","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":96,"context_line":"    Column(\u0027email\u0027, String(255), nullable\u003dFalse),"},{"line_number":97,"context_line":"    Column(\u0027description\u0027, Unicode(160), nullable\u003dTrue),"},{"line_number":98,"context_line":"    Column(\"type\", Enum(name\u003d\u0027type\u0027, *ZONE_TYPES), nullable\u003dFalse),"},{"line_number":99,"context_line":"    Column(\u0027transferred_at\u0027, DateTime, default\u003dNone),"},{"line_number":100,"context_line":"    Column(\u0027ttl\u0027, Integer, default\u003dCONF.default_ttl, nullable\u003dFalse),"},{"line_number":101,"context_line":"    Column(\u0027serial\u0027, Integer, default\u003dtimeutils.utcnow_ts, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_ed6433e7","line":98,"in_reply_to":"5a890539_fd919852","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"24a280d30f6bca5913754e8ab378562e3a6b5bcf","unresolved":false,"context_lines":[{"line_number":125,"context_line":"domain_attributes \u003d Table(\u0027domain_attributes\u0027, metadata,"},{"line_number":126,"context_line":"    Column(\u0027id\u0027, UUID(), default\u003dutils.generate_uuid, primary_key\u003dTrue),"},{"line_number":127,"context_line":"    Column(\u0027created_at\u0027, DateTime, default\u003dlambda: timeutils.utcnow()),"},{"line_number":128,"context_line":"    Column(\u0027updated_at\u0027, DateTime, onupdate\u003dlambda: timeutils.utcnow()),"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Column(\u0027key\u0027, Enum(name\u003d\u0027key\u0027, *ZONE_ATTRIBUTE_KEYS)),"},{"line_number":131,"context_line":"    Column(\u0027value\u0027, String(255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c0b7ba1f","line":128,"updated":"2014-12-03 07:18:43.000000000","message":"How about adding a version column as every other table has it?","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"6220b0fb359d9af67c368aea33fea3eaf281caba","unresolved":false,"context_lines":[{"line_number":125,"context_line":"domain_attributes \u003d Table(\u0027domain_attributes\u0027, metadata,"},{"line_number":126,"context_line":"    Column(\u0027id\u0027, UUID(), default\u003dutils.generate_uuid, primary_key\u003dTrue),"},{"line_number":127,"context_line":"    Column(\u0027created_at\u0027, DateTime, default\u003dlambda: timeutils.utcnow()),"},{"line_number":128,"context_line":"    Column(\u0027updated_at\u0027, DateTime, onupdate\u003dlambda: timeutils.utcnow()),"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    Column(\u0027key\u0027, Enum(name\u003d\u0027key\u0027, *ZONE_ATTRIBUTE_KEYS)),"},{"line_number":131,"context_line":"    Column(\u0027value\u0027, String(255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_ad730bb0","line":128,"in_reply_to":"5a890539_c0b7ba1f","updated":"2014-12-08 09:52:57.000000000","message":"Done","commit_id":"78734b5ca7c7b5f82b1acd2fec3aebda063634b1"}],"designate/tests/__init__.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"cb3ffaa5855d8e9ea54477031b932ac4af16672d","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        _values.update(values)"},{"line_number":459,"context_line":"        return _values"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def get_domain_fixture(self, fixture\u003d0, values\u003dNone, type_\u003dNone):"},{"line_number":462,"context_line":"        values \u003d values or {}"},{"line_number":463,"context_line":"        type_ \u003d type_ or \u0027PRIMARY\u0027"},{"line_number":464,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_b391729c","line":461,"updated":"2014-11-12 13:53:38.000000000","message":"Can we move type to the front? Similar to get_recordset_fixture..","commit_id":"ca97fb5af3a74f17ceeb397bf510662856f210ca"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        _values.update(values)"},{"line_number":397,"context_line":"        return _values"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    def get_domain_fixture(self, fixture\u003d0, values\u003dNone, type_\u003d\u0027PRIMARY\u0027):"},{"line_number":400,"context_line":"        values \u003d values or {}"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        _values \u003d copy.copy(self.domain_fixtures[type_][fixture])"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_b68fa62d","line":399,"updated":"2015-03-01 14:16:20.000000000","message":"Can we update the signature here to match the other fixtures with variations? e.g. type is the variation here, before fixture and values:\n\n    def get_record_fixture(self, recordset_type, fixture\u003d0, values\u003dNone):\n\nSo, we\u0027d end up with:\n\n    def get_domain_fixture(self, type_, fixture\u003d0, values\u003dNone):\n        type_ \u003d type_ or \u0027PRIMARY\u0027","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":576,"context_line":"    def create_domain(self, **kwargs):"},{"line_number":577,"context_line":"        context \u003d kwargs.pop(\u0027context\u0027, self.admin_context)"},{"line_number":578,"context_line":"        fixture \u003d kwargs.pop(\u0027fixture\u0027, 0)"},{"line_number":579,"context_line":"        type_ \u003d kwargs.pop(\u0027type\u0027, \u0027PRIMARY\u0027)"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        try:"},{"line_number":582,"context_line":"            # We always need a server to create a server"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_368bb61f","line":579,"updated":"2015-03-01 14:16:20.000000000","message":"Related to the comment above, ideally we leave the default value (PRIMARY) only in the get_domain_fixture method - So this would end up as:\n\n     type_ \u003d kwargs.pop(\u0027type\u0027, None)","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":576,"context_line":"    def create_domain(self, **kwargs):"},{"line_number":577,"context_line":"        context \u003d kwargs.pop(\u0027context\u0027, self.admin_context)"},{"line_number":578,"context_line":"        fixture \u003d kwargs.pop(\u0027fixture\u0027, 0)"},{"line_number":579,"context_line":"        type_ \u003d kwargs.pop(\u0027type\u0027, \u0027PRIMARY\u0027)"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        try:"},{"line_number":582,"context_line":"            # We always need a server to create a server"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_001401e7","line":579,"in_reply_to":"ba7be1f8_368bb61f","updated":"2015-03-10 13:45:41.000000000","message":"Done","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"}],"designate/tests/test_api/test_v1/test_domains.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        fixture \u003d self.get_domain_fixture(0)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # V1 doesn\u0027t have these"},{"line_number":66,"context_line":"        del fixture[\u0027type\u0027]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.post(\u0027domains\u0027, data\u003dfixture, status_code\u003d500)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_5682ea00","line":66,"updated":"2015-03-01 14:16:20.000000000","message":"We also need to fix our fixtures so this kinda stuff isn\u0027t needed :(","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        fixture \u003d self.get_domain_fixture(0)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # V1 doesn\u0027t have these"},{"line_number":66,"context_line":"        del fixture[\u0027type\u0027]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.post(\u0027domains\u0027, data\u003dfixture, status_code\u003d500)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_c074a9d0","line":66,"in_reply_to":"ba7be1f8_5682ea00","updated":"2015-03-10 13:45:41.000000000","message":"For laters..","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"}],"designate/tests/test_api/test_v2/test_recordsets.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":649,"context_line":"    # Secondary Zones specific tests"},{"line_number":650,"context_line":"    def test_get_secondary_zone_recordset(self):"},{"line_number":651,"context_line":"        fixture \u003d self.get_domain_fixture(fixture\u003d1, type_\u003d\u0027SECONDARY\u0027)"},{"line_number":652,"context_line":"        fixture[\u0027email\u0027] \u003d \u0027foo@bar.io\u0027"},{"line_number":653,"context_line":"        secondary \u003d self.create_domain(**fixture)"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        # Create a recordset"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_b676c63d","line":652,"updated":"2015-03-01 14:16:20.000000000","message":"example.com/net/org, and 192.0.2.0/24 etc exist for a reason ;)\n\nPhilipp Schmid owns \"bar.io\", and his poor email server once this code is published is going to start getting spammed. What did Philipp ever do to you?! ;) Please always use the dedicated/reserved DNS names and IP space when you need a sample..","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":649,"context_line":"    # Secondary Zones specific tests"},{"line_number":650,"context_line":"    def test_get_secondary_zone_recordset(self):"},{"line_number":651,"context_line":"        fixture \u003d self.get_domain_fixture(fixture\u003d1, type_\u003d\u0027SECONDARY\u0027)"},{"line_number":652,"context_line":"        fixture[\u0027email\u0027] \u003d \u0027foo@bar.io\u0027"},{"line_number":653,"context_line":"        secondary \u003d self.create_domain(**fixture)"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        # Create a recordset"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_c0090932","line":652,"in_reply_to":"ba7be1f8_b676c63d","updated":"2015-03-10 13:45:41.000000000","message":"Done","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"}],"doc/source/guides/secondary_zones.rst":[{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"0821fe24700a51d12e4eba73d672ab9d30e301c9","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Unlike PRIMARY zones which is a more native concept to Designate from before,"},{"line_number":23,"context_line":"the V2 API has introduced functionality that allows you to make Designate act"},{"line_number":24,"context_line":"as a Slave vs a Primary DNS server for a zone."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"RecordSets / Records"},{"line_number":27,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":25,"id":"da86d52c_59c67369","line":24,"updated":"2015-02-03 21:30:31.000000000","message":"I would word this differently. \n\n\"The Designate v2 API introduced functionality that allows Designate to act as a DNS slave, rather than a master for a zone. This is accomplished by completing a zone transfer (AXFR) from a DNS server managed outside of Designate.\"","commit_id":"8e5842768eaa224eaeddade92cf33063a4d06e0b"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"0821fe24700a51d12e4eba73d672ab9d30e301c9","unresolved":false,"context_lines":[{"line_number":26,"context_line":"RecordSets / Records"},{"line_number":27,"context_line":"--------------------"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"You can not do any CRUD actions on any RecordSets or Records via the API."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Setup"},{"line_number":32,"context_line":"-----"}],"source_content_type":"text/x-rst","patch_set":25,"id":"da86d52c_79717743","line":29,"updated":"2015-02-03 21:30:31.000000000","message":"I would word this differently:\n\n\"Changes to secondary zones are managed outside of Designate. Users must make the changes they wish, and prompt a fresh zone transfer (AXFR) into Designate to make those changes live on any DNS servers Designate manages.\"","commit_id":"8e5842768eaa224eaeddade92cf33063a4d06e0b"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"0821fe24700a51d12e4eba73d672ab9d30e301c9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"SECONDARY zones and that\u0027s using MDNS."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Also you will need 1 or more Primary servers that are reachable by the"},{"line_number":38,"context_line":"Designate installations MDNS instances."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"In our examples we\u0027ll use the following values:"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"da86d52c_d958a38c","line":38,"updated":"2015-02-03 21:30:31.000000000","message":"I would word this differently:\n\nTo add a secondary zone to Designate, there must be a DNS master for the zone, to which Designate can act as a slave. For this guide, we assume that you have already set this up. \n\nThe remaining Designate set up will be similar to a non-secondary zone setup. You\u0027ll need a primary DNS server for Designate to manage and transfer secondary zones to. \n\nSide note: I\u0027d love to see the NSD sections from your guide on cloudistic.net in here. They were helpful to me in testing it.","commit_id":"8e5842768eaa224eaeddade92cf33063a4d06e0b"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"0821fe24700a51d12e4eba73d672ab9d30e301c9","unresolved":false,"context_lines":[{"line_number":53,"context_line":"-   *transferred_at* is **null** and *version* is **1** since the zone has not"},{"line_number":54,"context_line":"    transferred yet."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"-   *serial* gets set automatically by the system but get\u0027s."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. http:post:: /zones"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"da86d52c_596af381","line":56,"updated":"2015-02-03 21:30:31.000000000","message":"I think \"but get\u0027s\" is unnecessary here","commit_id":"8e5842768eaa224eaeddade92cf33063a4d06e0b"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"0821fe24700a51d12e4eba73d672ab9d30e301c9","unresolved":false,"context_lines":[{"line_number":110,"context_line":"Now within a very short time a AXFR will happen from MDNS that syncs the zone"},{"line_number":111,"context_line":"from the master and into Designate. When done the **transferred_at** field"},{"line_number":112,"context_line":"will be set and **version** will increment."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"da86d52c_39c9bf59","line":113,"updated":"2015-02-03 21:30:31.000000000","message":"Should there be a description of how to prompt an update to a secondary zone? Is that just sending a NOTIFY, or is there some API call to make Designate request an AXFR?","commit_id":"8e5842768eaa224eaeddade92cf33063a4d06e0b"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"fc6d6b01713bdd649e469e3602e6c7f688673b47","unresolved":false,"context_lines":[{"line_number":58,"context_line":"^^^^^^^"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"For some reason there\u0027s a bug with the nsd package so it doesn\u0027t create the user that it needs for the installation. So we\u0027ll create that before installing the package."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"::"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    $ sudo useradd -s /usr/sbin/nologin -d /var/run/nsd/ nsd"}],"source_content_type":"text/x-rst","patch_set":26,"id":"da86d52c_5e963540","line":61,"updated":"2015-02-04 19:19:09.000000000","message":"This seemed to be fixed when I tried it yesterday, you can simply apt-get install.","commit_id":"d3952d81977b9ed5ddf817e572359c35d73b8069"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"fc6d6b01713bdd649e469e3602e6c7f688673b47","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    google          CNAME           google.com."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Restart NSD"},{"line_number":147,"context_line":"^^^^^^^^^^^"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"da86d52c_5e80f5bf","line":145,"updated":"2015-02-04 19:19:09.000000000","message":"Do you need to do the nsd-control addzone?","commit_id":"d3952d81977b9ed5ddf817e572359c35d73b8069"},{"author":{"_account_id":8174,"name":"Tim Simmons","email":"tim.r.simmons@gmail.com","username":"TimSimmons"},"change_message_id":"fc6d6b01713bdd649e469e3602e6c7f688673b47","unresolved":false,"context_lines":[{"line_number":160,"context_line":"Creating the Zone"},{"line_number":161,"context_line":"-----------------"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"When you create a domain in Designate there are two possible initila actions:"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"-   Domain is created but transfer fails if it\u0027s not available yet in master,"},{"line_number":166,"context_line":"    then typically the initial transfer will be done once the master sends first"}],"source_content_type":"text/x-rst","patch_set":26,"id":"da86d52c_7eae9982","line":163,"updated":"2015-02-04 19:19:09.000000000","message":"*initial","commit_id":"d3952d81977b9ed5ddf817e572359c35d73b8069"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"To add a secondary zone to Designate, there must be a DNS master for the zone,"},{"line_number":37,"context_line":"to which Designate can act as a slave. For this guide, we assume that you have"},{"line_number":38,"context_line":"already set this up."},{"line_number":39,"context_line":"The remaining Designate set up will be similar to a non-secondary zone setup."},{"line_number":40,"context_line":"You\u0027ll need a primary DNS server for Designate to manage and transfer secondary"},{"line_number":41,"context_line":"zones to."}],"source_content_type":"text/x-rst","patch_set":31,"id":"ba7be1f8_109a5614","line":38,"updated":"2015-02-27 18:43:39.000000000","message":"How about a line break?","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":75,"context_line":"Add the following to /etc/nsd/nsd.conf"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"**NOTE**: If you\u0027re wondering why we set notify to 192.168.27.100:5354 it\u0027s because MDNS runs on 5354 by default."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"::"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    $ sudo vi /etc/nsd/nsd.conf"}],"source_content_type":"text/x-rst","patch_set":31,"id":"ba7be1f8_106896f4","line":78,"updated":"2015-02-27 18:43:39.000000000","message":"You can use:\n\n.. note:: \n  note text here!","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"::"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    $ sudo vi /etc/nsd/nsd.conf"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Add the contents:"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":31,"id":"ba7be1f8_3044ba73","line":81,"updated":"2015-02-27 18:43:39.000000000","message":"How about `.. code-block:: bash`","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5ff41e6697ec513c6153d30e4ff1a662a58fc603","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Add the contents:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"::"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    pattern:"},{"line_number":88,"context_line":"        name: \"mdns\""}],"source_content_type":"text/x-rst","patch_set":31,"id":"ba7be1f8_101df673","line":85,"updated":"2015-02-27 18:43:39.000000000","message":".. code-block:: yaml\n\nI\u0027m guessing that is supported.","commit_id":"ae220d3867844c4b4ede0293b235116008c41098"}],"doc/source/howtos/secondary_zones.rst":[{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"2616426c2ade4e9762d1788219f2d3e7795d0ca8","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"In our examples we\u0027ll use the following values:"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"*Name* - foo.io."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"*Masters* - 192.168.27.100"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":33,"id":"ba7be1f8_051017a7","line":46,"updated":"2015-03-02 17:12:24.000000000","message":"Related to the comment Kiall made in the test fixtures, we should probably use an `example.*.` domain name here.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"In our examples we\u0027ll use the following values:"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"*Name* - foo.io."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"*Masters* - 192.168.27.100"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":33,"id":"9a80dd14_5b56e806","line":46,"in_reply_to":"ba7be1f8_051017a7","updated":"2015-03-10 13:45:41.000000000","message":"Done","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"5d19b3b6553f81145b5ce35ee90f0639f6a015ec","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Add the following to /etc/nsd/nsd.conf"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"**NOTE**: If you\u0027re wondering why we set notify to 192.168.27.100:5354 it\u0027s because MDNS runs on 5354 by default."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":".. code-block:: bash"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":38,"id":"9a80dd14_3d1e070d","line":81,"updated":"2015-03-12 19:16:59.000000000","message":"Looks like a line break snuck into the MDNS port number. Also, it should probably be an actual `.. note::` directive. \n\nOne stylistic bit would be to wrap the IP and port number with backticks as well so they get a monospaced font, assuming that doesn\u0027t make it inconsistent with other docs.","commit_id":"d71d4f07648092dba3fa40595da54675408dabee"}],"etc/designate/policy.json":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"6369e09b3e0a1598ab0219fdb7bdc17734473ab4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    \"count_domains\": \"rule:admin_or_owner\","},{"line_number":49,"context_line":"    \"touch_domain\": \"rule:admin_or_owner\","},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    \"create_recordset\": \"(\u0027PRIMARY\u0027:%(domain_type)s and rule:admin_or_owner) OR (\u0027SECONDARY\u0027:%(domain_type)s AND is_admin:True)\","},{"line_number":52,"context_line":"    \"get_recordsets\": \"rule:admin_or_owner\","},{"line_number":53,"context_line":"    \"get_recordset\": \"rule:admin_or_owner\","},{"line_number":54,"context_line":"    \"find_recordsets\": \"rule:admin_or_owner\","}],"source_content_type":"application/json","patch_set":33,"id":"ba7be1f8_b6c40642","line":51,"updated":"2015-03-01 14:16:20.000000000","message":"Not an issue with your patchset, but we really should fix/rename \"is_admin\" to \"is_system\" or something so it\u0027s obvious this has nothing to do with users with the admin role etc..","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":395,"name":"Endre Karlson","email":"endre.karlson@gmail.com","username":"endre-karlson"},"change_message_id":"9d844831d02cf0345b87aea7de815228545873f1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    \"count_domains\": \"rule:admin_or_owner\","},{"line_number":49,"context_line":"    \"touch_domain\": \"rule:admin_or_owner\","},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    \"create_recordset\": \"(\u0027PRIMARY\u0027:%(domain_type)s and rule:admin_or_owner) OR (\u0027SECONDARY\u0027:%(domain_type)s AND is_admin:True)\","},{"line_number":52,"context_line":"    \"get_recordsets\": \"rule:admin_or_owner\","},{"line_number":53,"context_line":"    \"get_recordset\": \"rule:admin_or_owner\","},{"line_number":54,"context_line":"    \"find_recordsets\": \"rule:admin_or_owner\","}],"source_content_type":"application/json","patch_set":33,"id":"9a80dd14_5ba42807","line":51,"in_reply_to":"ba7be1f8_b6c40642","updated":"2015-03-10 13:45:41.000000000","message":"Not relevant to this C then.","commit_id":"60783c323f7fdbde595238ee0ba84d8b3b014efb"},{"author":{"_account_id":8099,"name":"Graham Hayes","email":"gr@ham.ie","username":"graham"},"change_message_id":"c83053daa43f4569af6c5aeb5222007c214fce90","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    \"count_domains\": \"rule:admin_or_owner\","},{"line_number":49,"context_line":"    \"touch_domain\": \"rule:admin_or_owner\","},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    \"create_recordset\": \"(\u0027PRIMARY\u0027:%(domain_type)s and rule:admin_or_owner) OR (\u0027SECONDARY\u0027:%(domain_type)s AND is_admin:True)\","},{"line_number":52,"context_line":"    \"get_recordsets\": \"rule:admin_or_owner\","},{"line_number":53,"context_line":"    \"get_recordset\": \"rule:admin_or_owner\","},{"line_number":54,"context_line":"    \"find_recordsets\": \"rule:admin_or_owner\","}],"source_content_type":"application/json","patch_set":40,"id":"9a80dd14_b0271062","line":51,"updated":"2015-03-16 12:57:18.000000000","message":"if we have another patchset - we might be able to abstract this to a rule, and just have each policy check it.","commit_id":"a3527d6fd76fc4de9d117a53cd77d3813b762613"}]}
