2017-09-12 14 views
0

私は、UUID(terraform.tfstateファイル)で互いに参照するさまざまな種類のオブジェクトの配列を持っています。これらのUUIDの1つによって2つのオブジェクトが関連している別のオブジェクトの異なる値の外観に基づいて、そのようなオブジェクトの1つの値を選択したいとします。jq:別の配列要素からの値での検索

一例として、私はこれを行うことができます。

$ jq '.modules[].resources[] 
| select(.type == "openstack_compute_instance_v2" and 
     .primary.attributes.name == "jumpbox").primary.id' terraform.tfstate 
"5edfe2bf-94df-49d5-8118-3e91fb52946b" 
$ jq '.modules[].resources[] 
| select(.type =="openstack_compute_floatingip_associate_v2" and 
     .primary.attributes.instance_id == "5edfe2bf-94df-49d5-8118-3e91fb52946b").primary.attributes.floating_ip' terraform.tfstate 
"10.120.241.21" 

を、その名前に基づいて、私に「JumpBoxて」VMの外部浮動IPを与えます。

私はそのすべてを1つのJQコールにしたいと思います。それは可能ですか?

答えて

0

あなたは私たちは、あなたが

{ 
    "modules": [ 
    { 
     "resources": [ 
     { 
      "type": "openstack_compute_instance_v2", 
      "primary": { 
      "id": "5edfe2bf-94df-49d5-8118-3e91fb52946b", 
      "attributes": { 
       "name": "jumpbox" 
      } 
      } 
     }, 
     { 
      "type": "openstack_compute_floatingip_associate_v2", 
      "primary": { 
      "attributes": { 
       "instance_id": "5edfe2bf-94df-49d5-8118-3e91fb52946b", 
       "floating_ip": "10.120.241.21" 
      } 
      } 
     } 
     ] 
    } 
    ] 
} 
のように見えるデータを持って推測することができ

$ jq ' 
     .modules[].resources[] 
    | select(.type == "openstack_compute_instance_v2" and .primary.attributes.name == "jumpbox") 
    | .primary.id 
' terraform.tfstate 
"5edfe2bf-94df-49d5-8118-3e91fb52946b" 

$ jq ' 
     .modules[].resources[] 
    | select(.type =="openstack_compute_floatingip_associate_v2" and .primary.attributes.instance_id == "5edfe2bf-94df-49d5-8118-3e91fb52946b") 
    | .primary.attributes.floating_ip 
' terraform.tfstate 
"10.120.241.21" 

(一部の再フォーマットで)あなたのコマンドから逆方向に働くより多くのサンプルデータが、 を提供する場合、これは答えることが容易になるだろう

以下のフィルタは、functions,variablesおよびparenthesis()を使用して解を示します。

このフィルタがfilter.jqにあり、data.jsonが 上記のサンプルデータが含まれている場合、その後

$ jq -M -f filter.jq data.json 

は出力を生成します。

"5edfe2bf-94df-49d5-8118-3e91fb52946b" 
"10.120.241.21" 
+0

ありがとうございました!それは多くの意味があります。 – dhaines

関連する問題