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")
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)
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)
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
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
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
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)
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
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)
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))
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))
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 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)
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)
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))
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)
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)
def test_list(self): names = Server.list(self.connection) assert len(names) > 3 assert "Default|Manage" in names
def test_lookup(self): server = Server.lookup(self.connection, "Manage") assert server is not None assert "Manage" == server.server_name()