11/*
2- Copyright © 2024 Juliano Martinez <[email protected] > 2+ Copyright © 2024 Juliano Martinez
33
44Licensed under the Apache License, Version 2.0 (the "License");
55you may not use this file except in compliance with the License.
@@ -17,31 +17,63 @@ package cmd
1717
1818import (
1919 "fmt"
20+ "os"
21+
2022 "github.com/ncode/tagit/pkg/systemd"
2123 "github.com/spf13/cobra"
2224)
2325
2426// systemdCmd represents the systemd command
2527var systemdCmd = & cobra.Command {
2628 Use : "systemd" ,
27- Short : "systemd generate a systemd service, that you can use for the tagit service" ,
29+ Short : "Generate a systemd service file for TagIt" ,
30+ Long : `The systemd command generates a systemd service file for TagIt.
31+ This allows you to easily set up TagIt as a system service that starts
32+ automatically on boot and can be managed using systemctl.
33+
34+ Example usage:
35+ tagit systemd --service-id=my-service --script=/path/to/script.sh --tag-prefix=tagit --interval=5s --user=tagit --group=tagit
36+ ` ,
2837 Run : func (cmd * cobra.Command , args []string ) {
29- fields := & systemd.Fields {
30- User : cmd .PersistentFlags ().Lookup ("user" ).Value .String (),
31- Group : cmd .PersistentFlags ().Lookup ("group" ).Value .String (),
32- ConsulAddr : cmd .InheritedFlags ().Lookup ("consul-addr" ).Value .String (),
33- ServiceID : cmd .InheritedFlags ().Lookup ("service-id" ).Value .String (),
34- Script : cmd .InheritedFlags ().Lookup ("script" ).Value .String (),
35- TagPrefix : cmd .InheritedFlags ().Lookup ("tag-prefix" ).Value .String (),
36- Interval : cmd .InheritedFlags ().Lookup ("interval" ).Value .String (),
37- Token : cmd .InheritedFlags ().Lookup ("token" ).Value .String (),
38+ flags := make (map [string ]string )
39+ for _ , flag := range append (systemd .GetRequiredFlags (), systemd .GetOptionalFlags ()... ) {
40+ flags [flag ], _ = cmd .Flags ().GetString (flag )
3841 }
39- fmt .Println (systemd .RenderTemplate (fields ))
42+
43+ fields , err := systemd .NewFieldsFromFlags (flags )
44+ if err != nil {
45+ fmt .Fprintf (os .Stderr , "Error: %v\n " , err )
46+ os .Exit (1 )
47+ }
48+
49+ serviceFile , err := systemd .RenderTemplate (fields )
50+ if err != nil {
51+ fmt .Fprintf (os .Stderr , "Error generating systemd service file: %v\n " , err )
52+ os .Exit (1 )
53+ }
54+
55+ fmt .Println (serviceFile )
4056 },
4157}
4258
4359func init () {
4460 rootCmd .AddCommand (systemdCmd )
45- systemdCmd .PersistentFlags ().StringP ("user" , "u" , "nobody" , "user to run the service" )
46- systemdCmd .PersistentFlags ().StringP ("group" , "g" , "nobody" , "group to run the service" )
61+
62+ // Define flags for all required and optional fields
63+ systemdCmd .Flags ().String ("service-id" , "" , "ID of the service (required)" )
64+ systemdCmd .Flags ().String ("script" , "" , "Path to the script to execute (required)" )
65+ systemdCmd .Flags ().String ("tag-prefix" , "" , "Prefix for tags (required)" )
66+ systemdCmd .Flags ().String ("interval" , "" , "Interval for script execution (required)" )
67+ systemdCmd .Flags ().String ("token" , "" , "Consul token (optional)" )
68+ systemdCmd .Flags ().String ("consul-addr" , "" , "Consul address (optional)" )
69+ systemdCmd .Flags ().String ("user" , "" , "User to run the service as (required)" )
70+ systemdCmd .Flags ().String ("group" , "" , "Group to run the service as (required)" )
71+
72+ // Mark required flags
73+ systemdCmd .MarkFlagRequired ("service-id" )
74+ systemdCmd .MarkFlagRequired ("script" )
75+ systemdCmd .MarkFlagRequired ("tag-prefix" )
76+ systemdCmd .MarkFlagRequired ("interval" )
77+ systemdCmd .MarkFlagRequired ("user" )
78+ systemdCmd .MarkFlagRequired ("group" )
4779}
0 commit comments