kanrisuru 0.8.20 → 0.9.0

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: '0969518ec2898fe5ceaa74c897cdb0df384541d8cd8cd51e311e7f4915ce4155'
4
- data.tar.gz: b57d0acd7d23116f2bf6934feaa77d83f007eede49a48f93efb47a241baf0434
3
+ metadata.gz: dda87f43ae0afebc6108a846d459da7ba74168ab011bfc883fff81014360111f
4
+ data.tar.gz: 3e57869c300218b6b2c2ad01f5a991fd574237b8afcca13c08455defba4d8030
5
5
  SHA512:
6
- metadata.gz: de82086f075e8deb1fcec6b8ca3205c384192a3dcf9a24d5852a75dcbaf1127e65c2121cc247cc64ac86647735447bfb3e5065f1aa808f0d0f279cf34e6ec3bd
7
- data.tar.gz: e6944d4a4727ced09f581e10e5a55aba3f32147fc65d5ffa7857cbfa73e4e448b0ecaacaadd0bb332cf572f17771f7225ea74dcd2ada656ff10f8320f5e09a81
6
+ metadata.gz: 2b1d3be849564df655e1ba9e043c4b2632549c9546a963d5b51cb296d358e1c1f1daa29cb559d73625d8b4a024a613e664221d76e5fffcd5fdfc7ce54502ac46
7
+ data.tar.gz: ff9e92ccb5b6bd0d45b95a9252955bf442127583a1971febd5c12726b08421519f53b89bdf4e3d807c238f5bcbb47a8fb1867e56a3413c927e6c31427867cdcf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## Kanrisuru 0.9.0 (November 23, 2021)
2
+ * Add `delete` to `Kanrisuru::Remote::Cluster` class to allow removal of hosts from cluster.
3
+ * Add functional test cases for remote cluster class.
4
+
5
+ ## Kanrisuru 0.8.23 (November 19, 2021)
6
+ * Add functional test cases for `yum` command
7
+ * Add stub by operating system method, with support for `ubuntu` and `centos` os types.
8
+ * Fix `ArgumentError` typo in yum commands, `erase` and `remove`.
9
+
10
+ ## Kanrisuru 0.8.22 (November 18, 2021)
11
+ * Add functional test cases for `apt` command
12
+
13
+ ## Kanrisuru 0.8.21 (November 15, 2021)
14
+ * Fix bug with `Kanrisuru::Mode` class, lookup table had incorrect value for execute only symbolic to numeric field.
15
+
1
16
  ## Kanrisuru 0.8.20 (November 13, 2021)
2
17
  * Unstub network requests for full rspec test-suite run
3
18
 
@@ -137,7 +137,7 @@ module Kanrisuru
137
137
  command.append_flag('-y')
138
138
 
139
139
  packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
140
- raise ArugmentError, "can't remove yum" if packages.include?('yum')
140
+ raise ArgumentError, "can't remove yum" if packages.include?('yum')
141
141
 
142
142
  command << packages
143
143
 
@@ -173,7 +173,7 @@ module Kanrisuru
173
173
  command.append_flag('-y')
174
174
 
175
175
  packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
176
- raise ArugmentError, "can't erase yum" if packages.include?('yum')
176
+ raise ArgumentError, "can't erase yum" if packages.include?('yum')
177
177
 
178
178
  command << packages
179
179
 
@@ -247,7 +247,7 @@ module Kanrisuru
247
247
  def symbolic_to_numeric(ref)
