-
Notifications
You must be signed in to change notification settings - Fork 3
/
destroy.py
74 lines (63 loc) · 3.13 KB
/
destroy.py
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
# MIT No Attribution
# Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import boto3
import os
import subprocess
import time
import json
import logging
import urllib.request, urllib.parse
LOGGER = logging.getLogger()
LOGGER.setLevel(logging.INFO)
#function to send the response to the cloudformation stack
def send_response(event, context, response_status, response_data):
'''Send a resource manipulation status response to CloudFormation'''
response_body = json.dumps({
"Status": response_status,
"Reason": "See the details in CloudWatch Log Stream: " + context.log_stream_name,
"PhysicalResourceId": context.log_stream_name,
"StackId": event['StackId'],
"RequestId": event['RequestId'],
"LogicalResourceId": event['LogicalResourceId'],
"Data": response_data
})
response_body_bytes = response_body.encode('utf-8')
LOGGER.info('ResponseURL: %s', event['ResponseURL'])
LOGGER.info('ResponseBody: %s', response_body)
opener = urllib.request.build_opener(urllib.request.HTTPHandler)
request = urllib.request.Request(event['ResponseURL'], data=response_body_bytes)
request.add_header('Content-Type', 'application/json; charset=utf-8')
request.add_header('Content-Length', len(response_body_bytes))
request.get_method = lambda: 'PUT'
response = opener.open(request)
LOGGER.info("Status code: %s", response.getcode())
LOGGER.info("Status message: %s", response.msg)
def lambda_handler(event, context):
output = {}
#Create the cloudformation client
client_cloudformation = boto3.client('cloudformation')
#Section related to the creation of the stack
if event['RequestType'] == 'Create':
send_response(event, context, "SUCCESS", output)
#Section related to the deletion of the stack
elif event['RequestType'] == 'Delete':
#delete the stacks
try:
client_cloudformation.delete_stack(StackName='parallelcluster-cluster1')
client_cloudformation.delete_stack(StackName='parallelcluster-cluster2')
LOGGER.info('Deleting stacks')
send_response(event, context, "SUCCESS", output)
except Exception as e:
LOGGER.info('Error: %s', e)
send_response(event, context, "FAILED", output)