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