kanrisuru 0.16.15 → 0.16.16

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: f2d1d9331232a2c1c343da0fd4a8d11fcef4b0197aea108fe1d6047a60c390f7
4
- data.tar.gz: 8e8cbf4381da58b367fbb9aa2ac29fa68d8c4eed68ca3197cfaedf71cec69f85
3
+ metadata.gz: c72c91f337408d0a7dee545cabeb07ba9fac668baf8d3c3dbb65d0e04a27e347
4
+ data.tar.gz: 28d8387d8081783dfd32031c202ffc5ec66e4a7fea3306e8cb35d117f2193c10
5
5
  SHA512:
6
- metadata.gz: f5eaa5caba5ae1f48e02fc4d6dadc03ab0ff6a94c47353e365adca6235424189e76ccb41fe513121d97013b819bd149636edef726d988c436269f4d230e524b8
7
- data.tar.gz: 9ab07c9fdcf14fc3a314cbce0d9952456fa0daccb77bfeb2e8de92ad4a131f4d5f661033a3ef41c540adc18b73be0e11574b86b65a2392f2d446baaa043f13a0
6
+ metadata.gz: 8a0d66db59619c3cb9e69567ef0ed08e564c53ca3171dccc7acd31410288dfa06ebfc5a5daa2ff09aa14cbbacf433175352928b8a6e837f2ba43217de5fb70ac
7
+ data.tar.gz: 8bfc4a39d3bb5ab4c9f180dd4e5682057a7c1fe5c5bd93e25a6d88280a6e12c79831e0c5d9cb05b2b3211b91e3c6161d585fcc20c2d851da100037393dd17752
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## Kanrisuru 0.16.16 (January 08, 2022) ##
2
+ * Fix issue with `download` command when downloading directories from remote server.
3
+
1
4
  ## Kanrisuru 0.16.15 (January 07, 2022) ##
2
5
  * Add recursive and all_targets opts to `umount` command.
3
6
 
@@ -126,8 +126,7 @@ module Kanrisuru
126
126
  field = field.downcase
127
127
  field = field.gsub(/\s/, '_')
128
128
  field = field.gsub('-', '_')
129
- field = field.gsub(':', '')
130
- field
129
+ field.gsub(':', '')
131
130
  end
132
131
 
133
132
  def dmi_type_to_struct(type)
@@ -4,21 +4,41 @@ module Kanrisuru
4
4
  module Core
5
5
  module Transfer
6
6
  def download(remote_path, local_path = nil, opts = {})
7
+ recursive = opts[:recursive] || false
8
+
9
+ remote_path += '/' if !remote_path.end_with?('/') && recursive
10
+ local_path += '/' if !local_path.nil? && !local_path.end_with?('/') && recursive
11
+
7
12
  if local_path.instance_of?(Hash)
8
13
  opts = local_path
9
14
  local_path = nil
10
15
  end
11
16
 
12
- tmp_path = "/tmp/kanrisuru-tmp-#{Time.now.to_i}-#{object_id}"
17
+ tmp_name = "kanrisuru-tmp-#{Time.now.to_i}-#{object_id}"
18
+ tmp_path = "/tmp/#{tmp_name}"
13
19
 
14
20
  begin
15
- result = cp(remote_path, tmp_path, force: true)
21
+ result = cp(remote_path, tmp_path, force: true, follow: true, recursive: recursive)
16
22
  raise 'Unable to copy remote file to temp path' unless result.success?
17
23
 
24
+ result = chown(tmp_path, owner: @username, group: @username, recursive: recursive)
25
+ raise 'Unable to update owner or group for temp path' unless result.success?
26
+
27
+ result = chmod(tmp_path, 'u+r', recursive: true)
28
+ raise 'Unable to update owner permission read access' unless result.success?
29
+
30
+ local_path = ::File.expand_path(local_path) if local_path
18
31
  result = ssh.scp.download!(tmp_path, local_path, opts)
