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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 51ec59b970afb5438e6231bc5e74560bee203cbaeb1b924e60cddc08895212b7
4
- data.tar.gz: 0acf0fae125f5b7264a6361242a57c9148e1549b1c386dbd12d718af9123edf1
3
+ metadata.gz: c22463b5a826586d0334a8f8d42f3e9d5dca647c5075073e3039770be063e515
4
+ data.tar.gz: a9d89cdc0cb3d1bbdf0bd81dc2261a31a3d87fa7f1cec48d67ee7780a5fe5aa8
5
5
  SHA512:
6
- metadata.gz: 8214be8777a4304c4b659b863e72490de3e600de75af202de5ae397ce9043cea57d6be2baf4174a744e20cbf9400c472fa9e4a956246d560502283eae3b5d288
7
- data.tar.gz: f1743d13227de5737c2bc91054732ad07052320ba2dcd221c4c8a77b34ffdf19043bce147143f10f9625046819f7e20e910c9cea416cb3774995071cd0d8c157
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
- if old_path.empty? || new_path.empty?
14
- builder = Daemontools::Builder.new("#{Dir.pwd}/config/services.rb")
15
- builder.gen(roles, environment)
16
- else
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
@@ -31,3 +31,7 @@ end
31
31
  service :service_new_2, :roles => [:new_role] do
32
32
  command1 "service_new_2 arg1"
33
33
  end
34
+
35
+ service :service4, :roles => [:role_renamed] do
36
+ command3 "script/service4 argument1"
37
+ end
@@ -35,3 +35,7 @@ end
35
35
  service :deleted_service_3, :roles => [:role_deleted] do
36
36
  command3 "script/deleted_service_3 argument1"
37
37
  end
38
+
39
+ service :service4, :roles => [:role_to_rename] do
40
+ command3 "script/service4 argument1"
41
+ end
@@ -6,8 +6,8 @@ module Daemontools
6
6
  true
7
7
  end
8
8
 
9
- def delete_services(service_names, role)
10
- find_services_by_name(service_names, role).map(&:first)
9
+ def delete_services(service_names)
10
+ service_names
11
11
  end
12
12
  end
13
13
  end
@@ -5,9 +5,7 @@ module Daemontools
5
5
  def remove_unused_services
6
6
  return if @deleted_services.empty?
7
7
 
8
- @deleted_services.map do |role, 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(service_names, role)
76
- services = find_services_by_name(service_names, role)
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.each do |role, services|
19
- puts "Delete services #{services} for role #{role}"
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
- @deleted_services = {}
28
- @roles.each do |role|
29
- old_role_services = (old_services[role] || []).map(&:first)
30
- new_role_services = (new_services[role] || []).map(&:first)
31
- services_for_del = old_role_services - new_role_services
32
- @deleted_services[role] = services_for_del unless services_for_del.empty?
33
- end
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
@@ -1,3 +1,3 @@
1
1
  module Daemontools
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.7"
3
3
  end
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
- check_service_exists(name)
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}`
@@ -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
- deleted_roles = %i[role_with_deleted role_with_modifies role_deleted]
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.keys.size).to eq deleted_roles.length
21
+ expect(deleted.size).to eq deleted_services.length
22
22
  end
23
23
 
24
- deleted.each_key do |role|
25
- it "Should contain #{role}" do
26
- expect(deleted_roles.include?(role)).to eq true
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.3
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: 2020-08-31 00:00:00.000000000 Z
11
+ date: 2022-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler