kanrisuru 0.16.15 → 0.16.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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