diff --git a/lib/specinfra/command.rb b/lib/specinfra/command.rb index 552fb5afd..2f05cf26f 100644 --- a/lib/specinfra/command.rb +++ b/lib/specinfra/command.rb @@ -19,6 +19,7 @@ module Command require 'specinfra/command/module/zfs' require 'specinfra/command/module/ss' require 'specinfra/command/module/openrc' +require 'specinfra/command/module/runit' # Base require 'specinfra/command/base' @@ -407,3 +408,9 @@ module Command require 'specinfra/command/poky/base/inventory' require 'specinfra/command/poky/base/package' require 'specinfra/command/poky/base/service' + +# VoidLinux (inherit Linux) +require 'specinfra/command/voidlinux' +require 'specinfra/command/voidlinux/base' +require 'specinfra/command/voidlinux/base/package' +require 'specinfra/command/voidlinux/base/service' diff --git a/lib/specinfra/command/module/runit.rb b/lib/specinfra/command/module/runit.rb new file mode 100644 index 000000000..d0abb7584 --- /dev/null +++ b/lib/specinfra/command/module/runit.rb @@ -0,0 +1,11 @@ +module Specinfra + module Command + module Module + module Runit + include Specinfra::Command::Module::Service::Runit + extend Specinfra::Command::Module::Service::Delegator + def_delegator_service_under :runit + end + end + end +end diff --git a/lib/specinfra/command/module/service/runit.rb b/lib/specinfra/command/module/service/runit.rb index 6a03040ab..d1530bdb0 100644 --- a/lib/specinfra/command/module/service/runit.rb +++ b/lib/specinfra/command/module/service/runit.rb @@ -10,6 +10,30 @@ def check_is_running_under_runit(service) def check_is_enabled_under_runit(service) "test ! -f /etc/sv/#{escape(service)}/down" end + + def enable_under_runit(service) + "ln -s /etc/sv/#{service} /var/service/" + end + + def disable_under_runit(service) + "rm /var/service/#{service}" + end + + def start_under_runit(service) + "sv up /var/service/#{service}" + end + + def stop_under_runit(service) + "sv down /var/service/#{service}" + end + + def restart_under_runit(service) + "sv restart /var/service/#{service}" + end + + def reload_under_runit(service) + "sv reload /var/service/#{service}" + end end end end diff --git a/lib/specinfra/command/voidlinux.rb b/lib/specinfra/command/voidlinux.rb new file mode 100644 index 000000000..b45eaf072 --- /dev/null +++ b/lib/specinfra/command/voidlinux.rb @@ -0,0 +1,2 @@ +class Specinfra::Command::Voidlinux < Specinfra::Command::Linux +end \ No newline at end of file diff --git a/lib/specinfra/command/voidlinux/base.rb b/lib/specinfra/command/voidlinux/base.rb new file mode 100644 index 000000000..5ea87adfc --- /dev/null +++ b/lib/specinfra/command/voidlinux/base.rb @@ -0,0 +1,2 @@ +class Specinfra::Command::Voidlinux::Base < Specinfra::Command::Linux::Base +end \ No newline at end of file diff --git a/lib/specinfra/command/voidlinux/base/package.rb b/lib/specinfra/command/voidlinux/base/package.rb new file mode 100644 index 000000000..2248e8f13 --- /dev/null +++ b/lib/specinfra/command/voidlinux/base/package.rb @@ -0,0 +1,21 @@ +class Specinfra::Command::Voidlinux::Base::Package < Specinfra::Command::Linux::Base::Package + class << self + def check_is_installed(package, version=nil) + "xbps-query -S #{escape(package)} | grep -q 'state: installed'" + end + + alias :check_is_installed_by_xbps :check_is_installed + + def get_version(package, opts=nil) + "xbps-query -S #{package} | sed -nE 's/^pkgver: #{package}-([^\)+])/\1/p'" + end + + def install(package, version=nil, option='') + "xbps-install --yes #{package}" + end + + def remove(package, option='') + "xbps-remove --yes #{option} #{package}" + end + end +end diff --git a/lib/specinfra/command/voidlinux/base/service.rb b/lib/specinfra/command/voidlinux/base/service.rb new file mode 100644 index 000000000..a206770af --- /dev/null +++ b/lib/specinfra/command/voidlinux/base/service.rb @@ -0,0 +1,5 @@ +class Specinfra::Command::Voidlinux::Base::Service < Specinfra::Command::Linux::Base::Service + class << self + include Specinfra::Command::Module::Runit + end +end diff --git a/lib/specinfra/helper/detect_os.rb b/lib/specinfra/helper/detect_os.rb index 5bf7b5faf..5d36810e0 100644 --- a/lib/specinfra/helper/detect_os.rb +++ b/lib/specinfra/helper/detect_os.rb @@ -40,3 +40,4 @@ def detect require 'specinfra/helper/detect_os/redhat' require 'specinfra/helper/detect_os/solaris' require 'specinfra/helper/detect_os/suse' +require 'specinfra/helper/detect_os/voidlinux' diff --git a/lib/specinfra/helper/detect_os/voidlinux.rb b/lib/specinfra/helper/detect_os/voidlinux.rb new file mode 100644 index 000000000..3d9aad3f0 --- /dev/null +++ b/lib/specinfra/helper/detect_os/voidlinux.rb @@ -0,0 +1,11 @@ +class Specinfra::Helper::DetectOs::Voidlinux < Specinfra::Helper::DetectOs + def detect + if run_command("ls /etc/os-release").success? + line = run_command("cat /etc/os-release").stdout + + if line =~ /^ID="void"/ + { :family => 'voidlinux', :release => nil } + end + end + end +end diff --git a/spec/command/module/service/runit_spec.rb b/spec/command/module/service/runit_spec.rb new file mode 100644 index 000000000..537adcae8 --- /dev/null +++ b/spec/command/module/service/runit_spec.rb @@ -0,0 +1,16 @@ +require 'spec_helper' + +describe Specinfra::Command::Module::Service::Runit do + class Specinfra::Command::Module::Service::Runit::Test < Specinfra::Command::Base + extend Specinfra::Command::Module::Service::Runit + end + let(:klass) { Specinfra::Command::Module::Service::Runit::Test } + it { expect(klass.check_is_enabled_under_runit('httpd')).to eq 'test ! -f /etc/sv/httpd/down' } + it { expect(klass.check_is_running_under_runit('httpd')).to eq "sv status httpd | grep -E '^run: '" } + it { expect(klass.enable_under_runit('httpd')).to eq 'ln -s /etc/sv/httpd /var/service/' } + it { expect(klass.disable_under_runit('httpd')).to eq 'rm /var/service/httpd' } + it { expect(klass.start_under_runit('httpd')).to eq 'sv up /var/service/httpd' } + it { expect(klass.stop_under_runit('httpd')).to eq 'sv down /var/service/httpd' } + it { expect(klass.restart_under_runit('httpd')).to eq 'sv restart /var/service/httpd' } + it { expect(klass.reload_under_runit('httpd')).to eq 'sv reload /var/service/httpd' } +end diff --git a/spec/command/voidlinux/package_spec.rb b/spec/command/voidlinux/package_spec.rb new file mode 100644 index 000000000..536885be8 --- /dev/null +++ b/spec/command/voidlinux/package_spec.rb @@ -0,0 +1,9 @@ +require 'spec_helper' + +require 'spec_helper' + +set :os, { :family => 'voidlinux' } + +describe get_command(:check_package_is_installed, 'httpd') do + it { should eq "xbps-query -S httpd | grep -q 'state: installed'" } +end diff --git a/spec/command/voidlinux/service_spec.rb b/spec/command/voidlinux/service_spec.rb new file mode 100644 index 000000000..d23f2e57d --- /dev/null +++ b/spec/command/voidlinux/service_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper' + +property[:os] = nil +set :os, :family => 'voidlinux' + +describe get_command(:enable_service, 'nginx') do + it { should eq 'ln -s /etc/sv/nginx /var/service/' } +end + +describe get_command(:disable_service, 'nginx') do + it { should eq 'rm /var/service/nginx' } +end + +describe get_command(:start_service, 'nginx') do + it { should eq 'sv up /var/service/nginx' } +end + +describe get_command(:stop_service, 'nginx') do + it { should eq 'sv down /var/service/nginx' } +end + +describe get_command(:restart_service, 'nginx') do + it { should eq 'sv restart /var/service/nginx' } +end