486b223e01
This replaces kube-master with kube_control_plane because of [1]: The Kubernetes project is moving away from wording that is considered offensive. A new working group WG Naming was created to track this work, and the word "master" was declared as offensive. A proposal was formalized for replacing the word "master" with "control plane". This means it should be removed from source code, documentation, and user-facing configuration from Kubernetes and its sub-projects. NOTE: The reason why this changes it to kube_control_plane not kube-control-plane is for valid group names on ansible. [1]: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/kubeadm/2067-rename-master-label-taint/README.md#motivation
76 lines
2 KiB
Bash
Executable file
76 lines
2 KiB
Bash
Executable file
#!/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 ""
|
|
echo "[kube_control_plane]"
|
|
for name in "${MASTER_NAMES[@]}"; do
|
|
echo "${name}"
|
|
done
|
|
|
|
echo ""
|
|
echo "[kube_control_plane:vars]"
|
|
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 ""
|
|
echo "[kube-node]"
|
|
for name in "${WORKER_NAMES[@]}"; do
|
|
echo "${name}"
|
|
done
|
|
|
|
echo ""
|
|
echo "[k8s-cluster:children]"
|
|
echo "kube_control_plane"
|
|
echo "kube-node"
|