2014-07-25 5 views
1

elasticsearch.yml 파일에 다음 두 가지 설정이 있습니다. 그것들은 환경 변수들로부터 끌어내는 유일한 것들입니다.elasticsearch는 elasticsearch.yml의 환경 변수를 해결할 수 없습니다.

환경에서로드하려면 elasticsearch를 다시 시작하면 해결할 수 없다는 오류가 발생합니다. 나는 그것을 테스트 한이 오류가 모두 적용 그래서, 하나 해결되지 않습니다 내가 GitHub의에 elasticsearch의 코드 저장소를 통해 조사 몇몇의이 비트를 발견 않았다

- IllegalArgumentException[Could not resolve placeholder 'AWS_SECRET_KEY'] 
    java.lang.IllegalArgumentException: Could not resolve placeholder 'AWS_SECRET_KEY' 
    at org.elasticsearch.common.property.PropertyPlaceholder.parseStringValue(PropertyPlaceholder.java:124) 
    at org.elasticsearch.common.property.PropertyPlaceholder.replacePlaceholders(PropertyPlaceholder.java:81) 
    at org.elasticsearch.common.settings.ImmutableSettings$Builder.replacePropertyPlaceholders(ImmutableSettings.java:1060) 
    at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareSettings(InternalSettingsPreparer.java:101) 
    at org.elasticsearch.bootstrap.Bootstrap.initialSettings(Bootstrap.java:106) 
    at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:177) 
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32) 

(그냥 먼저 아래 하나 실패) 환경 변수에서 가져 오는 코드. 즉

ImmutableSettings.java#resolvePlaceholder from [email protected]

. 환경 변수로부터 인상해야한다고하는 기능 내부 라인이 하나 그러나

Code from resolvePlaceholder that pulls out environment variables

, resolvePlaceholder 기능 PropertyPlaceholder#parseStringValue 내부에서 실행 된 후, 즉을 그대로 System.getenv 호출은 널 반환해야 그 오류가 던져 질 수있는 유일한 방법.

나는 이 내 시스템에서 올바르게 환경 변수를 추출하고 있는지 테스트하기 위해 본질적으로 ImmutableSettings.java#resolvePlaceholder 사본 인 간단한 테스트 프로그램을 작성했다. 사실 이것은 내가 예상 한 값을 반환합니다. 이 구문 분석 할 수 없습니다 elasticsearch에 대해 어떻게

[[email protected] ~]$ java Cool AWS_SECRET_KEY 
3: System.getenv 
XXXXXXXXXXXXXXXXXX 
[[email protected] ~]$ java Cool AWS_ACCESS_KEY_ID 
3: System.getenv 
XXXXXXXXXXXXXXXXXX 

입니다 :

실행
public class Cool { 
    public static void main(String[] args) { 
    System.out.println(resolvePlaceholder(args[0])); 
    } 
    public static String resolvePlaceholder(String placeholderName) { 
    if (placeholderName.startsWith("env.")) { 
     // explicit env var prefix 
     System.out.println("1: placeholderName.startsWith(\"env.\")"); 
     return System.getenv(placeholderName.substring("env.".length())); 
    } 
    String value = System.getProperty(placeholderName); 
    if (value != null) { 
     System.out.println("2: System.getProperty"); 
     return value; 
    } 
    value = System.getenv(placeholderName); 
    if (value != null) { 
     System.out.println("3: System.getenv"); 
     return value; 
    } 
    return "Map should've had it"; 
    } 
} 

,이 출력은 우리가 (분명한 이유 숨겨진 키) 설정 환경 변수를 얻고 보여주는이며, 내 환경 변수는 elasticsearch.yml입니까? 이 시점에서 나는 꽤 많은 파기를 해왔으나 모퉁이를 돌면 간단한 해결책이 있다고 확신한다. 어떤 도움이라도 대단히 감사 할 것입니다.

답변

1

문제점을 파악했습니다.

나는 elasticsearch를 셸 응용 프로그램이 아닌 linux 서비스로 실행하고 있으므로 매우 적은 수의 환경 변수를 제외하고는 환경 변수에 액세스 할 수 없습니다.

. /path/to/environment/variables

:

는 내가 프로그램에 사용할 수 원하는 환경 변수를로드 할 /etc/sysconfig/elasticsearch의 끝에 다음 줄을 추가
관련 문제