Skip to content

Commit 530a72b

Browse files
committed
WIP: Launch an on demand AWS workspace instance
1 parent 0bb566d commit 530a72b

File tree

4 files changed

+130
-28
lines changed

4 files changed

+130
-28
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ build/
3434
.rvmrc
3535

3636
.vagrant/
37-
workspace/
37+
workspace/
38+
*.tfstate*

_setup/terraform/aws-workspace/README.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@ export TF_VAR_workspace_security_group_id1="sg-6a1a080e" #stayup-pcf-VMs
1010
export TF_VAR_workspace_security_group_id2="sg-65fa4302" #staff_office_ips
1111
1212
```
13-
Make sure that you had `ssh-add`ed the key to your keychain
13+
0. Make sure your IP is listed in the `staff_office_ips` security group
14+
0. Make sure that you had `ssh-add`ed the key to your keychain
1415

15-
0. `/path/to/logsearch-workspace/_setup/terraform/aws-workspace$ terraform apply`
16+
0. `/path/to/logsearch-workspace/_setup/terraform/aws-workspace$ terraform apply`
17+
18+
19+
## Tricks
20+
21+
0. Use `terraform taint aws_volume_attachment.workspace_ebs_att` to re-run just the provision.sh script
22+
23+
```
24+
_setup/terraform/aws-workspace$ terraform taint aws_volume_attachment.workspace_ebs_att
25+
The resource aws_volume_attachment.workspace_ebs_att in the module root has been marked as tainted!
26+
_setup/terraform/aws-workspace$ terraform apply
27+
...snip...
28+
aws_volume_attachment.workspace_ebs_att: Provisioning with 'remote-exec'...
29+
```

_setup/terraform/aws-workspace/main.tf

Lines changed: 76 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,100 @@ provider "aws" {
44
region = "us-east-1"
55
}
66

7-
resource "aws_spot_instance_request" "workspace_instance" {
8-
ami = "ami-3fee3b54" #BOSH lite 9000.38
9-
instance_type = "m3.xlarge"
10-
spot_price = "0.15"
7+
resource "aws_ebs_volume" "workspace_disk" {
8+
availability_zone = "us-east-1a"
9+
size = 10
10+
tags {
11+
Name = "workspace_disk"
12+
}
13+
}
1114

12-
wait_for_fulfillment = true
15+
resource "aws_instance" "workspace_instance" {
16+
ami = "ami-3fee3b54" #BOSH lite 9000.38
17+
instance_type = "m3.medium"
1318
key_name = "${var.workspace_key_name}"
1419
tags {
1520
Name = "workspace_instance"
1621
}
1722

1823
subnet_id = "${var.workspace_subnet_id}"
19-
#vpc_security_group_ids = ["${var.workspace_security_group_id0}", "${var.workspace_security_group_id1}", "${var.workspace_security_group_id2}"]
24+
vpc_security_group_ids = ["${var.workspace_security_group_id0}", "${var.workspace_security_group_id1}", "${var.workspace_security_group_id2}"]
25+
26+
associate_public_ip_address = "true"
2027

2128
root_block_device {
2229
volume_type = "gp2"
23-
volume_size = 100
30+
volume_size = 10
2431
}
2532

33+
}
34+
35+
resource "aws_volume_attachment" "workspace_ebs_att" {
36+
device_name = "/dev/sdf"
37+
volume_id = "${aws_ebs_volume.workspace_disk.id}"
38+
#instance_id = "${aws_spot_instance_request.workspace_instance.spot_instance_id}"
39+
instance_id = "${aws_instance.workspace_instance.id}"
40+
2641
provisioner "remote-exec" {
2742
script = "provision.sh"
2843
connection {
44+
host = "${aws_instance.workspace_instance.public_ip}"
2945
user = "ubuntu"
46+
3047
}
3148
}
3249
}
3350

34-
resource "aws_ebs_volume" "workspace_disk" {
35-
availability_zone = "us-east-1a"
36-
size = 40
37-
tags {
38-
Name = "workspace_disk"
39-
}
40-
}
4151

42-
resource "aws_volume_attachment" "workspace_ebs_att" {
43-
device_name = "/dev/sdf"
44-
volume_id = "${aws_ebs_volume.workspace_disk.id}"
45-
instance_id = "${aws_spot_instance_request.workspace_instance.spot_instance_id}"
46-
}
52+
#resource "aws_spot_instance_request" "workspace_instance" {
53+
# ami = "ami-3fee3b54" #BOSH lite 9000.38
54+
# instance_type = "m3.xlarge"
55+
# spot_price = "0.15"
56+
#
57+
# subnet_id = "${var.workspace_subnet_id}"
58+
#
59+
# wait_for_fulfillment = true
60+
# key_name = "${var.workspace_key_name}"
61+
# tags {
62+
# Name = "workspace_instance"
63+
# }
64+
#
65+
# root_block_device {
66+
# volume_type = "gp2"
67+
# volume_size = 100
68+
# }
69+
#}
70+
#
71+
#resource "aws_network_interface" "workspace_instance_network_interface" {
72+
# subnet_id = "${var.workspace_subnet_id}"
73+
# security_groups = ["${var.workspace_security_group_id0}", "${var.workspace_security_group_id1}", "${var.#workspace_security_group_id2}"]
74+
# attachment {
75+
# instance = "${aws_spot_instance_request.workspace_instance.spot_instance_id}"
76+
# device_index = 1
77+
# }
78+
# tags {
79+
# Name = "workspace_instance"
80+
# }
81+
#}
82+
#
83+
#
84+
#resource "aws_eip" "workspace_instance_public_ip" {
85+
# network_interface = "${aws_network_interface.workspace_instance_network_interface.id}"
86+
#
87+
# vpc = true
88+
#
89+
# provisioner "remote-exec" {
90+
# script = "provision.sh"
91+
# connection {
92+
# host = "${aws_eip.workspace_instance_public_ip.public_ip}"
93+
# user = "ubuntu"
94+
# key_file = "${var.workspace_key_file}"
95+
# }
96+
# }
97+
#
98+
#}
99+
100+
101+
102+
103+
Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,40 @@
11
#!/bin/bash
2-
echo "Provisioning!"
2+
echo "Provisioning..."
33

4-
apt-get -y install git
4+
sudo apt-get update
5+
sudo apt-get -y install git
56

6-
exit 0
7+
echo "Mounting persistent disk as as /workspaces..."
8+
# TODO: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html
79

8-
git clone https://github.com/logsearch/workspace /root/logsearch-workspace
9-
cd /root/logsearch-workspace
10-
_setup/runtime/install_dependancies
10+
echo "Relocating all user home dirs to /workspaces..."
11+
# TODO
12+
13+
echo "Installing logsearch-workspace dependancies..."
14+
# TODO:
15+
# sudo git clone https://github.com/logsearch/workspace /root/logsearch-workspace
16+
# sudo /root/logsearch-workspace/_setup/runtime/install_dependancies
17+
18+
echo "Provision user accounts"
19+
# TODO - not sure this step can/should be automated
20+
# steps:
21+
# sudo /root/logsearch-workspace/_setup/runtime/add_new_workspace --workspace-tenant-number 1 --workspace-username mrdavidlaing --workspace-public-key 'ssh-rsa AAAAB3...' --workspace-homedirs /workspaces
22+
# sudo /root/logsearch-workspace/_setup/runtime/add_new_workspace --workspace-tenant-number 2 --workspace-username user2 ...
23+
24+
echo "Installing CF..."
25+
# TODO
26+
echo "Adding ip-tables routes to CF"
27+
# PRIVATE_IP=????
28+
# sudo iptables -t nat -A PREROUTING -p tcp -d $PRIVATE_IP --dport 80 -j DNAT --to 10.244.0.34:80
29+
# sudo iptables -t nat -A PREROUTING -p tcp -d $PRIVATE_IP --dport 443 -j DNAT --to 10.244.0.34:443
30+
31+
# sudo iptables-save > /etc/iptables/rules.v4
32+
33+
echo "Installing Logsearch..."
34+
# TODO
35+
36+
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-="
37+
echo " "
38+
echo "\o/ Provisioning completed!"
39+
echo " |"
40+
echo '/ \'

0 commit comments

Comments
 (0)