linux_admin 0.11.0 → 0.11.1

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
  SHA1:
3
- metadata.gz: 1c8a9566372578734f209b1cb4d7795bc8d911ff
4
- data.tar.gz: 0d10059fc09b699b8b0debda74afb30592021353
3
+ metadata.gz: 284247598cea1f7eabd5d8c8d4fb4710c0e040e0
4
+ data.tar.gz: a4943e48131e68c3bd2a8cc21b8dcd6c441fa5cd
5
5
  SHA512:
6
- metadata.gz: 063fcd55e7a1b6f1aa8d595b0a060ac642fc00766aba7a26ab398f5d87f9cc4e5adec38321ee5f5bf6c8e0adda73798bbdb0b4015f9c33fff988d533afc1fac5
7
- data.tar.gz: 33dfa49d8909ed8a7c2a28db9ac4d314ef09f263d7f10c64e628ba792b59a76d4964002c8f7a4b58badefb659fc0c2cb980cb404a1825ae50af64890c690cf25
6
+ metadata.gz: 04bb042b12b6b6155582bc4091965bf2968d3d01dfdde64277100ba461a668ba37b156e83f01754f0e8b07b2408ab4a8a8018b12cc56473ecde59a25d42897e4
7
+ data.tar.gz: 64a75e5340636156aa82cd16f96aedf96ecefcd7976e6d63e8b4a35e19d67a8c43f3eafc4b68cab0dcf8862c7451943f2d85f984aac5586e197b9a0d92426c3d
data/lib/linux_admin.rb CHANGED
@@ -28,6 +28,8 @@ require 'linux_admin/logical_volume'
28
28
  require 'linux_admin/physical_volume'
29
29
  require 'linux_admin/volume_group'
30
30
  require 'linux_admin/scap'
31
+ require 'linux_admin/time_date'
32
+ require 'linux_admin/ip_address'
31
33
 
32
34
  module LinuxAdmin
33
35
  extend Common
@@ -1,5 +1,7 @@
1
1
  module LinuxAdmin
2
2
  class Hosts
3
+ include Common
4
+
3
5
  attr_accessor :filename
4
6
  attr_accessor :raw_lines
5
7
  attr_accessor :parsed_file
@@ -36,6 +38,20 @@ module LinuxAdmin
36
38
  end
37
39
  end
38
40
 
41
+ def hostname=(name)
42
+ if cmd?("hostnamectl")
43
+ run!(cmd('hostnamectl'), :params => ['set-hostname', name])
44
+ else
45
+ File.write("/etc/hostname", name)
46
+ run!(cmd('hostname'), :params => {:file => "/etc/hostname"})
47
+ end
48
+ end
49
+
50
+ def hostname
51
+ result = run(cmd("hostname"))
52
+ result.success? ? result.output : nil
53
+ end
54
+
39
55
  private
40
56
  def parse_file
41
57
  @parsed_file = []
@@ -0,0 +1,27 @@
1
+ module LinuxAdmin
2
+ class IpAddress
3
+ include Common
4
+
5
+ def address
6
+ address_list.detect { |ip| IPAddr.new(ip).ipv4? }
7
+ end
8
+
9
+ def address6
10
+ address_list.detect { |ip| IPAddr.new(ip).ipv6? }
11
+ end
12
+
13
+ private
14
+
15
+ def address_list
16
+ result = nil
17
+ # Added retry to account for slow DHCP not assigning an IP quickly at boot; specifically:
18
+ # https://github.com/ManageIQ/manageiq-appliance/commit/160d8ccbfbfd617bdb5445e56cdab66b9323b15b
19
+ 5.times do
20
+ result = run(cmd("hostname"), :params => ["-I"])
21
+ break if result.success?
22
+ end
23
+
24
+ result.success? ? result.output.split(' ') : []
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,31 @@
1
+ module LinuxAdmin
2
+ class TimeDate
3
+ extend Common
4
+ COMMAND = 'timedatectl'
5
+
6
+ TimeCommandError = Class.new(StandardError)
7
+
8
+ def self.system_timezone_detailed
9
+ result = run(cmd(COMMAND), :params => ["status"])
10
+ result.output.split("\n").each do |l|
11
+ return l.split(':')[1].strip if l =~ /Time.*zone/
12
+ end
13
+ end
14
+
15
+ def self.system_timezone
16
+ system_timezone_detailed.split[0]
17
+ end
18
+
19
+ def self.system_time=(time)
20
+ run!(cmd(COMMAND), :params => ["set-time", "#{time.strftime("%F %T")}", :adjust_system_clock])
21
+ rescue AwesomeSpawn::CommandResultError => e
22
+ raise TimeCommandError, e.message
23
+ end
24
+
25
+ def self.system_timezone=(zone)
26
+ run!(cmd(COMMAND), :params => ["set-timezone", zone])
27
+ rescue AwesomeSpawn::CommandResultError => e
28
+ raise TimeCommandError, e.message
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module LinuxAdmin
2
- VERSION = "0.11.0"
2
+ VERSION = "0.11.1"
3
3
  end
