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
ip
IP 주소를 최상위 키 값 으로 사용하여 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
및 sed
IP 주소 줄 집합을 생성하는 명령이나 파이프로 바꿀 수 있습니다 . 예를 들어 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" }
$