#!/bin/bash function usage() { cat <&2 "No AWS owner ID for $1." exit 1 } if [ -z "$1" ]; then echo >&2 "No specified provider." usage exit 1 fi if [ -z "$2" ]; then if [ "$1" == "help" ]; then usage exit 0 else echo >&2 "No specified operating system." usage exit 1 fi fi case "$1" in 'gcp') gcloud compute images list --standard-images --filter="name~'.*?$2.*'" \ --format="csv[no-heading][separator=/](selfLink.map().scope(projects).segment(0),family)" \ | sort -d ;; 'aws') aws --region "${3:-us-east-1}" ec2 describe-images \ --owners "$(find_aws_owner_id "$2")" \ --filters "Name=name,Values=$2*" \ --query 'Images[*].{name:Name,id:ImageId}' # Other examples: # - CentOS: aws --region us-east-1 ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce # - Debian: aws --region us-east-1 ec2 describe-images --owners 379101102735 --filters "Name=architecture,Values=x86_64" "Name=name,Values=debian-jessie-*" "Name=root-device-type,Values=ebs" "Name=virtualization-type,Values=hvm" ;; 'do') curl -s -X GET \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \ "https://api.digitalocean.com/v2/images?page=1&per_page=999999" \ | jq --raw-output ".images | .[] | .slug" | grep "$2" | sort -d ;; *) echo >&2 "Unknown provider [$1]." usage exit 1 ;; esac