github.com/weaveworks/common@v0.0.0-20230728070032-dd9e68f319d5/tools/dependencies/list_os_images.sh (about) 1 #!/bin/bash 2 3 function usage() { 4 cat <<EOF 5 Description: 6 Script to list OS images, sorted and in a Terraform-friendly format. 7 Dependencies: 8 - gcloud, Google Cloud Platform's CLI 9 - aws, 10 Usage: 11 \$ ./$(basename "$0") PROVIDER OS 12 PROVIDER={gcp} 13 OS={ubuntu|debian|centos} 14 Example: 15 \$ ./$(basename "$0") gcp ubuntu 16 ubuntu-os-cloud/ubuntu-1204-lts 17 ubuntu-os-cloud/ubuntu-1404-lts 18 ubuntu-os-cloud/ubuntu-1604-lts 19 ubuntu-os-cloud/ubuntu-1610 20 EOF 21 } 22 23 function find_aws_owner_id() { 24 local os_owner_ids=( 25 "ubuntu:099720109477" 26 "debian:379101102735" 27 "centos:679593333241" 28 ) 29 for os_owner_id in "${os_owner_ids[@]}"; do 30 os=${os_owner_id%%:*} 31 owner_id=${os_owner_id#*:} 32 if [ "$os" == "$1" ]; then 33 echo "$owner_id" 34 return 0 35 fi 36 done 37 echo >&2 "No AWS owner ID for $1." 38 exit 1 39 } 40 41 if [ -z "$1" ]; then 42 echo >&2 "No specified provider." 43 usage 44 exit 1 45 fi 46 47 if [ -z "$2" ]; then 48 if [ "$1" == "help" ]; then 49 usage 50 exit 0 51 else 52 echo >&2 "No specified operating system." 53 usage 54 exit 1 55 fi 56 fi 57 58 case "$1" in 59 'gcp') 60 gcloud compute images list --standard-images --filter="name~'.*?$2.*'" \ 61 --format="csv[no-heading][separator=/](selfLink.map().scope(projects).segment(0),family)" \ 62 | sort -d 63 ;; 64 'aws') 65 aws --region "${3:-us-east-1}" ec2 describe-images \ 66 --owners "$(find_aws_owner_id "$2")" \ 67 --filters "Name=name,Values=$2*" \ 68 --query 'Images[*].{name:Name,id:ImageId}' 69 # Other examples: 70 # - CentOS: aws --region us-east-1 ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce 71 # - 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" 72 ;; 73 'do') 74 curl -s -X GET \ 75 -H "Content-Type: application/json" \ 76 -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \ 77 "https://api.digitalocean.com/v2/images?page=1&per_page=999999" \ 78 | jq --raw-output ".images | .[] | .slug" | grep "$2" | sort -d 79 ;; 80 *) 81 echo >&2 "Unknown provider [$1]." 82 usage 83 exit 1 84 ;; 85 esac