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
|