2 region = var.aws_region
3 access_key = var.access_key
4 secret_key = var.secret_key
8 resource "aws_instance" "master" {
10 instance_type = var.aws_instance
11 vpc_security_group_ids = [aws_security_group.instance.id]
12 subnet_id = var.aws_subnet_id
16 apt update -y >> microk8s_install.log
17 apt install snapd -y >> microk8s_install.log
18 snap install core >> microk8s_install.log
19 export PATH=$PATH:/snap/bin
20 snap install microk8s --classic --channel=1.21 >> microk8s_install.log
21 microk8s status --wait-ready
22 microk8s enable dns >> microk8s_install.log
23 microk8s enable storage >> microk8s_install.log
24 microk8s add-node > microk8s.join_token
25 microk8s config > configFile-master
27 key_name = "terraform"
31 provisioner "remote-exec" {
32 inline = ["until [ -f /microk8s.join_token ]; do sleep 5; done; cat /microk8s.join_token",
33 "sudo sed -i 's/#MOREIPS/IP.7 = ${self.public_ip}\\n#MOREIPS/g' /var/snap/microk8s/current/certs/csr.conf.template",
36 "sudo microk8s start",
45 private_key = "${file("terraform.pem")}"
48 provisioner "local-exec" {
51 mkdir /root/.ssh && chmod 0700 /root/.ssh
52 ssh-keyscan -H ${self.public_dns} >> ~/.ssh/known_hosts
53 scp -i terraform.pem ubuntu@${self.public_dns}:/microk8s.join_token .
54 tail -n1 microk8s.join_token >> token
55 scp -i terraform.pem ubuntu@${self.public_dns}:/configFile-master .
60 create_before_destroy = true
64 resource "aws_security_group" "instance" {
65 name = "master_microk8s"
71 cidr_blocks = ["0.0.0.0/0"]
77 cidr_blocks = ["0.0.0.0/0"]
82 data "local_file" "tokenContent" {
91 public_dns = aws_instance.master.public_dns
92 join = data.local_file.tokenContent.content
96 resource "aws_instance" "worker" {
98 instance_type = var.aws_instance
99 vpc_security_group_ids = [aws_security_group.instance.id]
100 subnet_id = var.aws_subnet_id
101 user_data = templatefile("worker_user_data.tmpl", { token = local.join } )
102 key_name = "terraform"
107 provisioner "remote-exec" {
108 inline = ["until [ -f /microk8s.complete ]; do sleep 5; done"]
112 host = self.public_ip
116 private_key = "${file("terraform.pem")}"
119 create_before_destroy = true
128 resource "null_resource" "cluster" {
129 provisioner "remote-exec" {
130 inline = ["sudo microk8s kubectl get no >> kubectl.info"]
134 host = aws_instance.master.public_ip
138 private_key = "${file("terraform.pem")}"
141 provisioner "local-exec" {
143 echo ${aws_instance.master.private_ip}
144 export privateIP=${aws_instance.master.private_ip}
145 export publicIP=${aws_instance.master.public_ip}
146 ssh-keyscan -H ${aws_instance.worker.public_dns} >> ~/.ssh/known_hosts
147 scp -i terraform.pem ubuntu@${aws_instance.worker.public_dns}:/configFile-worker .
152 create_before_destroy = true
161 value = aws_instance.master.public_ip
164 output "private_ip" {
165 value = aws_instance.master.private_ip