· 5 years ago · Jan 22, 2020, 01:04 AM
1variable "vsphere_user" {
2 type = string
3}
4variable "vsphere_pass" {
5 type = string
6}
7variable "vsphere_server" {
8 type = string
9}
10variable "rancher_addr" {
11 type = string
12}
13variable "rancher_akey" {
14 type = string
15}
16variable "rancher_skey" {
17 type = string
18}
19
20provider "vsphere" {
21 user = var.vsphere_user
22 password = var.vsphere_pass
23 vsphere_server = var.vsphere_server
24
25 # If you have a self-signed cert
26 allow_unverified_ssl = true
27}
28
29provider "rancher2" {
30 api_url = var.rancher_addr
31 access_key = var.rancher_akey
32 secret_key = var.rancher_skey
33 insecure = true
34}
35
36data "vsphere_datacenter" "dc" {
37 name = "Datacenter"
38}
39
40data "vsphere_datastore" "datastore" {
41 name = "3TB"
42 datacenter_id = data.vsphere_datacenter.dc.id
43}
44
45data "vsphere_resource_pool" "pool" {
46 name = "Cluster/Resources"
47 datacenter_id = data.vsphere_datacenter.dc.id
48}
49
50data "vsphere_network" "network" {
51 name = "DSwitch-VM Network"
52 datacenter_id = data.vsphere_datacenter.dc.id
53}
54data "vsphere_virtual_machine" "template" {
55 name = "templates/centos-docker"
56 datacenter_id = data.vsphere_datacenter.dc.id
57}
58data "rancher2_cluster" "sandbox" {
59 name = "vsphere-prod"
60}
61
62resource "vsphere_virtual_machine" "control" {
63 count = 1
64 name = "control-plane-${count.index + 1}"
65 resource_pool_id = data.vsphere_resource_pool.pool.id
66 datastore_id = data.vsphere_datastore.datastore.id
67 folder = "k8s"
68
69 num_cpus = 2
70 memory = 8192
71 guest_id = data.vsphere_virtual_machine.template.guest_id
72 scsi_type = data.vsphere_virtual_machine.template.scsi_type
73
74 network_interface {
75 network_id = data.vsphere_network.network.id
76 adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
77 }
78
79 disk {
80 label = "disk0"
81 size = data.vsphere_virtual_machine.template.disks.0.size
82 eagerly_scrub = data.vsphere_virtual_machine.template.disks.0.eagerly_scrub
83 thin_provisioned = true
84 }
85
86 clone {
87 template_uuid = data.vsphere_virtual_machine.template.id
88 timeout = 60
89
90 customize {
91 linux_options {
92 host_name = "control-plane-${count.index + 1}"
93 domain = "internal.mhamburger.net"
94 }
95 network_interface {
96 ipv4_address = "192.168.1.${90 + count.index}"
97 ipv4_netmask = "24"
98 }
99 ipv4_gateway = "192.168.1.1"
100 dns_server_list = ["192.168.1.117", "192.168.1.50"]
101 dns_suffix_list = ["internal.mhamburger.net"]
102 }
103 }
104}
105
106resource "vsphere_virtual_machine" "etcd" {
107 count = 1
108 name = "etcd-${count.index + 1}"
109 resource_pool_id = data.vsphere_resource_pool.pool.id
110 datastore_id = data.vsphere_datastore.datastore.id
111 folder = "k8s"
112
113 num_cpus = 2
114 memory = 8192
115 guest_id = data.vsphere_virtual_machine.template.guest_id
116 scsi_type = data.vsphere_virtual_machine.template.scsi_type
117
118 network_interface {
119 network_id = data.vsphere_network.network.id
120 adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
121 }
122
123 disk {
124 label = "disk0"
125 size = data.vsphere_virtual_machine.template.disks.0.size
126 eagerly_scrub = data.vsphere_virtual_machine.template.disks.0.eagerly_scrub
127 thin_provisioned = true
128 }
129
130 clone {
131 template_uuid = data.vsphere_virtual_machine.template.id
132 timeout = 60
133
134 customize {
135 linux_options {
136 host_name = "etcd-${count.index + 1}"
137 domain = "internal.mhamburger.net"
138 }
139 network_interface {
140 ipv4_address = "192.168.1.${95 + count.index}"
141 ipv4_netmask = "24"
142 }
143 ipv4_gateway = "192.168.1.1"
144 dns_server_list = ["192.168.1.117", "192.168.1.50"]
145 dns_suffix_list = ["internal.mhamburger.net"]
146 }
147 }
148}
149resource "vsphere_virtual_machine" "work" {
150 count = 3
151 name = "worker-${count.index + 1}"
152 resource_pool_id = data.vsphere_resource_pool.pool.id
153 datastore_id = data.vsphere_datastore.datastore.id
154 folder = "k8s"
155
156 num_cpus = 2
157 memory = 8192
158 guest_id = data.vsphere_virtual_machine.template.guest_id
159 scsi_type = data.vsphere_virtual_machine.template.scsi_type
160
161 network_interface {
162 network_id = data.vsphere_network.network.id
163 adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
164 }
165
166 disk {
167 label = "disk0"
168 size = data.vsphere_virtual_machine.template.disks.0.size
169 eagerly_scrub = data.vsphere_virtual_machine.template.disks.0.eagerly_scrub
170 thin_provisioned = true
171 }
172
173 clone {
174 template_uuid = data.vsphere_virtual_machine.template.id
175 timeout = 60
176
177 customize {
178 linux_options {
179 host_name = "worker-${count.index + 1}"
180 domain = "internal.mhamburger.net"
181 }
182 network_interface {
183 ipv4_address = "192.168.1.${100 + count.index}"
184 ipv4_netmask = "24"
185 }
186 ipv4_gateway = "192.168.1.1"
187 dns_server_list = ["192.168.1.117", "192.168.1.50"]
188 dns_suffix_list = ["internal.mhamburger.net"]
189 }
190 }
191}