@@ -0,0 +1,14 @@
1
+ Local time: Thu 2015-09-24 17:54:02 EDT
2
+ Universal time: Thu 2015-09-24 21:54:02 UTC
3
+ RTC time: Thu 2015-09-24 21:54:02
4
+ Time zone: America/New_York (EDT, -0400)
5
+ NTP enabled: yes
6
+ NTP synchronized: yes
7
+ RTC in local TZ: no
8
+ DST active: yes
9
+ Last DST change: DST began at
10
+ Sun 2015-03-08 01:59:59 EST
11
+ Sun 2015-03-08 03:00:00 EDT
12
+ Next DST change: DST ends (the clock jumps one hour backwards) at
13
+ Sun 2015-11-01 01:59:59 EDT
14
+ Sun 2015-11-01 01:00:00 EST
data/spec/hosts_spec.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  describe LinuxAdmin::Hosts do
2
+ TEST_HOSTNAME = "test-hostname"
2
3
  etc_hosts = "\n #Some Comment\n127.0.0.1\tlocalhost localhost.localdomain # with a comment\n127.0.1.1 my.domain.local"
3
4
  before do
4
5
  allow(File).to receive(:read).and_return(etc_hosts)
@@ -50,4 +51,45 @@ describe LinuxAdmin::Hosts do
50
51
  expect(@instance.raw_lines).to eq(expected_array)
51
52
  end
52
53
  end
54
+
55
+ describe "#hostname=" do
56
+ it "sets the hostname using hostnamectl when the command exists" do
57
+ spawn_args = [
58
+ @instance.cmd('hostnamectl'),
59
+ :params => ['set-hostname', TEST_HOSTNAME]
60
+ ]
61
+ expect(@instance).to receive(:cmd?).with("hostnamectl").and_return(true)
62
+ expect(AwesomeSpawn).to receive(:run!).with(*spawn_args)
63
+ @instance.hostname = TEST_HOSTNAME
64
+ end
65
+
66
+ it "sets the hostname with hostname when hostnamectl does not exist" do
67
+ spawn_args = [
68
+ @instance.cmd('hostname'),
69
+ :params => {:file => "/etc/hostname"}
70
+ ]
71
+ expect(@instance).to receive(:cmd?).with("hostnamectl").and_return(false)
72
+ expect(File).to receive(:write).with("/etc/hostname", TEST_HOSTNAME)
73
+ expect(AwesomeSpawn).to receive(:run!).with(*spawn_args)
74
+ @instance.hostname = TEST_HOSTNAME
75
+ end
76
+ end
77
+
78
+ describe "#hostname" do
79
+ let(:spawn_args) do
80
+ [@instance.cmd('hostname'), {}]
81
+ end
82
+
83
+ it "returns the hostname" do
84
+ result = AwesomeSpawn::CommandResult.new("", TEST_HOSTNAME, nil, 0)
85
+ expect(AwesomeSpawn).to receive(:run).with(*spawn_args).and_return(result)
86
+ expect(@instance.hostname).to eq(TEST_HOSTNAME)
87
+ end
88
+
89
+ it "returns nil when the command fails" do
90
+ result = AwesomeSpawn::CommandResult.new("", "", "An error has happened", 1)
91
+ expect(AwesomeSpawn).to receive(:run).with(*spawn_args).and_return(result)
92
+ expect(@instance.hostname).to be_nil
93
+ end
94
+ end
53
95
  end
