linux_admin 0.1.1 → 0.1.2

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.
@@ -1,6 +1,8 @@
1
1
  require 'shellwords'
2
2
 
3
3
  class LinuxAdmin
4
+ class CommandError < RuntimeError; end
5
+
4
6
  module Common
5
7
  def write(file, content)
6
8
  raise ArgumentError, "file and content can not be empty" if file.blank? || content.blank?
@@ -24,7 +26,7 @@ class LinuxAdmin
24
26
  elsif options[:return_exitstatus] || exitstatus == 0
25
27
  exitstatus
26
28
  else
27
- raise "Error: Exit Code #{exitstatus}"
29
+ raise CommandError, "#{build_cmd(cmd, params)}: exit code: #{exitstatus}"
28
30
  end
29
31
  rescue
30
32
  return nil if options[:return_exitstatus]
@@ -0,0 +1,49 @@
1
+ # LinuxAdmin fstab Representation
2
+ #
3
+ # Copyright (C) 2013 Red Hat Inc.
4
+ # Licensed under the MIT License
5
+
6
+ require 'singleton'
7
+
8
+ class LinuxAdmin
9
+ class FSTabEntry < LinuxAdmin
10
+ attr_accessor :device
11
+ attr_accessor :mount_point
12
+ attr_accessor :fs_type
13
+ attr_accessor :mount_options
14
+ attr_accessor :dumpable
15
+ attr_accessor :fsck_order
16
+ end
17
+
18
+ class FSTab < LinuxAdmin
19
+ include Singleton
20
+
21
+ attr_accessor :entries
22
+
23
+ def initialize
24
+ refresh
25
+ end
26
+
27
+ private
28
+
29
+ def refresh
30
+ @entries = []
31
+ f = File.read('/etc/fstab')
32
+ f.each_line { |line|
33
+ first_char = line.strip[0]
34
+ if first_char != '#' && first_char !~ /\s/
35
+ columns = line.split
36
+ entry = FSTabEntry.new
37
+ entry.device = columns[0]
38
+ entry.mount_point = columns[1]
39
+ entry.fs_type = columns[2]
40
+ entry.mount_options = columns[3]
41
+ entry.dumpable = columns[4].to_i
42
+ entry.fsck_order = columns[5].to_i
43
+ @entries << entry
44
+ end
45
+ }
46
+ self
47
+ end
48
+ end
49
+ end
@@ -20,21 +20,40 @@ class LinuxAdmin
20
20
  def enable
21
21
  run(cmd(:systemctl),
22
22
  :params => { nil => ["enable", "#{id}.service"] })
23
+ self
23
24
  end
24
25
 
25
26
  def disable
26
27
  run(cmd(:systemctl),
27
28
  :params => { nil => ["disable", "#{id}.service"] })
29
+ self
28
30
  end
29
31
 
30
32
  def start
31
33
  run(cmd(:service),
32
34
  :params => { nil => [id, "start"] })
35
+ self
33
36
  end
34
37
 
35
38
  def stop
36
39
  run(cmd(:service),
37
40
  :params => { nil => [id, "stop"] })
41
+ self
42
+ end
43
+
44
+ def restart
45
+ status =
46
+ run(cmd(:service),
47
+ :params => { nil => [id, "restart"] },
48
+ :return_exitstatus => true)
49
+
50
+ # attempt to manually stop/start if restart fails
51
+ if status != 0
52
+ self.stop
53
+ self.start
54
+ end
55
+
56
+ self
38
57
  end
39
58
  end
40
59
  end
@@ -1,3 +1,3 @@
1
1
  class LinuxAdmin
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/linux_admin.rb CHANGED
@@ -13,6 +13,7 @@ require 'linux_admin/disk'
13
13
  require 'linux_admin/partition'
14
14
  require 'linux_admin/distro'
15
15
  require 'linux_admin/system'
16
+ require 'linux_admin/fstab'
16
17
 
17
18
  class LinuxAdmin
18
19
  extend Common
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe LinuxAdmin::FSTab do
4
+ it "creates FSTabEntry for each line in fstab" do
5
+ fstab = <<eos
6
+ /dev/sda1 / ext4 defaults 1 1
7
+ /dev/sda2 swap swap defaults 0 0
8
+ eos
9
+ File.should_receive(:read).with('/etc/fstab').and_return(fstab)
10
+ entries = LinuxAdmin::FSTab.instance.entries
11
+ entries.size.should == 2
12
+
13
+ entries[0].device.should == '/dev/sda1'
14
+ entries[0].mount_point.should == '/'
15
+ entries[0].fs_type.should == 'ext4'
16
+ entries[0].mount_options.should == 'defaults'
17
+ entries[0].dumpable.should == 1
18
+ entries[0].fsck_order.should == 1
19
+
20
+ entries[1].device.should == '/dev/sda2'
21
+ entries[1].mount_point.should == 'swap'
22
+ entries[1].fs_type.should == 'swap'
23
+ entries[1].mount_options.should == 'defaults'
24
+ entries[1].dumpable.should == 0
25
+ entries[1].fsck_order.should == 0
26
+ end
27
+ end
data/spec/service_spec.rb CHANGED
@@ -42,6 +42,11 @@ describe LinuxAdmin::Service do
42
42
  :params => { nil => [ 'enable', 'foo.service']})
