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"
}

nslookupsedIP 주소 줄 집합을 생성하는 명령이나 파이프로 바꿀 수 있습니다 . 예를 들어 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(약간의 가독성을 추가하기 위해 두 줄로 분할).

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" }
$

관련 정보