예제 #1
0
    def test_lookup(self):
        connection = Connection.make_connection(tc.hostname, tc.admin, tc.password)

        server = Server.lookup(connection, "Manage")

        self.assertIsNotNone(server)
        self.assertEqual(server.server_name(), "Manage")
예제 #2
0
    def test_list(self):
        connection = Connection.make_connection(tc.hostname, tc.admin,
                                                tc.password)

        names = Server.list(connection)
        self.assertGreater(len(names), 3)
        self.assertIn("Default|Manage", names)
예제 #3
0
    def test_lookup(self):
        connection = Connection.make_connection(tc.hostname, tc.admin,
                                                tc.password)

        server = Server.lookup(connection, "Manage")

        self.assertIsNotNone(server)
        self.assertEqual(server.server_name(), "Manage")
예제 #4
0
    def servers(self, connection=None):
        """
        Get a list of the servers in the local cluster.
        """
        if connection is None:
            connection = self.connection

        return Server.list(connection)
예제 #5
0
    def servers(self, connection=None):
        """
        Get a list of the servers in the local cluster.
        """
        if connection is None:
            connection = self.connection

        return Server.list(connection)
예제 #6
0
 def test_create_webdav_server(self):
     server = WebDAVServer("foo-webdav", "Default", 10101, '/', 'Documents')
     assert "foo-webdav" == server.server_name()
     server.create(self.connection)
     assert server is not None
     assert "webdav" == server.server_type()
     server.delete(self.connection)
     server = Server.lookup(self.connection, "foo-webdav")
     assert server is None
예제 #7
0
 def test_create_xdbc_server(self):
     server = XdbcServer("foo-xdbc", "Default", 10101, '/', 'Documents')
     assert "foo-xdbc" == server.server_name()
     server.create(self.connection)
     assert server is not None
     assert "xdbc" == server.server_type()
     server.delete(self.connection)
     server = Server.lookup(self.connection, "foo-xdbc")
     assert server is None
예제 #8
0
 def test_create_http_server(self):
     server = HttpServer("foo-http", "Default", 10101, '/', 'Documents')
     assert "foo-http" == server.server_name()
     server.create(self.connection)
     assert server is not None
     assert "http" == server.server_type()
     server.delete(self.connection)
     server = Server.lookup(self.connection, "foo-http")
     assert server is None
예제 #9
0
    def _test_ssl_certificate_pems(self):
        connection = Connection.make_connection(tc.hostname, tc.admin, tc.password)
        server = HttpServer("foo-http", "Default", 10101, '/', 'Documents')
        self.assertEqual(server.server_name(), "foo-http")
        server.create(connection)
        self.assertIsNotNone(server)
        self.assertEqual("http", server.server_type())

        pem1 = "-----BEGIN CERTIFICATE-----\n\
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc\n\
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT\n\
ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw\n\
MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j\n\
LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ\n\
KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo\n\
RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu\n\
WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw\n\
Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD\n\
AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK\n\
eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM\n\
zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+\n\
WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN\n\
/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==\n\
-----END CERTIFICATE-----"

        pem2 = "-----BEGIN CERTIFICATE-----\n\
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc\n\
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT\n\
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw\n\
MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj\n\
dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l\n\
c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC\n\
UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc\n\
58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/\n\
o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH\n\
MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr\n\
aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA\n\
A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA\n\
Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv\n\
8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV\n\
-----END CERTIFICATE-----"

        server.add_ssl_client_certificate_pem(pem1)
        server.update(connection)
        server.read(connection)

        self.assertEqual(1, len(server.ssl_client_certificate_pems()))

        server.set_ssl_client_certificate_pems([pem1,pem2])
        server.update(connection)
        server.read(connection)

        self.assertEqual(2, len(server.ssl_client_certificate_pems()))

        server.delete(connection)
        server = Server.lookup(connection, "foo-http")
        self.assertIsNone(server)
예제 #10
0
 def test_create_xdbc_server(self):
     server = XdbcServer("foo-xdbc", "Default", 10101, '/', 'Documents')
     assert "foo-xdbc" == server.server_name()
     server.create(self.connection)
     assert server is not None
     assert "xdbc" == server.server_type()
     server.delete(self.connection)
     server = Server.lookup(self.connection, "foo-xdbc")
     assert server is None