43
43
  @service.enable
44
44
  end
45
+
46
+ it "returns self" do
47
+ @service.should_receive(:run) # stub out cmd invocation
48
+ @service.enable.should == @service
49
+ end
45
50
  end
46
51
 
47
52
  describe "#disable" do
@@ -51,6 +56,11 @@ describe LinuxAdmin::Service do
51
56
  :params => { nil => [ 'disable', 'foo.service']})
52
57
  @service.disable
53
58
  end
59
+
60
+ it "returns self" do
61
+ @service.should_receive(:run)
62
+ @service.disable.should == @service
63
+ end
54
64
  end
55
65
 
56
66
  describe "#start" do
@@ -60,6 +70,11 @@ describe LinuxAdmin::Service do
60
70
  :params => { nil => [ 'foo', 'start']})
61
71
  @service.start
62
72
  end
73
+
74
+ it "returns self" do
75
+ @service.should_receive(:run)
76
+ @service.start.should == @service
77
+ end
63
78
  end
64
79
 
65
80
  describe "#stop" do
@@ -69,5 +84,35 @@ describe LinuxAdmin::Service do
69
84
  :params => { nil => [ 'foo', 'stop']})
70
85
  @service.stop
71
86
  end
87
+
88
+ it "returns self" do
89
+ @service.should_receive(:run)
90
+ @service.stop.should == @service
91
+ end
72
92
  end
93
+
94
+ describe "#restart" do
95
+ it "stops service" do
96
+ @service.should_receive(:run).
97
+ with(@service.cmd(:service),
98
+ :params => { nil => [ 'foo', 'restart']},
99
+ :return_exitstatus => true).and_return(0)
100
+ @service.restart
101
+ end
102
+
103
+ context "service restart fails" do
104
+ it "manually stops/starts service" do
105
+ @service.should_receive(:run).and_return(1)
106
+ @service.should_receive(:stop)
107
+ @service.should_receive(:start)
108
+ @service.restart
109
+ end
110
+ end
111
+
112
+ it "returns self" do
113
+ @service.should_receive(:run).and_return(0)
114
+ @service.restart.should == @service
115
+ end
116
+ end
117
+
73
118
  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.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-08 00:00:00.000000000 Z
12
+ date: 2013-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -165,6 +165,7 @@ files:
165
165
  - lib/linux_admin/common.rb
166
166
  - lib/linux_admin/disk.rb
167
167
  - lib/linux_admin/distro.rb
168
+ - lib/linux_admin/fstab.rb
168
169
  - lib/linux_admin/logical_volume.rb
169
170
  - lib/linux_admin/partition.rb
170
171
  - lib/linux_admin/rhn.rb
@@ -185,6 +186,7 @@ files:
185
186
  - spec/data/yum/second.repo
186
187
  - spec/disk_spec.rb
187
188
  - spec/distro_spec.rb
189
+ - spec/fstab_spec.rb
188
190
  - spec/linux_admin_spec.rb
189
191
  - spec/partition_spec.rb
190
192
  - spec/rhn_spec.rb
@@ -207,18 +209,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
209
  - - ! '>='
208
210
  - !ruby/object:Gem::Version
209
211
  version: '0'
210
- segments:
211
- - 0
212
- hash: -2093528175376818552
213
212
  required_rubygems_version: !ruby/object:Gem::Requirement
214
213
  none: false
215
214
  requirements:
216
215
  - - ! '>='
217
216
  - !ruby/object:Gem::Version
218
217
  version: '0'
219
- segments:
220
- - 0
221
- hash: -2093528175376818552
222
218
  requirements: []
223
219
  rubyforge_project:
224
220
  rubygems_version: 1.8.25
@@ -236,6 +232,7 @@ test_files:
236
232
  - spec/data/yum/second.repo
237
233
  - spec/disk_spec.rb
238
234
  - spec/distro_spec.rb
235
+ - spec/fstab_spec.rb
239
236
  - spec/linux_admin_spec.rb
240
237
  - spec/partition_spec.rb
241
238
  - spec/rhn_spec.rb