2015-01-16 18 views
5

Tôi có một loạt các cá thể chạy trong GCE. Tôi muốn lập trình có được một danh sách các địa chỉ IP nội bộ của chúng mà không cần đăng nhập vào các cá thể (cục bộ).Cách lấy danh sách địa chỉ IP nội bộ của các cá thể GCE

Tôi biết tôi có thể chạy:

gcloud compute instances list 

Tuy nhiên, có bất kỳ cờ tôi có thể vượt qua để chỉ nhận được những thông tin mà tôi muốn? ví dụ:

gcloud compute instances list --internal-ips 

hoặc tương tự? Hay tôi sẽ phải loại bỏ bụi não của tôi và phân tích đầu ra?

Tôi cũng biết rằng tôi có thể nhận được kết quả đầu ra bằng JSON bằng cách sử dụng --format = json, nhưng tôi đang cố gắng thực hiện điều này trong tập lệnh bash.

+0

hoặc awk có lẽ là tốt hơn – Spanky

+0

một tập nhỏ các ví dụ đầu ra từ 'gcloud' và sản lượng yêu cầu của bạn sẽ làm cho nó dễ dàng hơn nhiều cho các thành viên không phải là 'gcloud' để giúp bạn giải quyết vấn đề. Chúc may mắn. – shellter

Trả lời

0

Theo tôi biết bạn không thể lọc trên các trường cụ thể trong công cụ gcloud. Something như thế này sẽ làm việc cho một kịch bản Bash, nhưng nó vẫn cảm thấy một chút giòn:

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

Tôi đồng ý với @Christiaan. Hiện tại không có cách tự động để nhận các IP nội bộ bằng cách sử dụng lệnh gcloud.

Bạn có thể sử dụng lệnh sau để in các IP nội bộ (cột 4):

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

hoặc một sau đây nếu bạn muốn có cặp <instance_name> <internal_ip> (1st và cột thứ 4)

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

Tôi hy vọng điều đó sẽ hữu ích.

+0

Lưu ý rằng điều này không hoạt động nếu bạn có một mạng với các trường hợp được phép trước (trong trường hợp đó cột thứ 4 là liệu nó có được phép trước) hay không. – speedplane

6

Một vài điều ở đây.

Định dạng đầu ra mặc định của gcloud đầu tiên cho danh sách không được đảm bảo ổn định và các cột mới có thể được thêm vào trong tương lai. Đừng kịch bản chống lại điều này!

Ba chế độ đầu ra là ba chế độ đầu ra có thể truy cập được với cờ định dạng, --format = json, --format = yaml và định dạng = văn bản, dựa trên cặp khóa = giá trị và có thể lập kịch bản ngay cả khi các lĩnh vực mới được giới thiệu trong tương lai.

Hai cách tốt để làm những gì bạn muốn là sử dụng JSON và công cụ JQ,

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

hoặc định dạng văn bản và grep + dòng theo định hướng sử dụng công cụ,

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

Tôi nghĩ bạn cần a. trong lệnh jq, ví dụ: danh sách các trường hợp tính toán gcloud --format = json | jq '. []. networkInterfaces []. networkIP' – dranxo

+1

Câu trả lời của tôi ở đây hiện đã lỗi thời. Các bản phát hành mới của gcloud cung cấp khả năng kiểm soát nhiều hơn đối với định dạng đầu ra, các trường lọc, v.v. Xem https://cloud.google.com/sdk/gcloud/reference/topic/formats để biết tổng quan. –

+0

điều này đã giúp ích rất nhiều. xuất PROXY = $ (danh sách trường hợp tính toán gcloud --format = text | grep '^ networkInterfaces \ [[0-9] \ + \] \. NetworkIP:' | sed 's /^.* // g') sẽ lưu nó vào biến env cho bạn – Ozzadar

10

Cách đơn giản nhất để lập trình danh sách các IP nội bộ (hoặc IP bên ngoài) mà không phụ thuộc vào bất kỳ công cụ nào khác ngoài gcloud là:

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

Điều này sử dụng --format=value cũng yêu cầu một số projection là danh sách số resource keys chọn giá trị dữ liệu tài nguyên.Đối với bất kỳ lệnh bạn có thể sử dụng --format=flattened để có được danh sách các tài nguyên cặp khóa/giá trị:

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

Bạn có biết cách làm cho nó được phân cách bằng dấu phẩy với thuộc tính giá trị không? Điều này không hoạt động: 'gcloud --format =" value [terminator = ","] (networkInterfaces [0] .accessConfigs [0] .natIP) "danh sách các thể hiện tính toán" –

+2

@ AlexCalm1Kov bạn có dấu ngoặc kép được lồng trong các dấu ngoặc kép bị vỡ, do đó hãy thay thế một trong các cặp như sau: 'gcloud --format =" value [terminator = ','] (các networkInterfaces [0] .accessConfigs [0] .natIP) "danh sách các thể hiện tính toán' hoặc bạn cũng có thể thử sử dụng 'paste' như sau:' gcloud --format = "value (networkInterfaces [0] .accessConfigs [0] .natIP)" danh sách các thể hiện tính toán | dán -d, -s -' mà không để lại dấu phẩy ngược khi chỉ có một giá trị-- Tôi sẽ xem xét trường hợp lỗi trong lệnh trước đó. – aculich

Các vấn đề liên quan