Add is applying config grpc command to check config status.

This commit is contained in:
GRMrGecko 2025-02-12 14:37:46 -06:00
parent b0de9be277
commit a6bb83947a
6 changed files with 504 additions and 389 deletions

View File

@ -20,11 +20,20 @@ func (s *GRPCServer) SaveConfig(ctx context.Context, in *pb.Empty) (*pb.Empty, e
// Reload the configuration from the yaml file. // Reload the configuration from the yaml file.
func (s *GRPCServer) ReloadConfig(ctx context.Context, in *pb.Empty) (*pb.Empty, error) { func (s *GRPCServer) ReloadConfig(ctx context.Context, in *pb.Empty) (*pb.Empty, error) {
log.Println("Reloading configurations.") log.Println("Reloading configurations.")
app.ApplyingConfig = true
config := ReadConfig() config := ReadConfig()
err := ApplyConfig(config) err := ApplyConfig(config)
app.ApplyingConfig = false
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return nil, err return nil, err
} }
return new(pb.Empty), nil return new(pb.Empty), nil
} }
// Check if the config is being applied.
func (s *GRPCServer) IsApplyingConfig(ctx context.Context, in *pb.Empty) (*pb.IsApplyingConfigReply, error) {
reply := new(pb.IsApplyingConfigReply)
reply.IsApplying = app.ApplyingConfig
return reply, nil
}

View File

@ -6,7 +6,7 @@ const (
serviceDisplayName = "Virtual VXLAN" serviceDisplayName = "Virtual VXLAN"
serviceVendor = "com.mrgeckosmedia" serviceVendor = "com.mrgeckosmedia"
serviceDescription = "Virtual VXLAN using TUN interfaces" serviceDescription = "Virtual VXLAN using TUN interfaces"
serviceVersion = "0.1.8" serviceVersion = "0.2"
defaultConfigFile = "config.yaml" defaultConfigFile = "config.yaml"
) )

View File

