es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtro de Envoy WASM (C++) – leyendo variables de entorno del contenedor.

En un EnvoyFilter WASM (C++) necesito leer las VARIABLES DE ENTORNO del contenedor de Envoy.

Intenté usar “environ_get” como se menciona aquí: https://github.com/envoyproxy/envoy/issues/14958 pero la compilación de Bazel falla.

¿Cuál es la forma correcta de leer las VARIABLES DE ENTORNO dentro de un EnvoyFilter WASM (C++)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para leer variables de entorno dentro de un filtro Envoy WASM (C++) utilizando EnvoyProxy, puedes usar la API Server::Configuration::Main::envoy::api::v2::core::ConfigSource::ApiConfigSource de Envoy. Esta API te permite configurar una fuente de configuración de API que recupera la configuración de un plano de control externo, como Istio.

    Puedes utilizar el mensaje proto envoy.api.v2.core.DataSource para especificar la ubicación de la variable de entorno requerida. Por ejemplo, puedes establecer el campo specifier en "env:MY_ENV_VAR" para obtener el valor de la variable de entorno “MY_ENV_VAR”.

    Aquí tienes un ejemplo de cómo puedes utilizar la API ApiConfigSource para obtener el valor de una variable de entorno dentro de un filtro Envoy WASM (C++):

    “`c++
    #include “envoy/api/v2/core/config_source.pb.h”
    #include “envoy/config/bootstrap/v3/bootstrap.pb.h”
    #include “envoy/service/discovery/v3/discovery.pb.h”
    #include “envoy/config/core/v3/extension.pb.h”

    using envoy::api::v2::core::ApiConfigSource;
    using envoy::api::v2::core::DataSource;
    using envoy::config::bootstrap::v3::Bootstrap;
    using envoy::service::discovery::v3::DeltaDiscoveryRequest;
    using envoy::config::core::v3::TypedExtensionConfig;

    // Función para obtener la variable de entorno dentro de EnvoyFilter WASM (C++)
    std::string retrieveEnvVar(std::string envVarName) {
    Bootstrap bootstrap;

    // Configurar Fuente de Configuración de API
    ApiConfigSource* apiConfigSource = bootstrap.mutable_dynamic_resources()->mutable_lds_config()->add_api_config_source();
    apiConfigSource->set_api_type(ApiConfigSource::REST);
    apiConfigSource->set_cluster_name("xds_cluster");
    apiConfigSource->mutable_refresh_delay()->set_seconds(10);
    
    // Configurar DataSource para obtener la variable de entorno
    DataSource* dataSource = apiConfigSource->mutable_remote_config();
    TypedExtensionConfig* typedConfig = dataSource->mutable_typed_config();
    typedConfig->set_typename_("google.api.EnvoyExtensions.Common.Envoy.API.v2.DataSource");
    dataSource->mutable_specifier()->set_string_value("env:" + envVarName);
    
    // Obtener el valor
    DeltaDiscoveryRequest req;
    Bootstrap::StaticResources res;
    std::string value;
    if (dataSource->Fetch(request, &value, nullptr, &res)) {
        return value; // Devolver el valor de la variable de entorno
    }
    

    }
    “`
    Puedes llamar a la función retrieveEnvVar() en tu código de filtro Envoy WASM (C++) para obtener el valor de la variable de entorno requerida.

Comments are closed.