@@ -0,0 +1,52 @@
1
+ describe LinuxAdmin::IpAddress do
2
+ let(:ip) { described_class.new }
3
+
4
+ SPAWN_ARGS = [
5
+ described_class.new.cmd("hostname"),
6
+ :params => ["-I"]
7
+ ]
8
+
9
+ def result(output, exit_status)
10
+ AwesomeSpawn::CommandResult.new("", output, "", exit_status)
11
+ end
12
+
13
+ describe "#address" do
14
+ it "returns an address" do
15
+ ip_addr = "192.168.1.2"
16
+ expect(AwesomeSpawn).to receive(:run).with(*SPAWN_ARGS).and_return(result(ip_addr, 0))
17
+ expect(ip.address).to eq(ip_addr)
18
+ end
19
+
20
+ it "returns nil when no address is found" do
21
+ ip_addr = ""
22
+ expect(AwesomeSpawn).to receive(:run).at_least(5).times.with(*SPAWN_ARGS).and_return(result(ip_addr, 1))
23
+ expect(ip.address).to be_nil
24
+ end
25
+
26
+ it "returns only IPv4 addresses" do
27
+ ip_addr = "fd12:3456:789a:1::1 192.168.1.2"
28
+ expect(AwesomeSpawn).to receive(:run).with(*SPAWN_ARGS).and_return(result(ip_addr, 0))
29
+ expect(ip.address).to eq("192.168.1.2")
30
+ end
31
+ end
32
+
33
+ describe "#address6" do
34
+ it "returns an address" do
35
+ ip_addr = "fd12:3456:789a:1::1"
36
+ expect(AwesomeSpawn).to receive(:run).with(*SPAWN_ARGS).and_return(result(ip_addr, 0))
37
+ expect(ip.address6).to eq(ip_addr)
38
+ end
39
+
40
+ it "returns nil when no address is found" do
41
+ ip_addr = ""
42
+ expect(AwesomeSpawn).to receive(:run).at_least(5).times.with(*SPAWN_ARGS).and_return(result(ip_addr, 1))
43
+ expect(ip.address6).to be_nil
44
+ end
45
+
46
+ it "returns only IPv6 addresses" do
47
+ ip_addr = "192.168.1.2 fd12:3456:789a:1::1"
48
+ expect(AwesomeSpawn).to receive(:run).with(*SPAWN_ARGS).and_return(result(ip_addr, 0))
49
+ expect(ip.address6).to eq("fd12:3456:789a:1::1")
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,74 @@
1
+ describe LinuxAdmin::TimeDate do
2
+ RUN_COMMAND = described_class.cmd("timedatectl")
3
+
4
+ def timedatectl_result
5
+ output = File.read(Pathname.new(data_file_path("time_date/timedatectl_output")))
6
+ AwesomeSpawn::CommandResult.new("", output, "", 0)
7
+ end
8
+
9
+ describe ".system_timezone_detailed" do
10
+ it "returns the correct timezone" do
11
+ awesome_spawn_args = [
12
+ RUN_COMMAND,
13
+ :params => ["status"]
14
+ ]
15
+ expect(AwesomeSpawn).to receive(:run).with(*awesome_spawn_args).and_return(timedatectl_result)
16
+ tz = described_class.system_timezone_detailed
17
+ expect(tz).to eq("America/New_York (EDT, -0400)")
18
+ end
19
+ end
20
+
21
+ describe ".system_timezone" do
22
+ it "returns the correct timezone" do
23
+ awesome_spawn_args = [
24
+ RUN_COMMAND,
25
+ :params => ["status"]
26
+ ]
27
+ expect(AwesomeSpawn).to receive(:run).with(*awesome_spawn_args).and_return(timedatectl_result)
28
+ tz = described_class.system_timezone
29
+ expect(tz).to eq("America/New_York")
30
+ end
31
+ end
32
+
33
+ describe ".system_time=" do
34
+ it "sets the time" do
35
+ time = Time.new(2015, 1, 1, 1, 1, 1)
36
+ awesome_spawn_args = [
37
+ RUN_COMMAND,
38
+ :params => ["set-time", "2015-01-01 01:01:01", :adjust_system_clock]
39
+ ]
40
+ expect(AwesomeSpawn).to receive(:run!).with(*awesome_spawn_args)
41
+ described_class.system_time = time
42
+ end
43
+
44
+ it "raises when the command fails" do
45
+ time = Time.new(2015, 1, 1, 1, 1, 1)
46
+ err = AwesomeSpawn::CommandResultError.new("message", nil)
47
+ allow(AwesomeSpawn).to receive(:run!).and_raise(err)
48
+ expect do
49
+ described_class.send(:system_time=, time)
50
+ end.to raise_error(described_class::TimeCommandError, "message")
51
+ end
52
+ end
53
+
54
+ describe ".system_timezone=" do
55
+ it "sets the timezone" do
56
+ zone = "Location/City"
57
+ awesome_spawn_args = [
58
+ RUN_COMMAND,
59
+ :params => ["set-timezone", zone]
60
+ ]
61
+ expect(AwesomeSpawn).to receive(:run!).with(*awesome_spawn_args)
62
+ described_class.system_timezone = zone
63
+ end
64
+
65
+ it "raises when the command fails" do
66
+ zone = "Location/City"
67
+ err = AwesomeSpawn::CommandResultError.new("message", nil)
68
+ allow(AwesomeSpawn).to receive(:run!).and_raise(err)
69
+ expect do
70
+ described_class.send(:system_timezone=, zone)
71
+ end.to raise_error(described_class::TimeCommandError, "message")
72
+ end
73
+ end
74
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linux_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Dunne
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2015-08-12 00:00:00.000000000 Z
17
+ date: 2015-09-30 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: bundler
@@ -184,6 +184,7 @@ files:
184
184
  - lib/linux_admin/exceptions.rb
