)]}'
{"contrib/ipaextractor.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"1d008a25bb23b0647a1156b2d320ffa478e08773","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        except kerberos.GSSError as e:"},{"line_number":66,"context_line":"            LOG.error(\"caught kerberos exception %r\" % e)"},{"line_number":67,"context_line":"            raise e"},{"line_number":68,"context_line":"        self.token \u003d kerberos.authGSSClientResponse(vc)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9nqk%3D","line":68,"updated":"2014-04-03 10:13:07.000000000","message":"This looks very similar to the IPAAuth class in the backend? There\u0027s nothing preventing you from importing and re-using that class here.","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"be4dc3bd4fb0698305d1a24e8f9a9b7df97e5cbe","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        except kerberos.GSSError as e:"},{"line_number":66,"context_line":"            LOG.error(\"caught kerberos exception %r\" % e)"},{"line_number":67,"context_line":"            raise e"},{"line_number":68,"context_line":"        self.token \u003d kerberos.authGSSClientResponse(vc)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9lB0%3D","line":68,"in_reply_to":"AAAAWH%2F9nqk%3D","updated":"2014-04-03 15:21:02.000000000","message":"Done","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        for nsrec in zonerec[\u0027nsrecord\u0027]:"},{"line_number":74,"context_line":"            servers[nsrec] \u003d nsrec"},{"line_number":75,"context_line":"    if not servers:"},{"line_number":76,"context_line":"        raise Exception(\"Error: no name servers found in IPA\")"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    # set up designate connection"},{"line_number":79,"context_line":"    designatereq \u003d requests.Session()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fcg%3D","line":76,"updated":"2014-04-04 06:28:35.000000000","message":"Could you please make it some subclass of Exception, so it would be possible to catch this Exc in for example subclass of this backend (without using try: except Exception, because its evil).","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a5c2602287407e49791e63d0b58e37462ea3e7e1","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        for nsrec in zonerec[\u0027nsrecord\u0027]:"},{"line_number":74,"context_line":"            servers[nsrec] \u003d nsrec"},{"line_number":75,"context_line":"    if not servers:"},{"line_number":76,"context_line":"        raise Exception(\"Error: no name servers found in IPA\")"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    # set up designate connection"},{"line_number":79,"context_line":"    designatereq \u003d requests.Session()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9V0A%3D","line":76,"in_reply_to":"AAAAWH%2F9fcg%3D","updated":"2014-04-06 13:16:59.000000000","message":"So, this code is always meant to be ran as a CLI script, and never re-used by other code. So - Standard Exception instances seem OK here to me.\n\nThat said, adding a specific exception is about 3 lines of code, so, If you\u0027re making more changes in this file.. It makes sense to do it.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            if resp.status_code \u003d\u003d 200:"},{"line_number":104,"context_line":"                LOG.info(\"Added server %s to designate\" % server)"},{"line_number":105,"context_line":"            else:"},{"line_number":106,"context_line":"                raise Exception(\"Unable to add %s: %s\" %"},{"line_number":107,"context_line":"                                (server, pprint.pformat(resp.json())))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    # next - delete servers in designate not in ipa"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fcA%3D","line":106,"updated":"2014-04-04 06:28:35.000000000","message":"same as above.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            if resp.status_code \u003d\u003d 200:"},{"line_number":104,"context_line":"                LOG.info(\"Added server %s to designate\" % server)"},{"line_number":105,"context_line":"            else:"},{"line_number":106,"context_line":"                raise Exception(\"Unable to add %s: %s\" %"},{"line_number":107,"context_line":"                                (server, pprint.pformat(resp.json())))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    # next - delete servers in designate not in ipa"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q9g%3D","line":106,"in_reply_to":"AAAAWH%2F9fcA%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            if delresp.status_code \u003d\u003d 200:"},{"line_number":114,"context_line":"                LOG.info(\"Deleted server %s\" % server)"},{"line_number":115,"context_line":"            else:"},{"line_number":116,"context_line":"                raise Exception(\"Unable to delete %s: %s\" %"},{"line_number":117,"context_line":"                                (server, pprint.pformat(delresp.json())))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    # next, add the domains"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fcM%3D","line":116,"updated":"2014-04-04 06:28:35.000000000","message":"same as above.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            if delresp.status_code \u003d\u003d 200:"},{"line_number":114,"context_line":"                LOG.info(\"Deleted server %s\" % server)"},{"line_number":115,"context_line":"            else:"},{"line_number":116,"context_line":"                raise Exception(\"Unable to delete %s: %s\" %"},{"line_number":117,"context_line":"                                (server, pprint.pformat(delresp.json())))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    # next, add the domains"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q9c%3D","line":116,"in_reply_to":"AAAAWH%2F9fcM%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        if resp.status_code \u003d\u003d 200:"},{"line_number":147,"context_line":"            LOG.info(\"Added domain %s\" % zonename)"},{"line_number":148,"context_line":"        else:"},{"line_number":149,"context_line":"            raise Exception(\"Unable to add domain: %s\" %"},{"line_number":150,"context_line":"                            (zonename, pprint.pformat(resp.json())))"},{"line_number":151,"context_line":"        zonerecs[zonename] \u003d resp.json()[\u0027id\u0027]"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fcI%3D","line":149,"updated":"2014-04-04 06:28:35.000000000","message":"And another one...","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        if resp.status_code \u003d\u003d 200:"},{"line_number":147,"context_line":"            LOG.info(\"Added domain %s\" % zonename)"},{"line_number":148,"context_line":"        else:"},{"line_number":149,"context_line":"            raise Exception(\"Unable to add domain: %s\" %"},{"line_number":150,"context_line":"                            (zonename, pprint.pformat(resp.json())))"},{"line_number":151,"context_line":"        zonerecs[zonename] \u003d resp.json()[\u0027id\u0027]"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q9Y%3D","line":149,"in_reply_to":"AAAAWH%2F9fcI%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                        LOG.info(\"Added record %s for domain %s\" % (name,"},{"line_number":185,"context_line":"                                                                    zonename))"},{"line_number":186,"context_line":"                    else:"},{"line_number":187,"context_line":"                        raise Exception(\"Could not add record %s: %s\" %"},{"line_number":188,"context_line":"                                        (name, pprint.pformat(resp.json())))"},{"line_number":189,"context_line":"                else:"},{"line_number":190,"context_line":"                    LOG.info(\"%s has unknown record type %s - skipping\" %"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fcE%3D","line":187,"updated":"2014-04-04 06:28:35.000000000","message":"And another","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                        LOG.info(\"Added record %s for domain %s\" % (name,"},{"line_number":185,"context_line":"                                                                    zonename))"},{"line_number":186,"context_line":"                    else:"},{"line_number":187,"context_line":"                        raise Exception(\"Could not add record %s: %s\" %"},{"line_number":188,"context_line":"                                        (name, pprint.pformat(resp.json())))"},{"line_number":189,"context_line":"                else:"},{"line_number":190,"context_line":"                    LOG.info(\"%s has unknown record type %s - skipping\" %"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q9U%3D","line":187,"in_reply_to":"AAAAWH%2F9fcE%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"c9398b40acef6d8bb9eb3a5a47899648f57ac39e","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":"import pprint"},{"line_number":22,"context_line":"import json"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FQx0%3D","line":19,"updated":"2014-04-15 18:06:05.000000000","message":"Should requests be added to requirements.txt?","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"5983f1571409f00a4834fbbb5bfcd5fa8b1dd18f","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":"import pprint"},{"line_number":22,"context_line":"import json"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FPy4%3D","line":19,"in_reply_to":"AAAAW3%2F%2FQx0%3D","updated":"2014-04-15 22:06:27.000000000","message":"I would like to keep the ipa requirements (like kerberos) separate.  I will add an ipa-requirements.txt","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"c9398b40acef6d8bb9eb3a5a47899648f57ac39e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from designate.backend import impl_ipa"},{"line_number":26,"context_line":"# import api for the config"},{"line_number":27,"context_line":"from designate import api"},{"line_number":28,"context_line":"assert api  # make flake not complain about unused import"},{"line_number":29,"context_line":"# import central for the config"},{"line_number":30,"context_line":"from designate import central"},{"line_number":31,"context_line":"assert central  # make flake not complain about unused import"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FQtg%3D","line":28,"updated":"2014-04-15 18:06:05.000000000","message":"Lines 27 and 28 can be changed to\nfrom designate import api  # noqa\nto silence flake\nSimilarly for lines 29,30","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"5983f1571409f00a4834fbbb5bfcd5fa8b1dd18f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from designate.backend import impl_ipa"},{"line_number":26,"context_line":"# import api for the config"},{"line_number":27,"context_line":"from designate import api"},{"line_number":28,"context_line":"assert api  # make flake not complain about unused import"},{"line_number":29,"context_line":"# import central for the config"},{"line_number":30,"context_line":"from designate import central"},{"line_number":31,"context_line":"assert central  # make flake not complain about unused import"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FPyw%3D","line":28,"in_reply_to":"AAAAW3%2F%2FQtg%3D","updated":"2014-04-15 22:06:27.000000000","message":"Done","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"c9398b40acef6d8bb9eb3a5a47899648f57ac39e","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        if resp.status_code \u003d\u003d 200:"},{"line_number":335,"context_line":"            LOG.info(\"Added domain %s\" % desreq[\u0027name\u0027])"},{"line_number":336,"context_line":"        else:"},{"line_number":337,"context_line":"            raise AddDomainError(\"Unable to add domain: %s\" %"},{"line_number":338,"context_line":"                                 (desreq[\u0027name\u0027], pprint.pformat(resp.json())))"},{"line_number":339,"context_line":"        zonerecs[desreq[\u0027name\u0027]] \u003d resp.json()[\u0027id\u0027]"},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FQu4%3D","line":337,"updated":"2014-04-15 18:06:05.000000000","message":"Either the format string should be changed or the parameters","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"5983f1571409f00a4834fbbb5bfcd5fa8b1dd18f","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        if resp.status_code \u003d\u003d 200:"},{"line_number":335,"context_line":"            LOG.info(\"Added domain %s\" % desreq[\u0027name\u0027])"},{"line_number":336,"context_line":"        else:"},{"line_number":337,"context_line":"            raise AddDomainError(\"Unable to add domain: %s\" %"},{"line_number":338,"context_line":"                                 (desreq[\u0027name\u0027], pprint.pformat(resp.json())))"},{"line_number":339,"context_line":"        zonerecs[desreq[\u0027name\u0027]] \u003d resp.json()[\u0027id\u0027]"},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FPys%3D","line":337,"in_reply_to":"AAAAW3%2F%2FQu4%3D","updated":"2014-04-15 22:06:27.000000000","message":"Done","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"}],"designate/backend/impl_ipa.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"1d008a25bb23b0647a1156b2d320ffa478e08773","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        # a particular field in a given record - e.g. for an MX record"},{"line_number":242,"context_line":"        # with several values, IPA stores them like this:"},{"line_number":243,"context_line":"        # name: \"server1.local.\""},{"line_number":244,"context_line":"        # data: [\"10 mx1.server1.local.\", \"20 mx2.server1.local.\"]"},{"line_number":245,"context_line":"        # we could do a search of IPA, compare the values in the"},{"line_number":246,"context_line":"        # returned array - but that adds an additional round trip"},{"line_number":247,"context_line":"        # and is error prone"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9nsI%3D","line":244,"updated":"2014-04-03 10:13:07.000000000","message":"This sounds like IPA stores the records in a RRSet?\n\nSo, TTL/Name/etc updates that apply to all records would come via the upload_recordset method.\n\nBut - Yes, our handling of allowing single record updates can be painful for DNS servers which only allow editing whole recordset\u0027s at a go.","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"be4dc3bd4fb0698305d1a24e8f9a9b7df97e5cbe","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        # a particular field in a given record - e.g. for an MX record"},{"line_number":242,"context_line":"        # with several values, IPA stores them like this:"},{"line_number":243,"context_line":"        # name: \"server1.local.\""},{"line_number":244,"context_line":"        # data: [\"10 mx1.server1.local.\", \"20 mx2.server1.local.\"]"},{"line_number":245,"context_line":"        # we could do a search of IPA, compare the values in the"},{"line_number":246,"context_line":"        # returned array - but that adds an additional round trip"},{"line_number":247,"context_line":"        # and is error prone"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9lAE%3D","line":244,"in_reply_to":"AAAAWH%2F9nsI%3D","updated":"2014-04-03 15:21:02.000000000","message":"Not exactly.  IPA stores things as individual LDAP attributes.  The problem is that I need the old value.  I would need to send a modify to delete the old value and add the new value.  I don\u0027t see anywhere in the backend API that I can get the old/original value.","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"1d008a25bb23b0647a1156b2d320ffa478e08773","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        return [zonerec[\u0027idnsname\u0027][0].rstrip(\".\") + \".\" \\"},{"line_number":275,"context_line":"                for zonerec in resp[\u0027result\u0027][\u0027result\u0027]]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def dns_resolve(self, context, name):"},{"line_number":278,"context_line":"        \"\"\"Returns True if the given name can be resolved by IPA,"},{"line_number":279,"context_line":"        False otherwise\"\"\""},{"line_number":280,"context_line":"        LOG.debug(\u0027DNS Resolve\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9nr4%3D","line":277,"updated":"2014-04-03 10:13:07.000000000","message":"Is this method used anywhere?","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"be4dc3bd4fb0698305d1a24e8f9a9b7df97e5cbe","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        return [zonerec[\u0027idnsname\u0027][0].rstrip(\".\") + \".\" \\"},{"line_number":275,"context_line":"                for zonerec in resp[\u0027result\u0027][\u0027result\u0027]]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def dns_resolve(self, context, name):"},{"line_number":278,"context_line":"        \"\"\"Returns True if the given name can be resolved by IPA,"},{"line_number":279,"context_line":"        False otherwise\"\"\""},{"line_number":280,"context_line":"        LOG.debug(\u0027DNS Resolve\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9k%2Fo%3D","line":277,"in_reply_to":"AAAAWH%2F9nr4%3D","updated":"2014-04-03 15:21:02.000000000","message":"I was going to use it, but I don\u0027t need it anymore.  Same with find_domains.  I will get rid of them.","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a5c2602287407e49791e63d0b58e37462ea3e7e1","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"cfg.CONF.register_opts(["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027ipa-host\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IPA RPC listener host - must be FQDN\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027ipa-port\u0027, default\u003d80,"},{"line_number":38,"context_line":"               help\u003d\u0027IPA RPC listener port\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027ipa-client-keytab\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9V0s%3D","line":36,"updated":"2014-04-06 13:16:59.000000000","message":"If the host must be a FQDN, is 127.0.0.1 ever valid? Is \"localhost\" more likely to be valid?","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"cfg.CONF.register_opts(["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027ipa-host\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IPA RPC listener host - must be FQDN\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027ipa-port\u0027, default\u003d80,"},{"line_number":38,"context_line":"               help\u003d\u0027IPA RPC listener port\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027ipa-client-keytab\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q8M%3D","line":36,"in_reply_to":"AAAAWH%2F9V0s%3D","updated":"2014-04-07 15:02:14.000000000","message":"Will change to localhost.localdomain","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a5c2602287407e49791e63d0b58e37462ea3e7e1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.StrOpt(\u0027ipa-host\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IPA RPC listener host - must be FQDN\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027ipa-port\u0027, default\u003d80,"},{"line_number":38,"context_line":"               help\u003d\u0027IPA RPC listener port\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027ipa-client-keytab\u0027, default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\u0027Kerberos client keytab file\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027ipa-ca-cert\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9V0g%3D","line":38,"updated":"2014-04-06 13:16:59.000000000","message":"It looks like this config option isn\u0027t used?","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.StrOpt(\u0027ipa-host\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027IPA RPC listener host - must be FQDN\u0027),"},{"line_number":37,"context_line":"    cfg.IntOpt(\u0027ipa-port\u0027, default\u003d80,"},{"line_number":38,"context_line":"               help\u003d\u0027IPA RPC listener port\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027ipa-client-keytab\u0027, default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\u0027Kerberos client keytab file\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027ipa-ca-cert\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q8I%3D","line":38,"in_reply_to":"AAAAWH%2F9V0g%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.request.verify \u003d cfg.CONF[self.name].ipa_ca_cert"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_tsigkey(self, context, tsigkey):"},{"line_number":154,"context_line":"        LOG.info(\u0027Create TSIG Key %r\u0027 % tsigkey)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def update_tsigkey(self, context, tsigkey):"},{"line_number":157,"context_line":"        LOG.info(\u0027Update TSIG Key %r\u0027 % tsigkey)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fbI%3D","line":154,"updated":"2014-04-04 06:28:35.000000000","message":"I think it should be eighter logged as error or sth- you don\u0027t really create anything, and if its not applicable, you should say so.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.request.verify \u003d cfg.CONF[self.name].ipa_ca_cert"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def create_tsigkey(self, context, tsigkey):"},{"line_number":154,"context_line":"        LOG.info(\u0027Create TSIG Key %r\u0027 % tsigkey)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def update_tsigkey(self, context, tsigkey):"},{"line_number":157,"context_line":"        LOG.info(\u0027Update TSIG Key %r\u0027 % tsigkey)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q7s%3D","line":154,"in_reply_to":"AAAAWH%2F9fbI%3D","updated":"2014-04-07 15:02:14.000000000","message":"Not applicable for IPA, so will denote as such","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":11043,"name":"Petr Spacek","email":"pspacek@redhat.com","username":"pspacek"},"change_message_id":"f868d23cdee73bff872476e9836cbdc8b2556823","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # just use the first one for zone creation - add the others"},{"line_number":183,"context_line":"        # later, below - use force because designate assumes the NS"},{"line_number":184,"context_line":"        # already exists somewhere, is resolvable, and already has"},{"line_number":185,"context_line":"        # an A/AAAA record"},{"line_number":186,"context_line":"        args \u003d {\u0027idnssoamname\u0027: servers[0][\u0027name\u0027],"},{"line_number":187,"context_line":"                \u0027force\u0027: True}"},{"line_number":188,"context_line":"        for dkey, ipakey in domain2ipa.iteritems():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9ci4%3D","line":185,"updated":"2014-04-04 13:30:38.000000000","message":"According to the comment above, you have name of an existing server available at this point. In that case you should not use \"force\" at all, you should pass name of the server instead. There has to be an error if it doesn\u0027t work.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # just use the first one for zone creation - add the others"},{"line_number":183,"context_line":"        # later, below - use force because designate assumes the NS"},{"line_number":184,"context_line":"        # already exists somewhere, is resolvable, and already has"},{"line_number":185,"context_line":"        # an A/AAAA record"},{"line_number":186,"context_line":"        args \u003d {\u0027idnssoamname\u0027: servers[0][\u0027name\u0027],"},{"line_number":187,"context_line":"                \u0027force\u0027: True}"},{"line_number":188,"context_line":"        for dkey, ipakey in domain2ipa.iteritems():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q7Q%3D","line":185,"in_reply_to":"AAAAWH%2F9ci4%3D","updated":"2014-04-07 15:02:14.000000000","message":"Adding a \"force\" flag to the config.  The default will be False i.e. don\u0027t use \u0027force\u0027:True","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":11043,"name":"Petr Spacek","email":"pspacek@redhat.com","username":"pspacek"},"change_message_id":"f868d23cdee73bff872476e9836cbdc8b2556823","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        if len(servers) \u003e 1:"},{"line_number":195,"context_line":"            ipareq \u003d {\u0027method\u0027: \u0027dnsrecord_add\u0027, \u0027id\u0027: 0}"},{"line_number":196,"context_line":"            params \u003d [domain[\u0027name\u0027], \"@\"]"},{"line_number":197,"context_line":"            args \u003d {\u0027nsrecord\u0027: servers[1:], \u0027force\u0027: True}"},{"line_number":198,"context_line":"            ipareq[\u0027params\u0027] \u003d [params, args]"},{"line_number":199,"context_line":"            self._call_and_handle_error(ipareq)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9cig%3D","line":197,"updated":"2014-04-04 13:30:38.000000000","message":"NS records should be resolvable so you should not need force option. There has to be an error if it doesn\u0027t work.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        if len(servers) \u003e 1:"},{"line_number":195,"context_line":"            ipareq \u003d {\u0027method\u0027: \u0027dnsrecord_add\u0027, \u0027id\u0027: 0}"},{"line_number":196,"context_line":"            params \u003d [domain[\u0027name\u0027], \"@\"]"},{"line_number":197,"context_line":"            args \u003d {\u0027nsrecord\u0027: servers[1:], \u0027force\u0027: True}"},{"line_number":198,"context_line":"            ipareq[\u0027params\u0027] \u003d [params, args]"},{"line_number":199,"context_line":"            self._call_and_handle_error(ipareq)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q48%3D","line":197,"in_reply_to":"AAAAWH%2F9V1U%3D","updated":"2014-04-07 15:02:14.000000000","message":"IPA does perform a lookup at create time.  Since these records should already exist (and will sometimes be necessary to create them outside of Designate in IPA), I am making force default to False.  force: True will mostly be used by testing (see _test_service_ipa.py and test_service.py which uses \"dummy\" NS record fixtures which do not exist).  Hmm - perhaps I should change _test_service_ipa.py to create some sort of \"test zone\" and add those fixtures as A records . . . on the other hand, IPA requires that, in order for there to be an A record for ns.example.org., the domain example.org. must already exist . . . so I think I will have to use force unless I can figure out a way around this chicken/egg problem.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        if len(servers) \u003e 1:"},{"line_number":195,"context_line":"            ipareq \u003d {\u0027method\u0027: \u0027dnsrecord_add\u0027, \u0027id\u0027: 0}"},{"line_number":196,"context_line":"            params \u003d [domain[\u0027name\u0027], \"@\"]"},{"line_number":197,"context_line":"            args \u003d {\u0027nsrecord\u0027: servers[1:], \u0027force\u0027: True}"},{"line_number":198,"context_line":"            ipareq[\u0027params\u0027] \u003d [params, args]"},{"line_number":199,"context_line":"            self._call_and_handle_error(ipareq)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q7M%3D","line":197,"in_reply_to":"AAAAWH%2F9cig%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a5c2602287407e49791e63d0b58e37462ea3e7e1","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        if len(servers) \u003e 1:"},{"line_number":195,"context_line":"            ipareq \u003d {\u0027method\u0027: \u0027dnsrecord_add\u0027, \u0027id\u0027: 0}"},{"line_number":196,"context_line":"            params \u003d [domain[\u0027name\u0027], \"@\"]"},{"line_number":197,"context_line":"            args \u003d {\u0027nsrecord\u0027: servers[1:], \u0027force\u0027: True}"},{"line_number":198,"context_line":"            ipareq[\u0027params\u0027] \u003d [params, args]"},{"line_number":199,"context_line":"            self._call_and_handle_error(ipareq)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9V1U%3D","line":197,"in_reply_to":"AAAAWH%2F9cig%3D","updated":"2014-04-06 13:16:59.000000000","message":"So, I don\u0027t know IPA very well at all, but is IPA performing a lookup against the nsrecords at create time, and rejecting the create if the NS doesn\u0027t resolve?\n\nIf so, is this just a sanity check performed while creating zones, or does it have more significant effects?","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            args[\u0027dnsttl\u0027] \u003d ttl"},{"line_number":294,"context_line":"        return params, args"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def _ipa_error_to_exception(self, resp, ipareq):"},{"line_number":297,"context_line":"        exc \u003d None"},{"line_number":298,"context_line":"        if resp[\u0027error\u0027] is None:"},{"line_number":299,"context_line":"            return exc"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fW8%3D","line":296,"updated":"2014-04-04 06:28:35.000000000","message":"you could do it like:\nexceptions \u003d {\n    IPA_DUPLICATE: {\n        \u0027dnszone\u0027: exceptions.DuplicateDomain\n    }\n}\nmethod \u003d ipareq[\u0027method\u0027].split(\u0027_\u0027)[0]\nexc \u003d exceptions[resp[\u0027error\u0027][\u0027code\u0027]][method]\n\ninstead of if/elif\n\nAlso, I think you should return class not object- you might want to for example add message to Exception somewhere.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            args[\u0027dnsttl\u0027] \u003d ttl"},{"line_number":294,"context_line":"        return params, args"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def _ipa_error_to_exception(self, resp, ipareq):"},{"line_number":297,"context_line":"        exc \u003d None"},{"line_number":298,"context_line":"        if resp[\u0027error\u0027] is None:"},{"line_number":299,"context_line":"            return exc"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q44%3D","line":296,"in_reply_to":"AAAAWH%2F9fW8%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":10787,"name":"Michal Jastrzebski (inc0)","email":"michal.jastrzebski@intel.com","username":"inc0"},"change_message_id":"c903e5ea7d04fa495e8e539bbb1998772be1d6b3","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            rawresp \u003d self.request.post(self.jsonurl,"},{"line_number":336,"context_line":"                                        data\u003djson.dumps(ipareq))"},{"line_number":337,"context_line":"            if rawresp.status_code \u003d\u003d 401:"},{"line_number":338,"context_line":"                if retries:"},{"line_number":339,"context_line":"                    # persistent inability to auth"},{"line_number":340,"context_line":"                    LOG.error(\"Error: could not authenticate to IPA - \""},{"line_number":341,"context_line":"                              \"please check for correct keytab file\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9fWE%3D","line":338,"updated":"2014-04-04 06:28:35.000000000","message":"wouldn\u0027t it just try once and then raise? Also, shouldn\u0027t it be configurable?","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            rawresp \u003d self.request.post(self.jsonurl,"},{"line_number":336,"context_line":"                                        data\u003djson.dumps(ipareq))"},{"line_number":337,"context_line":"            if rawresp.status_code \u003d\u003d 401:"},{"line_number":338,"context_line":"                if retries:"},{"line_number":339,"context_line":"                    # persistent inability to auth"},{"line_number":340,"context_line":"                    LOG.error(\"Error: could not authenticate to IPA - \""},{"line_number":341,"context_line":"                              \"please check for correct keytab file\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q4U%3D","line":338,"in_reply_to":"AAAAWH%2F9V08%3D","updated":"2014-04-07 15:02:14.000000000","message":"I think you mean switch from bool to int - yes, next version will have that.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"deeb94874106ce8e6f5dc2ff91293c4736520f06","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            rawresp \u003d self.request.post(self.jsonurl,"},{"line_number":336,"context_line":"                                        data\u003djson.dumps(ipareq))"},{"line_number":337,"context_line":"            if rawresp.status_code \u003d\u003d 401:"},{"line_number":338,"context_line":"                if retries:"},{"line_number":339,"context_line":"                    # persistent inability to auth"},{"line_number":340,"context_line":"                    LOG.error(\"Error: could not authenticate to IPA - \""},{"line_number":341,"context_line":"                              \"please check for correct keytab file\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9Q4s%3D","line":338,"in_reply_to":"AAAAWH%2F9fWE%3D","updated":"2014-04-07 15:02:14.000000000","message":"Done","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"a5c2602287407e49791e63d0b58e37462ea3e7e1","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            rawresp \u003d self.request.post(self.jsonurl,"},{"line_number":336,"context_line":"                                        data\u003djson.dumps(ipareq))"},{"line_number":337,"context_line":"            if rawresp.status_code \u003d\u003d 401:"},{"line_number":338,"context_line":"                if retries:"},{"line_number":339,"context_line":"                    # persistent inability to auth"},{"line_number":340,"context_line":"                    LOG.error(\"Error: could not authenticate to IPA - \""},{"line_number":341,"context_line":"                              \"please check for correct keytab file\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9V08%3D","line":338,"in_reply_to":"AAAAWH%2F9fWE%3D","updated":"2014-04-06 13:16:59.000000000","message":"None of our other backends will retry - But, this looks different to me.. The Kerberos token expires every so often.\n\nDoes it make sense to retry auth refresh more than once? If not, we should switch retries from a int to a bool.. If so, we should keep the retry count and have a configuration option to decide how many retries to perform.","commit_id":"1ba1c85ebca1edc4c3f61ac51fa2e001b4c14f69"}],"designate/backend/impl_ipa/__init__.py":[{"author":{"_account_id":11043,"name":"Petr Spacek","email":"pspacek@redhat.com","username":"pspacek"},"change_message_id":"4433eed897f91986b94671d7705f5dcb140ba29b","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            pass"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def delete_recordset(self, context, domain, recordset):"},{"line_number":290,"context_line":"        LOG.debug(\u0027Delete RecordSet %r / %r\u0027 % (domain, recordset))"},{"line_number":291,"context_line":"        # not applicable to IPA"},{"line_number":292,"context_line":"        pass"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWn%2F%2F9vE%3D","line":290,"updated":"2014-04-08 08:13:52.000000000","message":"Following JSON requests will delete all TXT records from name txttest.ipa.example and leave all other RRsets intact:\n\n{\"params\": [[\"ipa.example\", \"txttest\"], {\"all\": false, \"rights\": false, \"structured\": false, \"raw\": false, \"version\": \"2.81\", \"txtrecord\": null}], \"method\": \"dnsrecord_mod\", \"id\": 0}\n\nIt is equivalent to executing command:\nipa dnsrecord-mod ipa.example txttest --txt-rec\u003d\u0027\u0027","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"77fcf788e6b26c73b283595ce7a566ac19837490","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            pass"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def delete_recordset(self, context, domain, recordset):"},{"line_number":290,"context_line":"        LOG.debug(\u0027Delete RecordSet %r / %r\u0027 % (domain, recordset))"},{"line_number":291,"context_line":"        # not applicable to IPA"},{"line_number":292,"context_line":"        pass"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWn%2F%2F69Q%3D","line":290,"in_reply_to":"AAAAWn%2F%2F7Fc%3D","updated":"2014-04-08 13:47:52.000000000","message":"ok","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"},{"author":{"_account_id":11043,"name":"Petr Spacek","email":"pspacek@redhat.com","username":"pspacek"},"change_message_id":"2e0d4fe464dedd7adc9472e6a7affebc1bd9d6cb","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            pass"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def delete_recordset(self, context, domain, recordset):"},{"line_number":290,"context_line":"        LOG.debug(\u0027Delete RecordSet %r / %r\u0027 % (domain, recordset))"},{"line_number":291,"context_line":"        # not applicable to IPA"},{"line_number":292,"context_line":"        pass"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWn%2F%2F7Fc%3D","line":290,"in_reply_to":"AAAAWn%2F%2F7Mw%3D","updated":"2014-04-08 13:36:38.000000000","message":"No, IPA doesn\u0027t have a way how to represent it in database. (RR is one attribute in LDAP.) You can just delete the whole RRset.","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"f9604c5765731177ff1d47789b2f8e18750d40c2","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            pass"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def delete_recordset(self, context, domain, recordset):"},{"line_number":290,"context_line":"        LOG.debug(\u0027Delete RecordSet %r / %r\u0027 % (domain, recordset))"},{"line_number":291,"context_line":"        # not applicable to IPA"},{"line_number":292,"context_line":"        pass"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWn%2F%2F7Mw%3D","line":290,"in_reply_to":"AAAAWn%2F%2F9vE%3D","updated":"2014-04-08 13:21:36.000000000","message":"ok\n\n\n\nIs the opposite true?  Can I create a recordset in ipa with no records, using the JSON API?","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"fb02fb90f0bf1eb16132bc42853981c3a16935fe","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                \u0027name server or SOA MNAME is resolvable - if this \u0027"},{"line_number":56,"context_line":"                \u0027option is set, Designate will force IPA to use a \u0027"},{"line_number":57,"context_line":"                \u0027given name server even if it is not resolvable\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027ipa-version\u0027, default\u003d\u00272.65\u0027,"},{"line_number":59,"context_line":"               help\u003d\u0027IPA RPC JSON version\u0027)"},{"line_number":60,"context_line":"], group\u003d\u0027backend:ipa\u0027)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2Fp00%3D","line":58,"updated":"2014-04-11 12:02:56.000000000","message":"This should probably be a FloatOpt rather than StrOpt","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"69d3128e05790ad43e377e22a2e5751fc13d0362","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                \u0027name server or SOA MNAME is resolvable - if this \u0027"},{"line_number":56,"context_line":"                \u0027option is set, Designate will force IPA to use a \u0027"},{"line_number":57,"context_line":"                \u0027given name server even if it is not resolvable\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027ipa-version\u0027, default\u003d\u00272.65\u0027,"},{"line_number":59,"context_line":"               help\u003d\u0027IPA RPC JSON version\u0027)"},{"line_number":60,"context_line":"], group\u003d\u0027backend:ipa\u0027)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2Fo38%3D","line":58,"in_reply_to":"AAAAW3%2F%2Fp00%3D","updated":"2014-04-11 13:57:39.000000000","message":"It has to be sent to IPA as a string in JSON - I suspect they may want to be able to say things like version\u003d\u00273.0a1\u0027 perhaps","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"fb02fb90f0bf1eb16132bc42853981c3a16935fe","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                \u0027given name server even if it is not resolvable\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027ipa-version\u0027, default\u003d\u00272.65\u0027,"},{"line_number":59,"context_line":"               help\u003d\u0027IPA RPC JSON version\u0027)"},{"line_number":60,"context_line":"], group\u003d\u0027backend:ipa\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class IPABaseError(exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2Fp1o%3D","line":60,"updated":"2014-04-11 12:02:56.000000000","message":"Our current pattern for registering opts seems to be incompatible with the oslo sample config file generation.. Dooh.\n\nCan we update this to follow the pattern used in https://review.openstack.org/#/c/86709/ ?","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"69d3128e05790ad43e377e22a2e5751fc13d0362","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                \u0027given name server even if it is not resolvable\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027ipa-version\u0027, default\u003d\u00272.65\u0027,"},{"line_number":59,"context_line":"               help\u003d\u0027IPA RPC JSON version\u0027)"},{"line_number":60,"context_line":"], group\u003d\u0027backend:ipa\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class IPABaseError(exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2Fo3s%3D","line":60,"in_reply_to":"AAAAW3%2F%2Fp1o%3D","updated":"2014-04-11 13:57:39.000000000","message":"Yes","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"c9398b40acef6d8bb9eb3a5a47899648f57ac39e","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class IPAAuthError(IPABaseError):"},{"line_number":70,"context_line":"    error_type \u003d \u0027authentication_error\u0027"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# map of designate domain parameters to the corresponding"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FQnw%3D","line":70,"updated":"2014-04-15 18:06:05.000000000","message":"Did you intend to use this somewhere?","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"5983f1571409f00a4834fbbb5bfcd5fa8b1dd18f","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class IPAAuthError(IPABaseError):"},{"line_number":70,"context_line":"    error_type \u003d \u0027authentication_error\u0027"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# map of designate domain parameters to the corresponding"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FOxQ%3D","line":70,"in_reply_to":"AAAAW3%2F%2FQnw%3D","updated":"2014-04-15 22:06:27.000000000","message":"Yes.  And I also had to change the reauth/retry code as well","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"c9398b40acef6d8bb9eb3a5a47899648f57ac39e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"class IPAUnknownError(IPABaseError):"},{"line_number":101,"context_line":"    pass"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class IPACommunicationFailure(IPABaseError):"},{"line_number":105,"context_line":"    error_type \u003d \u0027communication_failure\u0027"},{"line_number":106,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FQmI%3D","line":103,"updated":"2014-04-15 18:06:05.000000000","message":"Should the following exceptions have a different error code than 500?","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"5983f1571409f00a4834fbbb5bfcd5fa8b1dd18f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"class IPAUnknownError(IPABaseError):"},{"line_number":101,"context_line":"    pass"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class IPACommunicationFailure(IPABaseError):"},{"line_number":105,"context_line":"    error_type \u003d \u0027communication_failure\u0027"},{"line_number":106,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FPx8%3D","line":103,"in_reply_to":"AAAAW3%2F%2FQmI%3D","updated":"2014-04-15 22:06:27.000000000","message":"They represent internal errors in the implementation of the backend, so a 200, 300, or 400 range error code doesn\u0027t seem appropriate.  I\u0027m open to suggestions.","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":8094,"name":"Vinod Mangalpally","email":"mrvinod@outlook.com","username":"vinodmr"},"change_message_id":"c9398b40acef6d8bb9eb3a5a47899648f57ac39e","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    def create_server(self, context, server):"},{"line_number":196,"context_line":"        LOG.debug(\u0027Create Server %r\u0027 % server)"},{"line_number":197,"context_line":"        # not applicable to IPA"},{"line_number":198,"context_line":"        pass"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def update_server(self, context, server):"},{"line_number":201,"context_line":"        LOG.debug(\u0027Update Server %r\u0027 % server)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FQoI%3D","line":198,"updated":"2014-04-15 18:06:05.000000000","message":"Could these messages be changed to be uniform with the other change for dynect - https://review.openstack.org/#/c/87322/4/designate/backend/impl_dynect.py lines 236,237 for eg.","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"5983f1571409f00a4834fbbb5bfcd5fa8b1dd18f","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    def create_server(self, context, server):"},{"line_number":196,"context_line":"        LOG.debug(\u0027Create Server %r\u0027 % server)"},{"line_number":197,"context_line":"        # not applicable to IPA"},{"line_number":198,"context_line":"        pass"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def update_server(self, context, server):"},{"line_number":201,"context_line":"        LOG.debug(\u0027Update Server %r\u0027 % server)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FPxc%3D","line":198,"in_reply_to":"AAAAW3%2F%2FQoI%3D","updated":"2014-04-15 22:06:27.000000000","message":"Done","commit_id":"996b496b72ae76dc911841c85df831bc771f286c"}],"designate/tests/test_central/_test_service_ipa.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"1d008a25bb23b0647a1156b2d320ffa478e08773","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright 2012 Managed I.T."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Kiall Mac Innes \u003ckiall@managedit.ie\u003e"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9np4%3D","line":4,"updated":"2014-04-03 10:13:07.000000000","message":"You can probably change these 2 lines ;)","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"be4dc3bd4fb0698305d1a24e8f9a9b7df97e5cbe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright 2012 Managed I.T."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Kiall Mac Innes \u003ckiall@managedit.ie\u003e"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9k%2FQ%3D","line":4,"in_reply_to":"AAAAWH%2F9np4%3D","updated":"2014-04-03 15:21:02.000000000","message":"Done","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"1d008a25bb23b0647a1156b2d320ffa478e08773","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class CentralServiceTestIPA(designate.tests.test_central."},{"line_number":27,"context_line":"                            test_service.CentralServiceTest):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    test_config_file_name \u003d \"designate-ipa-test.conf\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9npg%3D","line":27,"updated":"2014-04-03 10:13:07.000000000","message":"So - I\u0027m curious, is this test class actually loaded? And - How? I don\u0027t see it :)","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"be4dc3bd4fb0698305d1a24e8f9a9b7df97e5cbe","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class CentralServiceTestIPA(designate.tests.test_central."},{"line_number":27,"context_line":"                            test_service.CentralServiceTest):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    test_config_file_name \u003d \"designate-ipa-test.conf\""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9k9o%3D","line":27,"in_reply_to":"AAAAWH%2F9npg%3D","updated":"2014-04-03 15:21:02.000000000","message":"I don\u0027t want it to be run by default, since you actually have to have an IPA deployment to run these tests.  These tests are run explicitly by doing something like\n\n$ cd ~/designate\n$ python -m testtools.run designate.tests.test_central._test_service_ipa\n\nor nosetests or whatever test driver you want to use","commit_id":"a7da51cff614ca845a365f48b79f8482b321f72e"}],"etc/designate/designate-ipa-test.conf.sample":[{"author":{"_account_id":11043,"name":"Petr Spacek","email":"pspacek@redhat.com","username":"pspacek"},"change_message_id":"4433eed897f91986b94671d7705f5dcb140ba29b","unresolved":false,"context_lines":[{"line_number":232,"context_line":"ipa_ca_cert \u003d /etc/ipa/ca.crt"},{"line_number":233,"context_line":"ipa_client_keytab \u003d /path/to/designateuser.keytab"},{"line_number":234,"context_line":"# test uses non-existent name servers"},{"line_number":235,"context_line":"ipa_force_ns_use \u003d True"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAWn%2F%2F9rU%3D","line":235,"updated":"2014-04-08 08:13:52.000000000","message":"Nitpick: Can you use some existing name server to test the NS check logic? Maybe hostname of the machine running the test can be enough ...","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"77fcf788e6b26c73b283595ce7a566ac19837490","unresolved":false,"context_lines":[{"line_number":232,"context_line":"ipa_ca_cert \u003d /etc/ipa/ca.crt"},{"line_number":233,"context_line":"ipa_client_keytab \u003d /path/to/designateuser.keytab"},{"line_number":234,"context_line":"# test uses non-existent name servers"},{"line_number":235,"context_line":"ipa_force_ns_use \u003d True"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAWn%2F%2F68g%3D","line":235,"in_reply_to":"AAAAWn%2F%2F7Bs%3D","updated":"2014-04-08 13:47:52.000000000","message":"Right.  This flag is only used for testing - the tests use a test fixture which has name servers like ns.example.org. ns.example.net. etc. which do not resolve.  I don\u0027t think force: True should ever be used except for testing.","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"},{"author":{"_account_id":11043,"name":"Petr Spacek","email":"pspacek@redhat.com","username":"pspacek"},"change_message_id":"2e0d4fe464dedd7adc9472e6a7affebc1bd9d6cb","unresolved":false,"context_lines":[{"line_number":232,"context_line":"ipa_ca_cert \u003d /etc/ipa/ca.crt"},{"line_number":233,"context_line":"ipa_client_keytab \u003d /path/to/designateuser.keytab"},{"line_number":234,"context_line":"# test uses non-existent name servers"},{"line_number":235,"context_line":"ipa_force_ns_use \u003d True"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAWn%2F%2F7Bs%3D","line":235,"in_reply_to":"AAAAWn%2F%2F7Ls%3D","updated":"2014-04-08 13:36:38.000000000","message":"I\u0027m saying that Force option should not be necessary if you use (any) resolvable DNS name. Of course, a test using real server is the best but I don\u0027t insist on that.","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"f9604c5765731177ff1d47789b2f8e18750d40c2","unresolved":false,"context_lines":[{"line_number":232,"context_line":"ipa_ca_cert \u003d /etc/ipa/ca.crt"},{"line_number":233,"context_line":"ipa_client_keytab \u003d /path/to/designateuser.keytab"},{"line_number":234,"context_line":"# test uses non-existent name servers"},{"line_number":235,"context_line":"ipa_force_ns_use \u003d True"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAWn%2F%2F7Ls%3D","line":235,"in_reply_to":"AAAAWn%2F%2F9rU%3D","updated":"2014-04-08 13:21:36.000000000","message":"I\u0027m not sure what you mean.  Are you saying that there should be a test that uses an actual known name server, with force: False, to make sure it actually works when there is a real name server?","commit_id":"1381374b9e20c4f6d2de6a9bb729c7742500326b"}]}
