Skip to content

Commit 7d1ed36

Browse files
committed
Create app.py
1 parent f86aae2 commit 7d1ed36

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

app.py

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
from flask import Flask, request, jsonify
2+
from config import config
3+
import logging
4+
import boto3
5+
6+
app = Flask(__name__)
7+
8+
logging.basicConfig(
9+
filename=config['log_file'],
10+
level=config['log_level']
11+
)
12+
13+
14+
# Endpoint: http://<api_host>:<api_port>/ec2/list
15+
@app.route('/ec2/list', methods=['POST', 'GET'])
16+
def aws_list():
17+
try:
18+
aws_access_key_id = request.args.get("aws_access_key_id")
19+
aws_secret_access_key = request.args.get("aws_secret_access_key")
20+
region_name = request.args.get("region_name")
21+
client = boto3.client('ec2',
22+
aws_access_key_id=aws_access_key_id,
23+
aws_secret_access_key=aws_secret_access_key,
24+
region_name=region_name
25+
)
26+
27+
except Exception as error:
28+
print(str(error))
29+
return jsonify({'Error': "Unexpected Error occured"}), 500
30+
31+
instances = client.describe_instances()
32+
output = []
33+
for reservation in instances['Reservations']:
34+
output.extend([
35+
{
36+
'id': instance['InstanceId'],
37+
"instance-type": instance['InstanceType'],
38+
"instance-state": instance['State']['Name']
39+
}
40+
for instance in reservation['Instances']])
41+
42+
# print(output)
43+
return jsonify(output), 200
44+
45+
46+
# Endpoint: http://<api_host>:<api_port>/ec2/start
47+
@app.route("/ec2/start", methods=["POST", "GET"])
48+
def start_ec2_instances():
49+
try:
50+
aws_access_key_id = request.args.get("aws_access_key_id")
51+
aws_secret_access_key = request.args.get("aws_secret_access_key")
52+
region_name = request.args.get("region_name")
53+
InstanceIds = request.args.get("InstanceId")
54+
client = boto3.client('ec2',
55+
aws_access_key_id=aws_access_key_id,
56+
aws_secret_access_key=aws_secret_access_key,
57+
region_name=region_name,
58+
)
59+
60+
except Exception as error:
61+
print(str(error))
62+
return jsonify({'Error': "Unexpected Error occured"}), 500
63+
64+
response = client.describe_instances()
65+
InstanceIds = []
66+
for instance in response["Reservations"][0]["Instances"]:
67+
InstanceIds.append(instance["InstanceId"])
68+
69+
response = client.start_instances(
70+
InstanceIds=InstanceIds
71+
)
72+
73+
return jsonify(response["StartingInstances"][0]), 200
74+
75+
76+
# Endpoint: http://<api_host>:<api_port>/ec2/stop
77+
@app.route("/ec2/stop", methods=["POST", "GET"])
78+
def stop_ec2_instances():
79+
try:
80+
aws_access_key_id = request.args.get("aws_access_key_id")
81+
aws_secret_access_key = request.args.get("aws_secret_access_key")
82+
region_name = request.args.get("region_name")
83+
InstanceIds = request.args.get("InstanceId")
84+
client = boto3.client('ec2',
85+
aws_access_key_id=aws_access_key_id,
86+
aws_secret_access_key=aws_secret_access_key,
87+
region_name=region_name,
88+
)
89+
90+
except Exception as error:
91+
print(str(error))
92+
return jsonify({'Error': "Unexpected Error occured"}), 500
93+
94+
response = client.describe_instances()
95+
InstanceIds = []
96+
for instance in response["Reservations"][0]["Instances"]:
97+
InstanceIds.append(instance["InstanceId"])
98+
99+
response = client.stop_instances(
100+
InstanceIds=InstanceIds
101+
)
102+
103+
return jsonify(response["StoppingInstances"][0]), 200
104+
105+
106+
if __name__ == "__main__":
107+
app.run(host=config["host"], port=config["port"], debug=True)

0 commit comments

Comments
 (0)