blob: 319654bb2cbf1ca123cad3f4de3d4cf27623b0b4 [file] [log] [blame]
Matteo Scandolo920e8fd2017-08-08 13:05:24 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
Matteo Scandolo21dde412017-07-11 18:54:12 -070017from grpc_client.main import GRPC_Client
18from klein import Klein
Matteo Scandolo09d469c2017-07-07 11:46:48 -070019import os
20from tosca.parser import TOSCA_Parser
21from tosca.default import TOSCA_DEFS_DIR
22import json
Matteo Scandolo9ce18252017-06-22 10:48:25 -070023
24BANNER = """
25 _ ______ _____ __________ _____ _________
26 | |/ / __ \/ ___/ /_ __/ __ \/ ___// ____/ |
27 | / / / /\__ \ / / / / / /\__ \/ / / /| |
28 / / /_/ /___/ / / / / /_/ /___/ / /___/ ___ |
29/_/|_\____//____/ /_/ \____//____/\____/_/ |_|
30"""
31
32class TOSCA_WebServer:
Matteo Scandolo9ce18252017-06-22 10:48:25 -070033
Matteo Scandolo09d469c2017-07-07 11:46:48 -070034 current_dir = os.path.dirname(os.path.realpath(__file__))
35 template_dir = os.path.join(current_dir, 'templates/')
36
Matteo Scandolo21dde412017-07-11 18:54:12 -070037 app = Klein()
38
39 def execute_tosca(self, recipe):
40 try:
41 self.parser.execute()
42 response_text = "Created models: %s" % str(self.parser.ordered_models_name)
43 return response_text
44 except Exception, e:
45 return e.message
46
47 @app.route('/', methods=['GET'])
48 def index(self, request):
Matteo Scandolo09d469c2017-07-07 11:46:48 -070049 request.responseHeaders.addRawHeader(b"content-type", b"application/json")
50 tosca_defs = [f for f in os.listdir(TOSCA_DEFS_DIR) if not f.startswith('.')]
51
52 response = {}
53 for d in tosca_defs:
54 name = d.replace('.yaml', '')
55 response[name] = "/custom_type/%s" % name
56 return json.dumps(response)
Matteo Scandolo21dde412017-07-11 18:54:12 -070057
Matteo Scandolo78ca3eb2017-07-13 16:58:22 -070058 @app.route("/custom_type/<name>")
59 def custom_type(self, request, name):
60 request.responseHeaders.addRawHeader(b"content-type", b"text/plain")
61 custom_type = open(TOSCA_DEFS_DIR + '/' + name + '.yaml').read()
62 return custom_type
63
Matteo Scandolo21dde412017-07-11 18:54:12 -070064 @app.route('/run', methods=['POST'])
Matteo Scandolo78ca3eb2017-07-13 16:58:22 -070065 def run(self, request):
Matteo Scandolo21dde412017-07-11 18:54:12 -070066 recipe = request.content.read()
67 headers = request.getAllHeaders()
68 username = headers['xos-username']
69 password = headers['xos-password']
70
71 d = GRPC_Client().create_secure_client(username, password, recipe)
72 self.parser = TOSCA_Parser(recipe, username, password)
73 d.addCallback(self.execute_tosca)
74 return d
Matteo Scandolo9ce18252017-06-22 10:48:25 -070075
Matteo Scandolo78ca3eb2017-07-13 16:58:22 -070076 @app.route('/delete', methods=['POST'])
77 def delete(self, request):
78 recipe = request.content.read()
79 headers = request.getAllHeaders()
80 username = headers['xos-username']
81 password = headers['xos-password']
82
83 d = GRPC_Client().create_secure_client(username, password, recipe)
84 self.parser = TOSCA_Parser(recipe, username, password, delete=True)
85 d.addCallback(self.execute_tosca)
86 return d
Matteo Scandolo09d469c2017-07-07 11:46:48 -070087
Matteo Scandolo9ce18252017-06-22 10:48:25 -070088 def __init__(self):
Matteo Scandolo5c0af1b2017-07-05 14:51:21 -070089 self.app.run('0.0.0.0', '9102')