2020-12-24 17:16:26 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
#
|
|
|
|
# Generates a inventory file based on the terraform output.
|
|
|
|
# After provisioning a cluster, simply run this command and supply the terraform state file
|
|
|
|
# Default state file is terraform.tfstate
|
|
|
|
#
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
usage () {
|
|
|
|
echo "Usage: $0 <state file>" >&2
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
if [[ $# -ne 1 ]]; then
|
|
|
|
usage
|
|
|
|
fi
|
|
|
|
|
|
|
|
TF_STATE_FILE=${1}
|
|
|
|
|
|
|
|
if [[ ! -f "${TF_STATE_FILE}" ]]; then
|
|
|
|
echo "ERROR: state file ${TF_STATE_FILE} doesn't exist" >&2
|
|
|
|
usage
|
|
|
|
fi
|
|
|
|
|
|
|
|
TF_OUT=$(terraform output -state "${TF_STATE_FILE}" -json)
|
|
|
|
|
|
|
|
MASTERS=$(jq -r '.master_ips.value | to_entries[]' <(echo "${TF_OUT}"))
|
|
|
|
WORKERS=$(jq -r '.worker_ips.value | to_entries[]' <(echo "${TF_OUT}"))
|
|
|
|
mapfile -t MASTER_NAMES < <(jq -r '.key' <(echo "${MASTERS}"))
|
|
|
|
mapfile -t WORKER_NAMES < <(jq -r '.key' <(echo "${WORKERS}"))
|
|
|
|
|
|
|
|
API_LB=$(jq -r '.control_plane_lb_ip_address.value' <(echo "${TF_OUT}"))
|
|
|
|
|
|
|
|
# Generate master hosts
|
|
|
|
i=1
|
|
|
|
for name in "${MASTER_NAMES[@]}"; do
|
|
|
|
private_ip=$(jq -r '. | select( .key=='"\"${name}\""' ) | .value.private_ip' <(echo "${MASTERS}"))
|
|
|
|
public_ip=$(jq -r '. | select( .key=='"\"${name}\""' ) | .value.public_ip' <(echo "${MASTERS}"))
|
|
|
|
echo "${name} ansible_user=ubuntu ansible_host=${public_ip} ip=${private_ip} etcd_member_name=etcd${i}"
|
|
|
|
i=$(( i + 1 ))
|
|
|
|
done
|
|
|
|
|
|
|
|
# Generate worker hosts
|
|
|
|
for name in "${WORKER_NAMES[@]}"; do
|
|
|
|
private_ip=$(jq -r '. | select( .key=='"\"${name}\""' ) | .value.private_ip' <(echo "${WORKERS}"))
|
|
|
|
public_ip=$(jq -r '. | select( .key=='"\"${name}\""' ) | .value.public_ip' <(echo "${WORKERS}"))
|
|
|
|
echo "${name} ansible_user=ubuntu ansible_host=${public_ip} ip=${private_ip}"
|
|
|
|
done
|
|
|
|
|
|
|
|
echo ""
|
2021-03-24 00:26:05 +00:00
|
|
|
echo "[kube_control_plane]"
|
2020-12-24 17:16:26 +00:00
|
|
|
for name in "${MASTER_NAMES[@]}"; do
|
|
|
|
echo "${name}"
|
|
|
|
done
|
|
|
|
|
|
|
|
echo ""
|
2021-03-24 00:26:05 +00:00
|
|
|
echo "[kube_control_plane:vars]"
|
2020-12-24 17:16:26 +00:00
|
|
|
echo "supplementary_addresses_in_ssl_keys = [ '${API_LB}' ]" # Add LB address to API server certificate
|
|
|
|
echo ""
|
|
|
|
echo "[etcd]"
|
|
|
|
for name in "${MASTER_NAMES[@]}"; do
|
|
|
|
echo "${name}"
|
|
|
|
done
|
|
|
|
|
|
|
|
echo ""
|
2021-04-29 12:20:50 +00:00
|
|
|
echo "[kube_node]"
|
2020-12-24 17:16:26 +00:00
|
|
|
for name in "${WORKER_NAMES[@]}"; do
|
|
|
|
echo "${name}"
|
|
|
|
done
|
|
|
|
|
|
|
|
echo ""
|
2021-04-29 12:20:50 +00:00
|
|
|
echo "[k8s_cluster:children]"
|
2021-03-24 00:26:05 +00:00
|
|
|
echo "kube_control_plane"
|
2021-04-29 12:20:50 +00:00
|
|
|
echo "kube_node"
|