19
- Kanrisuru::Util.blank?(local_path) ? result : local_path
32
+ return false unless result
33
+
34
+ if Kanrisuru::Util.present?(local_path) && recursive
35
+ remote_dirname = remote_path.split('/').last
36
+ FileUtils.mv("#{local_path}/#{tmp_name}", "#{local_path}/#{remote_dirname}")
37
+ else
38
+ result
39
+ end
20
40
  ensure
21
- rm(tmp_path, force: true) if inode?(tmp_path)
41
+ rm(tmp_path, force: true, recursive: recursive) if inode?(tmp_path)
22
42
  end
23
43
  end
24
44
  end
@@ -12,9 +12,7 @@ module Kanrisuru
12
12
 
13
13
  ## Need to copy internal dir contents, not the tmp dir itself
14
14
  if opts[:recursive]
15
- unless dir?(remote_path)
16
- mkdir(remote_path, silent: true)
17
- end
15
+ mkdir(remote_path, silent: true) unless dir?(remote_path)
18
16
 
19
17
  result = cp("#{tmp_path}/*", remote_path, recursive: true)
20
18
  else
@@ -22,6 +20,7 @@ module Kanrisuru
22
20
  end
23
21
 
24
22
  raise "Unable to move file to remote path - #{result.command.raw_result}" unless result.success?
23
+
25
24
  stat(remote_path)
26
25
  ensure
27
26
  rm(tmp_path, force: true) if inode?(tmp_path)
@@ -10,11 +10,12 @@ module Kanrisuru
10
10
  Kanrisuru::Result.new(command) do |cmd|
11
11
  if Kanrisuru::Util.numeric?(user)
12
12
  uid = user.to_i
13
- user = Parser::User.parse(cmd)
13
+ user = Parser::User.parse(cmd)
14
14
  else
15
15
  ## Get user id
16
16
  result = get_uid(user)
17
17
  break if result.failure?
18
+
18
19
  uid = result.to_i
19
20
  end
20
21
 
@@ -8,7 +8,7 @@ module Kanrisuru
8
8
  def self.parse(command)
9
9
  string = command.to_s
10
10
  string = string.split[0]
11
-
11
+
12
12
  matches = string.match(/uid=\d+\((.+)\)/)
13
13
  return if !matches || !matches.captures
14
14
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanrisuru
4
- VERSION = '0.16.15'
4
+ VERSION = '0.16.16'
5
5
  end
@@ -68,7 +68,7 @@ RSpec.describe Kanrisuru::Core::Find do
68
68
  paths: '/dev',
69
69
  iname: 'tty*'
70
70
  ),
71
- "find /dev -iname tty*")
71
+ 'find /dev -iname tty*')
72
72
 
73
73
  expect_command(host.find(
74
74
  paths: '/dev',
@@ -22,11 +22,9 @@ RSpec.describe Kanrisuru::Core::Group do
22
22
  it 'prepares create_group command' do
23
23
  expect_command(host.create_group('admin'), 'groupadd admin')
24
24
  expect_command(host.create_group('admin',
25
- gid: 9000,
26
- non_unique: true
27
- ),
28
- 'groupadd admin -g 9000 -o'
29
- )
25
+ gid: 9000,
26
+ non_unique: true),
27
+ 'groupadd admin -g 9000 -o')
30
28
 
31
29
  expect_command(host.create_group('admin', gid: 12, system: true), 'groupadd admin -g 12 -r')
32
30
  end
@@ -85,9 +85,9 @@ RSpec.describe Kanrisuru::Remote::Cluster do
85
85
  expect(command.prepared_command).to eq('sudo -u root /bin/bash -c "ls"')
86
86
  expect(cloned_command.prepared_command).to eq('sudo -u root /bin/bash -c "ls"')
87
87
 
