senlin/senlin/api/openstack/v1/router.py

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)