今日も小ネタです。
GCE インスタンスを OS 別に集計する必要があるとします。無い人もいるかもしれないですが、あるとします*1 。
Amazon EC2であれば aws ec2 describe-instances
コマンドの --filters
オプションに platform
があるので、Windowsホストの絞り込みが容易にできます。
describe-instances — AWS CLI Command Reference
GCE インスタンスの場合 gcloud compute list
コマンドの --filter
オプションにはそのような指定項目がありません。--filter
オプションは出力結果を柔軟にフィルタできる便利なオプションなので、これを使いこなすことで自由な絞り込みができます。
gcloud compute instances list | Cloud SDK | Google Cloud
# Windows インスタンスのみを表示 $ gcloud compute instances list --filter="disks[0].guestOsFeatures[].type:WINDOWS" # 起動中の Windows インスタンスに限定する場合 $ gcloud compute instances list --filter="STATUS:RUNNING AND disks[0].guestOsFeatures[].type:WINDOWS"
もしくは --format
オプションで出力する項目を増やすことで、grep でフィルタできます。これだと Linux の場合のみも出力できます。
表示する項目は適宜変更してください。
# Windows インスタンスのみを表示 $ gcloud compute instances list --format="table(name,zone.basename(),machine_type.basename(),preemptible,internal_ip,external_ip,status,disks[0].guestOsFeatures[].type.list())" | grep 'WINDOWS' # 起動中の Windows インスタンスに限定する場合 $ gcloud compute instances list --format="table(name,zone.basename(),machine_type.basename(),preemptible,internal_ip,external_ip,status,disks[0].guestOsFeatures[].type.list())" --filter="STATUS:RUNNING" | grep 'WINDOWS' # Linux インスタンスのみを表示(grep -vにするだけ) $ gcloud compute instances list --format="table(name,zone.basename(),machine_type.basename(),preemptible,internal_ip,external_ip,status,disks[0].guestOsFeatures[].type.list())" | grep -v 'WINDOWS' # 起動中の Linux インスタンスに限定する場合(grep -vにするだけ) $ gcloud compute instances list --format="table(name,zone.basename(),machine_type.basename(),preemptible,internal_ip,external_ip,status,disks[0].guestOsFeatures[].type.list())" --filter="STATUS:RUNNING" | grep -v 'WINDOWS'
参考文献
- gcloud topic filters | Cloud SDK | Google Cloud
- gcloud topic formats | Cloud SDK | Google Cloud
- Google Cloud Platform Japan 公式ブログ: gcloud による出力情報のフィルタと整形
*1:なぜその必要があるかは聞かないでください・・・