Skip to content

Commit 50a67fe

Browse files
virajjasaniCLevasseur
authored andcommitted
HADOOP-17725. Keep MSI tenant ID and client ID optional (ADDENDUM)
1 parent 4230162 commit 50a67fe

2 files changed

Lines changed: 31 additions & 4 deletions

File tree

hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/AbfsConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -821,9 +821,9 @@ public AccessTokenProvider getTokenProvider() throws TokenAccessProviderExceptio
821821
FS_AZURE_ACCOUNT_OAUTH_MSI_ENDPOINT,
822822
AuthConfigurations.DEFAULT_FS_AZURE_ACCOUNT_OAUTH_MSI_ENDPOINT);
823823
String tenantGuid =
824-
getMandatoryPasswordString(FS_AZURE_ACCOUNT_OAUTH_MSI_TENANT);
824+
getPasswordString(FS_AZURE_ACCOUNT_OAUTH_MSI_TENANT);
825825
String clientId =
826-
getMandatoryPasswordString(FS_AZURE_ACCOUNT_OAUTH_CLIENT_ID);
826+
getPasswordString(FS_AZURE_ACCOUNT_OAUTH_CLIENT_ID);
827827
String authority = getTrimmedPasswordString(
828828
FS_AZURE_ACCOUNT_OAUTH_MSI_AUTHORITY,
829829
AuthConfigurations.DEFAULT_FS_AZURE_ACCOUNT_OAUTH_MSI_AUTHORITY);

hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azurebfs/TestAccountConfiguration.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@
2727
import org.apache.hadoop.fs.azurebfs.contracts.exceptions.ConfigurationPropertyNotFoundException;
2828
import org.apache.hadoop.fs.azurebfs.contracts.exceptions.InvalidConfigurationValueException;
2929
import org.apache.hadoop.fs.azurebfs.contracts.exceptions.TokenAccessProviderException;
30+
import org.apache.hadoop.fs.azurebfs.oauth2.AccessTokenProvider;
3031
import org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider;
3132
import org.apache.hadoop.fs.azurebfs.oauth2.CustomTokenProviderAdapter;
33+
import org.apache.hadoop.fs.azurebfs.oauth2.MsiTokenProvider;
3234
import org.apache.hadoop.fs.azurebfs.services.AuthType;
3335
import org.apache.hadoop.test.GenericTestUtils;
3436
import org.apache.hadoop.test.LambdaTestUtils;
@@ -57,7 +59,8 @@
5759
* that do allow default values (all others) follow another form.
5860
*/
5961
public class TestAccountConfiguration {
60-
private static final String TEST_OAUTH_PROVIDER_CLASS_CONFIG = "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider";
62+
private static final String TEST_OAUTH_CLIENT_CREDS_TOKEN_PROVIDER_CLASS_CONFIG = "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider";
63+
private static final String TEST_OAUTH_MSI_TOKEN_PROVIDER_CLASS_CONFIG = "org.apache.hadoop.fs.azurebfs.oauth2.MsiTokenProvider";
6164
private static final String TEST_CUSTOM_PROVIDER_CLASS_CONFIG = "org.apache.hadoop.fs.azurebfs.oauth2.RetryTestTokenProvider";
6265
private static final String TEST_SAS_PROVIDER_CLASS_CONFIG_1 = "org.apache.hadoop.fs.azurebfs.extensions.MockErrorSASTokenProvider";
6366
private static final String TEST_SAS_PROVIDER_CLASS_CONFIG_2 = "org.apache.hadoop.fs.azurebfs.extensions.MockSASTokenProvider";
@@ -400,6 +403,30 @@ private static void testMissingConfigKey(final AbfsConfiguration abfsConf,
400403
() -> abfsConf.getTokenProvider().getClass().getTypeName())));
401404
}
402405

406+
@Test
407+
public void testClientAndTenantIdOptionalWhenUsingMsiTokenProvider() throws Throwable {
408+
final String accountName = "account";
409+
final Configuration conf = new Configuration();
410+
final AbfsConfiguration abfsConf = new AbfsConfiguration(conf, accountName);
411+
412+
final String accountNameSuffix = "." + abfsConf.getAccountName();
413+
String authKey = FS_AZURE_ACCOUNT_AUTH_TYPE_PROPERTY_NAME + accountNameSuffix;
414+
String providerClassKey = "";
415+
String providerClassValue = "";
416+
417+
providerClassKey = FS_AZURE_ACCOUNT_TOKEN_PROVIDER_TYPE_PROPERTY_NAME + accountNameSuffix;
418+
providerClassValue = TEST_OAUTH_MSI_TOKEN_PROVIDER_CLASS_CONFIG;
419+
420+
abfsConf.set(authKey, AuthType.OAuth.toString());
421+
abfsConf.set(providerClassKey, providerClassValue);
422+
423+
AccessTokenProvider tokenProviderTypeName = abfsConf.getTokenProvider();
424+
// Test that we managed to instantiate an MsiTokenProvider without having to define the tenant and client ID.
425+
// Those 2 fields are optional as they can automatically be determined by the Azure Metadata service when
426+
// running on an Azure VM.
427+
Assertions.assertThat(tokenProviderTypeName).isInstanceOf(MsiTokenProvider.class);
428+
}
429+
403430
public void testGlobalAndAccountOAuthPrecedence(AbfsConfiguration abfsConf,
404431
AuthType globalAuthType,
405432
AuthType accountSpecificAuthType)
@@ -455,7 +482,7 @@ public void setAuthConfig(AbfsConfiguration abfsConf,
455482
case OAuth:
456483
providerClassKey = FS_AZURE_ACCOUNT_TOKEN_PROVIDER_TYPE_PROPERTY_NAME
457484
+ (isAccountSetting ? accountNameSuffix : "");
458-
providerClassValue = TEST_OAUTH_PROVIDER_CLASS_CONFIG;
485+
providerClassValue = TEST_OAUTH_CLIENT_CREDS_TOKEN_PROVIDER_CLASS_CONFIG;
459486

460487
abfsConf.set(FS_AZURE_ACCOUNT_OAUTH_CLIENT_ENDPOINT
461488
+ ((isAccountSetting) ? accountNameSuffix : ""),

0 commit comments

Comments
 (0)