-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathcloudformation.rb
58 lines (51 loc) · 2.01 KB
/
cloudformation.rb
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
require './config'
def cloudformation
@cloudformation ||= Aws::CloudFormation::Client.new(region: @region)
end
def create_stack
raise '@stack_name missing' unless @stack_name
template_url = 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/WordPress_Single_Instance.template'
@db_name = 'wordpressdb'
@db_user = 'wordpressdb'
@db_password = random_token
@db_root_password = random_token
parameters = [
{ parameter_key: 'DBName', parameter_value: @db_name },
{ parameter_key: 'DBPassword', parameter_value: @db_password },
{ parameter_key: 'DBRootPassword', parameter_value: @db_root_password },
{ parameter_key: 'DBUser', parameter_value: @db_user },
{ parameter_key: 'InstanceType', parameter_value: 't2.micro' },
{ parameter_key: 'KeyName', parameter_value: @key_name },
{ parameter_key: 'SSHLocation', parameter_value: '0.0.0.0/0' } ]
on_failure = 'DO_NOTHING'
resp = cloudformation.create_stack \
stack_name: @stack_name, template_url: template_url,
parameters: parameters, on_failure: on_failure
end
def create_stack_waiter
resp = cloudformation.wait_until :stack_create_complete, stack_name: @stack_name
@website_url = resp[:stacks][0][:outputs].find { |o| o[:output_key] == 'WebsiteURL' }[:output_value]
resp
end
def delete_stack
resp = cloudformation.delete_stack stack_name: @stack_name
end
def delete_stack_waiter
resp = cloudformation.wait_until :stack_delete_complete, stack_name: @stack_name
end
def cleanup
puts 'Deleting stack...'; ap resp = delete_stack
puts 'Waiting for deletion...'; ap resp = delete_stack_waiter
true
end
def run
puts "Region: #{@region}"
puts 'Creating stack...'; ap resp = create_stack
puts 'Waiting for creation...'; ap resp = create_stack_waiter
puts "DB Name: #{@db_name}"
puts "DB User: #{@db_user}"
puts "DB Password: #{@db_password}"
puts "DB Root Password: #{@db_root_password}"
puts "WordPress will be available on #{@website_url}"
true
end