add support for just specifying service name
This commit is contained in:
parent
71c50ded5c
commit
f70ff1f358
3 changed files with 37 additions and 11 deletions
|
@ -3,16 +3,26 @@ using StartGrpc;
|
||||||
|
|
||||||
namespace netsd.Handlers;
|
namespace netsd.Handlers;
|
||||||
|
|
||||||
public static class Start
|
public class Start
|
||||||
{
|
{
|
||||||
public static async Task StartAsync()
|
public Start(string? ServiceFilePath = null, string? ServiceName = null)
|
||||||
{
|
{
|
||||||
var parseServiceFile = await ServiceParser.Parse("/lib/systemd/system/sddm.service");
|
if (ServiceFilePath == null && ServiceName != null)
|
||||||
Console.WriteLine($"ExecStart: {parseServiceFile.ExecStart}");
|
{
|
||||||
|
if (!Path.Exists($"/etc/netsd/services/{ServiceName}.service"))
|
||||||
|
{
|
||||||
|
// TODO: Add proper error messages (and most likely something like serilog for logging)
|
||||||
|
Environment.Exit(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServiceFilePath = Path.GetFullPath($"/etc/netsd/services/{ServiceName}.service");
|
||||||
|
}
|
||||||
|
|
||||||
using var channel = UDSConnector.CreateChannel();
|
using var channel = UDSConnector.CreateChannel();
|
||||||
|
|
||||||
var client = new StartRpc.StartRpcClient(channel);
|
var client = new StartRpc.StartRpcClient(channel);
|
||||||
var reply = client.StartService(new StartRequest{ Name = "Awoo" });
|
var reply = client.StartService(new StartRequest{ Path = ServiceFilePath });
|
||||||
|
|
||||||
Console.WriteLine(reply.Success);
|
Console.WriteLine(reply.Success);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,17 +2,33 @@ using System.CommandLine;
|
||||||
using netsd.Handlers;
|
using netsd.Handlers;
|
||||||
|
|
||||||
var initCommand = new Command("init", "Run and bring up all default services");
|
var initCommand = new Command("init", "Run and bring up all default services");
|
||||||
|
|
||||||
var startCommand = new Command("start", "Starts up a netsd service");
|
var startCommand = new Command("start", "Starts up a netsd service");
|
||||||
|
var startServiceName = new Argument<string>("file", "The name of the service you want to start");
|
||||||
|
var startServicePath = new Option<FileInfo>("--file", "The path to the service file");
|
||||||
|
|
||||||
|
startServiceName.SetDefaultValue("");
|
||||||
|
startServicePath.AddAlias("-f");
|
||||||
|
|
||||||
|
startCommand.AddArgument(startServiceName);
|
||||||
|
startCommand.AddOption(startServicePath);
|
||||||
|
|
||||||
var rootCommand = new RootCommand("Linux service manager written in C#");
|
var rootCommand = new RootCommand("Linux service manager written in C#");
|
||||||
rootCommand.AddCommand(initCommand);
|
rootCommand.AddCommand(initCommand);
|
||||||
rootCommand.AddCommand(startCommand);
|
rootCommand.AddCommand(startCommand);
|
||||||
|
|
||||||
initCommand.SetHandler(() =>
|
initCommand.SetHandler(() => new Init());
|
||||||
{
|
|
||||||
new Init();
|
|
||||||
});
|
|
||||||
|
|
||||||
startCommand.SetHandler(async () => await Start.StartAsync());
|
startCommand.SetHandler((file, name) =>
|
||||||
|
{
|
||||||
|
if (name.Length != 0)
|
||||||
|
{
|
||||||
|
new Start(ServiceName: name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new Start(ServiceFilePath: file.FullName);
|
||||||
|
}
|
||||||
|
}, startServicePath, startServiceName);
|
||||||
|
|
||||||
return await rootCommand.InvokeAsync(args);
|
return await rootCommand.InvokeAsync(args);
|
||||||
|
|
|
@ -9,7 +9,7 @@ service StartRpc {
|
||||||
}
|
}
|
||||||
|
|
||||||
message StartRequest {
|
message StartRequest {
|
||||||
string name = 1;
|
string path = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message StartReply {
|
message StartReply {
|
||||||
|
|
Reference in a new issue