]> git.netwichtig.de Git - user/henk/code/puppet/modules/s6.git/commitdiff
restructure provider code
authorHendrik Jäger <gitcommit@henk.geekmail.org>
Sun, 22 May 2022 10:52:05 +0000 (12:52 +0200)
committerHendrik Jäger <gitcommit@henk.geekmail.org>
Mon, 25 Jul 2022 21:53:04 +0000 (23:53 +0200)
lib/puppet/provider/service/s6.rb

index a6745f124e1e65d912df4b44330ab7daa0ecb4a1..5e790e2b763bebf3c7b92c940fe2ad4544b93eb3 100644 (file)
@@ -28,6 +28,8 @@ Puppet::Type.type(:service).provide(:s6, :parent => :daemontools) do
       return 1
     end
 
+    attr_writer :defpath
+
     # this is necessary to autodetect a valid resource
     # default path, since there is no standard for such directory.
     def defpath
@@ -36,8 +38,34 @@ Puppet::Type.type(:service).provide(:s6, :parent => :daemontools) do
       end
       @defpath
     end
+
+    # returns all providers for all existing services in @defpath
+    # ie enabled or not
+    def instances
+      path = self.defpath
+      unless path
+        Puppet.info("#{self.name} is unsuitable because service directory is nil")
+        return
+      end
+      unless FileTest.directory?(path)
+        Puppet.notice "Service path #{path} does not exist"
+        return
+      end
+
+      # reject entries that aren't either a directory
+      # or don't contain an executable run file
+      Dir.entries(path).reject { |e|
+        fullpath = File.join(path, e)
+        e =~ /^\./ or ! FileTest.directory?(fullpath) or ! Puppet::FileSystem.executable?(File.join(fullpath,"run"))
+      }.collect do |name|
+        new(:name => name, :path => path)
+      end
+    end
+
   end
 
+  attr_writer :servicedir
+
   # find the service dir on this node
   def servicedir
     unless @servicedir
@@ -52,31 +80,12 @@ Puppet::Type.type(:service).provide(:s6, :parent => :daemontools) do
     @servicedir
   end
 
-  def self.instances
-    path = self.defpath
-    unless path
-      Puppet.info("#{self.name} is unsuitable because service directory is nil")
-      return
-    end
-    unless FileTest.directory?(path)
-      Puppet.notice "Service path #{path} does not exist"
-      return
-    end
-
-    # reject entries that aren't either a directory
-    # or don't contain an executable run file
-    Dir.entries(path).reject { |e|
-      fullpath = File.join(path, e)
-      e =~ /^\./ or ! FileTest.directory?(fullpath) or ! Puppet::FileSystem.executable?(File.join(fullpath,"run"))
-    }.collect do |name|
-      new(:name => name, :path => path)
-    end
-  end
-
   def status
     begin
       output = s6_svstat "-u", self.service
-      return :running if output.chomp == 'true'
+      if output.chomp == 'true'
+        return :running
+      end
     rescue Puppet::ExecutionFailure => detail
       unless detail.message =~ /(warning: |s6-supervise not running$)/
         raise Puppet::Error.new( "Could not get status for service #{resource.ref}: #{detail}", detail )
@@ -85,25 +94,21 @@ Puppet::Type.type(:service).provide(:s6, :parent => :daemontools) do
     :stopped
   end
 
-  def stop
-    s6_svc "-d", self.service
-  end
-
-  def restart
-    s6_svc "-r", self.service
-  end
-
-  def start
-    if enabled? != :true
-        enable
+  def enabled?
+      # the service is enabled if it is linked
+    case Puppet::FileSystem.symlink?(self.service) ? :true : :false
+    when :true
+      return :true
+    when :false
+      return :false
+    else
+      raise Puppet::Error.new( "Received unknown state for #{self.service}", $!)
     end
-    s6_svc "-u", self.service
   end
 
   def enable
     if ! FileTest.directory?(self.daemon)
       Puppet.notice "No daemon dir, calling setupservice for #{resource[:name]}"
-      self.setupservice
     end
     if self.daemon
       if ! Puppet::FileSystem.symlink?(self.service)
@@ -121,4 +126,19 @@ Puppet::Type.type(:service).provide(:s6, :parent => :daemontools) do
     Puppet::FileSystem.unlink(self.service) if Puppet::FileSystem.symlink?(self.service)
     s6_svscanctl "-n", self.servicedir
   end
+
+  def restart
+    s6_svc "-r", self.service
+  end
+
+  def start
+    if enabled? != :true
+        enable
+    end
+    s6_svc "-u", self.service
+  end
+
+  def stop
+    s6_svc "-d", self.service
+  end
 end