From c2730bdd718e258aeacbeb9578cbd34acc6e8c2d Mon Sep 17 00:00:00 2001 From: Luka Vandervelden Date: Fri, 8 Nov 2019 15:54:44 +0100 Subject: [PATCH] Improved service removal. --- src/service.cr | 1 + src/service/environment.cr | 7 ------- src/service/service.cr | 29 +++++++++++++++++++++++++++-- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/service.cr b/src/service.cr index d551f1f..3134072 100644 --- a/src/service.cr +++ b/src/service.cr @@ -171,6 +171,7 @@ commands.push "del", "Removes a service from an environment." do |args| end revdeps.reverse.each do |service| + puts "removing #{service.to_s}" service.remove RC_DIRECTORY end end diff --git a/src/service/environment.cr b/src/service/environment.cr index 8002ee9..adc402c 100644 --- a/src/service/environment.cr +++ b/src/service/environment.cr @@ -21,13 +21,6 @@ class Environment @type = Type.parse type @files = Array(ServiceDefinition::FileDefinition).new - - # FIXME: Should this *really* be here? - # FIXME: $ENVIRONMENT_ROOT - @files << ServiceDefinition::FileDefinition.new "/srv/${ENVIRONMENT}", - "environment root", - creation_command: "mkdir -p /srv/${ENVIRONMENT} && chmod a+rwt /srv/${ENVIRONMENT}", - deletion_command: "rmdir /srv/${ENVIRONMENT}" end def initialize(@name, specs : SpecParser) diff --git a/src/service/service.cr b/src/service/service.cr index d69ab4e..69877dc 100644 --- a/src/service/service.cr +++ b/src/service/service.cr @@ -273,8 +273,8 @@ class Service env: build_environment end.wait - if child.exit_status != 0 - raise Service::Exception.new "Child process exited with status “#{child.exit_status}”." + unless child.success? + raise Service::Exception.new "Child process exited with status “#{(child.exit_status/256).to_i}”." break end end @@ -458,6 +458,31 @@ class Service end def remove(path) + files.reverse.each do |file| + puts " - removing '#{file.file_path}'" + command = file.deletion_command + + child = Process.fork do + Dir.cd root + + exit 0 unless File.exists? file.file_path + + if command + Process.exec "sh", ["-c", command], + output: Process::Redirect::Inherit, + error: Process::Redirect::Inherit, + env: build_environment + else + FileUtils.rm_rf file.file_path + end + end.wait + + unless child.success? + raise Service::Exception.new "Child process exited with status “#{(child.exit_status/256).to_i}”." + break + end + end + File.delete "#{path}/#{name}.#{@environment.name}.spec" end