DNSを確認するときは、bashスクリプトのリストとしてIPを印刷する必要があります。

DNSを確認するときは、bashスクリプトのリストとしてIPを印刷する必要があります。

Terraform 外部データプロバイダのために、次の bash スクリプトを作成しています。

# !/bin/bash
echo {\"ip\":\"`nslookup nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com | awk '/^Address: /  { print $0 }'`\"}

私が得た結果は次のとおりです。

ssh_ip_address = "10.20.207.250 10.20.223.249 10.20.191.249"

Terraformスクリプトで入力を呼び出すために各IPを別の出力に呼び出そうとしているので、この出力をコンマ付きのリストに分割したいと思います。

誰かが助けることができれば良いでしょう。

答え1

ipIPアドレスを最上位キー値としてJSONを出力として使用したいとします。

最終的に欲しいものに合わせて使えます。

nslookup nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com |
sed -n 's/^Address: //p' |
jq -Rs '{ ip: ( rtrimstr("\n") | split("\n") ) }'

...IPアドレスを削除しsedてから、.readを使用してそれをJSONリストに読み込みますjq。これはあなたに与えるでしょう

{
  "ip": [
    "10.20.223.249",
    "10.20.191.249",
    "10.20.207.250"
  ]
}

または、IPアドレスをカンマで接続します。

nslookup nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com |
sed -n 's/^Address: //p' |
jq -Rs '{ ip: ( rtrimstr("\n") | split("\n") | join(",") ) }'

...あなたに与えるでしょう

{
  "ip": "10.20.207.250,10.20.223.249,10.20.191.249"
}

nslookupおよびsedIPアドレス行セットを生成するコマンドまたはパイプで置き換えることができます。たとえば、roaimaが表示する単一のコマンドを使用できます。彼らの答え:

dig +short nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com

digとの助けを借りてjo

$ dig +short nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com | jo -a | jo ip=:-
{"ip":["10.20.223.249","10.20.207.250","10.20.191.249"]}

答え2

コードの実行時に出力と同じ結果が得られなかったため、最初から再開しました。dig代わりに使用するソリューションは次のとおりですnslookup(少し読みやすくするために2行に分割)。

printf "ssh_ip_address = \"%s\"\n" \
    "$(dig +short nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com | xargs | tr ' ' ',')"

出力

ssh_ip_address = "10.20.223.249,10.20.207.250,10.20.191.249"

私はJSONが欲しかったことを知りました。ここに正確にこれを行う同じコマンドの修正版があります。

printf "{ \"ip\": \"%s\" }\n" \
    "$(dig +short nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com | xargs | tr ' ' ',')"

出力

{ "ip": "10.20.207.250,10.20.191.249,10.20.223.249" }

答え3

私はこの解決策を提案します:

$ ips=$(nslookup nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com | sed -n '/Address: /s/[^0-9.]*//p')
$ printf '{ "ip": "%s\n' "${ips//$'\n'/,}\" }"
{ "ip": "10.20.207.250,10.20.191.249,10.20.223.249" }

答え4

getentまたは代わりにnslookupソリューションを使用してくださいdig

$ printf "{ \"ip\": \"%s\" }\n" "$(getent hosts nlb-private-1-6ec90b26d1c9e906.elb.ap-south-1.amazonaws.com | cut -f1 -d' ' | xargs | tr ' ' ',' )"
{ "ip": "10.20.191.249,10.20.223.249,10.20.207.250" }
$

関連情報