fix:增加openstack 接口

This commit is contained in:
qiwang 2023-09-04 08:34:36 +08:00
parent 640946f6f0
commit df4720f104
12 changed files with 2180 additions and 1823 deletions

View File

@ -249,4 +249,6 @@ service pcm {
get /vm/listVolumeTypes (ListVolumeTypesReq) returns (ListVolumeTypesResp)
@handler CreateImageHandler
post /vm/createImage (CreateImageReq) returns (CreateImageResp)
@handler UploadImageHandler
post /vm/uploadImage (UploadOsImageReq) returns (UploadOsImageResp)
}

View File

@ -206,6 +206,16 @@ type(
}
)
type(
UploadOsImageReq{
ImageId string `form:"image_id" copier:"ImageId"`
}
UploadOsImageResp {
Code int32 `json:"code,omitempty" copier:"Code"`
Msg string `json:"msg,omitempty" copier:"Msg"`
ErrorMsg string `json:"errorMsg,omitempty" copier:"ErrorMsg"`
}
)
type(
DeleteImageReq{

View File

@ -398,6 +398,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
Path: "/vm/createImage",
Handler: vm.CreateImageHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/vm/uploadImage",
Handler: vm.UploadImageHandler(serverCtx),
},
},
rest.WithPrefix("/pcm/v1"),
)

View File

@ -0,0 +1,28 @@
package vm
import (
"net/http"
"PCM/adaptor/PCM-CORE/api/internal/logic/vm"
"PCM/adaptor/PCM-CORE/api/internal/svc"
"PCM/adaptor/PCM-CORE/api/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
func UploadImageHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.UploadOsImageReq
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := vm.NewUploadImageLogic(r.Context(), svcCtx)
resp, err := l.UploadImage(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

View File

@ -0,0 +1,48 @@
package vm
import (
"PCM/adaptor/PCM-VM/PCM-OPENSTACK/rpc/openstack"
"PCM/common/result"
"PCM/common/tool"
"PCM/common/xerr"
"context"
"github.com/jinzhu/copier"
"github.com/pkg/errors"
"k8s.io/apimachinery/pkg/util/json"
"PCM/adaptor/PCM-CORE/api/internal/svc"
"PCM/adaptor/PCM-CORE/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UploadImageLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewUploadImageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UploadImageLogic {
return &UploadImageLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *UploadImageLogic) UploadImage(req *types.UploadOsImageReq) (resp *types.UploadOsImageResp, err error) {
// todo: add your logic here and delete this line
UploadOsImageReq := &openstack.UploadOsImageReq{}
err = copier.CopyWithOption(UploadOsImageReq, req, copier.Option{Converters: tool.Converters})
CreateImageResp, err := l.svcCtx.OpenstackRpc.UploadImage(l.ctx, UploadOsImageReq)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrMsg("c端创建失败"), "c端创建失败 : %v ,req:%+v", err, req)
}
marshal, err := json.Marshal(&CreateImageResp)
if err != nil {
return nil, result.NewDefaultError(err.Error())
}
json.Unmarshal(marshal, &resp)
err = copier.CopyWithOption(&resp, &CreateImageResp, copier.Option{Converters: tool.Converters})
return resp, err
}

View File

@ -2253,6 +2253,16 @@ type CreateImageResp struct {
ErrorMsg string `json:"errorMsg,omitempty" copier:"ErrorMsg"`
}
type UploadOsImageReq struct {
ImageId string `form:"image_id" copier:"ImageId"`
}
type UploadOsImageResp struct {
Code int32 `json:"code,omitempty" copier:"Code"`
Msg string `json:"msg,omitempty" copier:"Msg"`
ErrorMsg string `json:"errorMsg,omitempty" copier:"ErrorMsg"`
}
type DeleteImageReq struct {
ImageId string `form:"image_id" copier:"ImageId"`
}

View File