예제 #11
0
 def test_create_http_server(self):
     server = HttpServer("foo-http", "Default", 10101, '/', 'Documents')
     assert "foo-http" == server.server_name()
     server.create(self.connection)
     assert server is not None
     assert "http" == server.server_type()
     server.delete(self.connection)
     server = Server.lookup(self.connection, "foo-http")
     assert server is None
예제 #12
0
 def test_create_webdav_server(self):
     server = WebDAVServer("foo-webdav", "Default", 10101, '/', 'Documents')
     assert "foo-webdav" == server.server_name()
     server.create(self.connection)
     assert server is not None
     assert "webdav" == server.server_type()
     server.delete(self.connection)
     server = Server.lookup(self.connection, "foo-webdav")
     assert server is None
예제 #13
0
    def _test_ssl_certificate_pems(self):
        server = HttpServer("foo-http", "Default", 10101, '/', 'Documents')
        assert "foo-http" == server.server_name()
        server.create(self.connection)
        assert server is not None
        assert "http" == server.server_type()

        pem1 = "-----BEGIN CERTIFICATE-----\n\
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc\n\
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT\n\
ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw\n\
MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j\n\
LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ\n\
KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo\n\
RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu\n\
WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw\n\
Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD\n\
AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK\n\
eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM\n\
zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+\n\
WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN\n\
/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==\n\
-----END CERTIFICATE-----"

        pem2 = "-----BEGIN CERTIFICATE-----\n\
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc\n\
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT\n\
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw\n\
MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj\n\
dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l\n\
c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC\n\
UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc\n\
58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/\n\
o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH\n\
MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr\n\
aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA\n\
A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA\n\
Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv\n\
8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV\n\
-----END CERTIFICATE-----"

        server.add_ssl_client_certificate_pem(pem1)
        server.update(self.connection)
        server.read(self.connection)

        assert 1 == len(server.ssl_client_certificate_pems())

        server.set_ssl_client_certificate_pems([pem1, pem2])
        server.update(self.connection)
        server.read(self.connection)

        assert 2 == len(server.ssl_client_certificate_pems())

        server.delete(self.connection)
        server = Server.lookup(self.connection, "foo-http")
        assert server is None
예제 #14
0
 def test_create_webdav_server(self):
     connection = Connection.make_connection(tc.hostname, tc.admin, tc.password)
     server = WebDAVServer("foo-webdav", "Default", 10101, '/', 'Documents')
     self.assertEqual(server.server_name(), "foo-webdav")
     server.create(connection)
     self.assertIsNotNone(server)
     self.assertEqual("webdav", server.server_type())
     server.delete(connection)
     server = Server.lookup(connection, "foo-webdav")
     self.assertIsNone(server)
예제 #15
0
 def test_create_webdav_server(self):
     connection = Connection.make_connection(tc.hostname, tc.admin,
                                             tc.password)
     server = WebDAVServer("foo-webdav", "Default", 10101, '/', 'Documents')
     self.assertEqual(server.server_name(), "foo-webdav")
     server.create(connection)
     self.assertIsNotNone(server)
     self.assertEqual("webdav", server.server_type())
     server.delete(connection)
     server = Server.lookup(connection, "foo-webdav")
     self.assertIsNone(server)
예제 #16
0
    def get(self, args, config, connection):
        server = Server.lookup(connection, args['name'], args['group'])
        if server is None:
            print("Error: Server does not exist: {0} in group {1}"
                  .format(args['name'], args['group']))
            sys.exit(1)

        if args['view'] == None:
            server.read(connection)
            self.jprint(server)
        else:
            results = server.view(args['view'], connection)
            print(json.dumps(results, sort_keys=True, indent=2))
예제 #17
0
    def get(self, args, config, connection):
        server = Server.lookup(connection, args['name'], args['group'])
        if server is None:
            print("Error: Server does not exist: {0} in group {1}".format(
                args['name'], args['group']))
            sys.exit(1)

        if args['view'] == None:
            server.read(connection)
            self.jprint(server)
        else:
            results = server.view(args['view'], connection)
            print(json.dumps(results, sort_keys=True, indent=2))
예제 #18
0
    def delete(self, args, config, connection):
        server = Server.lookup(connection, args['name'], args['group'])
        if server is None:
            return

        if ('type' in args and args['type'] is not None \
            and server.server_type() != args['type']):
            print("Cannot delete {0} in group {1}; server type {2} is not {3}"
                  .format(args['name'], args['group'],
                          server.server_type(), args['type']))
            sys.exit(1)

        server.delete(connection)
