ea33da55eac9028d5d00bec293b8217239e8fa61
[iec.git] / src / foundation / microk8s / main.tf
1 provider "aws" {
2   region = var.aws_region
3   access_key = var.access_key
4   secret_key = var.secret_key
5
6 }
7
8 resource "aws_instance" "master" {
9   ami           = var.aws_ami
10   instance_type = var.aws_instance
11   vpc_security_group_ids = [aws_security_group.instance.id]
12   subnet_id =  var.aws_subnet_id
13   user_data = <<-EOF
14               #!/bin/bash
15               sudo su
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 >> microk8s_install.log
21               microk8s status --wait-ready
22               microk8s enable dns >> microk8s_install.log
23               microk8s add-node > microk8s.join_token
24               microk8s config > configFile
25               EOF
26   key_name = "terraform"
27   tags = {
28     Name = "master"
29   }
30   provisioner "remote-exec" {
31   inline = ["until [ -f /microk8s.join_token ]; do sleep 5; done; cat /microk8s.join_token",
32             "sudo sed -i 's/#MOREIPS/IP.7 = ${self.public_ip}\\n#MOREIPS/g' /var/snap/microk8s/current/certs/csr.conf.template",
33             "sudo sleep 1m",
34             "sudo microk8s stop",
35             "sudo microk8s start"
36            ]
37   }
38
39   connection {
40     host = self.public_ip
41     type     = "ssh"
42     user     = "ubuntu"
43     password = ""
44     private_key = "${file("terraform.pem")}"
45   }
46
47   provisioner "local-exec" {
48     command = <<EOT
49                ssh-keyscan -H ${self.public_dns} >> ~/.ssh/known_hosts
50                scp -i terraform.pem ubuntu@${self.public_dns}:/microk8s.join_token .
51                tail -n1 microk8s.join_token >> token
52                scp -i terraform.pem ubuntu@${self.public_dns}:/configFile .
53               EOT
54   }
55
56   lifecycle {
57     create_before_destroy = true
58   }
59 }
60
61 resource "aws_security_group" "instance" {
62   name = "master_microk8s"
63   vpc_id = var.vpc_id
64   ingress {
65     from_port   = 0
66     to_port     = 0
67     protocol    = "-1"
68     cidr_blocks = ["0.0.0.0/0"]
69   }
70   egress {
71     from_port   = 0
72     to_port     = 0
73     protocol    = "-1"
74     cidr_blocks = ["0.0.0.0/0"]
75   }
76
77 }
78
79 data "local_file" "tokenContent" {
80   filename = "token"
81   depends_on = [
82     aws_instance.master,
83   ]
84 }
85
86
87 locals {
88     public_dns = aws_instance.master.public_dns
89     join = data.local_file.tokenContent.content
90 }
91
92
93 resource "aws_instance" "worker" {
94   ami           = var.aws_ami
95   instance_type = var.aws_instance
96   vpc_security_group_ids = [aws_security_group.instance.id]
97   subnet_id =  var.aws_subnet_id
98   user_data = templatefile("worker_user_data.tmpl", { token = local.join } )
99   key_name = "terraform"
100   tags = {
101     Name = "worker"
102   }
103
104   provisioner "remote-exec" {
105   inline = ["until [ -f /microk8s.complete ]; do sleep 5; done"]
106   }
107
108   connection {
109     host = self.public_ip
110     type     = "ssh"
111     user     = "ubuntu"
112     password = ""
113     private_key = "${file("terraform.pem")}"
114   }
115   lifecycle {
116     create_before_destroy = true
117   }
118
119   depends_on = [
120     aws_instance.master,
121   ]
122 }
123
124
125 output "master_ip" {
126   value         = aws_instance.master.public_ip
127 }
128