--- title: Cloud Foundryの環境変数VCAP_SERVICES内のcredentialsからjqで特定のキーだけ取得するメモ tags: ["Cloud Foundry", "PAS", "Pivotal Cloud Foundry", "jq"] categories: ["Dev", "PaaS", "CloudFoundry", "PCF"] date: 2020-07-25T08:46:06Z updated: 2020-07-25T09:16:21Z --- `cf env`の結果が次のような場合に、 ``` $ cf env billing-job System-Provided: VCAP_SERVICES: { "elephantsql": [ { "binding_name": null, "credentials": { "hostname": "satao.db.elephantsql.com", "jdbcUrl": "jdbc:postgresql://satao.db.elephantsql.com:5432/foo?user=xyz\u0026password=abc", "name": "foo", "password": "abc", "port": 5432, "uri": "postgres://xyz:abc@satao.db.elephantsql.com:5432/foo", "username": "xyz" }, "instance_name": "billing-db", "label": "elephantsql", "name": "billing-db", "plan": "turtle", "provider": null, "syslog_drain_url": null, "tags": [ "postgresql", "postgres", "elephantsql" ], "volume_mounts": [] } ] } ... ``` `billing-db`サービスインスタンスの`uri`を`jq`で取得したい時、 ``` echo ${VCAP_SERVICES} | jq -r '.[][] | select(.instance_name == "billing-db") | .credentials.uri' ``` でOK。 Taskで参照したい場合は、 ``` cf run-task billing-job -c "echo \${VCAP_SERVICES} | jq -r '.[][] | select(.instance_name == \"billing-db\") | .credentials.uri'" ``` CF CLI v7の場合は、 ``` cf7 run-task billing-job -c "echo \${VCAP_SERVICES} | jq -r '.[][] | select(.instance_name == \"billing-db\") | .credentials.uri'" ```