예제 #19
0
    def delete(self, args, config, connection):
        server = Server.lookup(connection, args['name'], args['group'])
        if server is None:
            return

        if ('type' in args and args['type'] is not None \
            and server.server_type() != args['type']):
            print("Cannot delete {0} in group {1}; server type {2} is not {3}".
                  format(args['name'], args['group'], server.server_type(),
                         args['type']))
            sys.exit(1)

        server.delete(connection)
    def modify(self, args, config, connection):
        server = Server.lookup(connection, args['name'], args['group'])
        if server is None:
            print("Error: Server does not exist: {0} in group {1}".format(
                args['name'], args['group']))
            sys.exit(1)

        if args['json'] is not None:
            server = self._read(args['name'], args['group'],
                                server.server_type(), args['json'])

        self._properties(server, args)

        print("Modify server {0} in group {1}...".format(
            args['name'], args['group']))
        server.update(connection=connection)
예제 #21
0
    def modify(self, args, config, connection):
        server = Server.lookup(connection, args['name'], args['group'])
        if server is None:
            print("Error: Server does not exist: {0} in group {1}"
                  .format(args['name'], args['group']))
            sys.exit(1)

        if args['json'] is not None:
            server = self._read(args['name'], args['group'],
                                server.server_type(), args['json'])

        self._properties(server, args)

        print("Modify server {0} in group {1}..."
              .format(args['name'], args['group']))
        server.update(connection=connection)
예제 #22
0
    def list(self, args, config, connection):
        stype = args['type']
        if stype == None:
            slist = Server.list(connection)
        elif stype == 'http':
            slist = HttpServer.list(connection)
        elif stype == 'odbc':
            slist = OdbcServer.list(connection)
        elif stype == 'xdbc':
            slist = XdbcServer.list(connection)
        elif stype == 'webdav':
            slist = WebDAVServer.list(connection)
        else:
            print("Unexpected server type: {0}".format(stype))
            sys.exit(1)

        names = []
        for key in slist:
            (group, name) = key.split('|')
            if group == args['group']:
                names.append(name)

        print(json.dumps(names, sort_keys=True, indent=2))
예제 #23
0
    def list(self, args, config, connection):
        stype = args['type']
        if stype == None:
            slist = Server.list(connection)
        elif stype == 'http':
            slist = HttpServer.list(connection)
        elif stype == 'odbc':
            slist = OdbcServer.list(connection)
        elif stype == 'xdbc':
            slist = XdbcServer.list(connection)
        elif stype == 'webdav':
            slist = WebDAVServer.list(connection)
        else:
            print("Unexpected server type: {0}".format(stype))
            sys.exit(1)

        names = []
        for key in slist:
            (group,name) = key.split('|')
            if group == args['group']:
                names.append(name)

        print(json.dumps(names,sort_keys=True, indent=2))
    name = config['database-name']
    db = Database.lookup(conn, name)
    if db is None:
        print("Need to create database: {0}".format(name))
        db = Database(name)
        db.create(conn)

# Update databases
for config in data['databases']:
    name = config['database-name']
    db = Database.unmarshal(config)
    print("Updating database: {0}".format(name))
    db.update(conn)

# Update servers
for config in data['servers']:
    name = config['server-name']
    group = config['group-name']
    server = Server.lookup(conn, name, group)

    if server is None:
        verb = "Creating"
        server = Server.unmarshal(config)
        print("{0} server: {1}".format(verb, name))
        server.create(conn)
    else:
        verb = "Updating"
        server = Server.unmarshal(config)
        print("{0} {1} server: {2}".format(verb, kind, name))
        server.update(conn)
    def close(self, conn, group='Default'):
        closed = False
        while not closed:
            closed = True

            newitems = []
            for key in self.servers:
                item = self.servers[key]
                if item is None:
                    closed = False
                    newitems.append(Server.lookup(conn, key, group))

            for server in newitems:
                self._close_over_server(server)

            newitems = []
            for key in self.databases:
                item = self.databases[key]
                if item is None:
                    closed = False
                    newitems.append(Database.lookup(conn, key))

            for database in newitems:
                self._close_over_database(database)

            newitems = []
            for key in self.forests:
                item = self.forests[key]
                if item is None:
                    closed = False
                    newitems.append(Forest.lookup(conn, key))

            for forest in newitems:
                self._close_over_forest(forest)

            newitems = []
            for key in self.users:
                item = self.users[key]
                if item is None:
                    closed = False
                    newitems.append(User.lookup(conn, key))

            for user in newitems:
                self._close_over_user(user)

            newitems = []
            for key in self.roles:
                item = self.roles[key]
                if item is None:
                    closed = False
                    newitems.append(Role.lookup(conn, key))

            for role in newitems:
                self._close_over_role(role)

            delitems = []
            newitems = []
            for key in self.privileges:
                item = self.privileges[key]
                parts = key.split("|")
                kind = parts[0]
                name = parts[1]
                if isinstance(item, str):
                    closed = False
                    if "//" in key:
                        # Assume it's an action
                        priv = Privilege.lookup(conn, action=name, kind=kind)
                        delitems.append(key)
                    else:
                        priv = Privilege.lookup(conn, name, kind)
                    newitems.append(priv)

            for item in delitems:
                del self.privileges[item]

            for priv in newitems:
                self._close_over_privilege(priv)
                    action='store_true',
                    help='Enable debug logging')
