openshift3.11のs2iビルド時における環境変数

openshift3.11のs2iビルド時における環境変数を確認しました。
Build(assemble)時とDeploy(run)時では参照できる環境変数が異なります。

ベースイメージ `FROM python:3.6`
中身はCentOS7.5-1804にPython3.6が入ったもの

```bash
(app-root) sh-4.2$ cat redhat-release
CentOS Linux release 7.5.1804 (Core)
```

# s2i:assemble時の環境変数

適当に抜粋しましたが、こんな感じです。

```bash
APP_ROOT=/opt/app-root
EUID=1001
HOME=/opt/app-root/src
HOSTNAME=django2-nginx-ex-11-build
HOSTTYPE=x86_64
LANG=en_US.UTF-8
OPENSHIFT_BUILD_COMMIT=879c53b3ad94796ea8c4c20177a1cd9f7df24b4f
OPENSHIFT_BUILD_NAME=django2-nginx-ex-11
OPENSHIFT_BUILD_NAMESPACE=django2
OPENSHIFT_BUILD_REFERENCE=master
OPENSHIFT_BUILD_SOURCE=https://gitlab.com/imp555/django2-nginx.git
STI_SCRIPTS_PATH=/usr/libexec/s2i
STI_SCRIPTS_URL=image:///usr/libexec/s2i
```

# s2i:run時の環境変数

同一プロジェクト内のポッド達のHOST,IP,PORTなどを相互参照できます。
例えば
　Python用PodとPostgreSQL用Podがいて、
　Python用Podに環境変数でPostgreSQL側のサーバを指定するとかですかね。

  そういう場合は、接続先サーバーのサービス名をDeployConfigの`env`で環境変数として渡しておいて
　`<SERVICE_NAME>_SERVICE_HOST`　で　ホストのIPアドレス
　`<SERVICE_NAME>_SERVICE_PORT`　で　ホストのPORT番号
　`<SERVICE_NAME>_SERVICE_PORT`　で　ホストのPORT番号
　を取得できます。

　この際、`<SERVICE_NAME>`はすべて大文字にし`-`は`_`に変換されます。


下の例の場合
　- Python3.6のPod...DeployConfigのName: `django-psql-persistent`
　- PostgresqlのPod...DeployConfigのName: `postgresql`

　- Python3.6のPod...DeployConfigのName: `django2-nginx-ex`


```bash
APP_CONFIG=conf/gunicorn.py
APP_ROOT=/opt/app-root
DJANGO2_NGINX_EX_PORT=tcp://172.30.29.98:8000
DJANGO2_NGINX_EX_PORT_8000_TCP=tcp://172.30.29.98:8000
DJANGO2_NGINX_EX_PORT_8000_TCP_ADDR=172.30.29.98
DJANGO2_NGINX_EX_PORT_8000_TCP_PORT=8000
DJANGO2_NGINX_EX_PORT_8000_TCP_PROTO=tcp
DJANGO2_NGINX_EX_SERVICE_HOST=172.30.29.98
DJANGO2_NGINX_EX_SERVICE_PORT=8000
DJANGO2_NGINX_EX_SERVICE_PORT_HTTP=8000
DJANGO_PSQL_PERSISTENT_PORT=tcp://172.30.248.17:8000
DJANGO_PSQL_PERSISTENT_PORT_8000_TCP=tcp://172.30.248.17:8000
DJANGO_PSQL_PERSISTENT_PORT_8000_TCP_ADDR=172.30.248.17
DJANGO_PSQL_PERSISTENT_PORT_8000_TCP_PORT=8000
DJANGO_PSQL_PERSISTENT_PORT_8000_TCP_PROTO=tcp
DJANGO_PSQL_PERSISTENT_SERVICE_HOST=172.30.248.17
DJANGO_PSQL_PERSISTENT_SERVICE_PORT=8000
DJANGO_PSQL_PERSISTENT_SERVICE_PORT_WEB=8000
DJANGO_SECRET_KEY=IRpglBqjX1NLA8n0J8Pu4wTyQIfEsTfcIVLT6vN9gDV****Ur6
EUID=1000170000
HOME=/opt/app-root/src
HOSTNAME=django2-nginx-ex-10-nwdsd
HOSTTYPE=x86_64
KUBERNETES_PORT=tcp://172.30.0.1:443
KUBERNETES_PORT_443_TCP=tcp://172.30.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=172.30.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_HOST=172.30.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
LANG=en_US.UTF-8
MACHTYPE=x86_64-redhat-linux-gnu
OPENSHIFT_BUILD_COMMIT=879c53b3ad94796ea8c4c20177a1cd9f7df24b4f
OPENSHIFT_BUILD_NAME=django2-nginx-ex-11
OPENSHIFT_BUILD_NAMESPACE=django2
OPENSHIFT_BUILD_REFERENCE=master
OPENSHIFT_BUILD_SOURCE=https://gitlab.com/imp555/django2-nginx.git 
POSTGRESQL_PORT=tcp://172.30.7.144:5432
POSTGRESQL_PORT_5432_TCP=tcp://172.30.7.144:5432
POSTGRESQL_PORT_5432_TCP_ADDR=172.30.7.144
POSTGRESQL_PORT_5432_TCP_PORT=5432
POSTGRESQL_PORT_5432_TCP_PROTO=tcp
POSTGRESQL_SERVICE_HOST=172.30.7.144
POSTGRESQL_SERVICE_PORT=5432
POSTGRESQL_SERVICE_PORT_POSTGRESQL=5432
PWD=/opt/app-root/src
STI_SCRIPTS_PATH=/usr/libexec/s2i
STI_SCRIPTS_URL=image:///usr/libexec/s2i
UID=1000170000
```

# runスクリプト内でアドレス、ポート情報を利用する

DeployConfig内でサービス名をEnvとして渡したとしても
環境変数は小文字を大文字に、`-`を`_`に変換する必要があります。

ここからはBashの世界になりますが、一応わたしがやった方法を記録しときたいと思います。
`DJANGO_SERVICE_NAME="DJANGO_PSQL_PERSISTENT"`としてDeployConfigのEnvで渡してきた前提です。

```bash:run
#!/bin/bash -e
:
# -を_にしすべて大文字化します。
django_service_name=${DJANGO_SERVICE_NAME//-/_}
django_service_name=${django_host_name^^}
# サーバーIPの環境変数を取得します。
eval django_host='$'${django_service_name}_PORT_8000_TCP_ADDR
:
```