You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ex...@apache.org on 2024/01/15 17:24:40 UTC
(nifi) branch main updated: NIFI-8278 Added Credentials Type to ADLSCredentialsControllerService
This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new e8783f3325 NIFI-8278 Added Credentials Type to ADLSCredentialsControllerService
e8783f3325 is described below
commit e8783f33253b3897636d10b6d68af65bd90271c9
Author: Peter Turcsanyi <tu...@apache.org>
AuthorDate: Thu Jan 4 23:14:27 2024 +0100
NIFI-8278 Added Credentials Type to ADLSCredentialsControllerService
Used migrateProperties() for migrating old flows to the new property structure.
Moved common properties to AzureStorageUtils and also updated/consolidated some property descriptions
This closes #8205
Signed-off-by: David Handermann <ex...@apache.org>
---
.../queue/AbstractAzureQueueStorage_v12.java | 5 -
.../azure/storage/utils/AzureStorageUtils.java | 98 +++++-----
.../storage/ADLSCredentialsControllerService.java | 140 +++++----------
...ureStorageCredentialsControllerService_v12.java | 86 ++-------
.../storage/AbstractAzureBlobStorage_v12IT.java | 8 +-
.../queue/AbstractTestAzureQueueStorage_v12.java | 7 +-
.../TestADLSCredentialsControllerService.java | 200 ++++-----------------
...ureStorageCredentialsControllerService_v12.java | 60 +++----
.../azure/storage/AzureStorageCredentialsType.java | 13 +-
9 files changed, 188 insertions(+), 429 deletions(-)
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/queue/AbstractAzureQueueStorage_v12.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/queue/AbstractAzureQueueStorage_v12.java
index 884eeadf3b..0663490449 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/queue/AbstractAzureQueueStorage_v12.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/queue/AbstractAzureQueueStorage_v12.java
@@ -62,12 +62,7 @@ public abstract class AbstractAzureQueueStorage_v12 extends AbstractProcessor {
public static final PropertyDescriptor ENDPOINT_SUFFIX = new PropertyDescriptor.Builder()
.fromPropertyDescriptor(AzureStorageUtils.ENDPOINT_SUFFIX)
- .displayName("Endpoint Suffix")
- .description("Storage accounts in public Azure always use a common FQDN suffix. " +
- "Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).")
- .required(true)
.defaultValue(AzureServiceEndpoints.DEFAULT_QUEUE_ENDPOINT_SUFFIX)
- .expressionLanguageSupported(ExpressionLanguageScope.NONE)
.build();
public static final PropertyDescriptor STORAGE_CREDENTIALS_SERVICE = new PropertyDescriptor.Builder()
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/utils/AzureStorageUtils.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/utils/AzureStorageUtils.java
index bedfc8c36a..4522ff96ae 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/utils/AzureStorageUtils.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/processors/azure/storage/utils/AzureStorageUtils.java
@@ -27,11 +27,13 @@ import org.apache.nifi.proxy.ProxyConfiguration;
import org.apache.nifi.proxy.ProxySpec;
import org.apache.nifi.proxy.SocksVersion;
import org.apache.nifi.services.azure.storage.AzureStorageConflictResolutionStrategy;
+import org.apache.nifi.services.azure.storage.AzureStorageCredentialsType;
import reactor.netty.http.client.HttpClient;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.Collection;
+import java.util.EnumSet;
public final class AzureStorageUtils {
public static final String STORAGE_ACCOUNT_NAME_PROPERTY_DESCRIPTOR_NAME = "storage-account-name";
@@ -39,65 +41,68 @@ public final class AzureStorageUtils {
public static final String STORAGE_SAS_TOKEN_PROPERTY_DESCRIPTOR_NAME = "storage-sas-token";
public static final String STORAGE_ENDPOINT_SUFFIX_PROPERTY_DESCRIPTOR_NAME = "storage-endpoint-suffix";
+ public static final PropertyDescriptor CREDENTIALS_TYPE = new PropertyDescriptor.Builder()
+ .name("credentials-type")
+ .displayName("Credentials Type")
+ .description("Credentials type to be used for authenticating to Azure")
+ .required(true)
+ .allowableValues(EnumSet.of(
+ AzureStorageCredentialsType.ACCOUNT_KEY,
+ AzureStorageCredentialsType.SAS_TOKEN,
+ AzureStorageCredentialsType.MANAGED_IDENTITY,
+ AzureStorageCredentialsType.SERVICE_PRINCIPAL))
+ .defaultValue(AzureStorageCredentialsType.SAS_TOKEN)
+ .build();
+
public static final String ACCOUNT_KEY_BASE_DESCRIPTION =
"The storage account key. This is an admin-like password providing access to every container in this account. It is recommended " +
- "one uses Shared Access Signature (SAS) token instead for fine-grained control with policies.";
+ "one uses Shared Access Signature (SAS) token, Managed Identity or Service Principal instead for fine-grained control with policies.";
public static final String ACCOUNT_KEY_SECURITY_DESCRIPTION =
- " There are certain risks in allowing the account key to be stored as a flowfile " +
+ " There are certain risks in allowing the account key to be stored as a FlowFile " +
"attribute. While it does provide for a more flexible flow by allowing the account key to " +
- "be fetched dynamically from a flowfile attribute, care must be taken to restrict access to " +
+ "be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to " +
"the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). " +
"In addition, the provenance repositories may be put on encrypted disk partitions.";
public static final PropertyDescriptor ACCOUNT_KEY = new PropertyDescriptor.Builder()
.name(STORAGE_ACCOUNT_KEY_PROPERTY_DESCRIPTOR_NAME)
- .displayName("Storage Account Key")
- .description(ACCOUNT_KEY_BASE_DESCRIPTION + ACCOUNT_KEY_SECURITY_DESCRIPTION)
+ .displayName("Account Key")
+ .description(ACCOUNT_KEY_BASE_DESCRIPTION)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
- .required(false)
+ .expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .required(true)
.sensitive(true)
+ .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.ACCOUNT_KEY)
.build();
public static final String ACCOUNT_NAME_BASE_DESCRIPTION = "The storage account name.";
public static final String ACCOUNT_NAME_SECURITY_DESCRIPTION =
- " There are certain risks in allowing the account name to be stored as a flowfile " +
+ " There are certain risks in allowing the account name to be stored as a FlowFile " +
"attribute. While it does provide for a more flexible flow by allowing the account name to " +
- "be fetched dynamically from a flowfile attribute, care must be taken to restrict access to " +
+ "be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to " +
"the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). " +
"In addition, the provenance repositories may be put on encrypted disk partitions.";
- public static final String ACCOUNT_NAME_CREDENTIAL_SERVICE_DESCRIPTION =
- " Instead of defining the Storage Account Name, Storage Account Key and SAS Token properties directly on the processor, " +
- "the preferred way is to configure them through a controller service specified in the Storage Credentials property. " +
- "The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials " +
- "can also be looked up dynamically with the 'Lookup' version of the service.";
-
public static final PropertyDescriptor ACCOUNT_NAME = new PropertyDescriptor.Builder()
.name(STORAGE_ACCOUNT_NAME_PROPERTY_DESCRIPTOR_NAME)
.displayName("Storage Account Name")
- .description(ACCOUNT_NAME_BASE_DESCRIPTION + ACCOUNT_NAME_SECURITY_DESCRIPTION + ACCOUNT_NAME_CREDENTIAL_SERVICE_DESCRIPTION)
+ .description(ACCOUNT_NAME_BASE_DESCRIPTION)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
- .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
- .required(false)
+ .expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .required(true)
.sensitive(true)
.build();
public static final PropertyDescriptor ENDPOINT_SUFFIX = new PropertyDescriptor.Builder()
.name(STORAGE_ENDPOINT_SUFFIX_PROPERTY_DESCRIPTOR_NAME)
- .displayName("Common Storage Account Endpoint Suffix")
- .description(
- "Storage accounts in public Azure always use a common FQDN suffix. " +
- "Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions). " +
- "The preferred way is to configure them through a controller service specified in the Storage Credentials property. " +
- "The controller service can provide a common/shared configuration for multiple/all Azure processors. Furthermore, the credentials " +
- "can also be looked up dynamically with the 'Lookup' version of the service.")
+ .displayName("Endpoint Suffix")
+ .description("Storage accounts in public Azure always use a common FQDN suffix. " +
+ "Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).")
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
- .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
- .required(false)
- .sensitive(false)
+ .expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .required(true)
.build();
public static final PropertyDescriptor CONTAINER = new PropertyDescriptor.Builder()
@@ -132,23 +137,24 @@ public final class AzureStorageUtils {
.description("Specifies whether an existing blob will have its contents replaced upon conflict.")
.build();
- public static final String SAS_TOKEN_BASE_DESCRIPTION = "Shared Access Signature token, including the leading '?'. Specify either SAS token (recommended) or Account Key.";
+ public static final String SAS_TOKEN_BASE_DESCRIPTION = "Shared Access Signature token (the leading '?' may be included)";
public static final String SAS_TOKEN_SECURITY_DESCRIPTION =
- " There are certain risks in allowing the SAS token to be stored as a flowfile " +
+ " There are certain risks in allowing the SAS token to be stored as a FlowFile " +
"attribute. While it does provide for a more flexible flow by allowing the SAS token to " +
- "be fetched dynamically from a flowfile attribute, care must be taken to restrict access to " +
+ "be fetched dynamically from a FlowFile attribute, care must be taken to restrict access to " +
"the event provenance data (e.g., by strictly controlling the policies governing provenance for this processor). " +
"In addition, the provenance repositories may be put on encrypted disk partitions.";
- public static final PropertyDescriptor PROP_SAS_TOKEN = new PropertyDescriptor.Builder()
+ public static final PropertyDescriptor SAS_TOKEN = new PropertyDescriptor.Builder()
.name(STORAGE_SAS_TOKEN_PROPERTY_DESCRIPTOR_NAME)
.displayName("SAS Token")
- .description(SAS_TOKEN_BASE_DESCRIPTION + SAS_TOKEN_SECURITY_DESCRIPTION)
- .required(false)
- .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
+ .description(SAS_TOKEN_BASE_DESCRIPTION)
+ .required(true)
+ .expressionLanguageSupported(ExpressionLanguageScope.NONE)
.sensitive(true)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+ .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SAS_TOKEN)
.build();
public static final PropertyDescriptor MANAGED_IDENTITY_CLIENT_ID = new PropertyDescriptor.Builder()
@@ -160,36 +166,40 @@ public final class AzureStorageUtils {
.required(false)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.MANAGED_IDENTITY)
.build();
public static final PropertyDescriptor SERVICE_PRINCIPAL_TENANT_ID = new PropertyDescriptor.Builder()
.name("service-principal-tenant-id")
.displayName("Service Principal Tenant ID")
- .description("Tenant ID of the Azure Active Directory hosting the Service Principal. The property is required when Service Principal authentication is used.")
+ .description("Tenant ID of the Azure Active Directory hosting the Service Principal.")
.sensitive(true)
- .required(false)
+ .required(true)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL)
.build();
public static final PropertyDescriptor SERVICE_PRINCIPAL_CLIENT_ID = new PropertyDescriptor.Builder()
.name("service-principal-client-id")
.displayName("Service Principal Client ID")
- .description("Client ID (or Application ID) of the Client/Application having the Service Principal. The property is required when Service Principal authentication is used.")
+ .description("Client ID (or Application ID) of the Client/Application having the Service Principal.")
.sensitive(true)
- .required(false)
+ .required(true)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL)
.build();
public static final PropertyDescriptor SERVICE_PRINCIPAL_CLIENT_SECRET = new PropertyDescriptor.Builder()
.name("service-principal-client-secret")
.displayName("Service Principal Client Secret")
- .description("Password of the Client/Application. The property is required when Service Principal authentication is used.")
+ .description("Password of the Client/Application.")
.sensitive(true)
- .required(false)
+ .required(true)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL)
.build();
private AzureStorageUtils() {
@@ -197,8 +207,10 @@ public final class AzureStorageUtils {
}
private static final ProxySpec[] PROXY_SPECS = {ProxySpec.HTTP, ProxySpec.SOCKS};
- public static final PropertyDescriptor PROXY_CONFIGURATION_SERVICE
- = ProxyConfiguration.createProxyConfigPropertyDescriptor(false, PROXY_SPECS);
+ public static final PropertyDescriptor PROXY_CONFIGURATION_SERVICE = new PropertyDescriptor.Builder()
+ .fromPropertyDescriptor(ProxyConfiguration.createProxyConfigPropertyDescriptor(false, PROXY_SPECS))
+ .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL, AzureStorageCredentialsType.MANAGED_IDENTITY)
+ .build();
public static void validateProxySpec(ValidationContext context, Collection<ValidationResult> results) {
ProxyConfiguration.validateProxySpec(context, results, PROXY_SPECS);
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/ADLSCredentialsControllerService.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/ADLSCredentialsControllerService.java
index 79d6ba7bce..665952bd56 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/ADLSCredentialsControllerService.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/ADLSCredentialsControllerService.java
@@ -16,29 +16,30 @@
*/
package org.apache.nifi.services.azure.storage;
-import org.apache.commons.lang3.StringUtils;
import org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.Tags;
import org.apache.nifi.annotation.lifecycle.OnEnabled;
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.components.PropertyValue;
-import org.apache.nifi.components.ValidationContext;
-import org.apache.nifi.components.ValidationResult;
import org.apache.nifi.controller.AbstractControllerService;
import org.apache.nifi.controller.ConfigurationContext;
import org.apache.nifi.expression.ExpressionLanguageScope;
-import org.apache.nifi.processor.util.StandardValidators;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processors.azure.AzureServiceEndpoints;
import org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Function;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.CREDENTIALS_TYPE;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.MANAGED_IDENTITY_CLIENT_ID;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.PROXY_CONFIGURATION_SERVICE;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_ID;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_SECRET;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_TENANT_ID;
+
/**
* Provides credentials details for ADLS
*
@@ -51,45 +52,33 @@ public class ADLSCredentialsControllerService extends AbstractControllerService
public static final PropertyDescriptor ACCOUNT_NAME = new PropertyDescriptor.Builder()
.fromPropertyDescriptor(AzureStorageUtils.ACCOUNT_NAME)
.description(AzureStorageUtils.ACCOUNT_NAME_BASE_DESCRIPTION + AzureStorageUtils.ACCOUNT_NAME_SECURITY_DESCRIPTION)
- .required(true)
+ .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
+ .build();
+
+ public static final PropertyDescriptor ACCOUNT_KEY = new PropertyDescriptor.Builder()
+ .fromPropertyDescriptor(AzureStorageUtils.ACCOUNT_KEY)
+ .description(AzureStorageUtils.ACCOUNT_KEY_BASE_DESCRIPTION + AzureStorageUtils.ACCOUNT_KEY_SECURITY_DESCRIPTION)
+ .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
+ .build();
+
+ public static final PropertyDescriptor SAS_TOKEN = new PropertyDescriptor.Builder()
+ .fromPropertyDescriptor(AzureStorageUtils.SAS_TOKEN)
+ .description(AzureStorageUtils.SAS_TOKEN_BASE_DESCRIPTION + AzureStorageUtils.SAS_TOKEN_SECURITY_DESCRIPTION)
+ .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.build();
public static final PropertyDescriptor ENDPOINT_SUFFIX = new PropertyDescriptor.Builder()
.fromPropertyDescriptor(AzureStorageUtils.ENDPOINT_SUFFIX)
- .displayName("Endpoint Suffix")
- .description("Storage accounts in public Azure always use a common FQDN suffix. " +
- "Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).")
- .required(true)
.defaultValue(AzureServiceEndpoints.DEFAULT_ADLS_ENDPOINT_SUFFIX)
.expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
.build();
- public static final PropertyDescriptor USE_MANAGED_IDENTITY = new PropertyDescriptor.Builder()
- .name("storage-use-managed-identity")
- .displayName("Use Azure Managed Identity")
- .description("Choose whether or not to use the managed identity of Azure VM/VMSS")
- .required(false)
- .defaultValue("false")
- .allowableValues("true", "false")
- .addValidator(StandardValidators.BOOLEAN_VALIDATOR)
- .build();
-
- public static final PropertyDescriptor MANAGED_IDENTITY_CLIENT_ID = AzureStorageUtils.MANAGED_IDENTITY_CLIENT_ID;
-
- public static final PropertyDescriptor SERVICE_PRINCIPAL_TENANT_ID = AzureStorageUtils.SERVICE_PRINCIPAL_TENANT_ID;
-
- public static final PropertyDescriptor SERVICE_PRINCIPAL_CLIENT_ID = AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_ID;
-
- public static final PropertyDescriptor SERVICE_PRINCIPAL_CLIENT_SECRET = AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_SECRET;
-
- public static final PropertyDescriptor PROXY_CONFIGURATION_SERVICE = AzureStorageUtils.PROXY_CONFIGURATION_SERVICE;
-
private static final List<PropertyDescriptor> PROPERTIES = List.of(
ACCOUNT_NAME,
ENDPOINT_SUFFIX,
- AzureStorageUtils.ACCOUNT_KEY,
- AzureStorageUtils.PROP_SAS_TOKEN,
- USE_MANAGED_IDENTITY,
+ CREDENTIALS_TYPE,
+ ACCOUNT_KEY,
+ SAS_TOKEN,
MANAGED_IDENTITY_CLIENT_ID,
SERVICE_PRINCIPAL_TENANT_ID,
SERVICE_PRINCIPAL_CLIENT_ID,
@@ -105,66 +94,26 @@ public class ADLSCredentialsControllerService extends AbstractControllerService
}
@Override
- protected Collection<ValidationResult> customValidate(ValidationContext validationContext) {
- final List<ValidationResult> results = new ArrayList<>();
-
- final boolean accountKeySet = StringUtils.isNotBlank(validationContext.getProperty(AzureStorageUtils.ACCOUNT_KEY).getValue());
- final boolean sasTokenSet = StringUtils.isNotBlank(validationContext.getProperty(AzureStorageUtils.PROP_SAS_TOKEN).getValue());
- final boolean useManagedIdentitySet = validationContext.getProperty(USE_MANAGED_IDENTITY).asBoolean();
-
- final boolean servicePrincipalTenantIdSet = StringUtils.isNotBlank(validationContext.getProperty(SERVICE_PRINCIPAL_TENANT_ID).getValue());
- final boolean servicePrincipalClientIdSet = StringUtils.isNotBlank(validationContext.getProperty(SERVICE_PRINCIPAL_CLIENT_ID).getValue());
- final boolean servicePrincipalClientSecretSet = StringUtils.isNotBlank(validationContext.getProperty(SERVICE_PRINCIPAL_CLIENT_SECRET).getValue());
-
- final boolean servicePrincipalSet = servicePrincipalTenantIdSet || servicePrincipalClientIdSet || servicePrincipalClientSecretSet;
-
- final String managedIdentityClientId = validationContext.getProperty(MANAGED_IDENTITY_CLIENT_ID).getValue();
-
- if (!onlyOneSet(accountKeySet, sasTokenSet, useManagedIdentitySet, servicePrincipalSet)) {
- results.add(new ValidationResult.Builder().subject(this.getClass().getSimpleName())
- .valid(false)
- .explanation("one and only one authentication method of [Account Key, SAS Token, Managed Identity, Service Principal] should be used")
- .build());
- } else {
- if (servicePrincipalSet) {
- final String template = "'%s' must be set when Service Principal authentication is being configured";
- if (!servicePrincipalTenantIdSet) {
- results.add(new ValidationResult.Builder().subject(this.getClass().getSimpleName())
- .valid(false)
- .explanation(String.format(template, SERVICE_PRINCIPAL_TENANT_ID.getDisplayName()))
- .build());
- }
- if (!servicePrincipalClientIdSet) {
- results.add(new ValidationResult.Builder().subject(this.getClass().getSimpleName())
- .valid(false)
- .explanation(String.format(template, SERVICE_PRINCIPAL_CLIENT_ID.getDisplayName()))
- .build());
- }
- if (!servicePrincipalClientSecretSet) {
- results.add(new ValidationResult.Builder().subject(this.getClass().getSimpleName())
- .valid(false)
- .explanation(String.format(template, SERVICE_PRINCIPAL_CLIENT_SECRET.getDisplayName()))
- .build());
- }
+ public void migrateProperties(PropertyConfiguration config) {
+ if (!config.hasProperty(CREDENTIALS_TYPE)) {
+ final String propNameUseManagedIdentity = "storage-use-managed-identity";
+
+ if (config.isPropertySet(ACCOUNT_KEY)) {
+ config.setProperty(CREDENTIALS_TYPE, AzureStorageCredentialsType.ACCOUNT_KEY.getValue());
+ } else if (config.isPropertySet(SAS_TOKEN)) {
+ config.setProperty(CREDENTIALS_TYPE, AzureStorageCredentialsType.SAS_TOKEN.getValue());
+ } else if (config.isPropertySet(SERVICE_PRINCIPAL_TENANT_ID)) {
+ config.setProperty(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL.getValue());
+ } else {
+ config.getPropertyValue(propNameUseManagedIdentity).ifPresent(value -> {
+ if ("true".equals(value)) {
+ config.setProperty(CREDENTIALS_TYPE, AzureStorageCredentialsType.MANAGED_IDENTITY.getValue());
+ }
+ });
}
- if (!useManagedIdentitySet && StringUtils.isNotEmpty(managedIdentityClientId)) {
- results.add(new ValidationResult.Builder().subject(this.getClass().getSimpleName())
- .valid(false)
- .explanation(String.format("'%s' can only be configured when '%s' is set to true", MANAGED_IDENTITY_CLIENT_ID.getDisplayName(), USE_MANAGED_IDENTITY.getDisplayName()))
- .build());
- }
+ config.removeProperty(propNameUseManagedIdentity);
}
-
- return results;
- }
-
- private boolean onlyOneSet(Boolean... checks) {
- long nrOfSet = Arrays.stream(checks)
- .filter(check -> check)
- .count();
-
- return nrOfSet == 1;
}
@OnEnabled
@@ -177,10 +126,11 @@ public class ADLSCredentialsControllerService extends AbstractControllerService
ADLSCredentialsDetails.Builder credentialsBuilder = ADLSCredentialsDetails.Builder.newBuilder();
setValue(credentialsBuilder, ACCOUNT_NAME, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setAccountName, attributes);
- setValue(credentialsBuilder, AzureStorageUtils.ACCOUNT_KEY, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setAccountKey, attributes);
- setValue(credentialsBuilder, AzureStorageUtils.PROP_SAS_TOKEN, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setSasToken, attributes);
+ setValue(credentialsBuilder, ACCOUNT_KEY, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setAccountKey, attributes);
+ setValue(credentialsBuilder, SAS_TOKEN, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setSasToken, attributes);
setValue(credentialsBuilder, ENDPOINT_SUFFIX, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setEndpointSuffix, attributes);
- setValue(credentialsBuilder, USE_MANAGED_IDENTITY, PropertyValue::asBoolean, ADLSCredentialsDetails.Builder::setUseManagedIdentity, attributes);
+ setValue(credentialsBuilder, CREDENTIALS_TYPE, property -> property.asDescribedValue(AzureStorageCredentialsType.class) == AzureStorageCredentialsType.MANAGED_IDENTITY,
+ ADLSCredentialsDetails.Builder::setUseManagedIdentity, attributes);
setValue(credentialsBuilder, MANAGED_IDENTITY_CLIENT_ID, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setManagedIdentityClientId, attributes);
setValue(credentialsBuilder, SERVICE_PRINCIPAL_TENANT_ID, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setServicePrincipalTenantId, attributes);
setValue(credentialsBuilder, SERVICE_PRINCIPAL_CLIENT_ID, PropertyValue::getValue, ADLSCredentialsDetails.Builder::setServicePrincipalClientId, attributes);
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsControllerService_v12.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsControllerService_v12.java
index 24d3a73321..2537efaa5d 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsControllerService_v12.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsControllerService_v12.java
@@ -23,15 +23,22 @@ import org.apache.nifi.annotation.lifecycle.OnEnabled;
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.controller.AbstractControllerService;
import org.apache.nifi.controller.ConfigurationContext;
-import org.apache.nifi.expression.ExpressionLanguageScope;
import org.apache.nifi.processors.azure.AzureServiceEndpoints;
import org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.ACCOUNT_KEY;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.ACCOUNT_NAME;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.CREDENTIALS_TYPE;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.MANAGED_IDENTITY_CLIENT_ID;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.PROXY_CONFIGURATION_SERVICE;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SAS_TOKEN;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_ID;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_SECRET;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_TENANT_ID;
+
/**
* Provides credentials details for Azure Storage processors
*
@@ -41,81 +48,12 @@ import java.util.Map;
@CapabilityDescription("Provides credentials for Azure Storage processors using Azure Storage client library v12.")
public class AzureStorageCredentialsControllerService_v12 extends AbstractControllerService implements AzureStorageCredentialsService_v12 {
- public static final PropertyDescriptor ACCOUNT_NAME = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.ACCOUNT_NAME)
- .description(AzureStorageUtils.ACCOUNT_NAME_BASE_DESCRIPTION)
- .required(true)
- .expressionLanguageSupported(ExpressionLanguageScope.NONE)
- .build();
-
public static final PropertyDescriptor ENDPOINT_SUFFIX = new PropertyDescriptor.Builder()
.fromPropertyDescriptor(AzureStorageUtils.ENDPOINT_SUFFIX)
- .displayName("Endpoint Suffix")
- .description("Storage accounts in public Azure always use a common FQDN suffix. " +
- "Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).")
- .required(true)
.defaultValue(AzureServiceEndpoints.DEFAULT_BLOB_ENDPOINT_SUFFIX)
- .expressionLanguageSupported(ExpressionLanguageScope.NONE)
- .build();
-
- public static final PropertyDescriptor CREDENTIALS_TYPE = new PropertyDescriptor.Builder()
- .name("credentials-type")
- .displayName("Credentials Type")
- .description("Credentials type to be used for authenticating to Azure")
- .required(true)
- .allowableValues(new AzureStorageCredentialsType[]{
- AzureStorageCredentialsType.ACCOUNT_KEY, AzureStorageCredentialsType.SAS_TOKEN,
- AzureStorageCredentialsType.MANAGED_IDENTITY, AzureStorageCredentialsType.SERVICE_PRINCIPAL
- })
- .defaultValue(AzureStorageCredentialsType.SAS_TOKEN)
- .build();
-
- public static final PropertyDescriptor ACCOUNT_KEY = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.ACCOUNT_KEY)
- .displayName("Account Key")
- .description(AzureStorageUtils.ACCOUNT_KEY_BASE_DESCRIPTION)
- .required(true)
- .expressionLanguageSupported(ExpressionLanguageScope.NONE)
- .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.ACCOUNT_KEY)
- .build();
-
- public static final PropertyDescriptor SAS_TOKEN = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.PROP_SAS_TOKEN)
- .description(AzureStorageUtils.SAS_TOKEN_BASE_DESCRIPTION)
- .required(true)
- .expressionLanguageSupported(ExpressionLanguageScope.NONE)
- .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SAS_TOKEN)
- .build();
-
- public static final PropertyDescriptor MANAGED_IDENTITY_CLIENT_ID = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.MANAGED_IDENTITY_CLIENT_ID)
- .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.MANAGED_IDENTITY)
- .build();
-
- public static final PropertyDescriptor SERVICE_PRINCIPAL_TENANT_ID = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.SERVICE_PRINCIPAL_TENANT_ID)
- .required(true)
- .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL)
- .build();
-
- public static final PropertyDescriptor SERVICE_PRINCIPAL_CLIENT_ID = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_ID)
- .required(true)
- .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL)
- .build();
-
- public static final PropertyDescriptor SERVICE_PRINCIPAL_CLIENT_SECRET = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_SECRET)
- .required(true)
- .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL)
- .build();
-
- public static final PropertyDescriptor PROXY_CONFIGURATION_SERVICE = new PropertyDescriptor.Builder()
- .fromPropertyDescriptor(AzureStorageUtils.PROXY_CONFIGURATION_SERVICE)
- .dependsOn(CREDENTIALS_TYPE, AzureStorageCredentialsType.SERVICE_PRINCIPAL, AzureStorageCredentialsType.MANAGED_IDENTITY)
.build();
- private static final List<PropertyDescriptor> PROPERTIES = Collections.unmodifiableList(Arrays.asList(
+ private static final List<PropertyDescriptor> PROPERTIES = List.of(
ACCOUNT_NAME,
ENDPOINT_SUFFIX,
CREDENTIALS_TYPE,
@@ -126,7 +64,7 @@ public class AzureStorageCredentialsControllerService_v12 extends AbstractContro
SERVICE_PRINCIPAL_CLIENT_ID,
SERVICE_PRINCIPAL_CLIENT_SECRET,
PROXY_CONFIGURATION_SERVICE
- ));
+ );
private ConfigurationContext context;
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/AbstractAzureBlobStorage_v12IT.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/AbstractAzureBlobStorage_v12IT.java
index 6e28c8f7ed..058ee2f0a7 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/AbstractAzureBlobStorage_v12IT.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/AbstractAzureBlobStorage_v12IT.java
@@ -82,12 +82,12 @@ public abstract class AbstractAzureBlobStorage_v12IT extends AbstractAzureStorag
protected void setUpCredentials() throws Exception {
AzureStorageCredentialsService_v12 service = new AzureStorageCredentialsControllerService_v12();
runner.addControllerService(SERVICE_ID, service);
- runner.setProperty(service, AzureStorageCredentialsControllerService_v12.ACCOUNT_NAME, getAccountName());
+ runner.setProperty(service, AzureStorageUtils.ACCOUNT_NAME, getAccountName());
if (getEndpointSuffix() != null) {
- runner.setProperty(service, AzureStorageCredentialsControllerService_v12.ENDPOINT_SUFFIX, getEndpointSuffix());
+ runner.setProperty(service, AzureStorageUtils.ENDPOINT_SUFFIX, getEndpointSuffix());
}
- runner.setProperty(service, AzureStorageCredentialsControllerService_v12.CREDENTIALS_TYPE, AzureStorageCredentialsType.ACCOUNT_KEY);
- runner.setProperty(service, AzureStorageCredentialsControllerService_v12.ACCOUNT_KEY, getAccountKey());
+ runner.setProperty(service, AzureStorageUtils.CREDENTIALS_TYPE, AzureStorageCredentialsType.ACCOUNT_KEY);
+ runner.setProperty(service, AzureStorageUtils.ACCOUNT_KEY, getAccountKey());
runner.enableControllerService(service);
runner.setProperty(AbstractAzureBlobProcessor_v12.STORAGE_CREDENTIALS_SERVICE, SERVICE_ID);
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/queue/AbstractTestAzureQueueStorage_v12.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/queue/AbstractTestAzureQueueStorage_v12.java
index c001927928..74639bb9fa 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/queue/AbstractTestAzureQueueStorage_v12.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/processors/azure/storage/queue/AbstractTestAzureQueueStorage_v12.java
@@ -16,6 +16,7 @@
*/
package org.apache.nifi.processors.azure.storage.queue;
+import org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils;
import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12;
import org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12;
@@ -29,8 +30,8 @@ public abstract class AbstractTestAzureQueueStorage_v12 {
protected void setupStorageCredentialsService() throws InitializationException {
runner.addControllerService(CREDENTIALS_SERVICE_IDENTIFIER, credentialsService);
- runner.setProperty(credentialsService, AzureStorageCredentialsControllerService_v12.ACCOUNT_NAME, "account-name");
- runner.setProperty(credentialsService, AzureStorageCredentialsControllerService_v12.CREDENTIALS_TYPE, AzureStorageCredentialsType.ACCOUNT_KEY);
- runner.setProperty(credentialsService, AzureStorageCredentialsControllerService_v12.ACCOUNT_KEY, "account-key");
+ runner.setProperty(credentialsService, AzureStorageUtils.ACCOUNT_NAME, "account-name");
+ runner.setProperty(credentialsService, AzureStorageUtils.CREDENTIALS_TYPE, AzureStorageCredentialsType.ACCOUNT_KEY);
+ runner.setProperty(credentialsService, AzureStorageUtils.ACCOUNT_KEY, "account-key");
}
}
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestADLSCredentialsControllerService.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestADLSCredentialsControllerService.java
index b265559434..ad0c1ba83d 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestADLSCredentialsControllerService.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestADLSCredentialsControllerService.java
@@ -58,154 +58,15 @@ public class TestADLSCredentialsControllerService {
@Test
public void testNotValidBecauseAccountNameMissing() {
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountKey();
runner.assertNotValid(credentialsService);
}
- @Test
- public void testNotValidBecauseNoCredentialsIsSet() {
- configureAccountName();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothAccountKeyAndSasTokenSpecified() {
- configureAccountName();
-
- configureAccountKey();
- configureSasToken();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothAccountKeyAndUseManagedIdentitySpecified() {
- configureAccountName();
-
- configureAccountKey();
- configureUseManagedIdentity();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothAccountKeyAndServicePrincipalTenantIdSpecified() {
- configureAccountName();
-
- configureAccountKey();
- configureServicePrincipalTenantId();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothAccountKeyAndServicePrincipalClientIdSpecified() {
- configureAccountName();
-
- configureAccountKey();
- configureServicePrincipalClientId();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothAccountKeyAndServicePrincipalClientSecretSpecified() {
- configureAccountName();
-
- configureAccountKey();
- configureServicePrincipalClientSecret();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothSasTokenAndUseManagedIdentitySpecified() {
- configureAccountName();
-
- configureSasToken();
- configureUseManagedIdentity();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothSasTokenAndServicePrincipalTenantIdSpecified() {
- configureAccountName();
-
- configureSasToken();
- configureServicePrincipalTenantId();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothSasTokenAndServicePrincipalClientIdSpecified() {
- configureAccountName();
-
- configureSasToken();
- configureServicePrincipalClientId();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothSasTokenAndServicePrincipalClientSecretSpecified() {
- configureAccountName();
-
- configureSasToken();
- configureServicePrincipalClientSecret();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothUseManagedIdentityAndServicePrincipalTenantIdSpecified() {
- configureAccountName();
-
- configureUseManagedIdentity();
- configureServicePrincipalTenantId();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothUseManagedIdentityAndServicePrincipalClientIdSpecified() {
- configureAccountName();
-
- configureUseManagedIdentity();
- configureServicePrincipalClientId();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseBothUseManagedIdentityAndServicePrincipalClientSecretSpecified() {
- configureAccountName();
-
- configureUseManagedIdentity();
- configureServicePrincipalClientSecret();
-
- runner.assertNotValid(credentialsService);
- }
-
- @Test
- public void testNotValidBecauseAllCredentialsSpecified() throws Exception {
- configureAccountName();
-
- configureAccountKey();
- configureSasToken();
- configureUseManagedIdentity();
- configureServicePrincipalTenantId();
- configureServicePrincipalClientId();
- configureServicePrincipalClientSecret();
-
- runner.assertNotValid(credentialsService);
- }
-
@Test
public void testNotValidWithEmptyEndpointSuffix() {
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountName();
configureAccountKey();
@@ -214,6 +75,7 @@ public class TestADLSCredentialsControllerService {
}
@Test
public void testNotValidWithWhitespaceEndpointSuffix() {
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountName();
configureAccountKey();
@@ -223,6 +85,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testValidWithAccountNameAndAccountKey() {
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountName();
configureAccountKey();
@@ -231,6 +94,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testValidWithAccountNameAndSasToken() {
+ configureCredentialsType(AzureStorageCredentialsType.SAS_TOKEN);
configureAccountName();
configureSasToken();
@@ -239,14 +103,15 @@ public class TestADLSCredentialsControllerService {
@Test
public void testValidWithAccountNameAndUseManagedIdentity() {
+ configureCredentialsType(AzureStorageCredentialsType.MANAGED_IDENTITY);
configureAccountName();
- configureUseManagedIdentity();
runner.assertValid(credentialsService);
}
@Test
public void testValidWithAccountNameAndServicePrincipalWithClientSecret() {
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureAccountName();
configureServicePrincipalTenantId();
configureServicePrincipalClientId();
@@ -255,18 +120,9 @@ public class TestADLSCredentialsControllerService {
runner.assertValid(credentialsService);
}
- @Test
- public void testNotValidBecauseManagedIdentityClientIdSpecifiedButUseManagedIdentityIsFalse() {
- configureAccountName();
- configureAccountKey();
-
- configureManagedIdentityClientId();
-
- runner.assertNotValid(credentialsService);
- }
-
@Test
public void testNotValidBecauseNoTenantIdSpecifiedForServicePrincipal() {
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureAccountName();
configureServicePrincipalClientId();
@@ -277,6 +133,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testNotValidBecauseNoClientIdSpecifiedForServicePrincipal() {
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureAccountName();
configureServicePrincipalTenantId();
@@ -287,6 +144,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testNotValidBecauseNoClientSecretSpecifiedForServicePrincipal() {
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureAccountName();
configureServicePrincipalTenantId();
@@ -298,6 +156,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithAccountKey() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountName();
configureAccountKey();
@@ -321,6 +180,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithAccountKeyUsingEL() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountNameUsingEL();
configureAccountKeyUsingEL();
@@ -344,6 +204,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithSasToken() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.SAS_TOKEN);
configureAccountName();
configureSasToken();
@@ -366,6 +227,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithSasTokenUsingEL() throws Exception {
+ configureCredentialsType(AzureStorageCredentialsType.SAS_TOKEN);
configureAccountName();
configureSasTokenUsingEL();
@@ -386,8 +248,8 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithSystemAssignedManagedIdentity() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.MANAGED_IDENTITY);
configureAccountName();
- configureUseManagedIdentity();
runner.enableControllerService(credentialsService);
@@ -409,8 +271,8 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithUserAssignedManagedIdentity() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.MANAGED_IDENTITY);
configureAccountName();
- configureUseManagedIdentity();
configureManagedIdentityClientId();
runner.enableControllerService(credentialsService);
@@ -433,6 +295,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithServicePrincipalWithClientSecret() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureAccountName();
configureServicePrincipalTenantId();
configureServicePrincipalClientId();
@@ -458,6 +321,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithSetEndpointSuffix() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountName();
configureAccountKey();
configureEndpointSuffix();
@@ -474,6 +338,7 @@ public class TestADLSCredentialsControllerService {
@Test
public void testGetCredentialsDetailsWithSetEndpointSuffixUsingEL() throws Exception {
// GIVEN
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountName();
configureAccountKey();
configureEndpointSuffixUsingEL();
@@ -486,13 +351,16 @@ public class TestADLSCredentialsControllerService {
// THEN
assertEquals(END_POINT_SUFFIX_VALUE, actual.getEndpointSuffix());
}
+ private void configureCredentialsType(AzureStorageCredentialsType credentialsType) {
+ runner.setProperty(credentialsService, AzureStorageUtils.CREDENTIALS_TYPE, credentialsType);
+ }
private void configureAccountName() {
- runner.setProperty(credentialsService, ADLSCredentialsControllerService.ACCOUNT_NAME, ACCOUNT_NAME_VALUE);
+ runner.setProperty(credentialsService, AzureStorageUtils.ACCOUNT_NAME, ACCOUNT_NAME_VALUE);
}
private void configureAccountNameUsingEL() {
- configurePropertyUsingEL(ADLSCredentialsControllerService.ACCOUNT_NAME, "account.name", ACCOUNT_NAME_VALUE);
+ configurePropertyUsingEL(AzureStorageUtils.ACCOUNT_NAME, "account.name", ACCOUNT_NAME_VALUE);
}
private void configureAccountKey() {
@@ -504,41 +372,37 @@ public class TestADLSCredentialsControllerService {
}
private void configureSasToken() {
- runner.setProperty(credentialsService, AzureStorageUtils.PROP_SAS_TOKEN, SAS_TOKEN_VALUE);
+ runner.setProperty(credentialsService, AzureStorageUtils.SAS_TOKEN, SAS_TOKEN_VALUE);
}
private void configureSasTokenUsingEL() {
String variableName = "sas.token";
- configurePropertyUsingEL(AzureStorageUtils.PROP_SAS_TOKEN, variableName, SAS_TOKEN_VALUE);
- }
-
- private void configureUseManagedIdentity() {
- runner.setProperty(credentialsService, ADLSCredentialsControllerService.USE_MANAGED_IDENTITY, "true");
+ configurePropertyUsingEL(AzureStorageUtils.SAS_TOKEN, variableName, SAS_TOKEN_VALUE);
}
private void configureManagedIdentityClientId() {
- runner.setProperty(credentialsService, ADLSCredentialsControllerService.MANAGED_IDENTITY_CLIENT_ID, MANAGED_IDENTITY_CLIENT_ID_VALUE);
+ runner.setProperty(credentialsService, AzureStorageUtils.MANAGED_IDENTITY_CLIENT_ID, MANAGED_IDENTITY_CLIENT_ID_VALUE);
}
private void configureEndpointSuffix() {
- runner.setProperty(credentialsService, ADLSCredentialsControllerService.ENDPOINT_SUFFIX, END_POINT_SUFFIX_VALUE);
+ runner.setProperty(credentialsService, AzureStorageUtils.ENDPOINT_SUFFIX, END_POINT_SUFFIX_VALUE);
}
private void configureEndpointSuffixUsingEL() {
String variableName = "endpoint.suffix";
- configurePropertyUsingEL(ADLSCredentialsControllerService.ENDPOINT_SUFFIX, variableName, END_POINT_SUFFIX_VALUE);
+ configurePropertyUsingEL(AzureStorageUtils.ENDPOINT_SUFFIX, variableName, END_POINT_SUFFIX_VALUE);
}
private void configureServicePrincipalTenantId() {
- runner.setProperty(credentialsService, ADLSCredentialsControllerService.SERVICE_PRINCIPAL_TENANT_ID, SERVICE_PRINCIPAL_TENANT_ID_VALUE);
+ runner.setProperty(credentialsService, AzureStorageUtils.SERVICE_PRINCIPAL_TENANT_ID, SERVICE_PRINCIPAL_TENANT_ID_VALUE);
}
private void configureServicePrincipalClientId() {
- runner.setProperty(credentialsService, ADLSCredentialsControllerService.SERVICE_PRINCIPAL_CLIENT_ID, SERVICE_PRINCIPAL_CLIENT_ID_VALUE);
+ runner.setProperty(credentialsService, AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_ID, SERVICE_PRINCIPAL_CLIENT_ID_VALUE);
}
private void configureServicePrincipalClientSecret() {
- runner.setProperty(credentialsService, ADLSCredentialsControllerService.SERVICE_PRINCIPAL_CLIENT_SECRET, SERVICE_PRINCIPAL_CLIENT_SECRET_VALUE);
+ runner.setProperty(credentialsService, AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_SECRET, SERVICE_PRINCIPAL_CLIENT_SECRET_VALUE);
}
private void configurePropertyUsingEL(PropertyDescriptor propertyDescriptor, String variableName, String variableValue) {
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestAzureStorageCredentialsControllerService_v12.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestAzureStorageCredentialsControllerService_v12.java
index 8a7760da83..94b61bb2e2 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestAzureStorageCredentialsControllerService_v12.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-processors/src/test/java/org/apache/nifi/services/azure/storage/TestAzureStorageCredentialsControllerService_v12.java
@@ -26,16 +26,14 @@ import org.junit.jupiter.api.Test;
import java.util.Collections;
import static org.apache.nifi.processors.azure.AzureServiceEndpoints.DEFAULT_BLOB_ENDPOINT_SUFFIX;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12.ACCOUNT_NAME;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12.CREDENTIALS_TYPE;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12.ENDPOINT_SUFFIX;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12.SERVICE_PRINCIPAL_CLIENT_ID;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12.SERVICE_PRINCIPAL_CLIENT_SECRET;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsControllerService_v12.SERVICE_PRINCIPAL_TENANT_ID;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsType.ACCOUNT_KEY;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsType.MANAGED_IDENTITY;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsType.SAS_TOKEN;
-import static org.apache.nifi.services.azure.storage.AzureStorageCredentialsType.SERVICE_PRINCIPAL;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.ACCOUNT_KEY;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.ACCOUNT_NAME;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.CREDENTIALS_TYPE;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.ENDPOINT_SUFFIX;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SAS_TOKEN;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_ID;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_CLIENT_SECRET;
+import static org.apache.nifi.processors.azure.storage.utils.AzureStorageUtils.SERVICE_PRINCIPAL_TENANT_ID;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -63,7 +61,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testNotValidBecauseAccountNameMissing() {
- configureCredentialsType(ACCOUNT_KEY);
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountKey();
runner.assertNotValid(credentialsService);
@@ -72,7 +70,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testAccountKeyCredentialsTypeValid() {
configureAccountName();
- configureCredentialsType(ACCOUNT_KEY);
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountKey();
runner.assertValid(credentialsService);
@@ -81,7 +79,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testAccountKeyCredentialsTypeNotValidBecauseAccountKeyMissing() {
configureAccountName();
- configureCredentialsType(ACCOUNT_KEY);
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
runner.assertNotValid(credentialsService);
}
@@ -89,7 +87,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testSasTokenCredentialsTypeValid() {
configureAccountName();
- configureCredentialsType(SAS_TOKEN);
+ configureCredentialsType(AzureStorageCredentialsType.SAS_TOKEN);
configureSasToken();
runner.assertValid(credentialsService);
@@ -98,7 +96,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testSasTokenCredentialsTypeNotValidBecauseSasTokenMissing() {
configureAccountName();
- configureCredentialsType(SAS_TOKEN);
+ configureCredentialsType(AzureStorageCredentialsType.SAS_TOKEN);
runner.assertNotValid(credentialsService);
}
@@ -106,7 +104,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testManagedIdentityCredentialsTypeValid() {
configureAccountName();
- configureCredentialsType(MANAGED_IDENTITY);
+ configureCredentialsType(AzureStorageCredentialsType.MANAGED_IDENTITY);
runner.assertValid(credentialsService);
}
@@ -114,7 +112,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testServicePrincipalCredentialsTypeValid() {
configureAccountName();
- configureCredentialsType(SERVICE_PRINCIPAL);
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureServicePrincipalTenantId();
configureServicePrincipalClientId();
configureServicePrincipalClientSecret();
@@ -125,7 +123,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testServicePrincipalCredentialsTypeNotValidBecauseTenantIdMissing() {
configureAccountName();
- configureCredentialsType(SERVICE_PRINCIPAL);
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureServicePrincipalClientId();
configureServicePrincipalClientSecret();
@@ -135,7 +133,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testServicePrincipalCredentialsTypeNotValidBecauseClientIdMissing() {
configureAccountName();
- configureCredentialsType(SERVICE_PRINCIPAL);
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureServicePrincipalTenantId();
configureServicePrincipalClientSecret();
@@ -145,7 +143,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testServicePrincipalCredentialsTypeNotValidBecauseClientSecretMissing() {
configureAccountName();
- configureCredentialsType(SERVICE_PRINCIPAL);
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureServicePrincipalTenantId();
configureServicePrincipalClientId();
@@ -155,7 +153,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testGetCredentialsDetailsWithAccountKey() {
configureAccountName();
- configureCredentialsType(ACCOUNT_KEY);
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountKey();
runner.enableControllerService(credentialsService);
@@ -164,7 +162,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
assertEquals(ACCOUNT_NAME_VALUE, actual.getAccountName());
assertEquals(DEFAULT_BLOB_ENDPOINT_SUFFIX, actual.getEndpointSuffix());
- assertEquals(ACCOUNT_KEY, actual.getCredentialsType());
+ assertEquals(AzureStorageCredentialsType.ACCOUNT_KEY, actual.getCredentialsType());
assertEquals(ACCOUNT_KEY_VALUE, actual.getAccountKey());
assertNull(actual.getSasToken());
assertNull(actual.getServicePrincipalTenantId());
@@ -175,7 +173,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testGetCredentialsDetailsWithSasToken() {
configureAccountName();
- configureCredentialsType(SAS_TOKEN);
+ configureCredentialsType(AzureStorageCredentialsType.SAS_TOKEN);
configureSasToken();
runner.enableControllerService(credentialsService);
@@ -184,7 +182,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
assertEquals(ACCOUNT_NAME_VALUE, actual.getAccountName());
assertEquals(DEFAULT_BLOB_ENDPOINT_SUFFIX, actual.getEndpointSuffix());
- assertEquals(SAS_TOKEN, actual.getCredentialsType());
+ assertEquals(AzureStorageCredentialsType.SAS_TOKEN, actual.getCredentialsType());
assertNull(actual.getAccountKey());
assertEquals(SAS_TOKEN_VALUE, actual.getSasToken());
assertNull(actual.getServicePrincipalTenantId());
@@ -195,7 +193,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testGetCredentialsDetailsWithManagedIdentity() {
configureAccountName();
- configureCredentialsType(MANAGED_IDENTITY);
+ configureCredentialsType(AzureStorageCredentialsType.MANAGED_IDENTITY);
runner.enableControllerService(credentialsService);
@@ -203,7 +201,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
assertEquals(ACCOUNT_NAME_VALUE, actual.getAccountName());
assertEquals(DEFAULT_BLOB_ENDPOINT_SUFFIX, actual.getEndpointSuffix());
- assertEquals(MANAGED_IDENTITY, actual.getCredentialsType());
+ assertEquals(AzureStorageCredentialsType.MANAGED_IDENTITY, actual.getCredentialsType());
assertNull(actual.getAccountKey());
assertNull(actual.getSasToken());
assertNull(actual.getServicePrincipalTenantId());
@@ -214,7 +212,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
@Test
public void testGetCredentialsDetailsWithServicePrincipal() {
configureAccountName();
- configureCredentialsType(SERVICE_PRINCIPAL);
+ configureCredentialsType(AzureStorageCredentialsType.SERVICE_PRINCIPAL);
configureServicePrincipalTenantId();
configureServicePrincipalClientId();
configureServicePrincipalClientSecret();
@@ -225,7 +223,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
assertEquals(ACCOUNT_NAME_VALUE, actual.getAccountName());
assertEquals(DEFAULT_BLOB_ENDPOINT_SUFFIX, actual.getEndpointSuffix());
- assertEquals(SERVICE_PRINCIPAL, actual.getCredentialsType());
+ assertEquals(AzureStorageCredentialsType.SERVICE_PRINCIPAL, actual.getCredentialsType());
assertNull(actual.getAccountKey());
assertNull(actual.getSasToken());
assertEquals(SERVICE_PRINCIPAL_TENANT_ID_VALUE, actual.getServicePrincipalTenantId());
@@ -237,7 +235,7 @@ public class TestAzureStorageCredentialsControllerService_v12 {
public void testGetCredentialsDetailsWithCustomEndpointSuffix() {
configureAccountName();
configureEndpointSuffix();
- configureCredentialsType(ACCOUNT_KEY);
+ configureCredentialsType(AzureStorageCredentialsType.ACCOUNT_KEY);
configureAccountKey();
runner.enableControllerService(credentialsService);
@@ -260,11 +258,11 @@ public class TestAzureStorageCredentialsControllerService_v12 {
}
private void configureAccountKey() {
- runner.setProperty(credentialsService, AzureStorageCredentialsControllerService_v12.ACCOUNT_KEY, ACCOUNT_KEY_VALUE);
+ runner.setProperty(credentialsService, ACCOUNT_KEY, ACCOUNT_KEY_VALUE);
}
private void configureSasToken() {
- runner.setProperty(credentialsService, AzureStorageCredentialsControllerService_v12.SAS_TOKEN, SAS_TOKEN_VALUE);
+ runner.setProperty(credentialsService, SAS_TOKEN, SAS_TOKEN_VALUE);
}
private void configureServicePrincipalTenantId() {
diff --git a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-services-api/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsType.java b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-services-api/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsType.java
index b9c0eb5444..04921c9ec0 100644
--- a/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-services-api/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsType.java
+++ b/nifi-nar-bundles/nifi-azure-bundle/nifi-azure-services-api/src/main/java/org/apache/nifi/services/azure/storage/AzureStorageCredentialsType.java
@@ -26,26 +26,27 @@ public enum AzureStorageCredentialsType implements DescribedValue {
SERVICE_PRINCIPAL("Service Principal", "Azure Active Directory Service Principal with Client Id / Client Secret of a registered application"),
ACCESS_TOKEN("Access Token", "Access Token provided by custom controller service implementations");
- private final String label;
+ private final String displayName;
private final String description;
- AzureStorageCredentialsType(String label, String description) {
- this.label = label;
+ AzureStorageCredentialsType(String displayName, String description) {
+ this.displayName = displayName;
this.description = description;
}
@Override
public String getValue() {
- return this.name();
+ return name();
}
@Override
public String getDisplayName() {
- return this.label;
+ return displayName;
}
@Override
public String getDescription() {
- return this.description;
+ return description;
}
}
+