Skip to content

Commit

Permalink
Add project-scoped API endpoints for OpenStack (#5489)
Browse files Browse the repository at this point in the history
* Add project-scoped API endpoints for Openstack

Signed-off-by: Marvin Beckers <marvin@kubermatic.com>

* Add prefix to openstack-specific multi-tenancy fields

Signed-off-by: Marvin Beckers <marvin@kubermatic.com>

* Update swagger

Signed-off-by: Marvin Beckers <marvin@kubermatic.com>

* Update generated apiclient

Signed-off-by: Marvin Beckers <marvin@kubermatic.com>

* Fix double entry for listOpenstackServerGroups

Signed-off-by: Marvin Beckers <marvin@kubermatic.com>

* Fix comments

Signed-off-by: Marvin Beckers <marvin@kubermatic.com>

Signed-off-by: Marvin Beckers <marvin@kubermatic.com>
  • Loading branch information
embik committed Jan 3, 2023
1 parent 3015c68 commit 4661a6c
Show file tree
Hide file tree
Showing 22 changed files with 6,610 additions and 230 deletions.
921 changes: 849 additions & 72 deletions modules/api/cmd/kubermatic-api/swagger.json

Large diffs are not rendered by default.

471 changes: 445 additions & 26 deletions modules/api/pkg/handler/v2/provider/openstack.go

Large diffs are not rendered by default.

228 changes: 206 additions & 22 deletions modules/api/pkg/handler/v2/routes_v2.go
Expand Up @@ -836,32 +836,40 @@ func (r Routing) RegisterV2(mux *mux.Router, oidcKubeConfEndpoint bool, oidcCfg
Path("/projects/{project_id}/providers/digitalocean/sizes").
Handler(r.listProjectDigitaloceanSizes())
// Openstack endpoints
mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/sizes").
Handler(r.listProjectOpenstackSizes())
*/

mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/tenants").
Handler(r.listProjectOpenstackTenants())
// Openstack endpoints
mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/sizes").
Handler(r.listProjectOpenstackSizes())

mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/networks").
Handler(r.listProjectOpenstackNetworks())
mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/tenants").
Handler(r.listProjectOpenstackTenants())

mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/securitygroups").
Handler(r.listProjectOpenstackSecurityGroups())
mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/networks").
Handler(r.listProjectOpenstackNetworks())

mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/subnets").
Handler(r.listProjectOpenstackSubnets())
mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/securitygroups").
Handler(r.listProjectOpenstackSecurityGroups())

mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/availabilityzones").
Handler(r.listProjectOpenstackAvailabilityZones())
mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/subnets").
Handler(r.listProjectOpenstackSubnets())

*/
mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/availabilityzones").
Handler(r.listProjectOpenstackAvailabilityZones())

mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/subnetpools").
Handler(r.listProjectOpenstackSubnetPools())

mux.Methods(http.MethodGet).
Path("/projects/{project_id}/providers/openstack/servergroups").
Handler(r.listProjectOpenstackServerGroups())

// Equinix Metal (Packet) endpoints
mux.Methods(http.MethodGet).
Expand Down Expand Up @@ -4135,7 +4143,7 @@ func (r Routing) listOpenstackServerGroups() http.Handler {
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackServerGroupEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle)),
)(provider.OpenstackServerGroupEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle, false)),
provider.DecodeOpenstackReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
Expand Down Expand Up @@ -4207,7 +4215,7 @@ func (r Routing) listOpenstackSubnetPools() http.Handler {
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackSubnetPoolEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle)),
)(provider.OpenstackSubnetPoolEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle, false)),
provider.DecodeOpenstackSubnetPoolReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
Expand Down Expand Up @@ -6240,6 +6248,182 @@ func (r Routing) listProjectAnexiaTemplates() http.Handler {
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/sizes openstack listProjectOpenstackSizes
//
// Lists sizes from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackSize
func (r Routing) listProjectOpenstackSizes() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackSizeEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.settingsProvider, r.caBundle)),
provider.DecodeOpenstackProjectReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/availabilityzones openstack listProjectOpenstackAvailabilityZones
//
// Lists availability zones from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackAvailabilityZone
func (r Routing) listProjectOpenstackAvailabilityZones() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackAvailabilityZoneEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle)),
provider.DecodeOpenstackProjectReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/networks openstack listProjectOpenstackNetworks
//
// Lists networks from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackNetwork
func (r Routing) listProjectOpenstackNetworks() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackNetworkEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle)),
provider.DecodeOpenstackProjectReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/subnets openstack listProjectOpenstackSubnets
//
// Lists subnets from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackSubnet
func (r Routing) listProjectOpenstackSubnets() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackSubnetsEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle)),
provider.DecodeOpenstackProjectSubnetReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/securitygroups openstack listProjectOpenstackSecurityGroups
//
// Lists security groups from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackSecurityGroup
func (r Routing) listProjectOpenstackSecurityGroups() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackSecurityGroupEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle)),
provider.DecodeOpenstackProjectReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/tenants openstack listProjectOpenstackTenants
//
// Lists tenants from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackTenant
func (r Routing) listProjectOpenstackTenants() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackTenantEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle)),
provider.DecodeOpenstackProjectTenantReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/subnetpools openstack listProjectOpenstackSubnetPools
//
// Lists subnet pools from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackSubnetPool
func (r Routing) listProjectOpenstackSubnetPools() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackSubnetPoolEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle, true)),
provider.DecodeOpenstackProjectSubnetPoolReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/projects/{project_id}/providers/openstack/servergroups openstack listProjectOpenstackServerGroups
//
// Lists server groups from openstack
//
// Produces:
// - application/json
//
// Responses:
// default: errorResponse
// 200: []OpenstackServerGroup
func (r Routing) listProjectOpenstackServerGroups() http.Handler {
return httptransport.NewServer(
endpoint.Chain(
middleware.TokenVerifier(r.tokenVerifiers, r.userProvider),
middleware.UserSaver(r.userProvider),
)(provider.OpenstackServerGroupEndpoint(r.seedsGetter, r.presetProvider, r.userInfoGetter, r.caBundle, true)),
provider.DecodeOpenstackProjectReq,
handler.EncodeJSON,
r.defaultServerOptions()...,
)
}

// swagger:route GET /api/v2/seeds/{seed_name}/settings seed getSeedSettings
//
// Gets the seed settings.
Expand Down

0 comments on commit 4661a6c

Please sign in to comment.