Rancherでdocker-compose.ymlの条件分岐を試す

f:id:yassan0627:20171202155827p:plain Rancher Advent Calendar 2017 の 13日目の記事です。

20日目に「 redashのプライベートカタログ化」を紹介するのですが、あれこれ欲張りすぎて記事が長くなったのと、まだ、カレンダーが埋まってないので埋めてみました。

目次


それでは、本題。

Rancherでは、 docker-compose.yml で、条件分岐が使えます。

cf. Variable Interpolation in Rancher CLI

なので、この場合には、このServiceはいらないとか必要とか切り替えが可能です。
ユースケースの一例として、環境変数 HTTP_PROXYを加えるかどうかで切り分け出来るようにしてみました。

条件分岐を使う場合、docker-compose.yml の拡張子は .yml.tpl としています。 多分、そのまま、 .yml でも大丈夫かもですが、分かりやすくするため、そうしています。

使い方

条件式用の変数の定義 <rancher-compose.yml>

rancher-compose.yml に、条件分岐に使う変数 USE_HTTP_PROXY を定義

    - variable: "USE_HTTP_PROXY"
      label: "Use HTTP_PROXY?"
      required: true
      default: false
      type: boolean

条件分岐の記述 <docker-compose.yml>

docker-compose.yml にて、 docker-compose.yml で、 {{- if eq .Values.USE_HTTP_PROXY "true" }}{{- end }} として、記述します。
もちろん else句 {{- else}} も利用可能です。

    environment:
    {{- if eq .Values.USE_HTTP_PROXY "true" }}
      HTTP_PROXY: ${HTTP_PROXY}
      HTTPS_PROXY: ${HTTPS_PROXY}
      NO_PROXY: ${NO_PROXY}
    {{- end }}
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "IN

上記のように定義すると、RancherServerのUI上で下図の様に表示されます。

f:id:yassan0627:20171225115311p:plain

注意事項

シンタックスが割りとシビアです。

{{- if で書き始めて、 {{- end }} で終わってください。

特に {{- の間に空白入れるとエラーになります。 空白をうっかり入れてしまうと、カタログ選んで起動ボタン押下後に、「template: template:107: illegal number syntax:"-"」みたいなエラーログが出ます。

原理が分からないのだけど、golangのtemplateを使っている??

cf. rancher-compose-executor/inline_schema.go at v1.6 · rancher/rancher-compose-executor
cf. import "text/template"

その他の例

サンプルは、 GitHub - rancher/community-catalog: Catalog entries contributed by the community で検索する( URL )と良いです。

がっつり使っている例がこちら。

以上、「Rancherでdocker-compose.ymlの条件分岐を試す」でした。