in clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemUtils.java [78:191]
public static GravitinoClient createClient(Map<String, String> configuration) {
// initialize the Gravitino client
String serverUri =
configuration.get(GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_SERVER_URI_KEY);
String metalakeValue =
configuration.get(GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_METALAKE_KEY);
Preconditions.checkArgument(
StringUtils.isNotBlank(serverUri),
"'%s' is not set in the configuration",
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_SERVER_URI_KEY);
Map<String, String> requestHeaders =
configuration.entrySet().stream()
.filter(e -> e.getKey().startsWith(FS_GRAVITINO_CLIENT_REQUEST_HEADER_PREFIX))
.collect(
Collectors.toMap(
e -> e.getKey().substring(FS_GRAVITINO_CLIENT_REQUEST_HEADER_PREFIX.length()),
Map.Entry::getValue));
String authType =
configuration.getOrDefault(
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_AUTH_TYPE_KEY,
GravitinoVirtualFileSystemConfiguration.SIMPLE_AUTH_TYPE);
if (authType.equalsIgnoreCase(GravitinoVirtualFileSystemConfiguration.SIMPLE_AUTH_TYPE)) {
return GravitinoClient.builder(serverUri)
.withMetalake(metalakeValue)
.withSimpleAuth()
.withHeaders(requestHeaders)
.build();
} else if (authType.equalsIgnoreCase(
GravitinoVirtualFileSystemConfiguration.OAUTH2_AUTH_TYPE)) {
String authServerUri =
configuration.get(
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_SERVER_URI_KEY);
checkAuthConfig(
GravitinoVirtualFileSystemConfiguration.OAUTH2_AUTH_TYPE,
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_SERVER_URI_KEY,
authServerUri);
String credential =
configuration.get(
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_CREDENTIAL_KEY);
checkAuthConfig(
GravitinoVirtualFileSystemConfiguration.OAUTH2_AUTH_TYPE,
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_CREDENTIAL_KEY,
credential);
String path =
configuration.get(
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_PATH_KEY);
checkAuthConfig(
GravitinoVirtualFileSystemConfiguration.OAUTH2_AUTH_TYPE,
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_PATH_KEY,
path);
String scope =
configuration.get(
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_SCOPE_KEY);
checkAuthConfig(
GravitinoVirtualFileSystemConfiguration.OAUTH2_AUTH_TYPE,
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_OAUTH2_SCOPE_KEY,
scope);
DefaultOAuth2TokenProvider authDataProvider =
DefaultOAuth2TokenProvider.builder()
.withUri(authServerUri)
.withCredential(credential)
.withPath(path)
.withScope(scope)
.build();
return GravitinoClient.builder(serverUri)
.withMetalake(metalakeValue)
.withOAuth(authDataProvider)
.withHeaders(requestHeaders)
.build();
} else if (authType.equalsIgnoreCase(
GravitinoVirtualFileSystemConfiguration.KERBEROS_AUTH_TYPE)) {
String principal =
configuration.get(
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_KERBEROS_PRINCIPAL_KEY);
checkAuthConfig(
GravitinoVirtualFileSystemConfiguration.KERBEROS_AUTH_TYPE,
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_KERBEROS_PRINCIPAL_KEY,
principal);
String keytabFilePath =
configuration.get(
GravitinoVirtualFileSystemConfiguration
.FS_GRAVITINO_CLIENT_KERBEROS_KEYTAB_FILE_PATH_KEY);
KerberosTokenProvider authDataProvider;
if (StringUtils.isNotBlank(keytabFilePath)) {
// Using principal and keytab to create auth provider
authDataProvider =
KerberosTokenProvider.builder()
.withClientPrincipal(principal)
.withKeyTabFile(new File(keytabFilePath))
.build();
} else {
// Using ticket cache to create auth provider
authDataProvider = KerberosTokenProvider.builder().withClientPrincipal(principal).build();
}
return GravitinoClient.builder(serverUri)
.withMetalake(metalakeValue)
.withKerberosAuth(authDataProvider)
.withHeaders(requestHeaders)
.build();
} else {
throw new IllegalArgumentException(
String.format(
"Unsupported authentication type: %s for %s.",
authType, GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_AUTH_TYPE_KEY));
}
}