daemontools 0.2.3 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|