daemontools 0.2.3 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/bin/daemontools-gen +13 -4
 - data/fixtures/new_services.rb +4 -0
 - data/fixtures/old_services.rb +4 -0
 - data/fixtures/stubs/service_builder_stub.rb +2 -2
 - data/fixtures/stubs/service_remover_stub.rb +1 -3
 - data/lib/daemontools/service_builder.rb +2 -3
 - data/lib/daemontools/service_remover.rb +10 -11
 - data/lib/daemontools/version.rb +1 -1
 - data/lib/daemontools.rb +30 -2
 - data/spec/service_delete_spec.rb +9 -5
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c22463b5a826586d0334a8f8d42f3e9d5dca647c5075073e3039770be063e515
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: a9d89cdc0cb3d1bbdf0bd81dc2261a31a3d87fa7f1cec48d67ee7780a5fe5aa8
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 71c1a4bf680ac3cdef9be0767e3eabb7e2314fd4e3874c0dced95b028683b512df8c8c968b60d7d71e052fd397658fce097acd44bf8918506c7e9c9a3feb2200
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: aed7e1991483a5f2f521f4c9cfe93af72c3e274710b172dd98baf9b80ef08aba74add43192e4947b4c8e7a392b8bb10ff96bb78007ee10a5bfcbe95df5477bd1
         
     | 
    
        data/bin/daemontools-gen
    CHANGED
    
    | 
         @@ -10,13 +10,22 @@ puts "Building svc services for roles #{roles} .." 
     | 
|
| 
       10 
10 
     | 
    
         
             
            old_path = ARGV[2] || ''
         
     | 
| 
       11 
11 
     | 
    
         
             
            new_path = ARGV[3] || ''
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
               
     | 
| 
       15 
     | 
    
         
            -
               
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
            def need_remove_old_services?(old_path, new_path)
         
     | 
| 
      
 14 
     | 
    
         
            +
              # If no new path there is no reason to try remove old services
         
     | 
| 
      
 15 
     | 
    
         
            +
              return false if new_path.nil? || new_path.empty?
         
     | 
| 
      
 16 
     | 
    
         
            +
              # If no old path there is no reason to try remove old services
         
     | 
| 
      
 17 
     | 
    
         
            +
              return false if old_path.nil? || old_path.empty?
         
     | 
| 
      
 18 
     | 
    
         
            +
              # Check if config files are exists
         
     | 
| 
      
 19 
     | 
    
         
            +
              File.exist?("#{old_path}/config/services.rb") && File.exist?("#{new_path}/config/services.rb")
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            if need_remove_old_services?(old_path, new_path)
         
     | 
| 
       17 
23 
     | 
    
         
             
              previous_builder = Daemontools::Builder.new("#{old_path}/config/services.rb")
         
     | 
| 
       18 
24 
     | 
    
         
             
              current_builder = Daemontools::Builder.new("#{new_path}/config/services.rb")
         
     | 
| 
       19 
25 
     | 
    
         
             
              remover = Daemontools::Remover.new(roles, previous_builder, current_builder)
         
     | 
| 
       20 
26 
     | 
    
         
             
              remover.remove_unused_services
         
     | 
| 
       21 
27 
     | 
    
         
             
              current_builder.gen(roles, environment)
         
     | 
| 
      
 28 
     | 
    
         
            +
            else
         
     | 
| 
      
 29 
     | 
    
         
            +
              builder = Daemontools::Builder.new("#{Dir.pwd}/config/services.rb")
         
     | 
| 
      
 30 
     | 
    
         
            +
              builder.gen(roles, environment)
         
     | 
| 
       22 
31 
     | 
    
         
             
            end
         
     | 
    
        data/fixtures/new_services.rb
    CHANGED
    
    
    
        data/fixtures/old_services.rb
    CHANGED
    
    
| 
         @@ -5,9 +5,7 @@ module Daemontools 
     | 
|
| 
       5 
5 
     | 
    
         
             
                def remove_unused_services
         
     | 
| 
       6 
6 
     | 
    
         
             
                  return if @deleted_services.empty?
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                  @deleted_services 
     | 
| 
       9 
     | 
    
         
            -
                    @previous_builder.delete_services(services, role)
         
     | 
| 
       10 
     | 
    
         
            -
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @previous_builder.delete_services(@deleted_services)
         
     | 
| 
       11 
9 
     | 
    
         
             
                end
         
     | 
| 
       12 
10 
     | 
    
         
             
              end
         
     | 
| 
       13 
