ro_rmt 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +91 -0
  3. data/conf/ro_rmt.rb +203 -0
  4. data/conf/rsync/exclude_patterns +4 -0
  5. data/conf/rsync/include_patterns +10 -0
  6. data/lib/ro_cell/rmt.rb +254 -0
  7. data/lib/ro_cell/rmt/dir.rb +55 -0
  8. data/lib/ro_cell/rmt/file.rb +96 -0
  9. data/lib/ro_cell/rmt/opts.rb +21 -0
  10. data/lib/ro_cell/rmt/se_mgr.rb +51 -0
  11. data/lib/ro_cell/tmp/ro.log +49 -0
  12. data/lib/ro_cmd/ci.rb +32 -0
  13. data/lib/ro_cmd/rmt_base.rb +132 -0
  14. data/lib/ro_cmd/rmt_rspec.rb +26 -0
  15. data/lib/ro_helper/dp.rb +20 -0
  16. data/lib/ro_helper/rmt/basic.rb +441 -0
  17. data/lib/ro_helper/rmt/compress.rb +31 -0
  18. data/lib/ro_helper/rmt/determinations.rb +25 -0
  19. data/lib/ro_helper/rmt/dir.rb +11 -0
  20. data/lib/ro_helper/rmt/file.rb +13 -0
  21. data/lib/ro_helper/rmt/file_dir.rb +60 -0
  22. data/lib/ro_helper/rmt/process.rb +46 -0
  23. data/lib/ro_helper/rmt/rb.rb +131 -0
  24. data/lib/ro_helper/rmt/scp.rb +117 -0
  25. data/lib/ro_helper/rmt/se_attrs.rb +28 -0
  26. data/lib/ro_rmt.rb +9 -0
  27. data/lib/ro_rmt_ro_cmds_bin.rb +4 -0
  28. data/lib/ro_rspec_helper/rmt_rspec_helper.rb +82 -0
  29. data/lib/ro_script/kill_port.rb +49 -0
  30. data/lib/ro_script/pgrep.rb +44 -0
  31. data/lib/ro_script/pkill.rb +51 -0
  32. data/lib/ro_script/try.rb +0 -0
  33. data/lib/tts/nginx.conf.erb +148 -0
  34. data/spec/fixtures/ro_bin_helper/Gemfile +2 -0
  35. data/spec/fixtures/ro_bin_helper/gem1/lib/ro_cmd/cmd1.rb +0 -0
  36. data/spec/fixtures/ro_bin_helper/gem1/lib/ro_cmd/cmd2.rb +0 -0
  37. data/spec/fixtures/ro_bin_helper/gem2/lib/ro_cmd/cmd1.rb +0 -0
  38. data/spec/fixtures/ro_bin_helper/gem2/lib/ro_cmd/cmd2.rb +0 -0
  39. data/spec/fixtures/scp/log/scp_rspec_err.log +216 -0
  40. data/spec/fixtures/scp/tmp/ro.log +110 -0
  41. data/spec/fixtures/scp/tmp/ro_cell__pl__sv__st_event.log +7 -0
  42. data/spec/fixtures/scp/tmp/roroco/at/localhost/home/roroco/try/try_ro_rmt.rb +1 -0
  43. data/spec/fixtures/se_mgr/log/se_mgr_rspec_err.log +207 -0
  44. data/spec/fixtures/se_mgr/tmp/ro.log +1194 -0
  45. data/spec/fixtures/se_mgr/tmp/ro_cell__pl__sv__st_event.log +7 -0
  46. data/spec/helpers/articles_helper_spec.rb +15 -0
  47. data/spec/lib/ro_cell/rmt/dir_spec.rb +22 -0
  48. data/spec/lib/ro_cell/rmt/file_spec.rb +32 -0
  49. data/spec/lib/ro_cell/rmt/se_mgr_spec.rb +33 -0
  50. data/spec/lib/ro_cell/rmt_spec.rb +113 -0
  51. data/spec/lib/ro_dp/cap_spec.rb +34 -0
  52. data/spec/lib/ro_dp/rbenv_spec.rb +10 -0
  53. data/spec/lib/ro_dp/system_spec.rb +31 -0
  54. data/spec/lib/ro_helper/rmt/basic_spec.rb +41 -0
  55. data/spec/lib/ro_helper/rmt/cf_spec.rb +17 -0
  56. data/spec/lib/ro_helper/rmt/determinations_spec.rb +11 -0
  57. data/spec/lib/ro_helper/rmt/dir_spec.rb +15 -0
  58. data/spec/lib/ro_helper/rmt/file_dir_helper_spec.rb +11 -0
  59. data/spec/lib/ro_helper/rmt/file_spec.rb +23 -0
  60. data/spec/lib/ro_helper/rmt/process_spec.rb +29 -0
  61. data/spec/lib/ro_helper/rmt/rb_spec.rb +13 -0
  62. data/spec/lib/ro_helper/rmt/scp_spec.rb +21 -0
  63. data/spec/lib/ro_script/pgrep_spec.rb +18 -0
  64. data/spec/lib/ro_sv_try/1.rb +0 -0
  65. data/spec/lib/ro_sv_try/2.rb +0 -0
  66. data/spec/lib/ro_sv_try/3.rb +0 -0
  67. data/spec/lib/ro_sv_try/tmp/rspec_guard_result +9 -0
  68. data/spec/rails_helper.rb +1 -0
  69. data/spec/spec_helper.rb +35 -0
  70. data/spec/wio_spork.rb +10 -0
  71. metadata +177 -0
