10.7.6. オブジェクトフィールドの公開
テンプレートの作成者は、テンプレートに含まれる特定のオブジェクトのフィールドを公開すべきかどうかを指定できます。テンプレートサービスのブローカーは、ConfigMap、Secret、Service、Route オブジェクトに公開されたフィールドを認識し、ユーザーがブローカーでバックされているサービスをバンドした場合に公開されたフィールドの値を返します。
オブジェクトのフィールドを 1 つまたは複数公開するには、テンプレート内のオブジェクトに、接頭辞が template.openshift.io/expose-
または template.openshift.io/base64-expose-
のアノテーションを追加します。
各アノテーションキーは、bind
応答のキーになるように、接頭辞が削除されてパススルーされます。
各アノテーションの値は Kubernetes JSONPath 式 の値であり、バインド時に解決され、bind
応答で返される値が含まれるオブジェクトフィールドを指定します。
Bind
応答のキー/値のペアは、環境変数として、システムの他の場所で使用できます。そのため、アノテーションキーで接頭辞を取り除いた値を有効な環境変数名として使用することが推奨されます。先頭に A-Z
、a-z
またはアンダースコアを指定して、その後に、ゼロか、他の文字 A-Z
、a-z
、0-9
またはアンダースコアを指定してください。
template.openshift.io/expose-
アノテーションを使用して、文字列としてフィールドの値を返します。これは、任意のバイナリーデータを処理しないものの、便利な方法です。バイナリーデータを返す場合には、バイナリーデータを返す前にデータのエンコードに base64b を使用するのではなく、template.openshift.io/base64-expose-
アノテーションを使用します。
バックスラッシュでエスケープしない限り、Kubernetes の JSONPath 実装は表現内のどの場所に使用されていても、.
、@
などはメタ文字として解釈されます。そのため、たとえば、my.key
という名前の ConfigMap
のデータを参照するには、JSONPath 式は {.data['my\.key']}
とする必要があります。JSONPath 式が YAML でどのように記述されているかによって、"{.data['my\\.key']}"
などのように、追加でバックスラッシュが必要になる場合があります。
以下は、公開されるさまざまなオブジェクトのフィールドの例です。
kind: Template apiVersion: v1 metadata: name: my-template objects: - kind: ConfigMap apiVersion: v1 metadata: name: my-template-config annotations: template.openshift.io/expose-username: "{.data['my\\.username']}" data: my.username: foo - kind: Secret apiVersion: v1 metadata: name: my-template-config-secret annotations: template.openshift.io/base64-expose-password: "{.data['password']}" stringData: password: bar - kind: Service apiVersion: v1 metadata: name: my-template-service annotations: template.openshift.io/expose-service_ip_port: "{.spec.clusterIP}:{.spec.ports[?(.name==\"web\")].port}" spec: ports: - name: "web" port: 8080 - kind: Route apiVersion: v1 metadata: name: my-template-route annotations: template.openshift.io/expose-uri: "http://{.spec.host}{.spec.path}" spec: path: mypath
上記の部分的なテンプレートでの bind
操作に対する応答例は以下のようになります。
{ "credentials": { "username": "foo", "password": "YmFy", "service_ip_port": "172.30.12.34:8080", "uri": "http://route-test.router.default.svc.cluster.local/mypath" } }