88
- expect {
88
+ expect do
89
89
  cluster.send(:create_command, 1)
90
- }.to raise_error(ArgumentError)
90
+ end.to raise_error(ArgumentError)
91
91
  end
92
92
 
93
93
  it 'runs execute for a command on a cluster' do
@@ -178,8 +178,8 @@ RSpec.describe Kanrisuru::Remote::Cluster do
178
178
 
179
179
  cluster.cd('/etc')
180
180
  cluster.each do |host|
181
- expect(host.instance_variable_get(:@current_dir)).to eq('/etc')
182
- end
181
+ expect(host.instance_variable_get(:@current_dir)).to eq('/etc')
182
+ end
183
183
 
184
184
  StubNetwork.unstub_command!(:pwd)
185
185
  StubNetwork.unstub_command!(:realpath)
@@ -198,18 +198,18 @@ RSpec.describe Kanrisuru::Remote::Cluster do
198
198
 
199
199
  cluster.chdir('/etc')
200
200
  cluster.each do |host|
201
- expect(host.instance_variable_get(:@current_dir)).to eq('/etc')
202
- end
201
+ expect(host.instance_variable_get(:@current_dir)).to eq('/etc')
202
+ end
203
203
 
204
204
  StubNetwork.unstub_command!(:pwd)
205
205
  StubNetwork.unstub_command!(:realpath)
206
206
  end
207
-
207
+
208
208
  it 'fails to remove a host from a cluster' do
209
209
  cluster = described_class.new(host1, host2)
210
210
 
211
- expect {
211
+ expect do
212
212
  cluster.delete(1)
213
- }.to raise_error(ArgumentError)
213
+ end.to raise_error(ArgumentError)
214
214
  end
215
215
  end
@@ -34,6 +34,7 @@ RSpec.shared_examples 'transfer' do |os_name, host_json, spec_dir|
34
34
  keys: [host_json['ssh_key']]
35
35
  )
36
36
 
37
+ FileUtils.rm_rf("../test-output-#{os_name}")
37
38
  host.rmdir(spec_dir)
38
39
  host.disconnect
39
40
  end
@@ -80,7 +81,7 @@ RSpec.shared_examples 'transfer' do |os_name, host_json, spec_dir|
80
81
  src_path = '/etc/hosts'
81
82
 
82
83
  result = host.download(src_path, path)
83
- expect(result).to eq(path)
84
+ expect(result).to be_truthy
84
85
  FileUtils.rm(path)
85
86
  end
86
87
 
@@ -93,6 +94,22 @@ RSpec.shared_examples 'transfer' do |os_name, host_json, spec_dir|
93
94
  expect(lines.length).to be >= 1
94
95
  end
95
96
 
97
+ it 'downloads a dir' do
98
+ remote_path = '/var/log'
99
+ local_path = "../test-output-#{os_name}"
100
+ FileUtils.mkdir(local_path)
101
+
102
+ host.su('root')
103
+ result = host.download(remote_path, local_path, recursive: true)
104
+ expect(result).not_to be nil
105
+
106
+ paths = host.ls(path: '/var/log').map(&:path)
107
+ Dir.glob("#{local_path}/log/*").each do |file|
108
+ name = File.basename(file)
109
+ expect(paths).to include(name)
110
+ end
111
+ end
112
+
96
113
  it 'wgets url' do
97
114
  result = host.wget('https://example.com', directory_prefix: spec_dir)
98
115
  expect(result).to be_success
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- RSpec.shared_examples 'cluster' do |os_name, host_json, spec_dir|
5
+ RSpec.shared_examples 'cluster' do |os_name, host_json, _spec_dir|
6
6
  context "with #{os_name}" do
7
7
  let(:host1) do
8
8
  Kanrisuru::Remote::Host.new(
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanrisuru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.15
4
+ version: 0.16.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Mammina
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-07 00:00:00.000000000 Z
11
+ date: 2022-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel_tests