@@ -0,0 +1,31 @@
1
+ module RoHelper
2
+ module Rmt
3
+ module Compress
4
+ def uncompress(compressed_file, out_dir, *args, &blk)
5
+ if zip?(compressed_file)
6
+ unzip(compressed_file, out_dir)
7
+ end
8
+
9
+ if tar?(compressed_file)
10
+ tar_xf(compressed_file, out_dir)
11
+ end
12
+ end
13
+
14
+ def zip?(file, *args, &blk)
15
+ file.match(%r{\.zip$})
16
+ end
17
+
18
+ def tar?(file, *args, &blk)
19
+ file.match(%r{\.tar\.gz$})
20
+ end
21
+
22
+ def unzip(zip_file, out_dir, *args, &blk)
23
+ bash "unzip #{zip_file} -d #{out_dir}"
24
+ end
25
+
26
+ def tar_xf(tar_file, out_dir, *args, &blk)
27
+ bash "tar xf #{tar_file} -C #{out_dir}"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ module RoHelper
2
+ module Rmt
3
+ module Determinations
4
+ def lc?(*args, &blk)
5
+ host?('lchost') or host?("localhost")
6
+ end
7
+
8
+ def host?(hostname, *args, &blk)
9
+ host == hostname
10
+ end
11
+
12
+ def rmt?(*args, &blk)
13
+ rmt?('rmthost')
14
+ end
15
+
16
+ def x?(*args, &blk)
17
+ x?('xhost')
18
+ end
19
+
20
+ def rt?(*args, &blk)
21
+ user == 'root'
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path("../../../../conf/ro_rmt", __FILE__)
2
+ require_relative 'file_dir'
3
+ require_relative 'scp'
4
+
5
+ module RoHelper
6
+ module Rmt
7
+ module Dir
8
+ include FileDir
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path("../../../../conf/ro_rmt", __FILE__)
2
+ require 'ro_cell/rmt/file'
3
+ require 'ro_cell/rmt/dir'
4
+ require_relative 'file_dir'
5
+ require_relative 'scp'
6
+
7
+ module RoHelper
8
+ module Rmt
9
+ module File
10
+ include FileDir
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,60 @@
1
+ require 'ro_helper/misc'
2
+ require 'ro_cell/rmt/file'
3
+ require 'ro_cell/rmt/dir'
4
+ require 'ro_core_ext/module'
5
+
6
+ module RoHelper
7
+ module Rmt
8
+ module FileDir
9
+ class << self
10
+ def included(base)
11
+ base.send(:include, RoHelper::Misc)
12
+
13
+ base.class_eval do
14
+ meth_name = cst_basename
15
+ ins_name = meth_name
16
+ kls_name = "RoCell::Rmt::#{cst_kls_name}"
17
+
18
+ begin
19
+ kls = eval(kls_name)
20
+ rescue NameError => e
21
+ kls = nil
22
+ end
23
+
24
+ if kls
25
+ def_meth(meth_name) do |path, *args, &blk|
26
+ begin
27
+ last_frame = ro_trace.last_frame_not(file: %r{\/rmt\/})
28
+ meth_name = last_frame.meth
29
+ file = last_frame.file
30
+
31
+ Out.out "##{meth_name} ---- in #{file}"
32
+ kls.new(path, {se: RoCell::Rmt::SeMgr.cur_se}, *args, &blk)
33
+ rescue Exception => e
34
+ raise e
35
+ end
36
+ end
37
+
38
+ ms = kls.ins_meths_defined_in_self
39
+
40
+ # set breakpoint on RmtFile#meth_name or RmtDir#meth_name to dbg
41
+
42
+ # def file_write and write_file
43
+ ms.each do |meth_name|
44
+ new_meth_name = "#{ins_name}_#{meth_name}"
45
+ reverse_meth_name = "#{meth_name}_#{ins_name}".gsub(%r{(.+)\?(.+)}, '\1\2?')
46
+ def_meth(new_meth_name) do |path, *args, &blk|
47
+ send(:"#{ins_name}", path).send(:"#{meth_name}", *args, &blk)
48
+ end
49
+
50
+ def_meth(reverse_meth_name) do |*args, &blk|
51
+ send(:"#{new_meth_name}", *args, &blk)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,46 @@
1
+ module RoHelper
2
+ module Rmt
3
+ module Process
4
+ def kill(pid, *args, &blk)
5
+ begin
6
+ if lc?
7
+ ::Bash.kill(pid)
8
+ else
9
+ sudo "kill -s KILL #{pid}"
10
+ end
11
+ rescue SSHKit::Runner::ExecuteError => e
12
+ end
13
+ end
14
+
15
+ def running?(kw, *args, &blk)
16
+ pgrep.any? do |l|
17
+ l.match(kw)
18
+ end
19
+ end
20
+
21
+ def get_result(*args, &blk)
22
+ YAML.load(read_file("/tmp/rb_eval_result.yml"))
23
+ end
24
+
25
+ def pgrep(*args, &blk)
26
+ eval_script RoRmt.lib("ro_script/pgrep.rb")
27
+ get_result
28
+ end
29
+
30
+ def kill_port(port, *args, &blk)
31
+ script_file = RoRmt.lib("ro_script/kill_port")
32
+ eval_script(script_file, port)
33
+ end
34
+
35
+ def service(*args, &blk)
36
+ sudo "service #{args.join(" ")}"
37
+ end
38
+
39
+ def pkill(*args, &blk)
40
+ re_str = "\"#{args.join(" ")}\""
41
+ eval_script RoRmtPlus.lib("ro_script/pkill.rb"), re_str
42
+ get_result
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,131 @@
1
+ require 'ro_core_ext/kernel'
2
+ module ::RoHelper
3
+ module Rmt
4
+ module Rb
5
+ def create_lc_script(_script, *args, &blk)
6
+ script = _script.del_blank.gsub(%r{\"}, "'")
7
+ ctn = <<-CONTENT
8
+ #!/usr/bin/env ruby
9
+
10
+ require 'fileutils'
11
+ require 'yaml'
12
+ require 'open3'
13
+
14
+ def bash(*args, &blk)
15
+ cmd = args.join(' ')
16
+ out, err, status = Open3.capture3(cmd)
17
+ unless status.success?
18
+ raise err
19
+ end
20
+ out
21
+ end
22
+
23
+ result = lambda do
24
+ begin
25
+ #{script}
26
+ rescue Exception => e
27
+ e
28
+ end
29
+ end.call
30
+
31
+ File.write('#{eval_result_file}', YAML.dump(result))
32
+ CONTENT
33
+
34
+ script2 = %Q(#{ctn})
35
+ fin_script = ::RoCell::Formatter.format(script2)
36
+ RoFile.write(script_path, fin_script)
37
+ end
38
+
39
+ def script_path(*args, &blk)
40
+ RoFile.join "/tmp/rb_eval/scripts", *args, &blk
41
+ end
42
+
43
+ def eval_result_file(*args, &blk)
44
+ "/tmp/rb_eval/result.yml"
45
+ end
46
+
47
+ def rb(*args, &blk)
48
+ eval(*args, &blk)
49
+ end
50
+
51
+ def rb2(*args, &blk)
52
+ rb_exe(*args, &blk)
53
+ end
54
+
55
+ def rb_exe(script, *args, &blk)
56
+ bash("ruby -e '#{script}'")
57
+ end
58
+
59
+ def rb3(*args, &blk)
60
+ rb_capture(*args, &blk)
61
+ end
62
+
63
+ def rb_capture(script, *args, &blk)
64
+ bash_shutup("ruby -e \"#{script}\"").try_to_boolean
65
+ end
66
+
67
+ def eval(script, *args, &blk)
68
+ script = script.gsub(%r{\n$}, "")
69
+ fin_script = %Q(#{script})
70
+ r = bash_shutup "ruby -e \"require 'fileutils'; require 'yaml'; puts(YAML.dump(#{fin_script}))\""
71
+ YAML.load(r)
72
+ end
73
+
74
+ def up_eval_script(f, *args, &blk)
75
+ lc, rmt = get_lc_rmt_script_path(f)
76
+ up(lc)
77
+ eval_script(f, *args, &blk)
78
+ end
79
+
80
+ # if you can not eval script since script is too complex, up script and run it with this meth, mk writing more easier. Attention, if script exist in rmt, #eval_script will run this script without uploading
81
+ # @example see lib/ro_script/pkill.rb
82
+ # attention: don't use puts on ruby path if you wanna get a correct value from sv, sshkit will capture full stdout, and it will effect your val
83
+
84
+ # @param [String] _path lc script path
85
+
86
+ def eval_script(_path, *args, &blk)
87
+ lc, rmt = get_lc_rmt_script_path(_path)
88
+
89
+ begin
90
+ _eval_script(rmt, *args, &blk)
91
+ rescue ::RoErr::RmtErr => e
92
+ msg = e.to_s
93
+ if msg.match(%r{No such file or directory})
94
+ up(lc, rmt)
95
+ elsif msg.match(%r{cannot load such file})
96
+ bash "gem 'ro_thor', git: 'https://github.com/roroco/ro_thor'"
97
+ else
98
+ raise e
99
+ end
100
+
101
+ _eval_script(rmt, *args, &blk)
102
+ end
103
+ end
104
+
105
+ def get_lc_rmt_script_path(_path)
106
+ lc = _path.suffix(".rb")
107
+
108
+ unless test(?f, lc)
109
+ lc = Pj.cur_lib("ro_script", lc)
110
+ end
111
+
112
+ rmt = lc.gsub(Pj.home, home)
113
+ return lc, rmt
114
+ end
115
+
116
+ def _eval_script(rmt, *args, &blk)
117
+ begin
118
+ bash("ruby #{rmt} #{args.join(" ")}")
119
+ rescue ::RoErr::RmtErr => e
120
+ if e.to_s.match("cannot load such file -- ro_thor")
121
+ Out.warn e
122
+ bash "sudo gem install 'ro_thor'"
123
+ _eval_script(rmt, *args, &blk)
124
+ else
125
+ raise e
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,117 @@
1
+ require 'ro_helper/misc'
2
+ require_relative 'se_attrs'
3
+ require 'net/scp'
4
+
5
+ module RoHelper
6
+ module Rmt
7
+ module Scp
8
+ include ::RoHelper::Misc
9
+ include SeAttrs
10
+
11
+ def se(*args, &blk)
12
+ if defined? super
13
+ return super
14
+ end
15
+
16
+ not_implement
17
+ end
18
+
19
+ def tmply_down(path, *args, &blk)
20
+ to_tmp_path = down_to_tmp(path)
21
+ r = yield(to_tmp_path)
22
+ up_tmp(path)
23
+ r
24
+ end
25
+
26
+ def scp(*args, &blk)
27
+ se.scp(*args, &blk)
28
+ end
29
+
30
+ def out(*args, &blk)
31
+ ro_trace.tap do |c|
32
+ last_meth_name = c.last_meth
33
+ call_line = c.last.not(file: __FILE__).location
34
+ Out.status("#{last_meth_name}", "#{args.join(" ")} ---- #{call_line}")
35
+ end
36
+ end
37
+
38
+ def down(*args, &blk)
39
+ out
40
+ _down(*args, &blk)
41
+ end
42
+
43
+ def down2(url, output_name = nil, *args, &blk)
44
+ output_name ||= RoFile.basename(url)
45
+ path = "~/Downloads/#{output_name}"
46
+ unless exist?(path)
47
+ dir = RoFile.parent(path)
48
+ bash("mkdir -p #{dir}; cd #{dir}; aria2c #{url} --out #{RoFile.basename(path)}")
49
+ if block_given?
50
+ yield path
51
+ end
52
+ end
53
+ path
54
+ end
55
+
56
+ def _down(from, to=nil, *args, &blk)
57
+ to ||= from
58
+ RoFile.mkparent(to)
59
+ Out.status("down", "\nfrom #{from}\nto #{to}")
60
+ Out.out
61
+
62
+ # don't use if rmt_path_is_dir?, it will waste time, use #download_dir to download a dir
63
+ scp.download!(from, to, *args, &blk)
64
+ to
65
+ end
66
+
67
+ def down_dir(*args, &blk)
68
+ not_implement
69
+ end
70
+
71
+ def up(f, *args, &blk)
72
+ out(f)
73
+ _up(f, *args, &blk)
74
+ end
75
+
76
+ def _up(from, to=nil, *args, &blk)
77
+ to ||= from
78
+
79
+ from = from.gsub(%r{^~}, Pj.home)
80
+ to = format_path(to)
81
+
82
+ begin
83
+ rsync(from, to: to)
84
+ rescue ::RoErr::BashErr => e
85
+ if e.match("Permission denied")
86
+ tmp_to = RoFile.join("/tmp", to.gsub(%r{/}, "-"))
87
+ rsync(from, to: tmp_to)
88
+ bash "sudo mv #{tmp_to} #{to}"
89
+ else
90
+ raise e
91
+ end
92
+ end
93
+
94
+ to
95
+ end
96
+
97
+ def down_to_tmp(from_rmt_path, *args, &blk)
98
+ out
99
+ to_lc_path = lc_tmp(from_rmt_path)
100
+ _down(from_rmt_path, to_lc_path)
101
+ end
102
+
103
+ def lc_tmp(path=nil)
104
+ RoRmt.cur_tmp("#{user}/at/#{host}", path)
105
+ end
106
+
107
+ def up_tmp(to_rmt_path, *args, &blk)
108
+ out
109
+ from_lc_path = lc_tmp(to_rmt_path)
110
+ _up(from_lc_path, to_rmt_path)
111
+ rmt_path = to_rmt_path
112
+ end
113
+ end
114
+
115
+
116
+ end
117
+ end
@@ -0,0 +1,28 @@
1
+ require 'ro_helper/misc'
2
+ module ::RoHelper
3
+ module Rmt
4
+ module SeAttrs
5
+ include ::RoHelper::Misc
6
+
7
+ # attr_accessor :se, :se_backup
8
+ attr_accessor :se
9
+
10
+ def host
11
+ @host ||= se.transport.host
12
+ end
13
+
14
+ def user
15
+ @user ||= se.options[:user]
16
+ end
17
+
18
+ def port
19
+ @port ||= se.transport.port
20
+ end
21
+
22
+ def user_at_host
23
+ @user_at_host ||= "#{user}@#{host}"
24
+ end
25
+
26
+ end
27
+ end
28
+ end