Beispiel #1
0
Datei: cmd.py Projekt: yvess/desk
    def run(self):
        src, dest = self.settings.src, self.settings.dest
        dest_at_src = self.settings.dest_at_src
        do_import = self.settings.do_import
        temp_dir = None
        if src.split("/")[-1].endswith(".ldif"):  # ldif as input file
            if dest_at_src:
                dest = "{}/couch".format(path.dirname(src))
                map(unlink, [path.join(dest, f) for f in listdir(dest)])
            else:
                temp_dir = tempfile.mkdtemp()
                dest = "{}/couch".format(temp_dir)
            if not path.isdir(dest):
                mkdir(dest)
            self.create_files(dest=dest, src=src)
            json_src = dest
        else:
            json_src = src  # for json dir as input files

        if do_import:
            couch_up = CouchdbUploader(
                path=json_src, couchdb_uri=self.settings.couchdb_uri,
                couchdb_db=self.settings.couchdb_db
            )
            for fname in listdir(json_src):
                couch_up.put(
                    data="@{}".format(fname),
                    doc_id=fname[:-5]
                )
            create_order_doc(couch_up)
        if temp_dir:
            shutil.rmtree(temp_dir)
Beispiel #2
0
    def run(self):
        couch_up = CouchdbUploader(
            path=self.settings.path, couchdb_uri=self.settings.couchdb_uri,
            couchdb_db=self.settings.couchdb_db
        )

        for fname in os.listdir(self.settings.path):
            couch_up.put(
                data="@{}".format(fname),
                doc_id=fname[:-5]
            )
Beispiel #3
0
    def create_files(self):
        self.create_docs()
        if os.path.exists(self.dest):
            shutil.rmtree(self.dest)
        os.mkdir(self.dest)
        json_files = FilesForCouch(self.docs, self.dest)
        json_files.create()

        if not self.settings.only_files:
            couch_up = CouchdbUploader(
                path=self.dest, couchdb_uri=self.settings.couchdb_uri, couchdb_db=self.settings.couchdb_db
            )

            for fname in os.listdir(self.dest):
                couch_up.put(data="@{}".format(fname), doc_id=fname[:-5])
Beispiel #4
0
 def setUp(self):
     self.settings = {
         "couchdb_uri": "http://*****:*****@cdb:5984",
         "couchdb_db": "desk_tester",
     }
     s = Server(self.settings["couchdb_uri"])
     self.s = s
     s.create_db(self.settings['couchdb_db'])
     self.up = CouchdbUploader(path=os.path.dirname(__file__), auth=('admin', 'admin'), **self.settings)
Beispiel #5
0
    def setUp(self):
        self.db_conf = {
            "couchdb_uri": "http://*****:*****@cdb:5984",
            "couchdb_db": "desk_tester",
        }
        self.conf = {
            "powerdns_backend": "sqlite",
            "powerdns_db": "/var/services/data/powerdns/pdns_dnsa.test.sqlite3",
            "powerdns_name": "dnsa.test",
            "powerdns_primary": "dnsa.test",
            "worker_is_foreman": True,
        }
        self.conf.update(self.db_conf)
        s = Server(self.db_conf["couchdb_uri"])
        self.s = s
        s.create_db(self.db_conf['couchdb_db'])
        self.db = self.s.get_db(self.db_conf["couchdb_db"])
        self.couch_up = CouchdbUploader(
            path=os.path.dirname(__file__),
            auth=('admin', 'admin'), **self.db_conf
        )
        status_code = self.couch_up.put(
            data="@fixtures/couchdb-design.json",
            doc_id="_design/{couchdb_db}"
        )
        if not status_code == 201:
            s.delete_db(self.db_conf["couchdb_db"])

        worker_id = "worker-foreman"
        d = {
            "_id": worker_id, "type": "worker", "hostname": "foreman",
            "provides": {
                "domain": [{"backend": "powerdns", "name": "dnsa.test"}]
            }
        }
        self.assertTrue(
            self.couch_up.put(data=json.dumps(d), doc_id=worker_id) == 201
        )
        self.assertTrue(
            self.couch_up.put(data="@fixtures/couchdb-template-dns.json",
                        doc_id="template-email") == 201
        )
        self.assertTrue(
            self.couch_up.put(data="@fixtures/couchdb-map-ips.json",
                        doc_id="map-ips") == 201
        )
