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.

116 lines
3.3 KiB

  1. provider "vsphere" {
  2. # Username and password set through env vars VSPHERE_USER and VSPHERE_PASSWORD
  3. user = var.vsphere_user
  4. password = var.vsphere_password
  5. vsphere_server = var.vsphere_server
  6. # If you have a self-signed cert
  7. allow_unverified_ssl = true
  8. }
  9. data "vsphere_datacenter" "dc" {
  10. name = var.vsphere_datacenter
  11. }
  12. data "vsphere_datastore" "datastore" {
  13. name = var.vsphere_datastore
  14. datacenter_id = data.vsphere_datacenter.dc.id
  15. }
  16. data "vsphere_network" "network" {
  17. name = "VM Network"
  18. datacenter_id = data.vsphere_datacenter.dc.id
  19. }
  20. data "vsphere_host" "host" {
  21. name = var.vsphere_hostname
  22. datacenter_id = data.vsphere_datacenter.dc.id
  23. }
  24. data "vsphere_virtual_machine" "template" {
  25. name = var.template_name
  26. datacenter_id = data.vsphere_datacenter.dc.id
  27. }
  28. data "vsphere_compute_cluster" "compute_cluster" {
  29. name = var.vsphere_compute_cluster
  30. datacenter_id = data.vsphere_datacenter.dc.id
  31. }
  32. resource "vsphere_resource_pool" "pool" {
  33. name = "${var.prefix}-cluster-pool"
  34. parent_resource_pool_id = data.vsphere_host.host.resource_pool_id
  35. }
  36. module "kubernetes" {
  37. source = "./modules/kubernetes-cluster"
  38. prefix = var.prefix
  39. machines = var.machines
  40. ## Master ##
  41. master_cores = var.master_cores
  42. master_memory = var.master_memory
  43. master_disk_size = var.master_disk_size
  44. ## Worker ##
  45. worker_cores = var.worker_cores
  46. worker_memory = var.worker_memory
  47. worker_disk_size = var.worker_disk_size
  48. ## Global ##
  49. gateway = var.gateway
  50. dns_primary = var.dns_primary
  51. dns_secondary = var.dns_secondary
  52. pool_id = vsphere_resource_pool.pool.id
  53. datastore_id = data.vsphere_datastore.datastore.id
  54. folder = ""
  55. guest_id = data.vsphere_virtual_machine.template.guest_id
  56. scsi_type = data.vsphere_virtual_machine.template.scsi_type
  57. network_id = data.vsphere_network.network.id
  58. adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
  59. firmware = var.firmware
  60. hardware_version = var.hardware_version
  61. disk_thin_provisioned = data.vsphere_virtual_machine.template.disks.0.thin_provisioned
  62. template_id = data.vsphere_virtual_machine.template.id
  63. ssh_public_keys = var.ssh_public_keys
  64. }
  65. #
  66. # Generate ansible inventory
  67. #
  68. data "template_file" "inventory" {
  69. template = file("${path.module}/templates/inventory.tpl")
  70. vars = {
  71. connection_strings_master = join("\n", formatlist("%s ansible_user=ubuntu ansible_host=%s etcd_member_name=etcd%d",
  72. keys(module.kubernetes.master_ip),
  73. values(module.kubernetes.master_ip),
  74. range(1, length(module.kubernetes.master_ip) + 1)))
  75. connection_strings_worker = join("\n", formatlist("%s ansible_user=ubuntu ansible_host=%s",
  76. keys(module.kubernetes.worker_ip),
  77. values(module.kubernetes.worker_ip)))
  78. list_master = join("\n", formatlist("%s",
  79. keys(module.kubernetes.master_ip)))
  80. list_worker = join("\n", formatlist("%s",
  81. keys(module.kubernetes.worker_ip)))
  82. }
  83. }
  84. resource "null_resource" "inventories" {
  85. provisioner "local-exec" {
  86. command = "echo '${data.template_file.inventory.rendered}' > ${var.inventory_file}"
  87. }
  88. triggers = {
  89. template = data.template_file.inventory.rendered
  90. }
  91. }