File: jexec.rb

package info (click to toggle)
ruby-specinfra 2.76.9-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,144 kB
  • sloc: ruby: 9,280; sh: 4; makefile: 3
file content (47 lines) | stat: -rw-r--r-- 1,136 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
module Specinfra
  module Backend
    class Jexec < Exec
      def initialize(config = {})
        super(config)
        jname = get_config(:jail_name)
        jroot = `jls -j #{jname} path`.strip
        fail 'fail to get jail path!' if jroot.to_s.empty?
        set_config(:jail_root, jroot)
      end

      def send_file(from, to)
        jroot = get_config(:jail_root)
        FileUtils.cp(from, "#{jroot}/#{to}")
      end

      def send_directory(from, to)
        jroot = get_config(:jail_root)
        FileUtils.cp_r(from, "#{jroot}/#{to}")
      end

      def build_command(cmd)
        shell = get_config(:shell) || '/bin/sh'
        cmd = cmd.shelljoin if cmd.is_a?(Array)
        shell = shell.shellescape

        if get_config(:interactive_shell)
          shell << " -i"
        end

        if get_config(:login_shell)
          shell << " -l"
        end

        cmd = "#{shell} -c #{cmd.to_s.shellescape}"

        path = get_config(:path)
        if path
          cmd = %Q{env PATH="#{path}" #{cmd}}
        end

        jname = get_config(:jail_name)
        "jexec #{jname} #{cmd}"
      end
    end
  end
end