@@ -186,17 +186,17 @@ func (m *SSHHostManager) Apply(exporterConfig *v1alpha1.ExporterConfigTemplate,
186186 return fmt .Errorf ("both SystemdContainerTemplate and SystemdServiceTemplate specified - only one should be used" )
187187 }
188188
189- // Helper function to restart service
190- restartService := func (serviceName string , dryRun bool ) {
189+ // Helper function to restart service, gracefully wating on lease exit
190+ restartGracefully := func (serviceName string , dryRun bool ) {
191191 if ! dryRun {
192- _ , enableErr := m .runCommand (" systemctl restart " + fmt . Sprintf ( " %q" , serviceName ))
192+ _ , enableErr := m .runCommand (fmt . Sprintf ( "command -v podman >/dev/null 2>&1 && podman kill -s SIGHUP %q || systemctl kill -s SIGHUP %q", serviceName , serviceName ))
193193 if enableErr != nil {
194- fmt .Printf (" ❌ Failed to start service %s: %v\n " , serviceName , enableErr )
194+ fmt .Printf (" ❌ Failed to signal %s: %v\n " , serviceName , enableErr )
195195 } else {
196- fmt .Printf (" ✅ Service %s started \n " , serviceName )
196+ fmt .Printf (" ✅ %s signalled to restart when not leased \n " , serviceName )
197197 }
198198 } else {
199- fmt .Printf (" 📄 Would restart service %s\n " , serviceName )
199+ fmt .Printf (" 📄 Would trigger restart of %s\n " , serviceName )
200200 }
201201 }
202202
@@ -245,7 +245,7 @@ func (m *SSHHostManager) Apply(exporterConfig *v1alpha1.ExporterConfigTemplate,
245245 return fmt .Errorf ("failed to enable exporter: %w" , err )
246246 }
247247 }
248- restartService (svcName , dryRun )
248+ restartGracefully (svcName , dryRun )
249249 }
250250 } else {
251251 // Check if service is running and start if needed
@@ -254,10 +254,19 @@ func (m *SSHHostManager) Apply(exporterConfig *v1alpha1.ExporterConfigTemplate,
254254
255255 if ! serviceRunning {
256256 fmt .Printf (" ⚠️ Service %s is not running...\n " , svcName )
257- restartService (svcName , dryRun )
257+ if ! dryRun {
258+ _ , enableErr := m .runCommand ("systemctl restart " + fmt .Sprintf ("%q" , svcName ))
259+ if enableErr != nil {
260+ fmt .Printf (" ❌ Failed to restart service %s: %v\n " , svcName , enableErr )
261+ } else {
262+ fmt .Printf (" ✅ Service %s restarted\n " , svcName )
263+ }
264+ } else {
265+ fmt .Printf (" 📄 Would restart service %s\n " , svcName )
266+ }
258267 } else {
259268 // Only check container version if service is running
260- err = m .checkContainerVersion (exporterConfig , svcName , dryRun , restartService )
269+ err = m .checkContainerVersion (exporterConfig , svcName , dryRun , restartGracefully )
261270 if err != nil {
262271 return fmt .Errorf ("container version check failed: %w" , err )
263272 }
@@ -327,12 +336,12 @@ func (m *SSHHostManager) checkDetailedContainerVersion(containerImage, svcName s
327336// getRunningContainerLabels gets container labels from running container
328337func (m * SSHHostManager ) getRunningContainerLabels (serviceName string ) (* container.ImageLabels , error ) {
329338 // Try jumpstarter labels first, then fall back to OCI standard labels
330- result , err := m .runCommand (fmt .Sprintf ("podman inspect --format '{{index .Config.Labels \" jumpstarter.version\" }}\n {{index .Config.Labels \" jumpstarter.revision\" }}\n {{index .Config.Labels \" org.opencontainers.image.version\" }}\n {{index .Config.Labels \" org.opencontainers.image.revision\" }}' %s" , serviceName ))
339+ result , err := m .runCommand (fmt .Sprintf ("podman inspect --format '{{index .Config.Labels \" jumpstarter.version\" }} {{index .Config.Labels \" jumpstarter.revision\" }} {{index .Config.Labels \" org.opencontainers.image.version\" }} {{index .Config.Labels \" org.opencontainers.image.revision\" }}' %s" , serviceName ))
331340 if err != nil {
332341 return nil , fmt .Errorf ("failed to inspect container %s: %w" , serviceName , err )
333342 }
334343
335- parts := strings .Split (strings .TrimSpace (result .Stdout ), " \n " )
344+ parts := strings .Fields (strings .TrimSpace (result .Stdout ))
336345 // Pad with empty strings if we got fewer parts
337346 for len (parts ) < 4 {
338347 parts = append (parts , "" )
0 commit comments