args = parser.parse_args()

if args.debug:
    logging.basicConfig(level=logging.WARNING)
    logging.getLogger("requests").setLevel(logging.WARNING)
    logging.getLogger("marklogic").setLevel(logging.DEBUG)

closure = Closure()

conn = Connection(args.host, HTTPDigestAuth(args.username, args.password))

if args.server:
    for name in args.server:
        server = Server.lookup(conn, name)
        closure.add_server(server)

if args.database:
    for name in args.database:
        database = Database.lookup(conn, name)
        closure.add_database(database)

if args.user:
    for name in args.user:
        user = User.lookup(conn, name)
        closure.add_user(user)

if args.role:
    for name in args.role:
        role = Role.lookup(conn, name)
예제 #27
0
    def close(self, conn, group='Default'):
        closed = False
        while not closed:
            closed = True

            newitems = []
            for key in self.servers:
                item = self.servers[key]
                if item is None:
                    closed = False
                    newitems.append(Server.lookup(conn, key, group))

            for server in newitems:
                self._close_over_server(server)

            newitems = []
            for key in self.databases:
                item = self.databases[key]
                if item is None:
                    closed = False
                    newitems.append(Database.lookup(conn, key))

            for database in newitems:
                self._close_over_database(database)

            newitems = []
            for key in self.users:
                item = self.users[key]
                if item is None:
                    closed = False
                    newitems.append(User.lookup(conn, key))

            for user in newitems:
                self._close_over_user(user)

            newitems = []
            for key in self.roles:
                item = self.roles[key]
                if item is None:
                    closed = False
                    newitems.append(Role.lookup(conn, key))

            for role in newitems:
                self._close_over_role(role)

            delitems = []
            newitems = []
            for key in self.privileges:
                item = self.privileges[key]
                parts = key.split("|")
                kind = parts[0]
                name = parts[1]
                if isinstance(item, str):
                    closed = False

                    if self.PRIVILEGES is None:
                        self.PRIVILEGES = Privilege.list(conn)

                    for priv in self.PRIVILEGES:
                        parts = priv.split("|")
                        if parts[0] == kind and parts[2] == name:
                            delitems.append(key)
                            name = parts[1]

                    newitems.append(Privilege.lookup(conn, name, kind))

            for item in delitems:
                del self.privileges[item]

            for priv in newitems:
                self._close_over_privilege(priv)
    def servers(self, connection=None):
        if connection is None:
            connection = self.connection

        return Server.list(connection)
예제 #29
0
 def test_list(self):
     names = Server.list(self.connection)
     assert len(names) > 3
     assert "Default|Manage" in names
예제 #30
0
 def test_list(self):
     names = Server.list(self.connection)
     assert len(names) > 3
     assert "Default|Manage" in names
예제 #31
0
    def test_list(self):
        connection = Connection.make_connection(tc.hostname, tc.admin, tc.password)

        names = Server.list(connection)
        self.assertGreater(len(names), 3)
        self.assertIn("Default|Manage", names)
예제 #32
0
    def test_lookup(self):
        server = Server.lookup(self.connection, "Manage")

        assert server is not None
        assert "Manage" == server.server_name()
예제 #33
0
    def servers(self, connection=None):
        if connection is None:
            connection = self.connection

        return Server.list(connection)
예제 #34
0
    def test_lookup(self):
        server = Server.lookup(self.connection, "Manage")

        assert server is not None
        assert "Manage" == server.server_name()