linux_admin 0.8.0 → 0.8.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.
- data/lib/linux_admin.rb +1 -0
- data/lib/linux_admin/common.rb +1 -1
- data/lib/linux_admin/distro.rb +79 -28
- data/lib/linux_admin/etc_issue.rb +28 -0
- data/lib/linux_admin/package.rb +2 -2
- data/lib/linux_admin/rpm.rb +9 -3
- data/lib/linux_admin/version.rb +1 -1
- data/spec/common_spec.rb +2 -2
- data/spec/distro_spec.rb +20 -19
- data/spec/logical_volume_spec.rb +1 -1
- data/spec/package_spec.rb +2 -2
- data/spec/physical_volume_spec.rb +1 -1
- data/spec/rpm_spec.rb +3 -3
- data/spec/service_spec.rb +2 -2
- data/spec/spec_helper.rb +3 -0
- data/spec/volume_group_spec.rb +1 -1
- metadata +5 -8
data/lib/linux_admin.rb
CHANGED
data/lib/linux_admin/common.rb
CHANGED
data/lib/linux_admin/distro.rb
CHANGED
@@ -3,35 +3,9 @@
|
|
3
3
|
# Copyright (C) 2013 Red Hat Inc.
|
4
4
|
# Licensed under the MIT License
|
5
5
|
|
6
|
-
|
7
|
-
class Distro < LinuxAdmin
|
8
|
-
attr_accessor :id
|
9
|
-
|
10
|
-
def initialize(id)
|
11
|
-
@id = id
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.local
|
15
|
-
@local ||= begin
|
16
|
-
if File.exists?('/etc/issue')
|
17
|
-
issue = File.read('/etc/issue')
|
18
|
-
if issue.include?('ubuntu')
|
19
|
-
return Distros.ubuntu
|
20
|
-
elsif ['Fedora', 'red hat', 'Red Hat', 'centos'].any? { |d| issue.include?(d) }
|
21
|
-
return Distros.redhat
|
22
|
-
end
|
23
|
-
|
24
|
-
elsif File.exists?('/etc/redhat-release') ||
|
25
|
-
File.exists?('/etc/fedora-release')
|
26
|
-
return Distros.redhat
|
27
|
-
end
|
28
|
-
|
29
|
-
Distros.generic
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
6
|
+
require 'linux_admin/etc_issue'
|
34
7
|
|
8
|
+
class LinuxAdmin
|
35
9
|
module Distros
|
36
10
|
def self.generic
|
37
11
|
@generic ||= Generic.new
|
@@ -41,6 +15,14 @@ class LinuxAdmin
|
|
41
15
|
@redhat ||= RedHat.new
|
42
16
|
end
|
43
17
|
|
18
|
+
def self.rhel
|
19
|
+
@rhel ||= RHEL.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.fedora
|
23
|
+
@fedora ||= Fedora.new
|
24
|
+
end
|
25
|
+
|
44
26
|
def self.ubuntu
|
45
27
|
@ubuntu ||= Ubuntu.new
|
46
28
|
end
|
@@ -49,6 +31,49 @@ class LinuxAdmin
|
|
49
31
|
@distros ||= [generic, redhat, ubuntu]
|
50
32
|
end
|
51
33
|
|
34
|
+
def self.local
|
35
|
+
Distro.local
|
36
|
+
end
|
37
|
+
|
38
|
+
class Distro
|
39
|
+
RELEASE_FILE = ''
|
40
|
+
ETC_ISSUE_KEYWORDS = []
|
41
|
+
|
42
|
+
def self.etc_issue_keywords
|
43
|
+
self::ETC_ISSUE_KEYWORDS
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.release_file
|
47
|
+
self::RELEASE_FILE
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.local
|
51
|
+
# this can be cleaned up..
|
52
|
+
@local ||= begin
|
53
|
+
result = nil
|
54
|
+
Distros.constants.each do |cdistro|
|
55
|
+
distro_method = cdistro.to_s.downcase.to_sym
|
56
|
+
distro = Distros.const_get(cdistro)
|
57
|
+
next unless distro < Distro
|
58
|
+
result = Distros.send(distro_method) if distro.detected?
|
59
|
+
end
|
60
|
+
result || Distros.generic
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.detected?
|
65
|
+
detected_by_etc_issue? || detected_by_etc_release?
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.detected_by_etc_issue?
|
69
|
+
etc_issue_keywords.any? { |k| EtcIssue.instance.to_s.include?(k) }
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.detected_by_etc_release?
|
73
|
+
File.exists?(release_file)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
52
77
|
class Generic < Distro
|
53
78
|
COMMANDS = {}
|
54
79
|
|
@@ -81,7 +106,33 @@ class LinuxAdmin
|
|
81
106
|
end
|
82
107
|
end
|
83
108
|
|
109
|
+
class RHEL < RedHat
|
110
|
+
RELEASE_FILE = "/etc/redhat-release"
|
111
|
+
ETC_ISSUE_KEYWORDS = ['red hat', 'Red Hat', 'centos', 'CentOS']
|
112
|
+
|
113
|
+
COMMANDS = COMMANDS.merge(
|
114
|
+
:rpm => '/bin/rpm'
|
115
|
+
)
|
116
|
+
def initialize
|
117
|
+
@id = :rhel
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
class Fedora < RedHat
|
122
|
+
RELEASE_FILE = "/etc/fedora-release"
|
123
|
+
ETC_ISSUE_KEYWORDS = ['Fedora']
|
124
|
+
|
125
|
+
COMMANDS = COMMANDS.merge(
|
126
|
+
:rpm => '/usr/bin/rpm'
|
127
|
+
)
|
128
|
+
def initialize
|
129
|
+
@id = :fedora
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
84
133
|
class Ubuntu < Distro
|
134
|
+
ETC_ISSUE_KEYWORDS = ['ubuntu']
|
135
|
+
|
85
136
|
COMMANDS = {}
|
86
137
|
|
87
138
|
def initialize
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# LinuxAdmin /etc/issue Representation
|
2
|
+
#
|
3
|
+
# Copyright (C) 2014 Red Hat Inc.
|
4
|
+
# Licensed under the MIT License
|
5
|
+
|
6
|
+
require 'singleton'
|
7
|
+
|
8
|
+
class LinuxAdmin
|
9
|
+
class EtcIssue
|
10
|
+
include Singleton
|
11
|
+
|
12
|
+
PATH = '/etc/issue'
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
refresh
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
@data.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def refresh
|
25
|
+
@data = File.exists?(PATH) ? File.read(PATH) : ""
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/linux_admin/package.rb
CHANGED
@@ -6,9 +6,9 @@
|
|
6
6
|
class LinuxAdmin
|
7
7
|
class Package < LinuxAdmin
|
8
8
|
def self.info(pkg)
|
9
|
-
if Distro.local == Distros.redhat
|
9
|
+
if Distros::Distro.local == Distros.redhat
|
10
10
|
return Rpm.info(pkg)
|
11
|
-
elsif Distro.local == Distros.ubuntu
|
11
|
+
elsif Distros::Distro.local == Distros.ubuntu
|
12
12
|
return Deb.info(pkg)
|
13
13
|
end
|
14
14
|
|
data/lib/linux_admin/rpm.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
class LinuxAdmin
|
2
2
|
class Rpm < Package
|
3
|
-
|
3
|
+
def self.rpm_cmd
|
4
|
+
Distros::Distro.local.class::COMMANDS[:rpm]
|
5
|
+
end
|
4
6
|
|
5
7
|
def self.list_installed
|
6
|
-
out = run!("
|
8
|
+
out = run!("#{rpm_cmd} -qa --qf \"%{NAME} %{VERSION}-%{RELEASE}\n\"").output
|
7
9
|
out.split("\n").each_with_object({}) do |line, pkg_hash|
|
8
10
|
name, ver = line.split(" ")
|
9
11
|
pkg_hash[name] = ver
|
@@ -21,8 +23,12 @@ class LinuxAdmin
|
|
21
23
|
def self.info(pkg)
|
22
24
|
params = { "-qi" => pkg}
|
23
25
|
in_description = false
|
24
|
-
out = run!(
|
26
|
+
out = run!(rpm_cmd, :params => params).output
|
27
|
+
# older versions of rpm may have multiple fields per line,
|
28
|
+
# split up lines with multiple tags/values:
|
29
|
+
out.gsub!(/(^.*:.*)\s\s+(.*:.*)$/, "\\1\n\\2")
|
25
30
|
out.split("\n").each.with_object({}) do |line, rpm|
|
31
|
+
next if !line || line.empty?
|
26
32
|
tag,value = line.split(':')
|
27
33
|
tag = tag.strip
|
28
34
|
if tag == 'Description'
|
data/lib/linux_admin/version.rb
CHANGED
data/spec/common_spec.rb
CHANGED
@@ -15,9 +15,9 @@ describe LinuxAdmin::Common do
|
|
15
15
|
|
16
16
|
context "#cmd" do
|
17
17
|
it "looks up local command from id" do
|
18
|
-
d = double(LinuxAdmin::Distro)
|
18
|
+
d = double(LinuxAdmin::Distros::Distro)
|
19
19
|
d.class::COMMANDS = {:sh => '/bin/sh'}
|
20
|
-
LinuxAdmin::Distro.should_receive(:local).and_return(d)
|
20
|
+
LinuxAdmin::Distros::Distro.should_receive(:local).and_return(d)
|
21
21
|
subject.cmd(:sh).should == '/bin/sh'
|
22
22
|
end
|
23
23
|
end
|
data/spec/distro_spec.rb
CHANGED
@@ -1,52 +1,53 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe LinuxAdmin::Distro do
|
3
|
+
describe LinuxAdmin::Distros::Distro do
|
4
4
|
describe "#local" do
|
5
|
-
after(:each) do
|
6
|
-
# distro generates a local copy, reset after each run
|
7
|
-
LinuxAdmin::Distro.instance_variable_set(:@local, nil)
|
8
|
-
end
|
9
|
-
|
10
5
|
[['ubuntu', :ubuntu],
|
11
|
-
['Fedora', :
|
12
|
-
['red hat', :
|
13
|
-
['
|
6
|
+
['Fedora', :fedora],
|
7
|
+
['red hat', :rhel],
|
8
|
+
['CentOS', :rhel],
|
9
|
+
['centos', :rhel]].each do |i, d|
|
14
10
|
context "/etc/issue contains '#{i}'" do
|
15
11
|
before(:each) do
|
16
|
-
|
17
|
-
File.should_receive(:
|
12
|
+
LinuxAdmin::EtcIssue.instance.should_receive(:to_s).at_least(:once).and_return(i)
|
13
|
+
File.should_receive(:exists?).at_least(:once).and_return(false)
|
18
14
|
end
|
19
15
|
|
20
16
|
it "returns Distros.#{d}" do
|
21
|
-
|
17
|
+
distro = LinuxAdmin::Distros.send(d)
|
18
|
+
described_class.local.should == distro
|
22
19
|
end
|
23
20
|
end
|
24
21
|
end
|
25
22
|
|
26
23
|
context "/etc/issue did not match" do
|
27
24
|
before(:each) do
|
28
|
-
|
25
|
+
LinuxAdmin::EtcIssue.instance.should_receive(:to_s).at_least(:once).and_return('')
|
29
26
|
end
|
30
27
|
|
31
28
|
context "/etc/redhat-release exists" do
|
32
|
-
it "returns Distros.
|
29
|
+
it "returns Distros.rhel" do
|
33
30
|
File.should_receive(:exists?).with('/etc/redhat-release').and_return(true)
|
34
|
-
LinuxAdmin::
|
31
|
+
LinuxAdmin::Distros::Fedora.should_receive(:detected?).and_return(false)
|
32
|
+
File.should_receive(:exists?).at_least(:once).and_call_original
|
33
|
+
described_class.local.should == LinuxAdmin::Distros.rhel
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
37
|
context "/etc/fedora-release exists" do
|
39
|
-
it "returns Distros.
|
38
|
+
it "returns Distros.fedora" do
|
40
39
|
File.should_receive(:exists?).with('/etc/redhat-release').and_return(false)
|
41
40
|
File.should_receive(:exists?).with('/etc/fedora-release').and_return(true)
|
42
|
-
|
41
|
+
File.should_receive(:exists?).at_least(:once).and_call_original
|
42
|
+
described_class.local.should == LinuxAdmin::Distros.fedora
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
it "returns Distros.generic" do
|
48
|
-
|
49
|
-
|
48
|
+
LinuxAdmin::EtcIssue.instance.should_receive(:to_s).at_least(:once).and_return('')
|
49
|
+
File.should_receive(:exists?).at_least(:once).and_return(false)
|
50
|
+
described_class.local.should == LinuxAdmin::Distros.generic
|
50
51
|
end
|
51
52
|
end
|
52
53
|
end
|
data/spec/logical_volume_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe LinuxAdmin::LogicalVolume do
|
4
4
|
before(:each) do
|
5
|
-
LinuxAdmin::Distro.stub(:local => LinuxAdmin::Distros::Test.new)
|
5
|
+
LinuxAdmin::Distros::Distro.stub(:local => LinuxAdmin::Distros::Test.new)
|
6
6
|
|
7
7
|
@logical_volumes = <<eos
|
8
8
|
/dev/vg_foobar/lv_swap:vg_foobar:3:1:-1:2:4128768:63:-1:0:-1:253:0
|
data/spec/package_spec.rb
CHANGED
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe LinuxAdmin::Package do
|
4
4
|
describe "#info" do
|
5
5
|
it "dispatches to redhat lookup mechanism" do
|
6
|
-
LinuxAdmin::Distro.should_receive(:local).and_return(LinuxAdmin::Distros.redhat)
|
6
|
+
LinuxAdmin::Distros::Distro.should_receive(:local).and_return(LinuxAdmin::Distros.redhat)
|
7
7
|
LinuxAdmin::Rpm.should_receive(:info).with('ruby')
|
8
8
|
described_class.info 'ruby'
|
9
9
|
end
|
10
10
|
|
11
11
|
it "dispatches to ubuntu lookup mechanism" do
|
12
|
-
LinuxAdmin::Distro.should_receive(:local).twice.and_return(LinuxAdmin::Distros.ubuntu)
|
12
|
+
LinuxAdmin::Distros::Distro.should_receive(:local).twice.and_return(LinuxAdmin::Distros.ubuntu)
|
13
13
|
LinuxAdmin::Deb.should_receive(:info).with('ruby')
|
14
14
|
described_class.info 'ruby'
|
15
15
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe LinuxAdmin::PhysicalVolume do
|
4
4
|
before(:each) do
|
5
|
-
LinuxAdmin::Distro.stub(:local => LinuxAdmin::Distros::Test.new)
|
5
|
+
LinuxAdmin::Distros::Distro.stub(:local => LinuxAdmin::Distros::Test.new)
|
6
6
|
|
7
7
|
@physical_volumes = <<eos
|
8
8
|
/dev/vda2:vg_foobar:24139776:-1:8:8:-1:32768:368:0:368:pxR32D-YkC2-PfHe-zOwb-eaGD-9Ar0-mAOl9u
|
data/spec/rpm_spec.rb
CHANGED
@@ -59,9 +59,9 @@ object-oriented programming. It has many features to process text
|
|
59
59
|
files and to do system management tasks (as in Perl). It is simple,
|
60
60
|
straight-forward, and extensible.
|
61
61
|
EOS
|
62
|
-
described_class.
|
63
|
-
|
64
|
-
|
62
|
+
arguments = [described_class.rpm_cmd, :params => {"-qi" => "ruby"}]
|
63
|
+
result = AwesomeSpawn::CommandResult.new("", data, "", 0)
|
64
|
+
described_class.should_receive(:run!).with(*arguments).and_return(result)
|
65
65
|
metadata = described_class.info("ruby")
|
66
66
|
metadata['name'].should == 'ruby'
|
67
67
|
metadata['version'].should == '2.0.0.247'
|
data/spec/service_spec.rb
CHANGED
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe LinuxAdmin::Service do
|
4
4
|
before(:each) do
|
5
5
|
# stub distro.local to return test distro for command lookup
|
6
|
-
LinuxAdmin::Distro.stub(:local)
|
7
|
-
|
6
|
+
LinuxAdmin::Distros::Distro.stub(:local)
|
7
|
+
.and_return(LinuxAdmin::Distros::Test.new)
|
8
8
|
|
9
9
|
@service = LinuxAdmin::Service.new 'foo'
|
10
10
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/volume_group_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe LinuxAdmin::VolumeGroup do
|
4
4
|
before(:each) do
|
5
|
-
LinuxAdmin::Distro.stub(:local => LinuxAdmin::Distros::Test.new)
|
5
|
+
LinuxAdmin::Distros::Distro.stub(:local => LinuxAdmin::Distros::Test.new)
|
6
6
|
|
7
7
|
@groups = <<eos
|
8
8
|
vg_foobar:r/w:772:-1:0:2:2:-1:0:1:1:12058624:32768:368:368:0:tILZUF-IspH-H90I-pT5j-vVFl-b76L-zWx3CW
|
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.8.
|
4
|
+
version: 0.8.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,10 +9,11 @@ authors:
|
|
9
9
|
- Jason Frey
|
10
10
|
- Mo Morsi
|
11
11
|
- Joe Rafaniello
|
12
|
+
- Keenan Brock
|
12
13
|
autorequire:
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
|
-
date: 2014-
|
16
|
+
date: 2014-03-21 00:00:00.000000000 Z
|
16
17
|
dependencies:
|
17
18
|
- !ruby/object:Gem::Dependency
|
18
19
|
name: bundler
|
@@ -172,6 +173,7 @@ email:
|
|
172
173
|
- fryguy9@gmail.com
|
173
174
|
- mmorsi@redhat.com
|
174
175
|
- jrafanie@redhat.com
|
176
|
+
- kbrock@redhat.com
|
175
177
|
executables: []
|
176
178
|
extensions: []
|
177
179
|
extra_rdoc_files: []
|
@@ -181,6 +183,7 @@ files:
|
|
181
183
|
- lib/linux_admin/deb.rb
|
182
184
|
- lib/linux_admin/disk.rb
|
183
185
|
- lib/linux_admin/distro.rb
|
186
|
+
- lib/linux_admin/etc_issue.rb
|
184
187
|
- lib/linux_admin/exceptions.rb
|
185
188
|
- lib/linux_admin/fstab.rb
|
186
189
|
- lib/linux_admin/hosts.rb
|
@@ -251,18 +254,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
251
254
|
- - ! '>='
|
252
255
|
- !ruby/object:Gem::Version
|
253
256
|
version: '0'
|
254
|
-
segments:
|
255
|
-
- 0
|
256
|
-
hash: -1812183474622246574
|
257
257
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
258
258
|
none: false
|
259
259
|
requirements:
|
260
260
|
- - ! '>='
|
261
261
|
- !ruby/object:Gem::Version
|
262
262
|
version: '0'
|
263
|
-
segments:
|
264
|
-
- 0
|
265
|
-
hash: -1812183474622246574
|
266
263
|
requirements: []
|
267
264
|
rubyforge_project:
|
268
265
|
rubygems_version: 1.8.23
|