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.

64 lines
1.8 KiB

  1. #!/bin/bash
  2. #
  3. # Generates a inventory file based on the terraform output.
  4. # After provisioning a cluster, simply run this command and supply the terraform state file
  5. # Default state file is terraform.tfstate
  6. #
  7. set -e
  8. TF_OUT=$(terraform output -json)
  9. CONTROL_PLANES=$(jq -r '.kubernetes_cluster.value.control_plane_info | to_entries[]' <(echo "${TF_OUT}"))
  10. WORKERS=$(jq -r '.kubernetes_cluster.value.worker_info | to_entries[]' <(echo "${TF_OUT}"))
  11. mapfile -t CONTROL_PLANE_NAMES < <(jq -r '.key' <(echo "${CONTROL_PLANES}"))
  12. mapfile -t WORKER_NAMES < <(jq -r '.key' <(echo "${WORKERS}"))
  13. API_LB=$(jq -r '.kubernetes_cluster.value.control_plane_lb' <(echo "${TF_OUT}"))
  14. echo "[all]"
  15. # Generate control plane hosts
  16. i=1
  17. for name in "${CONTROL_PLANE_NAMES[@]}"; do
  18. private_ip=$(jq -r '. | select( .key=='"\"${name}\""' ) | .value.private_ip' <(echo "${CONTROL_PLANES}"))
  19. echo "${name} ansible_user=root ansible_host=${private_ip} access_ip=${private_ip} ip=${private_ip} etcd_member_name=etcd${i}"
  20. i=$(( i + 1 ))
  21. done
  22. # Generate worker hosts
  23. for name in "${WORKER_NAMES[@]}"; do
  24. private_ip=$(jq -r '. | select( .key=='"\"${name}\""' ) | .value.private_ip' <(echo "${WORKERS}"))
  25. echo "${name} ansible_user=root ansible_host=${private_ip} access_ip=${private_ip} ip=${private_ip}"
  26. done
  27. API_LB=$(jq -r '.kubernetes_cluster.value.control_plane_lb' <(echo "${TF_OUT}"))
  28. echo ""
  29. echo "[all:vars]"
  30. echo "upstream_dns_servers=['8.8.8.8','8.8.4.4']"
  31. echo "loadbalancer_apiserver={'address':'${API_LB}','port':'6443'}"
  32. echo ""
  33. echo "[kube_control_plane]"
  34. for name in "${CONTROL_PLANE_NAMES[@]}"; do
  35. echo "${name}"
  36. done
  37. echo ""
  38. echo "[etcd]"
  39. for name in "${CONTROL_PLANE_NAMES[@]}"; do
  40. echo "${name}"
  41. done
  42. echo ""
  43. echo "[kube_node]"
  44. for name in "${WORKER_NAMES[@]}"; do
  45. echo "${name}"
  46. done
  47. echo ""
  48. echo "[k8s_cluster:children]"
  49. echo "kube_control_plane"
  50. echo "kube_node"