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 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