337 lines
15 KiB
Python
337 lines
15 KiB
Python
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import routes
|
|
|
|
from senlin.api.common import wsgi
|
|
from senlin.api.openstack.v1 import actions
|
|
from senlin.api.openstack.v1 import build_info
|
|
from senlin.api.openstack.v1 import cluster_policies
|
|
from senlin.api.openstack.v1 import clusters
|
|
from senlin.api.openstack.v1 import events
|
|
from senlin.api.openstack.v1 import nodes
|
|
from senlin.api.openstack.v1 import policies
|
|
from senlin.api.openstack.v1 import policy_types
|
|
from senlin.api.openstack.v1 import profile_types
|
|
from senlin.api.openstack.v1 import profiles
|
|
from senlin.api.openstack.v1 import receivers
|
|
from senlin.api.openstack.v1 import services
|
|
from senlin.api.openstack.v1 import version
|
|
from senlin.api.openstack.v1 import webhooks
|
|
|
|
|
|
class API(wsgi.Router):
|
|
"""WSGI router for Cluster v1 REST API requests."""
|
|
|
|
def __init__(self, conf, **local_conf):
|
|
self.conf = conf
|
|
mapper = routes.Mapper()
|
|
|
|
# version
|
|
res = wsgi.Resource(version.VersionController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("version",
|
|
"/",
|
|
action="version",
|
|
conditions={'method': 'GET'})
|
|
|
|
# Profile_types
|
|
res = wsgi.Resource(profile_types.ProfileTypeController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("profile_type_index",
|
|
"/profile-types",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("profile_type_get",
|
|
"/profile-types/{type_name}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("profile_type_ops",
|
|
"/profile-types/{type_name}/ops",
|
|
action="ops",
|
|
conditions={'method': 'GET'})
|
|
|
|
# Profiles
|
|
res = wsgi.Resource(profiles.ProfileController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("profile_index",
|
|
"/profiles",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("profile_create",
|
|
"/profiles",
|
|
action="create",
|
|
conditions={'method': 'POST'},
|
|
success=201)
|
|
sub_mapper.connect("profile_get",
|
|
"/profiles/{profile_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("profile_update",
|
|
"/profiles/{profile_id}",
|
|
action="update",
|
|
conditions={'method': 'PATCH'})
|
|
sub_mapper.connect("profile_delete",
|
|
"/profiles/{profile_id}",
|
|
action="delete",
|
|
conditions={'method': 'DELETE'})
|
|
sub_mapper.connect("profile_validate",
|
|
"/profiles/validate",
|
|
action="validate",
|
|
conditions={'method': 'POST'})
|
|
|
|
# Policy Types
|
|
res = wsgi.Resource(policy_types.PolicyTypeController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
# Policy collection
|
|
sub_mapper.connect("policy_type_index",
|
|
"/policy-types",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("policy_type_get",
|
|
"/policy-types/{type_name}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
|
|
# Policies
|
|
res = wsgi.Resource(policies.PolicyController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("policy_index",
|
|
"/policies",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("policy_create",
|
|
"/policies",
|
|
action="create",
|
|
conditions={'method': 'POST'},
|
|
success=201)
|
|
sub_mapper.connect("policy_get",
|
|
"/policies/{policy_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("policy_update",
|
|
"/policies/{policy_id}",
|
|
action="update",
|
|
conditions={'method': 'PATCH'})
|
|
sub_mapper.connect("policy_delete",
|
|
"/policies/{policy_id}",
|
|
action="delete",
|
|
conditions={'method': 'DELETE'})
|
|
sub_mapper.connect("policy_validate",
|
|
"/policies/validate",
|
|
action="validate",
|
|
conditions={'method': 'POST'})
|
|
|
|
# Clusters
|
|
res = wsgi.Resource(clusters.ClusterController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("cluster_index",
|
|
"/clusters",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("cluster_create",
|
|
"/clusters",
|
|
action="create",
|
|
conditions={'method': 'POST'},
|
|
success=202)
|
|
sub_mapper.connect("cluster_get",
|
|
"/clusters/{cluster_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("cluster_update",
|
|
"/clusters/{cluster_id}",
|
|
action="update",
|
|
conditions={'method': 'PATCH'},
|
|
success=202)
|
|
sub_mapper.connect("cluster_action",
|
|
"/clusters/{cluster_id}/actions",
|
|
action="action",
|
|
conditions={'method': 'POST'},
|
|
success=202)
|
|
sub_mapper.connect("cluster_collect",
|
|
"/clusters/{cluster_id}/attrs/{path}",
|
|
action="collect",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("cluster_delete",
|
|
"/clusters/{cluster_id}",
|
|
action="delete",
|
|
conditions={'method': 'DELETE'},
|
|
success=202)
|
|
sub_mapper.connect("cluster_operation",
|
|
"/clusters/{cluster_id}/ops",
|
|
action="operation",
|
|
conditions={'method': 'POST'},
|
|
success=202)
|
|
|
|
# Nodes
|
|
res = wsgi.Resource(nodes.NodeController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("node_index",
|
|
"/nodes",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("node_create",
|
|
"/nodes",
|
|
action="create",
|
|
conditions={'method': 'POST'},
|
|
success=202)
|
|
sub_mapper.connect("node_adopt",
|
|
"/nodes/adopt",
|
|
action="adopt",
|
|
conditions={'method': 'POST'})
|
|
sub_mapper.connect("node_adopt_preview",
|
|
"/nodes/adopt-preview",
|
|
action="adopt_preview",
|
|
conditions={'method': 'POST'})
|
|
sub_mapper.connect("node_get",
|
|
"/nodes/{node_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("node_update",
|
|
"/nodes/{node_id}",
|
|
action="update",
|
|
conditions={'method': 'PATCH'},
|
|
success=202)
|
|
sub_mapper.connect("node_action",
|
|
"/nodes/{node_id}/actions",
|
|
action="action",
|
|
conditions={'method': 'POST'},
|
|
success=202)
|
|
sub_mapper.connect("node_delete",
|
|
"/nodes/{node_id}",
|
|
action="delete",
|
|
conditions={'method': 'DELETE'},
|
|
success=202)
|
|
sub_mapper.connect("node_operation",
|
|
"/nodes/{node_id}/ops",
|
|
action="operation",
|
|
conditions={'method': 'POST'},
|
|
success=202)
|
|
|
|
# Cluster Policies
|
|
res = wsgi.Resource(cluster_policies.ClusterPolicyController(conf))
|
|
policies_path = "/clusters/{cluster_id}"
|
|
with mapper.submapper(controller=res,
|
|
path_prefix=policies_path) as sub_mapper:
|
|
sub_mapper.connect("cluster_policy_list",
|
|
"/policies",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("cluster_policy_show",
|
|
"/policies/{policy_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
|
|
# Actions
|
|
res = wsgi.Resource(actions.ActionController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("action_index",
|
|
"/actions",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("action_create",
|
|
"/actions",
|
|
action="create",
|
|
conditions={'method': 'POST'},
|
|
success=201)
|
|
sub_mapper.connect("action_get",
|
|
"/actions/{action_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("action_update",
|
|
"/actions/{action_id}",
|
|
action="update",
|
|
conditions={'method': 'PATCH'})
|
|
|
|
# Receivers
|
|
res = wsgi.Resource(receivers.ReceiverController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("receivers_index",
|
|
"/receivers",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("receiver_create",
|
|
"/receivers",
|
|
action="create",
|
|
conditions={'method': 'POST'},
|
|
success=201)
|
|
sub_mapper.connect("receiver_get",
|
|
"/receivers/{receiver_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("receiver_update",
|
|
"/receivers/{receiver_id}",
|
|
action="update",
|
|
conditions={'method': 'PATCH'})
|
|
sub_mapper.connect("receiver_delete",
|
|
"/receivers/{receiver_id}",
|
|
action="delete",
|
|
conditions={'method': 'DELETE'})
|
|
sub_mapper.connect("receiver_notify",
|
|
"/receivers/{receiver_id}/notify",
|
|
action="notify",
|
|
conditions={'method': 'POST'})
|
|
|
|
# Webhooks
|
|
res = wsgi.Resource(webhooks.WebhookController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("webhook_trigger",
|
|
"/webhooks/{webhook_id}/trigger",
|
|
action="trigger",
|
|
conditions={'method': 'POST'},
|
|
success=202)
|
|
|
|
# Events
|
|
res = wsgi.Resource(events.EventController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("event_index",
|
|
"/events",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
sub_mapper.connect("event_get",
|
|
"/events/{event_id}",
|
|
action="get",
|
|
conditions={'method': 'GET'})
|
|
|
|
# Info
|
|
res = wsgi.Resource(build_info.BuildInfoController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("build_info",
|
|
"/build-info",
|
|
action="build_info",
|
|
conditions={'method': 'GET'})
|
|
|
|
super(API, self).__init__(mapper)
|
|
|
|
# Services
|
|
res = wsgi.Resource(services.ServiceController(conf))
|
|
with mapper.submapper(controller=res) as sub_mapper:
|
|
|
|
sub_mapper.connect("service_index",
|
|
"/services",
|
|
action="index",
|
|
conditions={'method': 'GET'})
|
|
|
|
super(API, self).__init__(mapper)
|