@ -0,0 +1,52 @@
package logic
import (
"PCM/adaptor/PCM-VM/PCM-OPENSTACK/rpc/internal/common"
"PCM/common/tool"
"context"
"fmt"
"k8s.io/apimachinery/pkg/util/json"
"PCM/adaptor/PCM-VM/PCM-OPENSTACK/rpc/internal/svc"
"PCM/adaptor/PCM-VM/PCM-OPENSTACK/rpc/openstack"
"github.com/zeromicro/go-zero/core/logx"
)
type UploadImageLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewUploadImageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UploadImageLogic {
return &UploadImageLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *UploadImageLogic) UploadImage(in *openstack.UploadOsImageReq) (*openstack.UploadOsImageResp, error) {
// todo: add your logic here and delete this line
var resp openstack.UploadOsImageResp
openstackUrl := "http://10.105.20.9:9292"
token := common.GetToken()
statusCode, body, err := tool.HttpClientWithBodyAndCode(tool.PUT, openstackUrl+"/v2/images/"+in.ImageId+"/file", nil, token)
if err != nil {
return nil, err
}
if statusCode == 204 {
err := json.Unmarshal(body, &resp)
if err != nil {
fmt.Println(err)
}
resp.Code = 200
resp.Msg = "Success"
} else if statusCode != 204 {
json.Unmarshal(body, &resp)
resp.Code = 400
resp.Msg = "Failure"
}
return &resp, nil
}

View File