Beispiel #6
0
class UtilTestCase(unittest.TestCase):
    def setUp(self):
        self.settings = {
            "couchdb_uri": "http://*****:*****@cdb:5984",
            "couchdb_db": "desk_tester",
        }
        s = Server(self.settings["couchdb_uri"])
        self.s = s
        s.create_db(self.settings['couchdb_db'])
        self.up = CouchdbUploader(path=os.path.dirname(__file__), auth=('admin', 'admin'), **self.settings)

    def tearDown(self):
        self.s.delete_db(self.settings["couchdb_db"])

    def test_broken_json(self):
        json = """ { "_id": "broken-json", "type": "worker", "hostname": "tworkerbroken", } """  # no ","
        status_code = self.up.put(data=json, doc_id="broken-json")
        self.assertTrue(status_code == 400)
Beispiel #7
0
class WorkerTestCase(unittest.TestCase):
    def setUp(self):
        self.db_conf = {
            "couchdb_uri": "http://*****:*****@cdb:5984",
            "couchdb_db": "desk_tester",
        }
        self.conf = {
            "powerdns_backend": "sqlite",
            "powerdns_db": "/var/services/data/powerdns/pdns_dnsa.test.sqlite3",
            "powerdns_name": "dnsa.test",
            "powerdns_primary": "dnsa.test",
            "worker_is_foreman": True,
        }
        self.conf.update(self.db_conf)
        s = Server(self.db_conf["couchdb_uri"])
        self.s = s
        s.create_db(self.db_conf['couchdb_db'])
        self.db = self.s.get_db(self.db_conf["couchdb_db"])
        self.couch_up = CouchdbUploader(
            path=os.path.dirname(__file__),
            auth=('admin', 'admin'), **self.db_conf
        )
        status_code = self.couch_up.put(
            data="@fixtures/couchdb-design.json",
            doc_id="_design/{couchdb_db}"
        )
        if not status_code == 201:
            s.delete_db(self.db_conf["couchdb_db"])

        worker_id = "worker-foreman"
        d = {
            "_id": worker_id, "type": "worker", "hostname": "foreman",
            "provides": {
                "domain": [{"backend": "powerdns", "name": "dnsa.test"}]
            }
        }
        self.assertTrue(
            self.couch_up.put(data=json.dumps(d), doc_id=worker_id) == 201
        )
        self.assertTrue(
            self.couch_up.put(data="@fixtures/couchdb-template-dns.json",
                        doc_id="template-email") == 201
        )
        self.assertTrue(
            self.couch_up.put(data="@fixtures/couchdb-map-ips.json",
                        doc_id="map-ips") == 201
        )

    def tearDown(self):
        has_domain1, has_domain2 = (
            Powerdns(ObjectDict(**self.conf)).check_domain("test"),
            Powerdns(ObjectDict(**self.conf)).check_domain("test2")
        )
        self._remove_domain("test") if has_domain1 else None
        self._remove_domain("test2") if has_domain2 else None
        self.s.delete_db(self.db_conf["couchdb_db"])

    def _run_order(self):
        self._run_worker(is_foreman=True)

    def _run_worker(self, is_foreman=True):
        conf = self.conf
        w = Foreman(conf, hostname="foreman")
        w.run_once()

    def _get_dns_validator(self, doc_id, lookup={
                           'dnsa.test': "127.0.0.1",
                           'dnsb.test': "127.0.0.1"
                           }):
        doc = MergedDoc(self.db, self.db.get(doc_id)).doc
        validator = DnsValidator(doc, lookup=lookup)
        return validator

    def _create_order_doc(self):
        current_time = time.localtime()
        order_id = "order-{}-{}".format(int(time.mktime(current_time)),
                                        self.s.next_uuid())

        order_doc = {
            "_id": order_id,
            "date": time.strftime("%Y-%m-%d %H:%M:%S %z", current_time),
            "type": "order", "sender": "pad", "state": "new_pre"
        }
        self.assertTrue(self.couch_up.put(data=json.dumps(order_doc),
                        doc_id=order_id) == 201)
        self.assertTrue(self.couch_up.update(handler='add-editor',
                        doc_id=order_id) == 201)
        return order_id

    def _add_domain_test_tt(self, run=True, add_order=True):
        dns_id = "dns-test"
        self.assertTrue(self.couch_up.put(data="@fixtures/couchdb-dns-test.json",
                        doc_id=dns_id) == 201)
        self.assertTrue(self.couch_up.update(handler='add-editor',
                        doc_id=dns_id) == 201)
        order_id = None
        if run and add_order:
            order_id = self._create_order_doc()
            self._run_order()
        return (dns_id, order_id)

    def _add_domain_test2_tt(self, run=True, add_order=True):
        dns_id = "dns-test2"
        self.assertTrue(self.couch_up.put(data="@fixtures/couchdb-dns-test2.json",
                        doc_id=dns_id) == 201)
        self.assertTrue(self.couch_up.update(handler='add-editor',
                        doc_id=dns_id) == 201)
        order_id = None
        if run and add_order:
            order_id = self._create_order_doc()
            self._run_order()
        return (dns_id, order_id)

    def _remove_domain(self, domain, docs=None):
        # cleanup
        pdns = Powerdns(ObjectDict(**self.conf))
        pdns.del_domain(domain)
        if docs:
            self.db.delete_doc(docs)

    def test_worker_settings(self):
        doc = self.db.get("worker-foreman")
        self.assertTrue(doc['provides']['domain'][0]["backend"] == "powerdns")

    def test_new_domain(self):
        dns_id, order_id = self._add_domain_test_tt()
        self.assertTrue(self.db.get(dns_id)['state'] == 'active')
        self.assertTrue(self._get_dns_validator('dns-test').do_check())
        self._remove_domain('test', docs=[dns_id, order_id])

    def test_update_record(self):
        dns_id, order_id = self._add_domain_test_tt()
        dns_doc = self.db.get(dns_id)
        dns_doc['a'][4]['ip'] = "1.1.1.21"
        dns_doc['a'][1]['host'] = "ns3"
        dns_doc['cname'][0]['host'] = "dnsa"
        VersionDoc(self.db, dns_doc).create_version()
        order_id = self._create_order_doc()
        self._run_order()
        self.assertTrue(self.db.get(dns_id)['state'] == 'active')
        self.assertTrue(self._get_dns_validator('dns-test').do_check())
        self._remove_domain('test', docs=[dns_id, order_id])

    def test_complete_change_record(self):
        dns_id, order_id = self._add_domain_test_tt()
        dns_doc = self.db.get(dns_id)
        changed_a = copy(dns_doc['a'][4])
        dns_doc['a'][4]['ip'] = "1.1.1.21"
        dns_doc['a'][4]['host'] = "www2"
        VersionDoc(self.db, dns_doc).create_version()
        order_id = self._create_order_doc()
        self._run_order()
        self.assertTrue(self.db.get(dns_id)['state'] == 'active')
        with self.assertRaises(NXDOMAIN):
            self._get_dns_validator('dns-test').check_one_record(
                'A', 'ip', q_key='host', item=changed_a
            )
        self.assertTrue(self._get_dns_validator('dns-test').do_check())
        self._remove_domain('test', docs=[dns_id, order_id])

    def test_append_record(self):
        dns_id, order_id = self._add_domain_test_tt()
        dns_doc = self.db.get(dns_id)
        dns_doc['a'].append({'host': "forum", 'ip': "1.1.1.25"})
        dns_doc['cname'].append({'alias': "super", 'host': "www"})
        VersionDoc(self.db, dns_doc).create_version()
        order_id = self._create_order_doc()
        self._run_order()
        self.assertTrue(self.db.get(dns_id)['state'] == 'active')
        self.assertTrue(self._get_dns_validator('dns-test').do_check())
        self._remove_domain('test', docs=[dns_id, order_id])

    def test_delete_record(self):
        dns_id, order1_id = self._add_domain_test_tt()
        dns_doc = self.db.get(dns_id)
        removed_a = dns_doc['a'].pop(4)
        vd = VersionDoc(self.db, dns_doc)
        vd.create_version()
        order2_id = self._create_order_doc()
        self._run_order()
        self.assertTrue(self.db.get(dns_id)['state'] == 'active')
        with self.assertRaises(NXDOMAIN):
            self._get_dns_validator('dns-test').check_one_record(
                'A', 'ip', q_key='host', item=removed_a
            )
        self._remove_domain('test', docs=[dns_id, order1_id, order2_id])

    def test_two_domains(self):
        ddnsa_id, order_id = self._add_domain_test_tt(run=False, add_order=False)
        ddnsb_id, order_id = self._add_domain_test2_tt(run=False, add_order=False)
        order1_id = self._create_order_doc()
        self._run_order()
        self.assertTrue(self.db.get(ddnsa_id)['state'] == 'active')
        self.assertTrue(self._get_dns_validator('dns-test').do_check())
        self.assertTrue(self.db.get(ddnsb_id)['state'] == 'active')
        self.assertTrue(self._get_dns_validator('dns-test2').do_check())
        self._remove_domain('test', docs=[ddnsa_id, order1_id])
        self._remove_domain('test2', docs=[ddnsb_id])