libminifi/include/parameter-providers/EnvironmentVariableParameterProvider.h (61 lines of code) (raw):

/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include "core/ParameterProvider.h" #include "core/logging/LoggerFactory.h" namespace org::apache::nifi::minifi::parameter_providers { enum class EnvironmentVariableInclusionStrategyOptions { include_all, comma_separated, regular_expression }; } // namespace org::apache::nifi::minifi::parameter_providers namespace magic_enum::customize { using EnvironmentVariableInclusionStrategyOptions = org::apache::nifi::minifi::parameter_providers::EnvironmentVariableInclusionStrategyOptions; template <> constexpr customize_t enum_name<EnvironmentVariableInclusionStrategyOptions>(EnvironmentVariableInclusionStrategyOptions value) noexcept { switch (value) { case EnvironmentVariableInclusionStrategyOptions::include_all: return "Include All"; case EnvironmentVariableInclusionStrategyOptions::comma_separated: return "Comma-Separated"; case EnvironmentVariableInclusionStrategyOptions::regular_expression: return "Regular Expression"; } return invalid_tag; } } // namespace magic_enum::customize namespace org::apache::nifi::minifi::parameter_providers { class EnvironmentVariableParameterProvider final : public core::ParameterProvider { public: using ParameterProvider::ParameterProvider; MINIFIAPI static constexpr const char* Description = "Fetches parameters from environment variables.\n\n" "This provider generates a single Parameter Context with the name specified in the `Parameter Group Name` property, if it doesn't exist yet. " "The parameters generated match the name of the environment variables that are included."; MINIFIAPI static constexpr auto EnvironmentVariableInclusionStrategy = core::PropertyDefinitionBuilder<magic_enum::enum_count<EnvironmentVariableInclusionStrategyOptions>()>::createProperty("Environment Variable Inclusion Strategy") .withDescription("Indicates how Environment Variables should be included") .isRequired(true) .withDefaultValue(magic_enum::enum_name(EnvironmentVariableInclusionStrategyOptions::include_all)) .withAllowedValues(magic_enum::enum_names<EnvironmentVariableInclusionStrategyOptions>()) .build(); MINIFIAPI static constexpr auto IncludeEnvironmentVariables = core::PropertyDefinitionBuilder<>::createProperty("Include Environment Variables") .withDescription("Specifies comma separated environment variable names or regular expression (depending on the Environment Variable Inclusion Strategy) " "that should be used to fetch environment variables.") .build(); MINIFIAPI static constexpr auto ParameterGroupName = core::PropertyDefinitionBuilder<>::createProperty("Parameter Group Name") .withDescription("The name of the parameter group that will be fetched. This indicates the name of the Parameter Context that may receive the fetched parameters.") .isRequired(true) .build(); MINIFIAPI static constexpr auto Properties = minifi::utils::array_cat(core::ParameterProvider::Properties, std::to_array<core::PropertyReference>({EnvironmentVariableInclusionStrategy, IncludeEnvironmentVariables, ParameterGroupName})); void initialize() override { setSupportedProperties(Properties); } private: std::string readParameterGroupName() const; EnvironmentVariableInclusionStrategyOptions readEnvironmentVariableInclusionStrategy() const; void filterEnvironmentVariablesByCommaSeparatedList(std::unordered_map<std::string, std::string>& environment_variables) const; void filterEnvironmentVariablesByRegularExpression(std::unordered_map<std::string, std::string>& environment_variables) const; std::vector<core::ParameterGroup> buildParameterGroups() override; std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<EnvironmentVariableParameterProvider>::getLogger(uuid_)}; }; } // namespace org::apache::nifi::minifi::parameter_providers