linux_admin 0.11.0 → 0.11.1

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
  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