You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/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
TF_OUT=$(terraform output -json)
CONTROL_PLANES=$(jq -r '.kubernetes_cluster.value.control_plane_info | to_entries[]' <(echo "${TF_OUT}")) WORKERS=$(jq -r '.kubernetes_cluster.value.worker_info | to_entries[]' <(echo "${TF_OUT}")) mapfile -t CONTROL_PLANE_NAMES < <(jq -r '.key' <(echo "${CONTROL_PLANES}")) mapfile -t WORKER_NAMES < <(jq -r '.key' <(echo "${WORKERS}"))
API_LB=$(jq -r '.kubernetes_cluster.value.control_plane_lb' <(echo "${TF_OUT}"))
echo "[all]" # Generate control plane hosts i=1 for name in "${CONTROL_PLANE_NAMES[@]}"; do private_ip=$(jq -r '. | select( .key=='"\"${name}\""' ) | .value.private_ip' <(echo "${CONTROL_PLANES}")) echo "${name} ansible_user=root ansible_host=${private_ip} access_ip=${private_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}")) echo "${name} ansible_user=root ansible_host=${private_ip} access_ip=${private_ip} ip=${private_ip}" done
API_LB=$(jq -r '.kubernetes_cluster.value.control_plane_lb' <(echo "${TF_OUT}"))
echo "" echo "[all:vars]" echo "upstream_dns_servers=['8.8.8.8','8.8.4.4']" echo "loadbalancer_apiserver={'address':'${API_LB}','port':'6443'}"
echo "" echo "[kube_control_plane]" for name in "${CONTROL_PLANE_NAMES[@]}"; do echo "${name}" done
echo "" echo "[etcd]" for name in "${CONTROL_PLANE_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"
|