Add a http performance test script based on wrk
[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 --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
26               EOF
27   key_name = "terraform"
28   tags = {
29     Name = "master"
30   }
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",
34             "sudo sleep 1m",
35             "sudo microk8s stop",
36             "sudo microk8s start",
37            ]
38   }
39
40   connection {
41     host = self.public_ip
42     type     = "ssh"
43     user     = "ubuntu"
44     password = ""
45     private_key = "${file("terraform.pem")}"
46   }
47
48   provisioner "local-exec" {
49     command = <<EOT
50                touch token 
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 .
56               EOT
57   }
58
59   lifecycle {
60     create_before_destroy = true
61   }
62 }
63
64 resource "aws_security_group" "instance" {
65   name = "master_microk8s"
66   vpc_id = var.vpc_id
67   ingress {
68     from_port   = 0
69     to_port     = 0
70     protocol    = "-1"
71     cidr_blocks = ["0.0.0.0/0"]
72   }
73   egress {
74     from_port   = 0
75     to_port     = 0
76     protocol    = "-1"
77     cidr_blocks = ["0.0.0.0/0"]
78   }
79
80 }
81
82 data "local_file" "tokenContent" {
83   filename = "token"
84   depends_on = [
85     aws_instance.master,
86   ]
87 }
88
89
90 locals {
91     public_dns = aws_instance.master.public_dns
92     join = data.local_file.tokenContent.content
93 }
94
95
96 resource "aws_instance" "worker" {
97   ami           = var.aws_ami
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"
103   tags = {
104     Name = "worker"
105   }
106
107   provisioner "remote-exec" {
108   inline = ["until [ -f /microk8s.complete ]; do sleep 5; done"]
109   }
110
111   connection {
112     host = self.public_ip
113     type     = "ssh"
114     user     = "ubuntu"
115     password = ""
116     private_key = "${file("terraform.pem")}"
117   }
118   lifecycle {
119     create_before_destroy = true
120   }
121
122   depends_on = [
123     aws_instance.master,
124   ]
125 }
126
127
128 resource "null_resource" "cluster" {
129   provisioner "remote-exec" {
130   inline = ["sudo microk8s kubectl get no >> kubectl.info"]
131   }
132
133   connection {
134     host = aws_instance.master.public_ip
135     type     = "ssh"
136     user     = "ubuntu"
137     password = ""
138     private_key = "${file("terraform.pem")}"
139   }
140
141   provisioner "local-exec" {
142   command = <<EOT
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 .
148               EOT
149   }
150
151   lifecycle {
152     create_before_destroy = true
153   }
154
155   depends_on = [
156     aws_instance.worker,
157   ]
158 }
159
160 output "public_ip" {
161   value         = aws_instance.master.public_ip
162 }
163
164 output "private_ip" {
165   value = aws_instance.master.private_ip
166 }
167