-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
166 lines (129 loc) · 3.36 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
###
### commands we'll be using later
###
CAT ?= cat
CHMOD ?= chmod
FIND ?= find
PACKER ?= packer
PYTHON ?= python
RM ?= rm
TERRAFORM ?= terraform.io
###
### variables
###
## file locations
# the Packer config file
packerfile ?= packer.json
# executable for testing
executable ?= verify_temperature.py
## build variables
# the region where we'll be working
region ?= us-east-1
# the EC2 instance type
instance_type ?= t2.micro
# the source (base) AMI upon which to build (AMZN)
source_ami ?= ami-0ff8a91507f77f867
# the username Packer should use to connect to the instance
aws_ssh_username ?= ec2-user
# where the boot disk is attached
device_name ?= /dev/xvda
# the size of the boot disk (in GB)
volume_size ?= 10
# the name of the AMI to produce
ami_name ?= flexioncodechallenge
# the port that will be serving traffic
port ?= 80
# where the application will live
application_location = /application/
# the serving environment for the application
environment ?= development
# the name of the application
application ?= fcc
# the S3 bucket where we'll store remote state (THIS NEEDS TO EXIST FIRST)
remote-state-bucket ?= com.kdaweb.terraform-remote-state
# the domainname / Route53 zone to use (THIS NEEDS TO EXIST FIRST)
domain ?= kdaweb.com
# the hostname to use
hostname ?= $(application)
# the current owner of the produced AMI
owner ?= 688772714249
# security group we'll be using
sgs ?= sg-00fbabd161fd1dc5f
###
### runtime flags for Packer
###
ifeq ($(debug), true)
debug_flag ?= -debug
else
debug_flag =
endif
ifeq ($(verbose), true)
verbose_flag ?= PACKER_LOG=1
else
verbose_flag =
endif
###
### targets for make
###
# all is used to... make all the things
all: test ami live
# clean cleans up temporary files
clean:
$(FIND) . \( \
-name "*~" \
-o -name "*.tmp" \
-o -name "tmp.*" \
-o -name "*.ymle" \
-o -name "*.tfe" \
-o -name "*.jsone" \
-o -name site.retry \
-o -name "build.*" \
-o -name "*.crt" \
-o -name "*.key" \
-o -name "*.pem" \
-o -name "*.pub" \
-o -name hosts \
-o -name "*.password" \
-o -name "packer-provisioner-ansible*" \
\) -delete ; \
$(RM) -f "$(account_filename)" \
"$(access_key_filename)" \
"$(secret_key_filename)" \
; exit 0
# test runs unit tests
test:
$(PYTHON) $(executable)
# ami builds the AMI using Packer
ami:
access_key="$(AWS_ACCESS_KEY_ID)" \
secret_key="$(AWS_SECRET_ACCESS_KEY)" \
region="$(region)" \
instance_type="$(instance_type)" \
source_ami="$(source_ami)" \
aws_ssh_username="$(aws_ssh_username)" \
device_name="$(device_name)" \
volume_size="$(volume_size)" \
ami_name="$(ami_name)" \
platform="amazon-ebs" \
extravars="$(extravars)" \
port="$(port)" \
environment="$(environment)" \
application_location="$(application_location)" \
packer build $(debug_flag) $(verbose_flag) --only=amazon-ebs $(packerfile)
# live instantiates the AMI as an EC2 instance using Terraform
live:
$(TERRAFORM) init && \
$(TERRAFORM) plan -out=tfplan -input=false \
-var port=$(port) \
-var ami_name=$(ami_name) \
-var region=$(region) \
-var application_location=$(application_location) \
-var environment=$(environment) \
-var application=$(application) \
-var remote-state-bucket=$(remote-state-bucket) \
-var domain=$(domain) \
-var hostname=$(hostname) \
-var owner=$(owner) \
-var sgs=$(sgs) \
-var instance_type=$(instance_type) && \
$(TERRAFORM) apply -input=false tfplan