linux_admin 0.18.0 → 0.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/linux_admin/chrony.rb +10 -0
- data/lib/linux_admin/hosts.rb +6 -2
- data/lib/linux_admin/mountable.rb +6 -0
- data/lib/linux_admin/ssh.rb +1 -2
- data/lib/linux_admin/time_date.rb +7 -0
- data/lib/linux_admin/version.rb +1 -1
- data/lib/linux_admin/yum.rb +3 -3
- data/spec/chrony_spec.rb +23 -0
- data/spec/hosts_spec.rb +29 -0
- data/spec/mountable_spec.rb +20 -0
- data/spec/ssh_spec.rb +2 -2
- data/spec/time_date_spec.rb +32 -0
- data/spec/yum_spec.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0909517c6cc080f6c8a9a82a7b1119e3a8c50452
|
4
|
+
data.tar.gz: d2182ff8ce82b685d55e562968154010e486874c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ff4ffc9e1c2650ed0c127b1a2338e5476e7caa211198b471288b17f3874aa6a1b84cacbcafdc165eed7ad971e07ee5d4b53270d2bb593ccdfac378cdbbbd029
|
7
|
+
data.tar.gz: 9de9c8938028031bfe8f0793fe89f0e8e3dc6b329f4d6711842c43500ba41870f4bb5bf532e22206bd59f048a4879e92201c00c52ba5bc11f0c4e879fd3c49c3
|
data/lib/linux_admin/chrony.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module LinuxAdmin
|
2
2
|
class Chrony
|
3
|
+
SERVICE_NAME = "chronyd".freeze
|
4
|
+
|
3
5
|
def initialize(conf = "/etc/chrony.conf")
|
4
6
|
raise MissingConfigurationFileError, "#{conf} does not exist" unless File.exist?(conf)
|
5
7
|
@conf = conf
|
@@ -16,6 +18,14 @@ module LinuxAdmin
|
|
16
18
|
data << "\n" unless data.end_with?("\n")
|
17
19
|
servers.each { |s| data << "server #{s} iburst\n" }
|
18
20
|
File.write(@conf, data)
|
21
|
+
restart_service_if_running
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def restart_service_if_running
|
27
|
+
service = Service.new(SERVICE_NAME)
|
28
|
+
service.restart if service.running?
|
19
29
|
end
|
20
30
|
end
|
21
31
|
end
|
data/lib/linux_admin/hosts.rb
CHANGED
@@ -26,6 +26,10 @@ module LinuxAdmin
|
|
26
26
|
|
27
27
|
alias_method :update_entry, :add_alias
|
28
28
|
|
29
|
+
def set_loopback_hostname(hostname, comment = nil)
|
30
|
+
["::1", "127.0.0.1"].each { |address| add_name(address, hostname, true, comment, false) }
|
31
|
+
end
|
32
|
+
|
29
33
|
def set_canonical_hostname(address, hostname, comment = nil)
|
30
34
|
add_name(address, hostname, true, comment)
|
31
35
|
end
|
@@ -46,9 +50,9 @@ module LinuxAdmin
|
|
46
50
|
|
47
51
|
private
|
48
52
|
|
49
|
-
def add_name(address, hostname, fqdn, comment)
|
53
|
+
def add_name(address, hostname, fqdn, comment, remove_existing = true)
|
50
54
|
# Delete entries for this hostname first
|
51
|
-
@parsed_file.each { |i| i[:hosts].to_a.delete(hostname) }
|
55
|
+
@parsed_file.each { |i| i[:hosts].to_a.delete(hostname) } if remove_existing
|
52
56
|
|
53
57
|
# Add entry
|
54
58
|
line_number = @parsed_file.find_path(address).first
|
@@ -18,6 +18,12 @@ module LinuxAdmin
|
|
18
18
|
base.extend(ClassMethods)
|
19
19
|
end
|
20
20
|
|
21
|
+
def discover_mount_point
|
22
|
+
result = Common.run!(Common.cmd(:mount))
|
23
|
+
mount_line = result.output.split("\n").find { |line| line.split[0] == path }
|
24
|
+
@mount_point = mount_line.split[2] if mount_line
|
25
|
+
end
|
26
|
+
|
21
27
|
def format_to(filesystem)
|
22
28
|
Common.run!(Common.cmd(:mke2fs),
|
23
29
|
:params => {'-t' => filesystem, nil => path})
|
data/lib/linux_admin/ssh.rb
CHANGED
@@ -25,10 +25,9 @@ module LinuxAdmin
|
|
25
25
|
|
26
26
|
def execute_commands(commands, agent_socket, stdin)
|
27
27
|
result = nil
|
28
|
-
args = {:paranoid => false}
|
28
|
+
args = {:paranoid => false, :number_of_password_prompts => 0}
|
29
29
|
if agent_socket
|
30
30
|
args.merge!(:forward_agent => true,
|
31
|
-
:number_of_password_prompts => 0,
|
32
31
|
:agent_socket_factory => -> { UNIXSocket.open(agent_socket) })
|
33
32
|
elsif @private_key
|
34
33
|
args[:key_data] = [@private_key]
|
@@ -15,6 +15,13 @@ module LinuxAdmin
|
|
15
15
|
system_timezone_detailed.split[0]
|
16
16
|
end
|
17
17
|
|
18
|
+
def self.timezones
|
19
|
+
result = Common.run!(Common.cmd(COMMAND), :params => ["list-timezones"])
|
20
|
+
result.output.split("\n")
|
21
|
+
rescue AwesomeSpawn::CommandResultError => e
|
22
|
+
raise TimeCommandError, e.message
|
23
|
+
end
|
24
|
+
|
18
25
|
def self.system_time=(time)
|
19
26
|
Common.run!(Common.cmd(COMMAND), :params => ["set-time", "#{time.strftime("%F %T")}", :adjust_system_clock])
|
20
27
|
rescue AwesomeSpawn::CommandResultError => e
|
data/lib/linux_admin/version.rb
CHANGED
data/lib/linux_admin/yum.rb
CHANGED
@@ -43,11 +43,11 @@ module LinuxAdmin
|
|
43
43
|
cmd = "yum check-update"
|
44
44
|
params = {nil => packages} unless packages.blank?
|
45
45
|
|
46
|
-
|
47
|
-
case
|
46
|
+
spawn = Common.run(cmd, :params => params)
|
47
|
+
case spawn.exit_status
|
48
48
|
when 0; false
|
49
49
|
when 100; true
|
50
|
-
else raise "Error:
|
50
|
+
else raise "Error: #{cmd} returns '#{spawn.exit_status}', '#{spawn.error}'"
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
data/spec/chrony_spec.rb
CHANGED
@@ -35,6 +35,29 @@ EOF
|
|
35
35
|
expect(File).to receive(:write) do |_file, contents|
|
36
36
|
expect(contents).to eq(CHRONY_CONF + "server baz.example.net iburst\nserver foo.bar.example.com iburst\n")
|
37
37
|
end
|
38
|
+
allow(subject).to receive(:restart_service_if_running)
|
39
|
+
subject.add_servers("baz.example.net", "foo.bar.example.com")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "restarts the service if it is running" do
|
43
|
+
allow(File).to receive(:read).and_return(CHRONY_CONF.dup)
|
44
|
+
allow(File).to receive(:write)
|
45
|
+
|
46
|
+
chronyd_service = double
|
47
|
+
expect(LinuxAdmin::Service).to receive(:new).with("chronyd").and_return(chronyd_service)
|
48
|
+
expect(chronyd_service).to receive(:running?).and_return true
|
49
|
+
expect(chronyd_service).to receive(:restart)
|
50
|
+
subject.add_servers("baz.example.net", "foo.bar.example.com")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "doesn't restart the service if it is not running" do
|
54
|
+
allow(File).to receive(:read).and_return(CHRONY_CONF.dup)
|
55
|
+
allow(File).to receive(:write)
|
56
|
+
|
57
|
+
chronyd_service = double
|
58
|
+
expect(LinuxAdmin::Service).to receive(:new).with("chronyd").and_return(chronyd_service)
|
59
|
+
expect(chronyd_service).to receive(:running?).and_return false
|
60
|
+
expect(chronyd_service).not_to receive(:restart)
|
38
61
|
subject.add_servers("baz.example.net", "foo.bar.example.com")
|
39
62
|
end
|
40
63
|
end
|
data/spec/hosts_spec.rb
CHANGED
@@ -32,6 +32,35 @@ describe LinuxAdmin::Hosts do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
describe "#set_loopback_hostname" do
|
36
|
+
etc_hosts_v6_loopback = <<-EOT
|
37
|
+
|
38
|
+
#Some Comment
|
39
|
+
::1\tlocalhost localhost.localdomain # with a comment
|
40
|
+
127.0.0.1\tlocalhost localhost.localdomain # with a comment
|
41
|
+
127.0.1.1 my.domain.local
|
42
|
+
EOT
|
43
|
+
|
44
|
+
before do
|
45
|
+
allow(File).to receive(:read).and_return(etc_hosts_v6_loopback)
|
46
|
+
@instance_v6_loopback = LinuxAdmin::Hosts.new
|
47
|
+
end
|
48
|
+
|
49
|
+
it "adds the hostname to the start of the hosts list for the loopback addresses" do
|
50
|
+
expected_hash = [{:blank => true},
|
51
|
+
{:comment => "Some Comment"},
|
52
|
+
{:address => "::1",
|
53
|
+
:hosts => ["examplehost.example.com", "localhost", "localhost.localdomain"],
|
54
|
+
:comment => "with a comment"},
|
55
|
+
{:address => "127.0.0.1",
|
56
|
+
:hosts => ["examplehost.example.com", "localhost", "localhost.localdomain"],
|
57
|
+
:comment => "with a comment"},
|
58
|
+
{:address => "127.0.1.1", :hosts => ["my.domain.local"]}]
|
59
|
+
@instance_v6_loopback.set_loopback_hostname("examplehost.example.com")
|
60
|
+
expect(@instance_v6_loopback.parsed_file).to eq(expected_hash)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
35
64
|
describe "#set_canonical_hostname" do
|
36
65
|
it "removes an existing entry and creates a new one" do
|
37
66
|
expected_hash = [{:blank => true},
|
data/spec/mountable_spec.rb
CHANGED
@@ -20,6 +20,12 @@ eos
|
|
20
20
|
@mount_out2 = <<eos
|
21
21
|
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
|
22
22
|
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=26,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
|
23
|
+
eos
|
24
|
+
|
25
|
+
@mount_out3 = <<eos
|
26
|
+
/dev/mapper/vg_data-lv_pg on /var/opt/rh/rh-postgresql95/lib/pgsql type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
|
27
|
+
/dev/foo on /tmp type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
|
28
|
+
/dev/foo on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
|
23
29
|
eos
|
24
30
|
end
|
25
31
|
|
@@ -67,6 +73,20 @@ eos
|
|
67
73
|
end
|
68
74
|
end
|
69
75
|
|
76
|
+
describe "#discover_mount_point" do
|
77
|
+
it "sets the correct mountpoint when the path is mounted" do
|
78
|
+
expect(LinuxAdmin::Common).to receive(:run!).and_return(double(:output => @mount_out3))
|
79
|
+
@mountable.discover_mount_point
|
80
|
+
expect(@mountable.mount_point).to eq("/tmp")
|
81
|
+
end
|
82
|
+
|
83
|
+
it "sets mount_point to nil when the path is not mounted" do
|
84
|
+
expect(LinuxAdmin::Common).to receive(:run!).and_return(double(:output => @mount_out1))
|
85
|
+
@mountable.discover_mount_point
|
86
|
+
expect(@mountable.mount_point).to be_nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
70
90
|
describe "#format_to" do
|
71
91
|
it "uses mke2fs" do
|
72
92
|
expect(LinuxAdmin::Common).to receive(:run!)
|
data/spec/ssh_spec.rb
CHANGED
@@ -42,12 +42,12 @@ sV1Tr/acrE0aWBkD9RYrR2/UwG1zfXuIJeufdWf8c0SY3X6J7jJN
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should preform command using private key" do
|
45
|
-
expect(Net::SSH).to receive(:start).with("127.0.0.1", "root", :paranoid => false, :key_data => [@example_ssh_key]).and_return(true)
|
45
|
+
expect(Net::SSH).to receive(:start).with("127.0.0.1", "root", :paranoid => false, :number_of_password_prompts => 0, :key_data => [@example_ssh_key]).and_return(true)
|
46
46
|
LinuxAdmin::SSH.new("127.0.0.1", "root", @example_ssh_key).perform_commands(%w("ls", "pwd"))
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should preform command using password" do
|
50
|
-
expect(Net::SSH).to receive(:start).with("127.0.0.1", "root", :paranoid => false, :password => "password").and_return(true)
|
50
|
+
expect(Net::SSH).to receive(:start).with("127.0.0.1", "root", :paranoid => false, :number_of_password_prompts => 0, :password => "password").and_return(true)
|
51
51
|
LinuxAdmin::SSH.new("127.0.0.1", "root", nil, "password").perform_commands(%w("ls", "pwd"))
|
52
52
|
end
|
53
53
|
end
|
data/spec/time_date_spec.rb
CHANGED
@@ -30,6 +30,38 @@ describe LinuxAdmin::TimeDate do
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
describe ".timezones" do
|
34
|
+
let(:timezones) do
|
35
|
+
<<-EOS
|
36
|
+
Africa/Bangui
|
37
|
+
Africa/Banjul
|
38
|
+
Africa/Bissau
|
39
|
+
Africa/Blantyre
|
40
|
+
Africa/Brazzaville
|
41
|
+
Africa/Bujumbura
|
42
|
+
Africa/Cairo
|
43
|
+
America/Havana
|
44
|
+
America/Hermosillo
|
45
|
+
America/Indiana/Indianapolis
|
46
|
+
America/Indiana/Knox
|
47
|
+
America/Argentina/San_Juan
|
48
|
+
America/Argentina/San_Luis
|
49
|
+
America/Argentina/Tucuman
|
50
|
+
America/Argentina/Ushuaia
|
51
|
+
EOS
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns the correct list" do
|
55
|
+
awesome_spawn_args = [
|
56
|
+
RUN_COMMAND,
|
57
|
+
:params => ["list-timezones"]
|
58
|
+
]
|
59
|
+
result = AwesomeSpawn::CommandResult.new("", timezones, "", 0)
|
60
|
+
expect(AwesomeSpawn).to receive(:run!).with(*awesome_spawn_args).and_return(result)
|
61
|
+
expect(described_class.timezones).to eq(timezones.split("\n"))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
33
65
|
describe ".system_time=" do
|
34
66
|
it "sets the time" do
|
35
67
|
time = Time.new(2015, 1, 1, 1, 1, 1)
|
data/spec/yum_spec.rb
CHANGED
@@ -84,7 +84,7 @@ describe LinuxAdmin::Yum do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "other exit code" do
|
87
|
-
allow(LinuxAdmin::Common).to receive_messages(:run => double(:exit_status => 255))
|
87
|
+
allow(LinuxAdmin::Common).to receive_messages(:run => double(:exit_status => 255, :error => 'test'))
|
88
88
|
expect { described_class.updates_available? }.to raise_error(RuntimeError)
|
89
89
|
end
|
90
90
|
|
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.
|
4
|
+
version: 0.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Dunne
|
@@ -15,10 +15,12 @@ authors:
|
|
15
15
|
- Yuri Rudman
|
16
16
|
- Oleg Barenboim
|
17
17
|
- Alon Goldboim
|
18
|
+
- Šimon Lukašík
|
19
|
+
- Joe VLcek
|
18
20
|
autorequire:
|
19
21
|
bindir: bin
|
20
22
|
cert_chain: []
|
21
|
-
date: 2016-
|
23
|
+
date: 2016-10-31 00:00:00.000000000 Z
|
22
24
|
dependencies:
|
23
25
|
- !ruby/object:Gem::Dependency
|
24
26
|
name: bundler
|
@@ -191,6 +193,8 @@ email:
|
|
191
193
|
- yrudman@redhat.com
|
192
194
|
- chessbyte@gmail.com
|
193
195
|
- alongoldboim@gmail.com
|
196
|
+
- isimluk@fedoraproject.org
|
197
|
+
- jvlcek@redhat.com
|
194
198
|
executables: []
|
195
199
|
extensions: []
|
196
200
|
extra_rdoc_files: []
|