@ -130,6 +130,11 @@ func (s *OpenstackServer) DeleteImage(ctx context.Context, in *openstack.DeleteI
return l.DeleteImage(in)
}
func (s *OpenstackServer) UploadImage(ctx context.Context, in *openstack.UploadOsImageReq) (*openstack.UploadOsImageResp, error) {
l := logic.NewUploadImageLogic(ctx, s.svcCtx)
return l.UploadImage(in)
}
// Bare Metal
func (s *OpenstackServer) ListNodes(ctx context.Context, in *openstack.ListNodesReq) (*openstack.ListNodesResp, error) {
l := logic.NewListNodesLogic(ctx, s.svcCtx)

File diff suppressed because it is too large Load Diff

View File

@ -46,6 +46,7 @@ type OpenstackClient interface {
CreateImage(ctx context.Context, in *CreateImageReq, opts ...grpc.CallOption) (*CreateImageResp, error)
LisImages(ctx context.Context, in *ListImagesReq, opts ...grpc.CallOption) (*ListImagesResp, error)
DeleteImage(ctx context.Context, in *DeleteImageReq, opts ...grpc.CallOption) (*DeleteImageResp, error)
UploadImage(ctx context.Context, in *UploadOsImageReq, opts ...grpc.CallOption) (*UploadOsImageResp, error)
// Bare Metal
ListNodes(ctx context.Context, in *ListNodesReq, opts ...grpc.CallOption) (*ListNodesResp, error)
CreateNode(ctx context.Context, in *CreateNodeReq, opts ...grpc.CallOption) (*CreateNodeResp, error)
@ -259,6 +260,15 @@ func (c *openstackClient) DeleteImage(ctx context.Context, in *DeleteImageReq, o
return out, nil
}
func (c *openstackClient) UploadImage(ctx context.Context, in *UploadOsImageReq, opts ...grpc.CallOption) (*UploadOsImageResp, error) {
out := new(UploadOsImageResp)
err := c.cc.Invoke(ctx, "/openstack.Openstack/UploadImage", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *openstackClient) ListNodes(ctx context.Context, in *ListNodesReq, opts ...grpc.CallOption) (*ListNodesResp, error) {
out := new(ListNodesResp)
err := c.cc.Invoke(ctx, "/openstack.Openstack/ListNodes", in, out, opts...)
@ -395,6 +405,7 @@ type OpenstackServer interface {
CreateImage(context.Context, *CreateImageReq) (*CreateImageResp, error)
LisImages(context.Context, *ListImagesReq) (*ListImagesResp, error)
DeleteImage(context.Context, *DeleteImageReq) (*DeleteImageResp, error)
UploadImage(context.Context, *UploadOsImageReq) (*UploadOsImageResp, error)
// Bare Metal
ListNodes(context.Context, *ListNodesReq) (*ListNodesResp, error)
CreateNode(context.Context, *CreateNodeReq) (*CreateNodeResp, error)
@ -479,6 +490,9 @@ func (UnimplementedOpenstackServer) LisImages(context.Context, *ListImagesReq) (
func (UnimplementedOpenstackServer) DeleteImage(context.Context, *DeleteImageReq) (*DeleteImageResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteImage not implemented")
}
func (UnimplementedOpenstackServer) UploadImage(context.Context, *UploadOsImageReq) (*UploadOsImageResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method UploadImage not implemented")
}
func (UnimplementedOpenstackServer) ListNodes(context.Context, *ListNodesReq) (*ListNodesResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListNodes not implemented")
}
@ -906,6 +920,24 @@ func _Openstack_DeleteImage_Handler(srv interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler)
}
func _Openstack_UploadImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UploadOsImageReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(OpenstackServer).UploadImage(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/openstack.Openstack/UploadImage",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OpenstackServer).UploadImage(ctx, req.(*UploadOsImageReq))
}
return interceptor(ctx, in, info, handler)
}
func _Openstack_ListNodes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListNodesReq)
if err := dec(in); err != nil {
@ -1213,6 +1245,10 @@ var Openstack_ServiceDesc = grpc.ServiceDesc{
MethodName: "DeleteImage",
Handler: _Openstack_DeleteImage_Handler,
},
{
MethodName: "UploadImage",
Handler: _Openstack_UploadImage_Handler,
},
{
MethodName: "ListNodes",
Handler: _Openstack_ListNodes_Handler,

View File

@ -17,7 +17,6 @@ type (
BulkCreateNetworksReq = openstack.BulkCreateNetworksReq
BulkCreateNetworksResp = openstack.BulkCreateNetworksResp
CreateImageReq = openstack.CreateImageReq
CreateImageReq_Tags = openstack.CreateImageReq_Tags
CreateImageResp = openstack.CreateImageResp
CreateImageResp_Locations = openstack.CreateImageResp_Locations
CreateImageResp_Tags = openstack.CreateImageResp_Tags
@ -181,6 +180,7 @@ type (
StopServerResp = openstack.StopServerResp
Subnet = openstack.Subnet
SubnetResp = openstack.SubnetResp
Tags = openstack.Tags
UpdateNetworkReq = openstack.UpdateNetworkReq
UpdateNetworkResp = openstack.UpdateNetworkResp
UpdateServerReq = openstack.UpdateServerReq
@ -204,6 +204,8 @@ type (
UpdateVolumeResp_Links = openstack.UpdateVolumeResp_Links
UpdateVolumeResp_Metadata = openstack.UpdateVolumeResp_Metadata
UpdateVolumeResp_Volume = openstack.UpdateVolumeResp_Volume
UploadOsImageReq = openstack.UploadOsImageReq
UploadOsImageResp = openstack.UploadOsImageResp
Openstack interface {
// Servers
@ -230,6 +232,7 @@ type (
CreateImage(ctx context.Context, in *CreateImageReq, opts ...grpc.CallOption) (*CreateImageResp, error)
LisImages(ctx context.Context, in *ListImagesReq, opts ...grpc.CallOption) (*ListImagesResp, error)
DeleteImage(ctx context.Context, in *DeleteImageReq, opts ...grpc.CallOption) (*DeleteImageResp, error)
UploadImage(ctx context.Context, in *UploadOsImageReq, opts ...grpc.CallOption) (*UploadOsImageResp, error)
// Bare Metal
ListNodes(ctx context.Context, in *ListNodesReq, opts ...grpc.CallOption) (*ListNodesResp, error)
CreateNode(ctx context.Context, in *CreateNodeReq, opts ...grpc.CallOption) (*CreateNodeResp, error)
@ -365,6 +368,11 @@ func (m *defaultOpenstack) DeleteImage(ctx context.Context, in *DeleteImageReq,
return client.DeleteImage(ctx, in, opts...)
}
func (m *defaultOpenstack) UploadImage(ctx context.Context, in *UploadOsImageReq, opts ...grpc.CallOption) (*UploadOsImageResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())
return client.UploadImage(ctx, in, opts...)
}
// Bare Metal
func (m *defaultOpenstack) ListNodes(ctx context.Context, in *ListNodesReq, opts ...grpc.CallOption) (*ListNodesResp, error) {
client := openstack.NewOpenstackClient(m.cli.Conn())

View File

@ -1542,13 +1542,15 @@ message DeleteImageResp{
string error_msg =3;// @gotags: copier:"ErrorMsg"
}
message UploadImageReq{
message UploadOsImageReq{
string image_id = 1; // @gotags: copier:"ImageId"
}
message UploadImageResp{
message UploadOsImageResp{
int32 code = 1; // @gotags: copier:"Code"
string msg = 2; // @gotags: copier:"Msg"
string error_msg =3;// @gotags: copier:"ErrorMsg"
}
/******************WangQi Images API End*************************/
@ -1929,7 +1931,7 @@ service Openstack {
rpc CreateImage(CreateImageReq) returns (CreateImageResp);
rpc LisImages(ListImagesReq) returns (ListImagesResp);
rpc DeleteImage(DeleteImageReq) returns (DeleteImageResp);
rpc UploadImage(UploadImageReq) returns (UploadImageResp);
rpc UploadImage(UploadOsImageReq) returns (UploadOsImageResp);
// Bare Metal
rpc ListNodes(ListNodesReq) returns (ListNodesResp);