2017-04-15 1 views
0

Hier ist, was ich am Ende benutze, weil ich nicht scheinen kann, um den variablen Ersatz in guter Ordnung zu bekommen. In Anbetracht der Play-Framework HOCON Abschnitt für CORS erlaubt Origins, die für die lokale ermöglicht, Entwickler, Bühnen- und Produktionsbereitstellung und ist nicht 12-Faktor-konform:Typesafe config HOCON - Anleitung für den variablen Austausch von Listen in der Umgebung?

play { 
    # https://www.playframework.com/documentation/2.5.x/resources/confs/filters-helpers/reference.conf 
    filters { 
    # use default values for gzip, csrf & security headers 
    # setup cors 
    cors { 
     # whitelist all paths 
     pathPrefixes = ["/"] 
     allowedOrigins = [ 
     "http://localhost:8080" 
     "http://app.127.0.0.1.nip.io:8080" 
     "http://app.192.168.64.2.nip.io" 
     "http://app.192.168.42.173.nip.io" 
     "http://app.terradatum.local" 
     "http://app.dev.terradatum.com" 
     "https://app.dev.terradatum.com" 
     "http://app.stage.terradatum.com" 
     "https://app.stage.terradatum.com" 
     "http://app.terradatum.com" 
     "https://app.terradatum.com" 
     ] 
    } 
    } 
} 

ich die beiden folgenden HOCON versucht haben, mit der Umwelt gesetzt wird, wie auch gezeigt:

# HOCON 
allowedOrigins = ${?APP_ALLOWED_ORIGINS} 
# ENV 
export APP_ALLOWED_ORIGINS='"http://app.127.0.0.1.nip.io:8080","http://app.192.168.64.2.nip.io","http://app.192.168.42.173.nip.io","http://app.terradatum.local","http://app.dev.terradatum.com","https://app.dev.terradatum.com","http://app.stage.terradatum.com","https://app.stage.terradatum.com","http://app.terradatum.com","https://app.terradatum.com"' 

und ...

# HOCON 
allowedOrigins = [ 
    ${?APP_ALLOWED_ORIGINS} 
    "http://app.127.0.0.1.nip.io:8080" 
    "http://app.192.168.64.2.nip.io" 
    "http://app.192.168.42.173.nip.io" 
    "http://app.terradatum.local" 
    "http://app.dev.terradatum.com" 
    "https://app.dev.terradatum.com" 
    "http://app.stage.terradatum.com" 
    "https://app.stage.terradatum.com" 
    "http://app.terradatum.com" 
    "https://app.terradatum.com" 
] 
# ENV 
export APP_ALLOWED_ORIGINS="http://some-new-cors.terradatum.com\nhttps://some-new-cors.terradatum.com\n" 

Viele andere CORS-Implementierungen ermöglichen regex und WTH nicht spielen?

Davon abgesehen, die HOCON Bearbeitung von Listen für mich sehr problematisch war ... mit der ersten Implementierung oben arbeiten, aber jede Iteration, wo ich eine vorhandene, Standardliste in den application.conf versagt ...

Was ist die empfohlene Methode zum Hinzufügen von Listen oder Listenelementen zu HOCON über das Ersetzen von Umgebungsvariablen?

Antwort

1

Wenn ich Ihren Beitrag gelesen habe (ich sehe dort keine echte "Frage"), versuchen Sie einen Weg zu finden, um Ihrer CORS-Liste verschiedene Werte hinzuzufügen, abhängig davon, in welcher Umgebung Ihre App läuft .

Ich würde vorschlagen, dies aus einer anderen Perspektive anzugehen: Erstellen Sie verschiedene Konfigurationsdateien, die die Werte enthalten, die Sie anpassen möchten und die allgemeine application.conf-Datei enthalten. Laden Sie in Ihrer Bereitstellungskonfiguration Ihre gestaffelte Konfiguration anstelle von application.conf.

z.B. wenn Sie Ihre dev-Bühne erstellen, fügen Sie diese zu Ihrer Deployment-Konfiguration (vorausgesetzt, Sie sbt-native-Verpacker mit Docker verwenden)

javaOptions in Universal ++= Seq(
    "-Dconfig.resource=application.dev.conf" 
) 

Ihre application.dev.conf Datei würde wie folgt aussehen:

include "application.conf" 
play.filters.cors { 
     # whitelist all paths 
     pathPrefixes = ["/"] 
     allowedOrigins = [ 
     "http://localhost:8080" 
     "http://app.127.0.0.1.nip.io:8080" 
     "http://app.192.168.64.2.nip.io" 
     "http://app.192.168.42.173.nip.io" 
     "http://app.terradatum.local" 
     "http://app.dev.terradatum.com" 
     "https://app.dev.terradatum.com" 

     ] 
    } 

Das Problem ist, dass Ihre Umgebungsvariable keine Liste, sondern eine Zeichenkette ist. Es gibt keine Transformationsmethoden in HOCON, die Ihre Zeichenkette in eine Liste aufteilen würden.

den 12-Faktor Ansatz zu folgen, könnten Sie versuchen, zu zerlegen (die sich ändernden Teilen) einer Liste in so etwas wie

ORIGIN_1=http://localhost:8080 
ORIGIN_2=http://app.127.0.0.1.nip.io:8080 

und dann die in Ihrer Konfiguration sind wie

play.filters.cors.allowedOrigins = [${?ORIGIN_1}] ${play.filters.cors.allowedOrigins} 
play.filters.cors.allowedOrigins = [${?ORIGIN_2}] ${play.filters.cors.allowedOrigins} 
+0

Das ist eine Antwort, aber nicht wirklich das, wonach ich suche ... obwohl du einen guten Punkt machst und ich meine Frage aktualisiert habe, um tatsächlich eine Frage einzubeziehen. Wenn Sie die Anleitung für eine 12-Faktor-Anwendung lesen, stellen Sie fest, dass die Konfiguration Ihrer Anwendung über die Umgebung grundlegend geändert werden muss. Natürlich ist das nicht 100% ig möglich (eingebettete 'reference.conf'-Dateien, die nicht dem env-replacement-Schema folgen) und vielleicht ist die CORS-erlaubte Herkunft nicht das beste Beispiel, aber es ist immer noch etwas, was ich brauche lösen. – rbellamy

+0

Ja, Sie haben den zweiten Teil meiner Frage - "Hinzufügen eines Listenelements" zu einer HOCON-Liste - beantwortet – rbellamy

Verwandte Themen