248
248
  conversions = {
249
249
  '---' => 0,
250
- '---x' => 1,
250
+ '--x' => 1,
251
251
  '-w-' => 2,
252
252
  '-wx' => 3,
253
253
  'r--' => 4,
@@ -13,6 +13,10 @@ module Kanrisuru
13
13
  end
14
14
  end
15
15
 
16
+ def hosts
17
+ @hosts.values
18
+ end
19
+
16
20
  def [](hostname)
17
21
  @hosts[hostname]
18
22
  end
@@ -21,6 +25,10 @@ module Kanrisuru
21
25
  add_host(host_opts)
22
26
  end
23
27
 
28
+ def delete(host)
29
+ remove_host(host)
30
+ end
31
+
24
32
  def execute(command)
25
33
  @hosts.map do |host_addr, host|
26
34
  ## Need to evaluate each host independently for the command.
@@ -81,13 +89,37 @@ module Kanrisuru
81
89
  end
82
90
  end
83
91
 
92
+ def remove_host(host)
93
+ if host.instance_of?(Kanrisuru::Remote::Host)
94
+ removed = false
95
+
96
+ if @hosts.key?(host.host)
97
+ removed = true
98
+ @hosts.delete(host.host)
99
+ end
100
+
101
+ removed
102
+ elsif host.instance_of?(String)
103
+ removed = false
104
+
105
+ if @hosts.key?(host)
106
+ removed = true
107
+ @hosts.delete(host)
108
+ end
109
+
110
+ removed
111
+ else
112
+ raise ArgumentError, 'Invalid host type'
113
+ end
114
+ end
115
+
84
116
  def add_host(host_opts)
85
117
  if host_opts.instance_of?(Hash)
86
118
  @hosts[host_opts[:host]] = Kanrisuru::Remote::Host.new(host_opts)
87
119
  elsif host_opts.instance_of?(Kanrisuru::Remote::Host)
88
120
  @hosts[host_opts.host] = host_opts
89
121
  else
90
- raise 'Not a valid host option'
122
+ raise ArgumentError, 'Invalid host option'
91
123
  end
92
124
  end
93
125
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanrisuru
4
- VERSION = '0.8.20'
4
+ VERSION = '0.9.0'
5
5
  end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Core::Apt do
6
+ before(:all) do
7
+ StubNetwork.stub!
8
+ end
9
+
10
+ after(:all) do
11
+ StubNetwork.unstub!
12
+ end
13
+
14
+ let(:host) do
15
+ Kanrisuru::Remote::Host.new(
16
+ host: 'localhost',
17
+ username: 'ubuntu',
18
+ keys: ['id_rsa']
19
+ )
20
+ end
21
+
22
+ it 'prepares apt list command' do
23
+ expect_command(host.apt('list'), 'apt list')
24
+ expect_command(host.apt('list',
25
+ installed: true,
26
+ upgradeable: true,
27
+ all_versions: true,
28
+ ), 'apt list --installed --upgradeable --all-versions')
29
+
30
+ expect_command(host.apt('list', package_name: 'nginx'), 'apt list -a nginx')
31
+ end
32
+
33
+ it 'prepares apt update command' do
34
+ expect_command(host.apt('update'), 'apt-get update -y')
35
+ end
36
+
37
+ it 'prepares apt upgrade command' do
38
+ expect_command(host.apt('upgrade'), 'apt-get upgrade -y')
39
+ end
40
+
41
+ it 'prepares apt full-upgrade command' do
42
+ expect_command(host.apt('full-upgrade'), 'apt full-upgrade -y')
43
+ end
44
+
45
+ it 'prepares apt install command' do
46
+ expect_command(host.apt('install',
47
+ packages: 'nginx'
48
+ ),
49
+ 'apt-get install -y nginx'
50
+ )
51
+
52
+ expect_command(host.apt('install',
53
+ packages: 'monit',
54
+ no_upgrade: true,
55
+ reinstall: true
56
+ ),
57
+ 'apt-get install -y --no-upgrade --reinstall monit'
58
+ )
59
+
60
+ expect_command(host.apt('install',
61
+ packages: ['build-essential', 'manpages-dev'],
62
+ only_upgrade: true,
63
+ ),
64
+ 'apt-get install -y --only-upgrade build-essential manpages-dev'
65
+ )
66
+ end
67
+
68
+ it 'prepares apt remove command' do
69
+ expect_command(host.apt('remove', packages: ['python']), 'apt-get remove -y python')
70
+ end
71
+
72
+ it 'prepares apt purge command' do
73
+ expect_command(host.apt('purge', packages: ['python']), 'apt-get purge -y python')
74
+ end
75
+
76
+ it 'prepares apt autoremove command' do
77
+ expect_command(host.apt('autoremove'), 'apt-get autoremove -y')
78
+ end
79
+
80
+ it 'prepares apt search command' do
81
+ expect_command(host.apt('search', query: 'ruby'), 'apt search ruby')
82
+ end
83
+
84
+ it 'prepares apt show command' do
85
+ expect_command(host.apt('show', packages: 'ruby'), 'apt show -a ruby')
86
+ end
87
+
88
+ it 'prepares apt clean command' do
89
+ expect_command(host.apt('clean'), 'apt-get clean')
90
+ end
91
+
92
+ it 'prepares apt autoclean command' do
93
+ expect_command(host.apt('autoclean'), 'apt-get autoclean')
94
+ end
95
+
96
+ end
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Core::Yum do
6
+ before(:all) do
7
+ StubNetwork.stub!(:centos)
8
+ end
9
+
10
+ after(:all) do
11
+ StubNetwork.unstub!
12
+ end
13
+
14
+ let(:host) do
15
+ Kanrisuru::Remote::Host.new(
16
+ host: 'centos-host',
17
+ username: 'centos',
18
+ keys: ['id_rsa']
19
+ )
20
+ end
21
+
22
+ it 'prepares yum install command' do
23
+ expect_command(host.yum('install', packages: 'nginx'),
24
+ 'yum install -y nginx'
25
+ )
26
+
27
+ expect_command(host.yum('install', packages: ['nginx', 'apache2']),
28
+ 'yum install -y nginx apache2'
29
+ )
30
+ end
31
+
32
+ it 'prepares yum localinstall command' do
33
+ expect_command(host.yum('localinstall', repos: 'foo.rpm'),
34
+ 'yum localinstall -y foo.rpm'
35
+ )
36
+
37
+ expect_command(host.yum('localinstall',
38
+ repos: ['foo.rpm', 'bar.rpm', 'baz.rpm'],
39
+ disable_repo: '*'
40
+ ),
41
+ 'yum localinstall --disablerepo=* -y foo.rpm bar.rpm baz.rpm'
42
+ )
43
+ end
44
+
45
+ it 'prepares yum list command' do
46
+ expect_command(host.yum('list'),
47
+ "yum list | tr '\\n' '#' | sed -e 's/# / /g' | tr '#' '\\n'"
48
+ )
49
+
50
+ expect_command(host.yum('list', all: true, query: 'ruby*'),
51
+ "yum list all ruby* | tr '\\n' '#' | sed -e 's/# / /g' | tr '#' '\\n'"
52
+ )
53
+
54
+ expect_command(host.yum('list',
55
+ available: true,
56
+ updates: true,
57
+ installed: true,
58
+ extras: true,
59
+ obsoletes: true,
60
+ disable_repo: '*'
61
+ ),
62
+ "yum list --disablerepo=* available updates installed extras obsoletes | tr '\\n' '#' | sed -e 's/# / /g' | tr '#' '\\n'"
63
+ )
64
+ end
65
+
66
+ it 'prepares yum search command' do
67
+ expect_command(host.yum('search',
68
+ packages: 'redis'
69
+ ),
70
+ "yum search redis | tr '\\n' '#' | sed -e 's/# / /g' | tr '#' '\\n'"
71
+ )
72
+
73
+ expect_command(host.yum('search',
74
+ packages: ['package1', 'package2', 'package3'],
75
+ all: true
76
+ ),
77
+ "yum search all package1 package2 package3 | tr '\\n' '#' | sed -e 's/# / /g' | tr '#' '\\n'"
78
+ )
79
+ end
80
+
81
+ it 'prepares yum info command' do
82
+ expect_command(host.yum('info',
83
+ packages: 'redis'
84
+ ),
85
+ "yum info --quiet redis"
86
+ )
87
+
88
+ expect_command(host.yum('info',
89
+ packages: ['package1', 'package2', 'package3'],
90
+ installed: true
91
+ ),
92
+ "yum info --quiet installed package1 package2 package3"
93
+ )
94
+ end
95
+
96
+ it 'prepares yum repolist command' do
97
+ expect_command(host.yum('repolist'),
98
+ "yum repolist --verbose"
99
+ )
100
+
101
+ expect_command(host.yum('repolist', repos: 'repo1'),
102
+ "yum repolist --verbose repo1"
103
+ )
104
+
105
+ expect_command(host.yum('repolist', repos: ['repo1', 'repo2', 'repo3']),
106
+ "yum repolist --verbose repo1 repo2 repo3"
107
+ )
108
+ end
109
+
110
+ it 'prepares yum clean command' do
111
+ expect_command(host.yum('clean'), 'yum clean')
112
+ expect_command(host.yum('clean', all: true), 'yum clean all')
113
+ expect_command(host.yum('clean',
114
+ dbcache: true,
115
+ expire_cache: true,
116
+ metadata: true,
117
+ packages: true,
118
+ headers: true,
119
+ rpmdb: true
120
+ ),
121
+ "yum clean dbcache expire-cache metadata packages headers rpmdb"
122
+ )
123
+ end
124
+
125
+ it 'prepares yum remove command' do
126
+ expect_command(host.yum('remove', packages: 'gcc'), 'yum remove -y gcc')
127
+ expect_command(host.yum('remove', packages: ['p1', 'p2', 'p3']),
128
+ 'yum remove -y p1 p2 p3'
129
+ )
130
+
131
+ expect {
132
+ host.yum('remove', packages: 'yum')
133
+ }.to raise_error(ArgumentError)
134
+ end
135
+
136
+ it 'prepares yum autoremove command' do
137
+ expect_command(host.yum('autoremove'), 'yum autoremove -y')
138
+ end
139
+
140
+ it 'prepares yum erase command' do
141
+ expect_command(host.yum('erase', packages: 'gcc'), 'yum erase -y gcc')
142
+ expect_command(host.yum('erase', packages: ['p1', 'p2', 'p3']),
143
+ 'yum erase -y p1 p2 p3'
144
+ )
145
+
146
+ expect {
147
+ host.yum('erase', packages: 'yum')
148
+ }.to raise_error(ArgumentError)
149
+ end
150
+
151
+ it 'prepares yum update command' do
152
+ expect_command(host.yum('update'), 'yum update -y')
153
+ end
154
+
155
+ it 'prepares yum upgrade command' do
156
+ expect_command(host.yum('upgrade'), 'yum upgrade -y')
157
+ end
158
+
159
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Remote::Cluster do
6
+ before(:all) do
7
+ StubNetwork.stub!
8
+ end
9
+
10
+ after(:all) do
11
+ StubNetwork.unstub!
12
+ end
13
+
14
+ let(:host1) do
15
+ Kanrisuru::Remote::Host.new(
16
+ host: 'localhost',
17
+ username: 'ubuntu',
18
+ keys: ['id_rsa']
19
+ )
20
+ end
21
+
22
+ let(:host2) do
23
+ Kanrisuru::Remote::Host.new(
24
+ host: 'ubuntu-host',
25
+ username: 'ubuntu',
26
+ keys: ['id_rsa']
27
+ )
28
+ end
29
+
30
+ it 'adds host to a cluster' do
31
+ cluster = Kanrisuru::Remote::Cluster.new(host1)
32
+ expect(cluster.hosts.length).to eq(1)
33
+ expect(cluster.count).to eq(1)
34
+ expect(cluster[host1.host]).to eq(host1)
35
+ expect(cluster.hosts).to include(host1)
36
+
37
+ cluster << host2
38
+ expect(cluster.hosts.length).to eq(2)
39
+ expect(cluster.count).to eq(2)
40
+ expect(cluster[host2.host]).to eq(host2)
41
+ expect(cluster.hosts).to include(host1)
42
+ expect(cluster.hosts).to include(host2)
43
+ end
44
+
45
+ it 'removes a host from a cluster' do
46
+ cluster = Kanrisuru::Remote::Cluster.new(host1, host2)
47
+ expect(cluster.count).to eq(2)
48
+
49
+ cluster.delete(host2)
50
+ expect(cluster.count).to eq(1)
51
+ expect(cluster.hosts).not_to include(host2)
52
+
53
+ cluster.delete(host1.host)
54
+ expect(cluster.count).to eq(0)
55
+ expect(cluster.hosts).not_to include(host1)
56
+ end
57
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  class StubNetwork
4
4
  class << self
5
- def stub!
5
+ def stub!(os_type = 'ubuntu')
6
6
  unless Kanrisuru::Remote::Host.instance_methods(false).include?(:execute_with_retries_alias)
7
7
  Kanrisuru::Remote::Host.class_eval do
8
8
  alias_method :execute_with_retries_alias, :execute_with_retries
@@ -18,16 +18,16 @@ class StubNetwork
18
18
  unless Kanrisuru::Remote::Os.instance_methods(false).include?(:initialize_alias)
19
19
  Kanrisuru::Remote::Os.class_eval do
20
20
  alias_method :initialize_alias, :initialize
21
- def initialize(host)
21
+ define_method :initialize do |host|
22
22
  @host = host
23
23
 
24
- @kernel_name = 'Linux'
25
- @kernel_version = '#91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021'
26
- @operating_system = 'GNU/Linux'
27
- @hardware_platform = 'x86_64'
28
- @processor = 'x86_64'
29
- @release = 'ubuntu'
30
- @version = 20.0
24
+ @kernel_name = StubNetwork.send(:os_defaults, os_type, :kernel_name)
25
+ @kernel_version = StubNetwork.send(:os_defaults, os_type, :kernel_version)
26
+ @operating_system = StubNetwork.send(:os_defaults, os_type, :operating_system)
27
+ @hardware_platform = StubNetwork.send(:os_defaults, os_type, :hardware_platform)
28
+ @processor = StubNetwork.send(:os_defaults, os_type, :processor)
29
+ @release = StubNetwork.send(:os_defaults, os_type, :release)
30
+ @version = StubNetwork.send(:os_defaults, os_type, :version)
31
31
  end
32
32
  end
33
33
  end
@@ -59,5 +59,36 @@ class StubNetwork
59
59
  end
60
60
  end
61
61
 
62
+ private
63
+
64
+ def os_defaults(name, property)
65
+ name = name.to_sym
66
+
67
+ defaults = {
68
+ ubuntu: {
69
+ kernel_name: 'Linux',
70
+ kernel_version: '#91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021',
71
+ operating_system: 'GNU/Linux',
72
+ hardware_platform: 'x86_64',
73
+ processor: 'x86_64',
74
+ release: 'ubuntu',
75
+ version: 20.0
76
+ },
77
+ centos: {
78
+ kernel_name: 'Linux',
79
+ kernel_version: '"#1 SMP Wed Jul 21 11:57:15 UTC 2021"',
80
+ operating_system: 'GNU/Linux',
81
+ hardware_platform: 'x86_64',
82
+ processor: 'x86_64',
83
+ release: 'centos',
84
+ version: 7.0
85
+ }
86
+ }
87
+
88
+
89
+ defaults[name].key?(property) ?
90
+ defaults[name][property] : nil
91
+ end
92
+
62
93
  end
63
94
  end
@@ -79,6 +79,31 @@ RSpec.describe Kanrisuru::Mode do
79
79
  expect(mode.other.all?).to eq(true)
80
80
  expect(mode.other.to_i).to eq(7)
81
81
  expect(mode.other.symbolic).to eq('rwx')
82
+
83
+ mode = described_class.new("---x--x--x")
84
+ expect(mode.directory?).to eq(false)
85
+ expect(mode.numeric).to eq("111")
86
+
87
+ expect(mode.owner.read?).to eq(false)
88
+ expect(mode.owner.write?).to eq(false)
89
+ expect(mode.owner.execute?).to eq(true)
90
+ expect(mode.owner.all?).to eq(false)
91
+ expect(mode.owner.to_i).to eq(1)
92
+ expect(mode.owner.symbolic).to eq('--x')
93
+
94
+ expect(mode.group.read?).to eq(false)
95
+ expect(mode.group.write?).to eq(false)
96
+ expect(mode.group.execute?).to eq(true)
97
+ expect(mode.group.all?).to eq(false)
98
+ expect(mode.group.to_i).to eq(1)
99
+ expect(mode.group.symbolic).to eq('--x')
100
+
101
+ expect(mode.other.read?).to eq(false)
102
+ expect(mode.other.write?).to eq(false)
103
+ expect(mode.other.execute?).to eq(true)
104
+ expect(mode.other.all?).to eq(false)
105
+ expect(mode.other.to_i).to eq(1)
106
+ expect(mode.other.symbolic).to eq('--x')
82
107
  end
83
108
 
84
109
  it 'changes mode numerically globally' do
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.8.20
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Mammina
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-14 00:00:00.000000000 Z
11
+ date: 2021-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -173,13 +173,16 @@ files:
173
173
  - lib/kanrisuru/util/os_family.rb
174
174
  - lib/kanrisuru/util/signal.rb
175
175
  - lib/kanrisuru/version.rb
176
+ - spec/functional/core/apt_spec.rb
176
177
  - spec/functional/core/find_spec.rb
177
178
  - spec/functional/core/path_spec.rb
178
179
  - spec/functional/core/socket_spec.rb
179
180
  - spec/functional/core/stat_spec.rb
180
181
  - spec/functional/core/stream_spec.rb
181
182
  - spec/functional/core/transfer_spec.rb
183
+ - spec/functional/core/yum_spec.rb
182
184
  - spec/functional/os_package_spec.rb
185
+ - spec/functional/remote/cluster_spec.rb
183
186
  - spec/helper/expect_helpers.rb
184
187
  - spec/helper/stub_network.rb
185
188
  - spec/helper/test_hosts.rb