11 
     | 
    
         
             
            end
         
     | 
| 
         @@ -72,9 +72,8 @@ module Daemontools 
     | 
|
| 
       72 
72 
     | 
    
         
             
                  @delete_command = cmd.empty? ? nil : cmd
         
     | 
| 
       73 
73 
     | 
    
         
             
                end
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                def delete_services( 
     | 
| 
       76 
     | 
    
         
            -
                  services  
     | 
| 
       77 
     | 
    
         
            -
                  services.each { |service| Daemontools.delete(service[0], @delete_command) }
         
     | 
| 
      
 75 
     | 
    
         
            +
                def delete_services(services)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  services.each { |service| Daemontools.delete(service, @delete_command) }
         
     | 
| 
       78 
77 
     | 
    
         
             
                end
         
     | 
| 
       79 
78 
     | 
    
         | 
| 
       80 
79 
     | 
    
         
             
                def find_services_by_name(service_names, role)
         
     | 
| 
         @@ -15,22 +15,21 @@ module Daemontools 
     | 
|
| 
       15 
15 
     | 
    
         
             
                def remove_unused_services
         
     | 
| 
       16 
16 
     | 
    
         
             
                  return if @deleted_services.empty?
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
                  @deleted_services. 
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                    @previous_builder.delete_services(services, role)
         
     | 
| 
       21 
     | 
    
         
            -
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  puts "Services for delete: #{@deleted_services.join(', ')}"
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @previous_builder.delete_services(@deleted_services)
         
     | 
| 
       22 
20 
     | 
    
         
             
                end
         
     | 
| 
       23 
21 
     | 
    
         | 
| 
       24 
22 
     | 
    
         
             
                private
         
     | 
| 
       25 
23 
     | 
    
         | 
| 
       26 
24 
     | 
    
         
             
                def find_services_changes(old_services, new_services)
         
     | 
| 
       27 
     | 
    
         
            -
                   
     | 
| 
       28 
     | 
    
         
            -
                  @roles 
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
                  old_services_for_server = services_for_roles(old_services, @roles)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  new_services_for_server = services_for_roles(new_services, @roles)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @deleted_services = old_services_for_server - new_services_for_server
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                # Extracting service names for roles from config
         
     | 
| 
      
 31 
     | 
    
         
            +
                def services_for_roles(services, roles)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  services.values_at(*roles).flatten(1).compact.map(&:first).compact.uniq
         
     | 
| 
       34 
33 
     | 
    
         
             
                end
         
     | 
| 
       35 
34 
     | 
    
         
             
              end
         
     | 
| 
       36 
35 
     | 
    
         
             
            end
         
     | 
    
        data/lib/daemontools/version.rb
    CHANGED
    
    
    
        data/lib/daemontools.rb
    CHANGED
    
    | 
         @@ -6,15 +6,20 @@ require 'erb' 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            module Daemontools
         
     | 
| 
       8 
8 
     | 
    
         
             
              class << self
         
     | 
| 
       9 
     | 
    
         
            -
                attr_accessor :svc_root, :log_root
         
     | 
| 
      
 9 
     | 
    
         
            +
                attr_accessor :svc_root, :log_root, :tmp_root
         
     | 
| 
       10 
10 
     | 
    
         
             
              end
         
     | 
| 
       11 
11 
     | 
    
         
             
              @svc_root = '/etc/service'
         
     | 
| 
       12 
12 
     | 
    
         
             
              @log_root = '/var/log/svc'
         
     | 
| 
      
 13 
     | 
    
         
            +
              @tmp_root = '/tmp'
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
              def self.exists?(name)
         
     | 
| 
       15 
16 
     | 
    
         
             
                check_service_exists(name, false)
         
     | 
| 
       16 
17 
     | 
    
         
             
              end
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
      
 19 
     | 
    
         
            +
              def self.tmp_exists?(name)
         
     | 
| 
      
 20 
     | 
    
         
            +
                Dir.exists?("#{@tmp_root}/daemontools_service_#{name}")
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       18 
23 
     | 
    
         
             
              def self.status(name)
         
     | 
| 
       19 
24 
     | 
    
         
             
                check_service_exists(name)
         
     | 
| 
       20 
25 
     | 
    
         
             
                r = `sudo svstat #{@path} 2>&1`
         
     | 
| 
         @@ -57,6 +62,29 @@ module Daemontools 
     | 
|
| 
       57 
62 
     | 
    
         
             
                true
         
     | 
| 
       58 
63 
     | 
    
         
             
              end
         
     | 
| 
       59 
64 
     | 
    
         | 
| 
      
 65 
     | 
    
         
            +
              def self.add_empty_tmp(name)
         
     | 
| 
      
 66 
     | 
    
         
            +
                path = "#{@tmp_root}/daemontools_service_#{name}"
         
     | 
| 
      
 67 
     | 
    
         
            +
                Dir.mkdir(path) unless Dir.exists?(path)
         
     | 
| 
      
 68 
     | 
    
         
            +
                true
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              def self.move_tmp(name)
         
     | 
| 
      
 72 
     | 
    
         
            +
                tmp_path = "#{@tmp_root}/daemontools_service_#{name}"
         
     | 
| 
      
 73 
     | 
    
         
            +
                svc_path = "#{@svc_root}/#{name}"
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                r = `mv #{tmp_path} #{svc_path}`
         
     | 
| 
      
 76 
     | 
    
         
            +
                raise r if $?.exitstatus != 0
         
     | 
| 
      
 77 
     | 
    
         
            +
                raise r if ! r.empty?
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                now = Time.now.to_f
         
     | 
| 
      
 80 
     | 
    
         
            +
                while `sudo svstat #{svc_path} 2>&1`.match(/unable to open/i)
         
     | 
| 
      
 81 
     | 
    
         
            +
                  raise "Timeout wait for svc add service" if Time.now.to_f - now > 10
         
     | 
| 
      
 82 
     | 
    
         
            +
                  sleep 0.1
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                true
         
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
       60 
88 
     | 
    
         
             
              def self.add(name, command, options = {})
         
     | 
| 
       61 
89 
     | 
    
         
             
                @name = name
         
     | 
| 
       62 
90 
     | 
    
         
             
                @command = command
         
     | 
| 
         @@ -91,7 +119,7 @@ module Daemontools 
     | 
|
| 
       91 
119 
     | 
    
         
             
              end
         
     | 
| 
       92 
120 
     | 
    
         | 
| 
       93 
121 
     | 
    
         
             
              def self.delete(name, rm_cmd = nil)
         
     | 
| 
       94 
     | 
    
         
            -
                 
     | 
| 
      
 122 
     | 
    
         
            +
                return false unless exists?(name)
         
     | 
| 
       95 
123 
     | 
    
         
             
                stop(name)
         
     | 
| 
       96 
124 
     | 
    
         
             
                cmd = rm_cmd.nil? ? "sudo rm -rf #{@path} 2>&1" : "#{rm_cmd} #{@path}"
         
     | 
| 
       97 
125 
     | 
    
         
             
                r = `#{cmd}`
         
     | 
    
        data/spec/service_delete_spec.rb
    CHANGED
    
    | 
         @@ -14,18 +14,22 @@ RSpec.describe Daemontools::Remover, '#initialize' do 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                remover = Daemontools::RemoverStub.new(roles, old_builder, new_builder)
         
     | 
| 
       16 
16 
     | 
    
         
             
                deleted = remover.deleted_services
         
     | 
| 
       17 
     | 
    
         
            -
                 
     | 
| 
      
 17 
     | 
    
         
            +
                deleted_services = %i[deleted_service_1 deleted_service_2 deleted_service_3]
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                context 'Check roles where services were deleted' do
         
     | 
| 
       20 
20 
     | 
    
         
             
                  it 'Number of roles for deleted services must be equal to length of deleted roles' do
         
     | 
| 
       21 
     | 
    
         
            -
                    expect(deleted. 
     | 
| 
      
 21 
     | 
    
         
            +
                    expect(deleted.size).to eq deleted_services.length
         
     | 
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                  deleted. 
     | 
| 
       25 
     | 
    
         
            -
                    it "Should contain #{ 
     | 
| 
       26 
     | 
    
         
            -
                      expect( 
     | 
| 
      
 24 
     | 
    
         
            +
                  deleted.each do |service_name|
         
     | 
| 
      
 25 
     | 
    
         
            +
                    it "Should contain #{service_name}" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                      expect(deleted_services.include?(service_name)).to eq true
         
     | 
| 
       27 
27 
     | 
    
         
             
                    end
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  it 'Include service from renamed role' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    expect(deleted_services.include?('service4')).to eq false
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
       29 
33 
     | 
    
         
             
                end
         
     | 
| 
       30 
34 
     | 
    
         | 
| 
       31 
35 
     | 
    
         
             
                context 'Removing unused services' do
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: daemontools
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.7
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - sh
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2022-04-01 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |