mirror of
https://github.com/onepanelio/onepanel.git
synced 2025-10-20 20:25:16 +08:00
support kubernetes secret creation
This commit is contained in:
233
api/secret.pb.go
Normal file
233
api/secret.pb.go
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// source: secret.proto
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
fmt "fmt"
|
||||||
|
proto "github.com/golang/protobuf/proto"
|
||||||
|
empty "github.com/golang/protobuf/ptypes/empty"
|
||||||
|
_ "google.golang.org/genproto/googleapis/api/annotations"
|
||||||
|
grpc "google.golang.org/grpc"
|
||||||
|
codes "google.golang.org/grpc/codes"
|
||||||
|
status "google.golang.org/grpc/status"
|
||||||
|
math "math"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ = proto.Marshal
|
||||||
|
var _ = fmt.Errorf
|
||||||
|
var _ = math.Inf
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the proto package it is being compiled against.
|
||||||
|
// A compilation error at this line likely means your copy of the
|
||||||
|
// proto package needs to be updated.
|
||||||
|
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||||
|
|
||||||
|
type CreateSecretRequest struct {
|
||||||
|
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
|
||||||
|
Secret *Secret `protobuf:"bytes,2,opt,name=secret,proto3" json:"secret,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *CreateSecretRequest) Reset() { *m = CreateSecretRequest{} }
|
||||||
|
func (m *CreateSecretRequest) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*CreateSecretRequest) ProtoMessage() {}
|
||||||
|
func (*CreateSecretRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6acf428160d7a216, []int{0}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *CreateSecretRequest) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_CreateSecretRequest.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *CreateSecretRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_CreateSecretRequest.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *CreateSecretRequest) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_CreateSecretRequest.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *CreateSecretRequest) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_CreateSecretRequest.Size(m)
|
||||||
|
}
|
||||||
|
func (m *CreateSecretRequest) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_CreateSecretRequest.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_CreateSecretRequest proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *CreateSecretRequest) GetNamespace() string {
|
||||||
|
if m != nil {
|
||||||
|
return m.Namespace
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *CreateSecretRequest) GetSecret() *Secret {
|
||||||
|
if m != nil {
|
||||||
|
return m.Secret
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Secret struct {
|
||||||
|
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
||||||
|
Data map[string]string `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Secret) Reset() { *m = Secret{} }
|
||||||
|
func (m *Secret) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Secret) ProtoMessage() {}
|
||||||
|
func (*Secret) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6acf428160d7a216, []int{1}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Secret) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_Secret.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *Secret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_Secret.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *Secret) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_Secret.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *Secret) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_Secret.Size(m)
|
||||||
|
}
|
||||||
|
func (m *Secret) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_Secret.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_Secret proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *Secret) GetName() string {
|
||||||
|
if m != nil {
|
||||||
|
return m.Name
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Secret) GetData() map[string]string {
|
||||||
|
if m != nil {
|
||||||
|
return m.Data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
proto.RegisterType((*CreateSecretRequest)(nil), "api.CreateSecretRequest")
|
||||||
|
proto.RegisterType((*Secret)(nil), "api.Secret")
|
||||||
|
proto.RegisterMapType((map[string]string)(nil), "api.Secret.DataEntry")
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { proto.RegisterFile("secret.proto", fileDescriptor_6acf428160d7a216) }
|
||||||
|
|
||||||
|
var fileDescriptor_6acf428160d7a216 = []byte{
|
||||||
|
// 305 bytes of a gzipped FileDescriptorProto
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xcf, 0x4a, 0x03, 0x31,
|
||||||
|
0x10, 0x87, 0xc9, 0xb6, 0x16, 0x76, 0x5a, 0x41, 0xe2, 0x1f, 0x96, 0xb5, 0x87, 0xba, 0x5e, 0x2a,
|
||||||
|
0x42, 0x42, 0xeb, 0x41, 0xe9, 0x55, 0xfb, 0x02, 0xdb, 0x8b, 0xd7, 0x69, 0x1d, 0xcb, 0x62, 0xbb,
|
||||||
|
0x89, 0x9b, 0xb4, 0x50, 0x44, 0x10, 0xf1, 0x0d, 0x7c, 0x34, 0x5f, 0xc1, 0x07, 0x91, 0x4d, 0x62,
|
||||||
|
0xed, 0xc1, 0xdb, 0xe4, 0x37, 0x93, 0x2f, 0x93, 0x0f, 0x3a, 0x86, 0x66, 0x15, 0x59, 0xa1, 0x2b,
|
||||||
|
0x65, 0x15, 0x6f, 0xa0, 0x2e, 0xd2, 0xd3, 0xb9, 0x52, 0xf3, 0x05, 0x49, 0x17, 0x4d, 0x57, 0x8f,
|
||||||
|
0x92, 0x96, 0xda, 0x6e, 0xfc, 0x44, 0xda, 0x0d, 0x4d, 0xd4, 0x85, 0xc4, 0xb2, 0x54, 0x16, 0x6d,
|
||||||
|
0xa1, 0x4a, 0xe3, 0xbb, 0xd9, 0x3d, 0x1c, 0xde, 0x56, 0x84, 0x96, 0x26, 0x8e, 0x9a, 0xd3, 0xf3,
|
||||||
|
0x8a, 0x8c, 0xe5, 0x5d, 0x88, 0x4b, 0x5c, 0x92, 0xd1, 0x38, 0xa3, 0x84, 0xf5, 0x58, 0x3f, 0xce,
|
||||||
|
0xff, 0x02, 0x7e, 0x0e, 0x2d, 0xbf, 0x44, 0x12, 0xf5, 0x58, 0xbf, 0x3d, 0x6c, 0x0b, 0xd4, 0x85,
|
||||||
|
0x08, 0x84, 0xd0, 0xca, 0xde, 0x18, 0xb4, 0x7c, 0xc4, 0x39, 0x34, 0xeb, 0xcb, 0x01, 0xe4, 0x6a,
|
||||||
|
0x7e, 0x01, 0xcd, 0x07, 0xb4, 0x98, 0x44, 0xbd, 0x46, 0xbf, 0x3d, 0x3c, 0xde, 0x21, 0x88, 0x3b,
|
||||||
|
0xb4, 0x38, 0x2e, 0x6d, 0xb5, 0xc9, 0xdd, 0x48, 0x7a, 0x0d, 0xf1, 0x36, 0xe2, 0x07, 0xd0, 0x78,
|
||||||
|
0xa2, 0x4d, 0x40, 0xd5, 0x25, 0x3f, 0x82, 0xbd, 0x35, 0x2e, 0x56, 0xe4, 0x96, 0x89, 0x73, 0x7f,
|
||||||
|
0x18, 0x45, 0x37, 0x6c, 0xf8, 0xc1, 0x60, 0xdf, 0x33, 0x27, 0x54, 0xad, 0x8b, 0x19, 0x71, 0x03,
|
||||||
|
0x9d, 0xdd, 0xef, 0xf2, 0xc4, 0xbd, 0xfb, 0x8f, 0x81, 0xf4, 0x44, 0x78, 0x6f, 0xe2, 0x57, 0xaa,
|
||||||
|
0x18, 0xd7, 0x52, 0xb3, 0xc1, 0xfb, 0xd7, 0xf7, 0x67, 0x74, 0x99, 0x9d, 0xd5, 0x42, 0x8d, 0x5c,
|
||||||
|
0x0f, 0xa6, 0x64, 0x71, 0x20, 0x5f, 0xb6, 0x76, 0x5e, 0xa5, 0x17, 0x60, 0x46, 0xc1, 0xc4, 0xb4,
|
||||||
|
0xe5, 0x10, 0x57, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x86, 0x92, 0x3d, 0x4a, 0xba, 0x01, 0x00,
|
||||||
|
0x00,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ context.Context
|
||||||
|
var _ grpc.ClientConn
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the grpc package it is being compiled against.
|
||||||
|
const _ = grpc.SupportPackageIsVersion4
|
||||||
|
|
||||||
|
// SecretServiceClient is the client API for SecretService service.
|
||||||
|
//
|
||||||
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||||
|
type SecretServiceClient interface {
|
||||||
|
CreateSecret(ctx context.Context, in *CreateSecretRequest, opts ...grpc.CallOption) (*empty.Empty, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type secretServiceClient struct {
|
||||||
|
cc *grpc.ClientConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSecretServiceClient(cc *grpc.ClientConn) SecretServiceClient {
|
||||||
|
return &secretServiceClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *secretServiceClient) CreateSecret(ctx context.Context, in *CreateSecretRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
|
||||||
|
out := new(empty.Empty)
|
||||||
|
err := c.cc.Invoke(ctx, "/api.SecretService/CreateSecret", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SecretServiceServer is the server API for SecretService service.
|
||||||
|
type SecretServiceServer interface {
|
||||||
|
CreateSecret(context.Context, *CreateSecretRequest) (*empty.Empty, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnimplementedSecretServiceServer can be embedded to have forward compatible implementations.
|
||||||
|
type UnimplementedSecretServiceServer struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*UnimplementedSecretServiceServer) CreateSecret(ctx context.Context, req *CreateSecretRequest) (*empty.Empty, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method CreateSecret not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterSecretServiceServer(s *grpc.Server, srv SecretServiceServer) {
|
||||||
|
s.RegisterService(&_SecretService_serviceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _SecretService_CreateSecret_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(CreateSecretRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(SecretServiceServer).CreateSecret(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/api.SecretService/CreateSecret",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(SecretServiceServer).CreateSecret(ctx, req.(*CreateSecretRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _SecretService_serviceDesc = grpc.ServiceDesc{
|
||||||
|
ServiceName: "api.SecretService",
|
||||||
|
HandlerType: (*SecretServiceServer)(nil),
|
||||||
|
Methods: []grpc.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "CreateSecret",
|
||||||
|
Handler: _SecretService_CreateSecret_Handler,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Streams: []grpc.StreamDesc{},
|
||||||
|
Metadata: "secret.proto",
|
||||||
|
}
|
199
api/secret.pb.gw.go
Normal file
199
api/secret.pb.gw.go
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
|
||||||
|
// source: secret.proto
|
||||||
|
|
||||||
|
/*
|
||||||
|
Package api is a reverse proxy.
|
||||||
|
|
||||||
|
It translates gRPC into RESTful JSON APIs.
|
||||||
|
*/
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/descriptor"
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
||||||
|
"github.com/grpc-ecosystem/grpc-gateway/utilities"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/grpc/grpclog"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Suppress "imported and not used" errors
|
||||||
|
var _ codes.Code
|
||||||
|
var _ io.Reader
|
||||||
|
var _ status.Status
|
||||||
|
var _ = runtime.String
|
||||||
|
var _ = utilities.NewDoubleArray
|
||||||
|
var _ = descriptor.ForMessage
|
||||||
|
|
||||||
|
func request_SecretService_CreateSecret_0(ctx context.Context, marshaler runtime.Marshaler, client SecretServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||||
|
var protoReq CreateSecretRequest
|
||||||
|
var metadata runtime.ServerMetadata
|
||||||
|
|
||||||
|
newReader, berr := utilities.IOReaderFactory(req.Body)
|
||||||
|
if berr != nil {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
|
||||||
|
}
|
||||||
|
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Secret); err != nil && err != io.EOF {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
val string
|
||||||
|
ok bool
|
||||||
|
err error
|
||||||
|
_ = err
|
||||||
|
)
|
||||||
|
|
||||||
|
val, ok = pathParams["namespace"]
|
||||||
|
if !ok {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
|
||||||
|
}
|
||||||
|
|
||||||
|
protoReq.Namespace, err = runtime.String(val)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := client.CreateSecret(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
||||||
|
return msg, metadata, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func local_request_SecretService_CreateSecret_0(ctx context.Context, marshaler runtime.Marshaler, server SecretServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||||
|
var protoReq CreateSecretRequest
|
||||||
|
var metadata runtime.ServerMetadata
|
||||||
|
|
||||||
|
newReader, berr := utilities.IOReaderFactory(req.Body)
|
||||||
|
if berr != nil {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
|
||||||
|
}
|
||||||
|
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Secret); err != nil && err != io.EOF {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
val string
|
||||||
|
ok bool
|
||||||
|
err error
|
||||||
|
_ = err
|
||||||
|
)
|
||||||
|
|
||||||
|
val, ok = pathParams["namespace"]
|
||||||
|
if !ok {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
|
||||||
|
}
|
||||||
|
|
||||||
|
protoReq.Namespace, err = runtime.String(val)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := server.CreateSecret(ctx, &protoReq)
|
||||||
|
return msg, metadata, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// RegisterSecretServiceHandlerServer registers the http handlers for service SecretService to "mux".
|
||||||
|
// UnaryRPC :call SecretServiceServer directly.
|
||||||
|
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
|
||||||
|
func RegisterSecretServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SecretServiceServer) error {
|
||||||
|
|
||||||
|
mux.Handle("POST", pattern_SecretService_CreateSecret_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||||
|
ctx, cancel := context.WithCancel(req.Context())
|
||||||
|
defer cancel()
|
||||||
|
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||||
|
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp, md, err := local_request_SecretService_CreateSecret_0(rctx, inboundMarshaler, server, req, pathParams)
|
||||||
|
ctx = runtime.NewServerMetadataContext(ctx, md)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
forward_SecretService_CreateSecret_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RegisterSecretServiceHandlerFromEndpoint is same as RegisterSecretServiceHandler but
|
||||||
|
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
|
||||||
|
func RegisterSecretServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
|
||||||
|
conn, err := grpc.Dial(endpoint, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
if cerr := conn.Close(); cerr != nil {
|
||||||
|
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
<-ctx.Done()
|
||||||
|
if cerr := conn.Close(); cerr != nil {
|
||||||
|
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}()
|
||||||
|
|
||||||
|
return RegisterSecretServiceHandler(ctx, mux, conn)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RegisterSecretServiceHandler registers the http handlers for service SecretService to "mux".
|
||||||
|
// The handlers forward requests to the grpc endpoint over "conn".
|
||||||
|
func RegisterSecretServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
|
||||||
|
return RegisterSecretServiceHandlerClient(ctx, mux, NewSecretServiceClient(conn))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RegisterSecretServiceHandlerClient registers the http handlers for service SecretService
|
||||||
|
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SecretServiceClient".
|
||||||
|
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SecretServiceClient"
|
||||||
|
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
|
||||||
|
// "SecretServiceClient" to call the correct interceptors.
|
||||||
|
func RegisterSecretServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SecretServiceClient) error {
|
||||||
|
|
||||||
|
mux.Handle("POST", pattern_SecretService_CreateSecret_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||||
|
ctx, cancel := context.WithCancel(req.Context())
|
||||||
|
defer cancel()
|
||||||
|
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||||
|
rctx, err := runtime.AnnotateContext(ctx, mux, req)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp, md, err := request_SecretService_CreateSecret_0(rctx, inboundMarshaler, client, req, pathParams)
|
||||||
|
ctx = runtime.NewServerMetadataContext(ctx, md)
|
||||||
|
if err != nil {
|
||||||
|
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
forward_SecretService_CreateSecret_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
pattern_SecretService_CreateSecret_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "secrets"}, "", runtime.AssumeColonVerbOpt(true)))
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
forward_SecretService_CreateSecret_0 = runtime.ForwardResponseMessage
|
||||||
|
)
|
25
api/secret.proto
Normal file
25
api/secret.proto
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package api;
|
||||||
|
|
||||||
|
import "google/protobuf/empty.proto";
|
||||||
|
import "google/api/annotations.proto";
|
||||||
|
|
||||||
|
service SecretService {
|
||||||
|
rpc CreateSecret (CreateSecretRequest) returns (google.protobuf.Empty) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/apis/v1beta1/{namespace}/secrets"
|
||||||
|
body: "secret"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message CreateSecretRequest {
|
||||||
|
string namespace = 1;
|
||||||
|
Secret secret = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Secret {
|
||||||
|
string name = 1;
|
||||||
|
map<string, string> data = 2;
|
||||||
|
}
|
63
api/secret.swagger.json
Normal file
63
api/secret.swagger.json
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
"swagger": "2.0",
|
||||||
|
"info": {
|
||||||
|
"title": "secret.proto",
|
||||||
|
"version": "version not set"
|
||||||
|
},
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"/apis/v1beta1/{namespace}/secrets": {
|
||||||
|
"post": {
|
||||||
|
"operationId": "CreateSecret",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "A successful response.",
|
||||||
|
"schema": {
|
||||||
|
"properties": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "namespace",
|
||||||
|
"in": "path",
|
||||||
|
"required": true,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/apiSecret"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"SecretService"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"apiSecret": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
go.mod
2
go.mod
@@ -40,7 +40,7 @@ require (
|
|||||||
google.golang.org/grpc v1.25.1
|
google.golang.org/grpc v1.25.1
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.2.7 // indirect
|
gopkg.in/yaml.v2 v2.2.7 // indirect
|
||||||
k8s.io/api v0.0.0-20190313235455-40a48860b5ab // indirect
|
k8s.io/api v0.0.0-20190313235455-40a48860b5ab
|
||||||
k8s.io/apimachinery v0.0.0-20190313205120-d7deff9243b1
|
k8s.io/apimachinery v0.0.0-20190313205120-d7deff9243b1
|
||||||
k8s.io/client-go v11.0.0+incompatible
|
k8s.io/client-go v11.0.0+incompatible
|
||||||
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a // indirect
|
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a // indirect
|
||||||
|
29
kube/kube.go
Normal file
29
kube/kube.go
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package kube
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
|
"k8s.io/client-go/rest"
|
||||||
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
*kubernetes.Clientset
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(configPath ...string) (client *Client) {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
config *rest.Config
|
||||||
|
)
|
||||||
|
|
||||||
|
if len(configPath) == 0 {
|
||||||
|
config, err = rest.InClusterConfig()
|
||||||
|
} else {
|
||||||
|
config, err = clientcmd.BuildConfigFromFlags("", configPath[0])
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Client{Clientset: kubernetes.NewForConfigOrDie(config)}
|
||||||
|
}
|
22
kube/secret.go
Normal file
22
kube/secret.go
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package kube
|
||||||
|
|
||||||
|
import (
|
||||||
|
apiv1 "k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Secret struct {
|
||||||
|
Name string
|
||||||
|
Data map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) CreateSecret(namespace string, secret *Secret) (err error) {
|
||||||
|
_, err = c.CoreV1().Secrets(namespace).Create(&apiv1.Secret{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: secret.Name,
|
||||||
|
},
|
||||||
|
StringData: secret.Data,
|
||||||
|
})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
15
main.go
15
main.go
@@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
||||||
"github.com/onepanelio/core/api"
|
"github.com/onepanelio/core/api"
|
||||||
"github.com/onepanelio/core/argo"
|
"github.com/onepanelio/core/argo"
|
||||||
|
"github.com/onepanelio/core/kube"
|
||||||
"github.com/onepanelio/core/manager"
|
"github.com/onepanelio/core/manager"
|
||||||
"github.com/onepanelio/core/repository"
|
"github.com/onepanelio/core/repository"
|
||||||
"github.com/onepanelio/core/server"
|
"github.com/onepanelio/core/server"
|
||||||
@@ -39,7 +40,9 @@ func main() {
|
|||||||
|
|
||||||
argoClient := argo.NewClient(viper.GetString("KUBECONFIG"))
|
argoClient := argo.NewClient(viper.GetString("KUBECONFIG"))
|
||||||
|
|
||||||
go startRPCServer(db, argoClient)
|
kubeClient := kube.NewClient(viper.GetString("KUBECONFIG"))
|
||||||
|
|
||||||
|
go startRPCServer(db, argoClient, kubeClient)
|
||||||
startHTTPProxy()
|
startHTTPProxy()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,8 +64,8 @@ func initConfig() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func startRPCServer(db *repository.DB, argoClient *argo.Client) {
|
func startRPCServer(db *repository.DB, argoClient *argo.Client, kubeClient *kube.Client) {
|
||||||
resourceManager := manager.NewResourceManager(db, argoClient)
|
resourceManager := manager.NewResourceManager(db, argoClient, kubeClient)
|
||||||
|
|
||||||
log.Printf("Starting RPC server on port %v", *rpcPort)
|
log.Printf("Starting RPC server on port %v", *rpcPort)
|
||||||
lis, err := net.Listen("tcp", *rpcPort)
|
lis, err := net.Listen("tcp", *rpcPort)
|
||||||
@@ -72,6 +75,7 @@ func startRPCServer(db *repository.DB, argoClient *argo.Client) {
|
|||||||
|
|
||||||
s := grpc.NewServer(grpc.UnaryInterceptor(loggingInterceptor))
|
s := grpc.NewServer(grpc.UnaryInterceptor(loggingInterceptor))
|
||||||
api.RegisterWorkflowServiceServer(s, server.NewWorkflowServer(resourceManager))
|
api.RegisterWorkflowServiceServer(s, server.NewWorkflowServer(resourceManager))
|
||||||
|
api.RegisterSecretServiceServer(s, server.NewSecretServer(resourceManager))
|
||||||
|
|
||||||
if err := s.Serve(lis); err != nil {
|
if err := s.Serve(lis); err != nil {
|
||||||
log.Fatalf("Failed to serve RPC server: %v", err)
|
log.Fatalf("Failed to serve RPC server: %v", err)
|
||||||
@@ -94,6 +98,11 @@ func startHTTPProxy() {
|
|||||||
log.Fatalf("Failed to connect to service: %v", err)
|
log.Fatalf("Failed to connect to service: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = api.RegisterSecretServiceHandlerFromEndpoint(ctx, mux, endpoint, opts)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to connect to service: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
log.Printf("Starting HTTP proxy on port %v", *httpPort)
|
log.Printf("Starting HTTP proxy on port %v", *httpPort)
|
||||||
if err = http.ListenAndServe(*httpPort, wsproxy.WebsocketProxy(handlers.CORS()(mux))); err != nil {
|
if err = http.ListenAndServe(*httpPort, wsproxy.WebsocketProxy(handlers.CORS()(mux))); err != nil {
|
||||||
log.Fatalf("Failed to serve HTTP listener: %v", err)
|
log.Fatalf("Failed to serve HTTP listener: %v", err)
|
||||||
|
@@ -2,17 +2,20 @@ package manager
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/onepanelio/core/argo"
|
"github.com/onepanelio/core/argo"
|
||||||
|
"github.com/onepanelio/core/kube"
|
||||||
"github.com/onepanelio/core/repository"
|
"github.com/onepanelio/core/repository"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ResourceManager struct {
|
type ResourceManager struct {
|
||||||
argClient *argo.Client
|
argClient *argo.Client
|
||||||
|
kubeClient *kube.Client
|
||||||
workflowRepository *repository.WorkflowRepository
|
workflowRepository *repository.WorkflowRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewResourceManager(db *repository.DB, argoClient *argo.Client) *ResourceManager {
|
func NewResourceManager(db *repository.DB, argoClient *argo.Client, kubeClient *kube.Client) *ResourceManager {
|
||||||
return &ResourceManager{
|
return &ResourceManager{
|
||||||
argClient: argoClient,
|
argClient: argoClient,
|
||||||
|
kubeClient: kubeClient,
|
||||||
workflowRepository: repository.NewWorkflowRepository(db),
|
workflowRepository: repository.NewWorkflowRepository(db),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
9
manager/secret_manager.go
Normal file
9
manager/secret_manager.go
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package manager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/onepanelio/core/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (r *ResourceManager) CreateSecret(namespace string, secret *model.Secret) (err error) {
|
||||||
|
return r.kubeClient.CreateSecret(namespace, secret)
|
||||||
|
}
|
5
model/secret.go
Normal file
5
model/secret.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import "github.com/onepanelio/core/kube"
|
||||||
|
|
||||||
|
type Secret = kube.Secret
|
32
server/secret_server.go
Normal file
32
server/secret_server.go
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/ptypes/empty"
|
||||||
|
"github.com/onepanelio/core/api"
|
||||||
|
"github.com/onepanelio/core/manager"
|
||||||
|
"github.com/onepanelio/core/model"
|
||||||
|
"github.com/onepanelio/core/util"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SecretServer struct {
|
||||||
|
resourceManager *manager.ResourceManager
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSecretServer(resourceManager *manager.ResourceManager) *SecretServer {
|
||||||
|
return &SecretServer{resourceManager: resourceManager}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SecretServer) CreateSecret(ctx context.Context, req *api.CreateSecretRequest) (*empty.Empty, error) {
|
||||||
|
err := s.resourceManager.CreateSecret(req.Namespace, &model.Secret{
|
||||||
|
Name: req.Secret.Name,
|
||||||
|
Data: req.Secret.Data,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, util.NewUserError(codes.Unknown, "Unknown error.")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &empty.Empty{}, nil
|
||||||
|
}
|
5
server/server.go
Normal file
5
server/server.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package server
|
||||||
|
|
||||||
|
import "github.com/onepanelio/core/util"
|
||||||
|
|
||||||
|
var userError *util.UserError
|
@@ -8,12 +8,9 @@ import (
|
|||||||
"github.com/onepanelio/core/api"
|
"github.com/onepanelio/core/api"
|
||||||
"github.com/onepanelio/core/manager"
|
"github.com/onepanelio/core/manager"
|
||||||
"github.com/onepanelio/core/model"
|
"github.com/onepanelio/core/model"
|
||||||
"github.com/onepanelio/core/util"
|
|
||||||
"github.com/onepanelio/core/util/ptr"
|
"github.com/onepanelio/core/util/ptr"
|
||||||
)
|
)
|
||||||
|
|
||||||
var userError *util.UserError
|
|
||||||
|
|
||||||
type WorkflowServer struct {
|
type WorkflowServer struct {
|
||||||
resourceManager *manager.ResourceManager
|
resourceManager *manager.ResourceManager
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user