Create Travis NAT IPs as AWS VPC Security Groups

#!/bin/bash

# Fetch and parse https://dnsjson.com/nat.travisci.net/A.json
# for all the IP addresses that Travis CI uses for NAT.
TRAVIS_NAT_IPS=$(wget -qO- https://dnsjson.com/nat.travisci.net/A.json | jq -r '.results.records[]')
readarray -t IP_ADDRESSES <<< "$TRAVIS_NAT_IPS"
ENTRIES=""
for IP in "${IP_ADDRESSES[@]}"
do
    ENTRIES="$ENTRIES""Cidr=$IP/32,Description=Travis "
done

aws ec2 create-managed-prefix-list \
    --address-family IPv4 \
    --max-entries 100 \
    --entries="${ENTRIES##*( )}" \
    --prefix-list-name travis-nat-ips

The error it throws:

Error parsing parameter '--entries': Second instance of key "Description" encountered for input:
This is often because there is a preceding "," instead of a space.

There’s some errors in your bash script. Where essentially you’ve coded it wrong. I’ve fixed it for you:

#!/bin/bash

set -x 

TRAVIS_NAT_IPS=$(wget -qO- https://dnsjson.com/nat.travisci.net/A.json | jq -r '.results.records[]')
readarray -t IP_ADDRESSES <<< "$TRAVIS_NAT_IPS"
ENTRIES=""
for IP in "${IP_ADDRESSES[@]}"
do
    ENTRIES="$ENTRIES""Cidr=$IP/32,Description=Travis "
done

aws ec2 create-managed-prefix-list \
    --address-family IPv4 \
    --max-entries 100 \
    --entries ${ENTRIES##*( )} \
    --prefix-list-name travis-nat-ips

Make sure you chmod +x this in your .travis.yml, and this should work as I understand what you’re trying to do here.

1 Like