forked from vmware/vic
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Define an OpenAPI document for vic-machine
Use an OpenAPI (Swagger) document to define a preliminary API for vic-machine based on the vic-machine API design document (vmware#6116). This document is expected to evolve as implementation proceeds.
- Loading branch information
Showing
6 changed files
with
1,160 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// Copyright 2017 VMware, Inc. All Rights Reserved. | ||
// | ||
// 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. | ||
|
||
package main | ||
|
||
import ( | ||
"log" | ||
"os" | ||
|
||
loads "github.com/go-openapi/loads" | ||
flags "github.com/jessevdk/go-flags" | ||
|
||
"github.com/vmware/vic/lib/apiservers/service/restapi" | ||
"github.com/vmware/vic/lib/apiservers/service/restapi/operations" | ||
) | ||
|
||
// This file was generated by the swagger tool. | ||
// Make sure not to overwrite this file after you generated it because all your edits would be lost! | ||
|
||
func main() { | ||
|
||
swaggerSpec, err := loads.Analyzed(restapi.SwaggerJSON, "") | ||
if err != nil { | ||
log.Fatalln(err) | ||
} | ||
|
||
api := operations.NewVicMachineAPI(swaggerSpec) | ||
server := restapi.NewServer(api) | ||
defer server.Shutdown() | ||
|
||
parser := flags.NewParser(server, flags.Default) | ||
parser.ShortDescription = "vic-machine API" | ||
parser.LongDescription = "An API for interacting with vic-machine as a RESTful web service." | ||
|
||
server.ConfigureFlags() | ||
for _, optsGroup := range api.CommandLineOptionsGroups { | ||
_, err := parser.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options) | ||
if err != nil { | ||
log.Fatalln(err) | ||
} | ||
} | ||
|
||
if _, err := parser.Parse(); err != nil { | ||
code := 1 | ||
if fe, ok := err.(*flags.Error); ok { | ||
if fe.Type == flags.ErrHelp { | ||
code = 0 | ||
} | ||
} | ||
os.Exit(code) | ||
} | ||
|
||
server.ConfigureAPI() | ||
|
||
if err := server.Serve(); err != nil { | ||
log.Fatalln(err) | ||
} | ||
|
||
} |
175 changes: 175 additions & 0 deletions
175
lib/apiservers/service/restapi/configure_vic_machine.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,175 @@ | ||
// Copyright 2017 VMware, Inc. All Rights Reserved. | ||
// | ||
// 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. | ||
|
||
package restapi | ||
|
||
import ( | ||
"crypto/tls" | ||
"net/http" | ||
|
||
"github.com/go-openapi/errors" | ||
"github.com/go-openapi/runtime" | ||
"github.com/go-openapi/runtime/middleware" | ||
"github.com/tylerb/graceful" | ||
|
||
"github.com/vmware/vic/lib/apiservers/service/restapi/operations" | ||
) | ||
|
||
// This file is safe to edit. Once it exists it will not be overwritten | ||
|
||
//go:generate swagger generate server --target ../lib/apiservers/service --name --spec ../lib/apiservers/service/swagger.json --exclude-main | ||
|
||
func configureFlags(api *operations.VicMachineAPI) { | ||
// api.CommandLineOptionsGroups = []swag.CommandLineOptionsGroup{ ... } | ||
} | ||
|
||
func configureAPI(api *operations.VicMachineAPI) http.Handler { | ||
// configure the api here | ||
api.ServeError = errors.ServeError | ||
|
||
// Set your custom logger if needed. Default one is log.Printf | ||
// Expected interface func(string, ...interface{}) | ||
// | ||
// Example: | ||
// s.api.Logger = log.Printf | ||
|
||
api.JSONConsumer = runtime.JSONConsumer() | ||
|
||
api.JSONProducer = runtime.JSONProducer() | ||
|
||
api.TxtProducer = runtime.TextProducer() | ||
|
||
// Applies when the Authorization header is set with the Basic scheme | ||
api.BasicAuth = func(user string, pass string) (interface{}, error) { | ||
return nil, errors.NotImplemented("basic auth (basic) has not yet been implemented") | ||
} | ||
|
||
// GET /container | ||
api.GetHandler = operations.GetHandlerFunc(func(params operations.GetParams) middleware.Responder { | ||
return middleware.NotImplemented("operation .Get has not yet been implemented") | ||
}) | ||
|
||
// GET /container/version | ||
api.GetVersionHandler = operations.GetVersionHandlerFunc(func(params operations.GetVersionParams) middleware.Responder { | ||
return middleware.NotImplemented("operation .GetVersion has not yet been implemented") | ||
}) | ||
|
||
// POST /container/target/{target} | ||
api.PostTargetTargetHandler = operations.PostTargetTargetHandlerFunc(func(params operations.PostTargetTargetParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PostTargetTarget has not yet been implemented") | ||
}) | ||
|
||
// GET /container/target/{target}/vch | ||
api.GetTargetTargetVchHandler = operations.GetTargetTargetVchHandlerFunc(func(params operations.GetTargetTargetVchParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .GetTargetTargetVch has not yet been implemented") | ||
}) | ||
|
||
// POST /container/target/{target}/vch | ||
api.PostTargetTargetVchHandler = operations.PostTargetTargetVchHandlerFunc(func(params operations.PostTargetTargetVchParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PostTargetTargetVch has not yet been implemented") | ||
}) | ||
|
||
// GET /container/target/{target}/vch/{vch-id} | ||
api.GetTargetTargetVchVchIDHandler = operations.GetTargetTargetVchVchIDHandlerFunc(func(params operations.GetTargetTargetVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .GetTargetTargetVchVchID has not yet been implemented") | ||
}) | ||
|
||
// PUT /container/target/{target}/vch/{vch-id} | ||
api.PutTargetTargetVchVchIDHandler = operations.PutTargetTargetVchVchIDHandlerFunc(func(params operations.PutTargetTargetVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PutTargetTargetVchVchID has not yet been implemented") | ||
}) | ||
|
||
// PATCH /container/target/{target}/vch/{vch-id} | ||
api.PatchTargetTargetVchVchIDHandler = operations.PatchTargetTargetVchVchIDHandlerFunc(func(params operations.PatchTargetTargetVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PatchTargetTargetVchVchID has not yet been implemented") | ||
}) | ||
|
||
// POST /container/target/{target}/vch/{vch-id} | ||
api.PostTargetTargetVchVchIDHandler = operations.PostTargetTargetVchVchIDHandlerFunc(func(params operations.PostTargetTargetVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PostTargetTargetVchVchID has not yet been implemented") | ||
}) | ||
|
||
// DELETE /container/target/{target}/vch/{vch-id} | ||
api.DeleteTargetTargetVchVchIDHandler = operations.DeleteTargetTargetVchVchIDHandlerFunc(func(params operations.DeleteTargetTargetVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .DeleteTargetTargetVchVchID has not yet been implemented") | ||
}) | ||
|
||
// POST /container/target/{target}/datacenter/{datacenter} | ||
api.PostTargetTargetDatacenterDatacenterHandler = operations.PostTargetTargetDatacenterDatacenterHandlerFunc(func(params operations.PostTargetTargetDatacenterDatacenterParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PostTargetTargetDatacenterDatacenter has not yet been implemented") | ||
}) | ||
|
||
// GET /container/target/{target}/datacenter/{datacenter}/vch | ||
api.GetTargetTargetDatacenterDatacenterVchHandler = operations.GetTargetTargetDatacenterDatacenterVchHandler(func(params operations.GetTargetTargetDatacenterDatacenterVchHandler, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .GetTargetTargetDatacenterDatacenterVchHandler has not yet been implemented") | ||
}) | ||
|
||
// POST /container/target/{target}/datacenter/{datacenter}/vch | ||
api.PostTargetTargetDatacenterDatacenterVchHandler = operations.PostTargetTargetDatacenterDatacenterVchHandlerFunc(func(params operations.PostTargetTargetDatacenterDatacenterVchParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PostTargetTargetDatacenterDatacenterVch has not yet been implemented") | ||
}) | ||
|
||
// GET /container/target/{target}/datacenter/{datacenter}/vch/{vch-id} | ||
api.GetTargetTargetDatacenterDatacenterVchVchIDHandler = operations.GetTargetTargetDatacenterDatacenterVchVchIDHandlerFunc(func(params operations.GetTargetTargetDatacenterDatacenterVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .GetTargetTargetDatacenterDatacenterVchVchID has not yet been implemented") | ||
}) | ||
|
||
// PUT /container/target/{target}/datacenter/{datacenter}/vch/{vch-id} | ||
api.PutTargetTargetDatacenterDatacenterVchVchIDHandler = operations.PutTargetTargetDatacenterDatacenterVchVchIDHandlerFunc(func(params operations.PutTargetTargetDatacenterDatacenterVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PutTargetTargetDatacenterDatacenterVchVchID has not yet been implemented") | ||
}) | ||
|
||
// PATCH /container/target/{target}/datacenter/{datacenter}/vch/{vch-id} | ||
api.PatchTargetTargetDatacenterDatacenterVchVchIDHandler = operations.PatchTargetTargetDatacenterDatacenterVchVchIDHandlerFunc(func(params operations.PatchTargetTargetDatacenterDatacenterVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PatchTargetTargetDatacenterDatacenterVchVchID has not yet been implemented") | ||
}) | ||
|
||
// POST /container/target/{target}/datacenter/{datacenter}/vch/{vch-id} | ||
api.PostTargetTargetDatacenterDatacenterVchVchIDHandler = operations.PostTargetTargetDatacenterDatacenterVchVchIDHandlerFunc(func(params operations.PostTargetTargetDatacenterDatacenterVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .PostTargetTargetDatacenterDatacenterVchVchID has not yet been implemented") | ||
}) | ||
|
||
// DELETE /container/target/{target}/datacenter/{datacenter}/vch/{vch-id} | ||
api.DeleteTargetTargetDatacenterDatacenterVchVchIDHandler = operations.DeleteTargetTargetDatacenterDatacenterVchVchIDHandlerFunc(func(params operations.DeleteTargetTargetDatacenterDatacenterVchVchIDParams, principal interface{}) middleware.Responder { | ||
return middleware.NotImplemented("operation .DeleteTargetTargetDatacenterDatacenterVchVchID has not yet been implemented") | ||
}) | ||
|
||
api.ServerShutdown = func() {} | ||
|
||
return setupGlobalMiddleware(api.Serve(setupMiddlewares)) | ||
} | ||
|
||
// The TLS configuration before HTTPS server starts. | ||
func configureTLS(tlsConfig *tls.Config) { | ||
// Make all necessary changes to the TLS configuration here. | ||
} | ||
|
||
// As soon as server is initialized but not run yet, this function will be called. | ||
// If you need to modify a config, store server instance to stop it individually later, this is the place. | ||
// This function can be called multiple times, depending on the number of serving schemes. | ||
// scheme value will be set accordingly: "http", "https" or "unix" | ||
func configureServer(s *graceful.Server, scheme string) { | ||
} | ||
|
||
// The middleware configuration is for the handler executors. These do not apply to the swagger.json document. | ||
// The middleware executes after routing but before authentication, binding and validation | ||
func setupMiddlewares(handler http.Handler) http.Handler { | ||
return handler | ||
} | ||
|
||
// The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. | ||
// So this is a good place to plug in a panic handling middleware, logging and metrics | ||
func setupGlobalMiddleware(handler http.Handler) http.Handler { | ||
return handler | ||
} |
Oops, something went wrong.