@ -24,6 +24,7 @@ type App struct {
} }
ControllerMac net.HardwareAddr ControllerMac net.HardwareAddr
grpcServer *GRPCServer grpcServer *GRPCServer
ApplyingConfig bool
Stop chan struct{} Stop chan struct{}
UpdateConfig *UpdateConfig UpdateConfig *UpdateConfig
} }
@ -41,6 +42,9 @@ func (a *ServerCmd) Run() error {
config := ReadConfig() config := ReadConfig()
app.UpdateConfig = config.Update app.UpdateConfig = config.Update
// So that other services interacting can confirm the config is applied prior to working.
app.ApplyingConfig = true
// Start the GRPC server for cli communication. // Start the GRPC server for cli communication.
_, err := NewGRPCServer(config.RPCPath) _, err := NewGRPCServer(config.RPCPath)
if err != nil { if err != nil {
@ -55,6 +59,9 @@ func (a *ServerCmd) Run() error {
if err != nil { if err != nil {
log.Println("An error occurred applying configuration:", err) log.Println("An error occurred applying configuration:", err)
} }
// Other services may now work.
app.ApplyingConfig = false
}() }()
} }

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,7 @@ service vxlan {
// Config commands. // Config commands.
rpc SaveConfig (Empty) returns (Empty) {} rpc SaveConfig (Empty) returns (Empty) {}
rpc ReloadConfig (Empty) returns (Empty) {} rpc ReloadConfig (Empty) returns (Empty) {}
rpc IsApplyingConfig (Empty) returns (IsApplyingConfigReply) {}
// Listener commands. // Listener commands.
rpc ListListeners (Empty) returns (ListListenersReply) {} rpc ListListeners (Empty) returns (ListListenersReply) {}
@ -39,6 +40,11 @@ service vxlan {
message Empty { message Empty {
} }
// Response to is applying config.
message IsApplyingConfigReply {
bool isApplying = 1;
}
// Listener messages. // Listener messages.
message ListenerRequestWithName { message ListenerRequestWithName {
string name = 1; string name = 1;

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT. // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions: // versions:
// - protoc-gen-go-grpc v1.5.1 // - protoc-gen-go-grpc v1.5.1
// - protoc v3.21.12 // - protoc v5.29.2
// source: vxlan/vxlan.proto // source: vxlan/vxlan.proto
package vxlan package vxlan
@ -21,6 +21,7 @@ const _ = grpc.SupportPackageIsVersion9
const ( const (
Vxlan_SaveConfig_FullMethodName = "/vxlan.vxlan/SaveConfig" Vxlan_SaveConfig_FullMethodName = "/vxlan.vxlan/SaveConfig"
Vxlan_ReloadConfig_FullMethodName = "/vxlan.vxlan/ReloadConfig" Vxlan_ReloadConfig_FullMethodName = "/vxlan.vxlan/ReloadConfig"
Vxlan_IsApplyingConfig_FullMethodName = "/vxlan.vxlan/IsApplyingConfig"
Vxlan_ListListeners_FullMethodName = "/vxlan.vxlan/ListListeners" Vxlan_ListListeners_FullMethodName = "/vxlan.vxlan/ListListeners"
Vxlan_AddListener_FullMethodName = "/vxlan.vxlan/AddListener" Vxlan_AddListener_FullMethodName = "/vxlan.vxlan/AddListener"
Vxlan_RemoveListener_FullMethodName = "/vxlan.vxlan/RemoveListener" Vxlan_RemoveListener_FullMethodName = "/vxlan.vxlan/RemoveListener"
@ -52,6 +53,7 @@ type VxlanClient interface {
// Config commands. // Config commands.
SaveConfig(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) SaveConfig(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error)
ReloadConfig(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) ReloadConfig(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error)
IsApplyingConfig(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*IsApplyingConfigReply, error)
// Listener commands. // Listener commands.
ListListeners(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ListListenersReply, error) ListListeners(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ListListenersReply, error)
AddListener(ctx context.Context, in *Listener, opts ...grpc.CallOption) (*Empty, error) AddListener(ctx context.Context, in *Listener, opts ...grpc.CallOption) (*Empty, error)
@ -106,6 +108,16 @@ func (c *vxlanClient) ReloadConfig(ctx context.Context, in *Empty, opts ...grpc.
return out, nil return out, nil
} }
func (c *vxlanClient) IsApplyingConfig(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*IsApplyingConfigReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(IsApplyingConfigReply)
err := c.cc.Invoke(ctx, Vxlan_IsApplyingConfig_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *vxlanClient) ListListeners(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ListListenersReply, error) { func (c *vxlanClient) ListListeners(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ListListenersReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ListListenersReply) out := new(ListListenersReply)
@ -333,6 +345,7 @@ type VxlanServer interface {
// Config commands. // Config commands.
SaveConfig(context.Context, *Empty) (*Empty, error) SaveConfig(context.Context, *Empty) (*Empty, error)
ReloadConfig(context.Context, *Empty) (*Empty, error) ReloadConfig(context.Context, *Empty) (*Empty, error)
IsApplyingConfig(context.Context, *Empty) (*IsApplyingConfigReply, error)
// Listener commands. // Listener commands.
ListListeners(context.Context, *Empty) (*ListListenersReply, error) ListListeners(context.Context, *Empty) (*ListListenersReply, error)
AddListener(context.Context, *Listener) (*Empty, error) AddListener(context.Context, *Listener) (*Empty, error)
@ -373,6 +386,9 @@ func (UnimplementedVxlanServer) SaveConfig(context.Context, *Empty) (*Empty, err
func (UnimplementedVxlanServer) ReloadConfig(context.Context, *Empty) (*Empty, error) { func (UnimplementedVxlanServer) ReloadConfig(context.Context, *Empty) (*Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method ReloadConfig not implemented") return nil, status.Errorf(codes.Unimplemented, "method ReloadConfig not implemented")
} }
func (UnimplementedVxlanServer) IsApplyingConfig(context.Context, *Empty) (*IsApplyingConfigReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method IsApplyingConfig not implemented")
}
func (UnimplementedVxlanServer) ListListeners(context.Context, *Empty) (*ListListenersReply, error) { func (UnimplementedVxlanServer) ListListeners(context.Context, *Empty) (*ListListenersReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListListeners not implemented") return nil, status.Errorf(codes.Unimplemented, "method ListListeners not implemented")
} }
@ -496,6 +512,24 @@ func _Vxlan_ReloadConfig_Handler(srv interface{}, ctx context.Context, dec func(
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Vxlan_IsApplyingConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(VxlanServer).IsApplyingConfig(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Vxlan_IsApplyingConfig_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(VxlanServer).IsApplyingConfig(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _Vxlan_ListListeners_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Vxlan_ListListeners_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty) in := new(Empty)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -907,6 +941,10 @@ var Vxlan_ServiceDesc = grpc.ServiceDesc{
MethodName: "ReloadConfig", MethodName: "ReloadConfig",
Handler: _Vxlan_ReloadConfig_Handler, Handler: _Vxlan_ReloadConfig_Handler,
}, },
{
MethodName: "IsApplyingConfig",
Handler: _Vxlan_IsApplyingConfig_Handler,
},
{ {
MethodName: "ListListeners", MethodName: "ListListeners",
Handler: _Vxlan_ListListeners_Handler, Handler: _Vxlan_ListListeners_Handler,