185
185
  - lib/linux_admin/fstab.rb
186
186
  - lib/linux_admin/hosts.rb
187
+ - lib/linux_admin/ip_address.rb
187
188
  - lib/linux_admin/logging.rb
188
189
  - lib/linux_admin/logical_volume.rb
189
190
  - lib/linux_admin/mountable.rb
@@ -200,6 +201,7 @@ files:
200
201
  - lib/linux_admin/service/sys_v_init_service.rb
201
202
  - lib/linux_admin/service/systemd_service.rb
202
203
  - lib/linux_admin/system.rb
204
+ - lib/linux_admin/time_date.rb
203
205
  - lib/linux_admin/version.rb
204
206
  - lib/linux_admin/volume.rb
205
207
  - lib/linux_admin/volume_group.rb
@@ -219,6 +221,7 @@ files:
219
221
  - spec/data/subscription_manager/output_list_installed_subscribed
220
222
  - spec/data/subscription_manager/output_orgs
221
223
  - spec/data/subscription_manager/output_repos
224
+ - spec/data/time_date/timedatectl_output
222
225
  - spec/data/yum/first.repo
223
226
  - spec/data/yum/output_repo_list
224
227
  - spec/data/yum/output_repoquery_multiple
@@ -230,6 +233,7 @@ files:
230
233
  - spec/etc_issue_spec.rb
231
234
  - spec/fstab_spec.rb
232
235
  - spec/hosts_spec.rb
236
+ - spec/ip_address_spec.rb
233
237
  - spec/logical_volume_spec.rb
234
238
  - spec/mountable_spec.rb
235
239
  - spec/partition_spec.rb
@@ -244,6 +248,7 @@ files:
244
248
  - spec/spec_helper.rb
245
249
  - spec/subscription_manager_spec.rb
246
250
  - spec/system_spec.rb
251
+ - spec/time_date_spec.rb
247
252
  - spec/volume_group_spec.rb
248
253
  - spec/yum_spec.rb
249
254
  homepage: http://github.com/ManageIQ/linux_admin
@@ -266,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
271
  version: '0'
267
272
  requirements: []
268
273
  rubyforge_project:
269
- rubygems_version: 2.4.8
274
+ rubygems_version: 2.4.5.1
270
275
  signing_key:
271
276
  specification_version: 4
272
277
  summary: LinuxAdmin is a module to simplify management of linux systems.
@@ -285,6 +290,7 @@ test_files:
285
290
  - spec/data/subscription_manager/output_list_installed_subscribed
286
291
  - spec/data/subscription_manager/output_orgs
287
292
  - spec/data/subscription_manager/output_repos
293
+ - spec/data/time_date/timedatectl_output
288
294
  - spec/data/yum/first.repo
289
295
  - spec/data/yum/output_repo_list
290
296
  - spec/data/yum/output_repoquery_multiple
@@ -296,6 +302,7 @@ test_files:
296
302
  - spec/etc_issue_spec.rb
297
303
  - spec/fstab_spec.rb
298
304
  - spec/hosts_spec.rb
305
+ - spec/ip_address_spec.rb
299
306
  - spec/logical_volume_spec.rb
300
307
  - spec/mountable_spec.rb
301
308
  - spec/partition_spec.rb
@@ -310,5 +317,6 @@ test_files:
310
317
  - spec/spec_helper.rb
311
318
  - spec/subscription_manager_spec.rb
312
319
  - spec/system_spec.rb
320
+ - spec/time_date_spec.rb
313
321
  - spec/volume_group_spec.rb
314
322
  - spec/yum_spec.rb