2015-01-16 2 views
5

GCE에서 여러 인스턴스를 실행하고 있습니다. 인스턴스에 로그인하지 않고도 (내부적으로) 내부적으로 내부 IP 주소 목록을 프로그래밍 방식으로 얻고 싶습니다.GCE 인스턴스의 내부 IP 주소 목록을 얻는 방법

gcloud compute instances list 

하지만 난 그냥 내가 원하는 정보를 얻기 위해 전달할 수있는 플래그가 있습니다 :

는 내가 실행할 수 있습니다 알아? 예 :

gcloud compute instances list --internal-ips 

또는 유사합니까? 아니면 내 sed/awk 두뇌를 분쇄하고 결과물을 파싱해야합니까?

나는 또한 JSON에서 --format = json을 사용하여 출력을 얻을 수 있음을 알고 있지만이 작업은 bash 스크립트에서 수행하려고합니다.

+0

또는 AWK 것은 – Spanky

+0

gcloud''에서 예를 들어 출력의 작은 집합 아마도 더 나은 당신의 요구 출력에 대한 훨씬 더 쉽게 만들 것 귀하의 문제를 돕기 위해 'gcloud'회원이 아닙니다. 행운을 빕니다. – shellter

답변

0

내가 아는 한 gcloud 도구의 특정 필드를 필터링 할 수 없습니다. 이 같은 뭔가 배쉬 스크립트 작동하지만 여전히 부서지기 쉬운 조금 느낌 : 나는 @Christiaan에 동의

gcloud compute instances list --format=yaml | grep " networkIP:" | cut -c 14-100 
0

합니다. 현재 gcloud 명령을 사용하여 내부 IP를 가져 오는 자동화 된 방법은 없습니다. 당신이 한 쌍 <instance_name> <internal_ip> (1, 4 열)

gcloud compute instances list | tail -n+2 | awk '{print $1, $4}' 
을 갖고 싶어

gcloud compute instances list | tail -n+2 | awk '{print $4}' 

또는 다음 하나

당신은 내부 IP를 (4 열)을 인쇄하려면 다음 명령을 사용할 수 있습니다

도움이되기를 바랍니다.

+0

선점 가능한 인스턴스가있는 네트워크 (이 경우 네 번째 열은 선점 여부)가있는 경우에는 작동하지 않습니다. – speedplane

6

여기 몇 가지가 있습니다.

처음으로 gcloud의 기본 출력 형식이 안정적 일 수는 없으며 앞으로 새로운 열이 추가 될 수 있습니다. 이것에 대본을 쓰지 마라!

세 가지 출력 모드는 format 플래그, --format = json, --format = yaml 및 format = text로 액세스 할 수있는 세 가지 출력 모드이며 key = value 쌍을 기반으로하며 새로운 필드가 미래에 소개됩니다. 당신은 JSON과 JQ 도구를 사용하는 것입니다 원하는 것을 할 수

두 좋은 방법,

gcloud compute instances list --format=json \ 
    | jq '.[].networkInterfaces[].networkIP' 

또는 텍스트 형식과 그렙 + 라인 지향 도구를 사용하여,

gcloud compute instances list --format=text \ 
    | grep '^networkInterfaces\[[0-9]\+\]\.networkIP:' | sed 's/^.* //g' 
+1

나는 당신이 필요하다고 생각합니다. jq 명령에서, 예를 들어 gcloud는 인스턴스를 계산합니다. --format = json | jp '. []. networkInterfaces []. networkIP' – dranxo

+1

내 대답은 여기에 약간 구식입니다. gcloud의 새 버전에서는 출력 형식, 필터링 필드 등을보다 강력하게 제어 할 수 있습니다. 개요는 https://cloud.google.com/sdk/gcloud/reference/topic/formats를 참조하십시오. –

+0

이것은 엄청난 도움이되었습니다. export PROXY = $ (gcloud 계산 인스턴스 목록 --format = text | grep '^ networkInterfaces \ [[0-9] \ + \] \. networkIP :'| sed '/^.* // g') 이 변수를 env 변수에 저장합니다. – Ozzadar

10

간단한 방법 gcloud 이외의 도구에 의존하지 않고 프로그래밍 방식으로 내부 IP (또는 외부 IP) 목록을 얻으려면

$ gcloud --format="value(networkInterfaces[0].networkIP)" compute instances list 
$ gcloud --format="value(networkInterfaces[0].accessConfigs[0].natIP)" compute instances list 

이것은 projection (자원 데이터 값을 선택하는 resource keys의 목록)이 필요한 --format=value을 사용합니다.어떤 명령의 경우는 자원 키/값 쌍의 목록을 얻을 수 --format=flattened를 사용할 수 있습니다

$ gcloud --format=flattened compute instances list 
+0

값 속성으로 쉼표로 구분하는 방법을 알고 있습니까? 이것은 작동하지 않습니다 :'gcloud --format = "value [terminator =", "] (networkInterfaces [0] .accessConfigs [0] .natIP)"계산 인스턴스 목록 " –

+2

@ AlexCalm1Kov 중첩 된 큰 따옴표가 있습니다. 이중 따옴표가 끊어 지므로 쌍 중 하나를 다음과 같이 바꿉니다. 'gcloud --format = "value [terminator =', '] (networkInterfaces [0] .accessConfigs [0] .natIP)"계산 인스턴스 목록 "또는 다음과 같이'paste '를 사용해 볼 수도 있습니다 :'gcloud --format = "value (networkInterfaces [0] .accessConfigs [0] .natIP)"인스턴스를 계산하십시오. 붙여 넣기 -d, -s -'는 단 하나의 값만있는 경우 후미 쉼표를 남기지 않습니다. 이전 명령의 버그로 생각합니다. – aculich

관련 문제