GitHub user StanleyShen added a comment to the discussion: how to create own
variable resolver
I didn't use it, I just use the `VaultVariableResolver` for reference, so it's
just with annotations.
```
package org.apache.hop.core.variables.resolver.secrets;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.secretsmanager.AWSSecretsManager;
import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder;
import com.amazonaws.services.secretsmanager.model.GetSecretValueRequest;
import com.amazonaws.services.secretsmanager.model.GetSecretValueResult;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang.StringUtils;
import org.apache.hop.core.exception.HopException;
import org.apache.hop.core.gui.plugin.GuiElementType;
import org.apache.hop.core.gui.plugin.GuiPlugin;
import org.apache.hop.core.gui.plugin.GuiWidgetElement;
import org.apache.hop.core.logging.LogChannel;
import org.apache.hop.core.variables.IVariables;
import org.apache.hop.core.variables.resolver.IVariableResolver;
import org.apache.hop.core.variables.resolver.VariableResolver;
import org.apache.hop.core.variables.resolver.VariableResolverPlugin;
import org.apache.hop.metadata.api.HopMetadataProperty;
@Getter
@Setter
@GuiPlugin
@VariableResolverPlugin(
id = "AWS-Secret-Variable-Resolver",
name = "AWS Secret Variable Resolver",
description = "Look up values of secrets in AWS Secret Manager",
documentationUrl = "/variables/resolvers/AWS-Secret.html" // TODO: write
this documentation
)
public class SecretVariableResolver implements IVariableResolver {
@GuiWidgetElement(
id = "awsAccessId",
order = "01",
label =
"i18n:org.apache.hop.core.variables.resolver.aws:SecretVariableResolver.label.awsAccessId",
type = GuiElementType.TEXT,
password = true,
parentId = VariableResolver.GUI_PLUGIN_ELEMENT_PARENT_ID)
@HopMetadataProperty
private String awsAccessId;
@GuiWidgetElement(
id = "awsAccessKey",
order = "02",
label =
"i18n:org.apache.hop.core.variables.resolver.aws:SecretVariableResolver.label.awsAccessKey",
type = GuiElementType.TEXT,
password = true,
parentId = VariableResolver.GUI_PLUGIN_ELEMENT_PARENT_ID)
@HopMetadataProperty
private String awsAccessKey;
@GuiWidgetElement(
id = "awsRegion",
order = "03",
label =
"i18n:org.apache.hop.core.variables.resolver.aws:SecretVariableResolver.label.awsRegion",
type = GuiElementType.TEXT,
parentId = VariableResolver.GUI_PLUGIN_ELEMENT_PARENT_ID)
@HopMetadataProperty
private String awsRegion;
@GuiWidgetElement(
id = "secretName",
order = "04",
label =
"i18n:org.apache.hop.core.variables.resolver.aws:SecretVariableResolver.label.secretName",
type = GuiElementType.TEXT,
parentId = VariableResolver.GUI_PLUGIN_ELEMENT_PARENT_ID)
@HopMetadataProperty
private String secretName;
@Override
public String resolve(String variableName, IVariables variables) throws
HopException {
try {
return "hello";
} catch (Exception e) {
LogChannel.GENERAL.logError(
"Error looking up variable '" + variableName + "' in the AWS Secret",
e);
return null;
}
}
@Override
public void setPluginId() {
// Nothing to set
}
@Override
public void init() {
// Not used today
}
@Override
public String getPluginId() {
return "AWS-Secret-Variable-Resolver";
}
@Override
public void setPluginName(String pluginName) {
// Nothing to set
}
@Override
public String getPluginName() {
return "AWS Secret Variable Resolver";
}
}
```
Did some search, it seems this annotation is enough, there is no other code to
registry it.
And I see this resolver in UI
<img width="1466" alt="image"
src="https://github.com/user-attachments/assets/fd4d0d86-69ef-4150-96b9-09cf95ae3c72"
/>
<img width="1110" alt="image"
src="https://github.com/user-attachments/assets/747276bb-4452-41c6-87eb-1683e6438a2d"
/>
<img width="1046" alt="image"
src="https://github.com/user-attachments/assets/c2d272fd-0fa9-48a6-8b1f-5a691a101e8d"
/>
But when running workflow, it seems the resolve didn't happen, I get value in
log like this.
```
2025/05/14 08:12:10 - test_log - hello, ${awssecret:test}
```
GitHub link:
https://github.com/apache/hop/discussions/5312#discussioncomment-13141886
----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]