-
Notifications
You must be signed in to change notification settings - Fork 170
/
router.go
124 lines (106 loc) · 4.73 KB
/
router.go
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package api
import (
"time"
"github.com/Dataman-Cloud/crane/src/api/middlewares"
"github.com/Dataman-Cloud/crane/src/plugins/apiplugin"
"github.com/Dataman-Cloud/crane/src/plugins/auth"
authApi "github.com/Dataman-Cloud/crane/src/plugins/auth/api"
"github.com/Dataman-Cloud/crane/src/plugins/search"
"github.com/Dataman-Cloud/crane/src/utils/log"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
)
func (api *Api) ApiRouter() *gin.Engine {
router := gin.New()
Authorization := middlewares.Authorization
AuthorizeServiceAccess := middlewares.AuthorizeServiceAccess
router.Use(log.Ginrus(logrus.StandardLogger(), time.RFC3339, true), gin.Recovery())
router.Use(middlewares.OptionHandler())
router.Use(middlewares.CraneApiContext())
router.GET("/", func(c *gin.Context) {
c.String(200, "pass")
})
v1 := router.Group("/api/v1", Authorization, middlewares.ListIntercept())
{
v1.GET("/nodes", api.ListNodes)
v1.POST("/nodes", api.CreateNode)
v1.GET("/nodes/:node_id", api.InspectNode)
v1.GET("/nodes/:node_id/info", api.Info)
v1.PATCH("/nodes/:node_id", api.UpdateNode)
v1.DELETE("/nodes/:node_id", api.RemoveNode)
// Going to delegate to /nodes/:id
// v1.GET("/nodes/manager_info", api.ManagerInfo)
// Containers
v1.GET("/nodes/:node_id/containers/:container_id/terminal", api.ConnectContainer)
v1.GET("/nodes/:node_id/containers", api.ListContainers)
v1.GET("/nodes/:node_id/containers/:container_id", api.InspectContainer)
v1.GET("/nodes/:node_id/containers/:container_id/diff", api.DiffContainer)
v1.DELETE("/nodes/:node_id/containers/:container_id", api.DeleteContainer)
v1.GET("/nodes/:node_id/containers/:container_id/logs", api.LogsContainer)
v1.GET("/nodes/:node_id/containers/:container_id/stats", api.StatsContainer)
// Images
v1.GET("/nodes/:node_id/images", api.ListImages)
v1.GET("/nodes/:node_id/images/:image_id", api.InspectImage)
v1.GET("/nodes/:node_id/images/:image_id/history", api.ImageHistory)
v1.DELETE("/nodes/:node_id/images/:image_id", api.RemoveImage)
// Volumes
v1.GET("/nodes/:node_id/volumes", api.ListVolume)
v1.GET("/nodes/:node_id/volumes/:volume_id", api.InspectVolume)
v1.POST("/nodes/:node_id/volumes", api.CreateVolume)
v1.DELETE("/nodes/:node_id/volumes/:volume_id", api.RemoveVolume)
// Networks
v1.POST("/nodes/:node_id/networks", api.CreateNodeNetwork)
v1.GET("/nodes/:node_id/networks", api.ListNodeNetworks)
v1.GET("/nodes/:node_id/networks/:network_id", api.InspectNodeNetwork)
v1.PATCH("/nodes/:node_id/networks/:network_id", api.ConnectNodeNetwork)
v1.POST("/networks", api.CreateNetwork)
v1.GET("/networks", api.ListNetworks)
v1.DELETE("/networks/:network_id", api.RemoveNetwork)
v1.GET("/networks/:network_id", api.InspectNetwork)
v1.PATCH("/networks/:network_id", api.ConnectNetwork)
v1.POST("/stacks", api.CreateStack)
v1.GET("/stacks", api.ListStack)
v1.GET("/stacks/:namespace", api.InspectStack)
v1.DELETE("/stacks/:namespace", api.RemoveStack)
v1.PUT("/stacks/:namespace/services/:service_id", api.UpdateService)
v1.PATCH("/stacks/:namespace/services/:service_id", api.ScaleService)
v1.GET("/stacks/:namespace/services/:service_id", AuthorizeServiceAccess(auth.PermReadOnly), api.InspectService)
v1.GET("/stacks/:namespace/services", AuthorizeServiceAccess(auth.PermReadOnly), api.ListStackService)
v1.GET("/stacks/:namespace/services/:service_id/logs", api.LogsService)
v1.GET("/stacks/:namespace/services/:service_id/stats", api.StatsService)
v1.GET("/stacks/:namespace/services/:service_id/tasks", api.ListTasks)
v1.GET("/stacks/:namespace/services/:service_id/tasks/:task_id", api.InspectTask)
v1.GET("/stacks/:namespace/services/:service_id/cd_url", api.ServiceCDAddr)
}
if plugin, ok := apiplugin.ApiPlugins[apiplugin.Account]; ok {
accountApi, ok := plugin.Instance.(*authApi.AccountApi)
if ok {
accountApi.CraneDockerClient = api.Client
Authorization = accountApi.Authorization
accountApi.ApiRegister(router, middlewares.ListIntercept())
}
}
for _, plugin := range apiplugin.ApiPlugins {
if plugin.Instance != nil {
switch plugin.Name {
case apiplugin.Search:
searchApi, ok := plugin.Instance.(*search.SearchApi)
if ok {
searchApi.Indexer = search.NewCraneIndex(api.Client)
searchApi.ApiRegister(router, Authorization, middlewares.ListIntercept())
}
case apiplugin.Account:
default:
plugin.Instance.ApiRegister(router, Authorization, middlewares.ListIntercept())
}
}
}
router.PUT("/api/v1/stacks/:namespace/services/:service_id/rolling_update", api.UpdateServiceImage) // skip authorization, public access
misc := router.Group("/misc/v1")
{
misc.GET("/help", api.Help(router))
misc.GET("/config", api.CraneConfig)
misc.GET("/health", api.HealthCheck)
}
return router
}