inspec 1.15.0 → 1.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -1
- data/Gemfile +1 -2
- data/docs/resources/mount.md.erb +1 -1
- data/docs/resources/zfs_dataset.md.erb +63 -0
- data/docs/resources/zfs_pool.md.erb +57 -0
- data/docs/shared/matcher_cmp.md.erb +4 -4
- data/examples/meta-profile/inspec.lock +1 -1
- data/examples/meta-profile/vendor/6bdab40a3fe9f9de4e7c87f4f3844fdcf2c5cba6f84089b68d47c72392b51fdc.tar.gz +0 -0
- data/lib/bundles/inspec-compliance/cli.rb +1 -1
- data/lib/inspec/resource.rb +2 -0
- data/lib/inspec/rspec_json_formatter.rb +64 -4
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/file.rb +1 -1
- data/lib/resources/kernel_module.rb +6 -5
- data/lib/resources/mount.rb +34 -4
- data/lib/resources/service.rb +2 -2
- data/lib/resources/zfs_dataset.rb +60 -0
- data/lib/resources/zfs_pool.rb +49 -0
- data/lib/utils/parser.rb +15 -1
- metadata +7 -3
- data/examples/meta-profile/vendor/3d473e72d8b70018386a53e0a105e92ccbb4115dc268cadc16ff53d550d2898e.tar.gz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3a96e098c7ff3d2cb9f43ea5d89cf3a75e34169
|
4
|
+
data.tar.gz: c16f66e486f2502feb4c0596c182d494cf2279f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d052313445bc953e03e27d8f6f35f078df54249fc1736fc6b48c61c4cffe96b5bebc3ecede732b534ca56337134285c96ec915954dde7b9ccb19eca62bd296d
|
7
|
+
data.tar.gz: 4cd5c91590c765f3c9dc8f07721187663245c3092f478672cdaaad95c9ff6ea2f6a3848e76ae36eda2ba5c76a799b01ecdfe22914974816e4a1e7bf70d916cef
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,36 @@
|
|
1
|
+
|
2
|
+
n.n.n / 2017-03-02
|
3
|
+
==================
|
4
|
+
|
5
|
+
* Merge pull request #1520 from chef/adamleff/fix-habitat-build
|
6
|
+
* Add Rake to Habitat build Gemfile
|
7
|
+
* Merge pull request #1454 from jkerry/FunctionalJUnitReporter
|
8
|
+
* correcting a typo, anonymnous -> anonymous
|
9
|
+
* adding gitignore entries for the tar.gz files that result from the functional tests
|
10
|
+
* resolving old junit unit tests with the new format. Adding a skipped test node as a result
|
11
|
+
* Converting the junit reporter to use nokogiri on top of the json reporter output hash
|
1
12
|
# Change Log
|
2
13
|
|
14
|
+
## [1.16.0](https://github.com/chef/inspec/tree/1.16.0) (2017-03-02)
|
15
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v1.15.0...v1.16.0)
|
16
|
+
|
17
|
+
**Implemented enhancements:**
|
18
|
+
|
19
|
+
- Functional JUnit reporter [\#1454](https://github.com/chef/inspec/pull/1454) ([jkerry](https://github.com/jkerry))
|
20
|
+
|
21
|
+
**Closed issues:**
|
22
|
+
|
23
|
+
- Small bug on the registry\_key docs page [\#1523](https://github.com/chef/inspec/issues/1523)
|
24
|
+
|
25
|
+
**Merged pull requests:**
|
26
|
+
|
27
|
+
- use -- for description of inspec login\_automate [\#1527](https://github.com/chef/inspec/pull/1527) ([chris-rock](https://github.com/chris-rock))
|
28
|
+
- fix ident in cmp matcher docs [\#1524](https://github.com/chef/inspec/pull/1524) ([chris-rock](https://github.com/chris-rock))
|
29
|
+
- Add Rake to Habitat build Gemfile [\#1520](https://github.com/chef/inspec/pull/1520) ([adamleff](https://github.com/adamleff))
|
30
|
+
- Fix kernel\_module for centos/redhat [\#1513](https://github.com/chef/inspec/pull/1513) ([postgred](https://github.com/postgred))
|
31
|
+
- Added oracle linux to rhel platform section of 'service' resource. [\#1511](https://github.com/chef/inspec/pull/1511) ([carldjohnston](https://github.com/carldjohnston))
|
32
|
+
- Add FreeBSD support for ZFS datasets and pools [\#1501](https://github.com/chef/inspec/pull/1501) ([jbenden](https://github.com/jbenden))
|
33
|
+
|
3
34
|
## [v1.15.0](https://github.com/chef/inspec/tree/v1.15.0) (2017-02-27)
|
4
35
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.14.1...v1.15.0)
|
5
36
|
|
@@ -27,6 +58,7 @@
|
|
27
58
|
|
28
59
|
**Merged pull requests:**
|
29
60
|
|
61
|
+
- 1.15.0 [\#1519](https://github.com/chef/inspec/pull/1519) ([adamleff](https://github.com/adamleff))
|
30
62
|
- Fix formatting and colors on Windows [\#1510](https://github.com/chef/inspec/pull/1510) ([trickyearlobe](https://github.com/trickyearlobe))
|
31
63
|
- Adding a Habitat profile artifact creator [\#1505](https://github.com/chef/inspec/pull/1505) ([adamleff](https://github.com/adamleff))
|
32
64
|
- create inspec.io/tutorial.html [\#1490](https://github.com/chef/inspec/pull/1490) ([arlimus](https://github.com/arlimus))
|
@@ -2170,4 +2202,4 @@
|
|
2170
2202
|
|
2171
2203
|
|
2172
2204
|
|
2173
|
-
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
2205
|
+
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/Gemfile
CHANGED
@@ -8,7 +8,7 @@ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.2.2')
|
|
8
8
|
end
|
9
9
|
|
10
10
|
gem 'ffi', '>= 1.9.14'
|
11
|
-
gem '
|
11
|
+
gem 'nokogiri', '~> 1.6'
|
12
12
|
|
13
13
|
group :test do
|
14
14
|
gem 'bundler', '~> 1.5'
|
@@ -19,7 +19,6 @@ group :test do
|
|
19
19
|
gem 'concurrent-ruby', '~> 0.9'
|
20
20
|
gem 'mocha', '~> 1.1'
|
21
21
|
gem 'ruby-progressbar', '~> 1.8'
|
22
|
-
gem 'nokogiri', '~> 1.6'
|
23
22
|
gem 'webmock', '~> 2.3.2'
|
24
23
|
end
|
25
24
|
|
data/docs/resources/mount.md.erb
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
---
|
2
|
+
title: About the zfs_dataset Resource
|
3
|
+
---
|
4
|
+
|
5
|
+
# zfs_dataset
|
6
|
+
|
7
|
+
Use the `zfs_dataset` InSpec audit resource to test the ZFS datasets on FreeBSD systems.
|
8
|
+
|
9
|
+
## Syntax
|
10
|
+
|
11
|
+
A `zfs_dataset` resource block declares the ZFS dataset properties that should be tested:
|
12
|
+
|
13
|
+
describe zfs_dataset('dataset') do
|
14
|
+
it { should MATCHER 'value' }
|
15
|
+
end
|
16
|
+
|
17
|
+
where
|
18
|
+
|
19
|
+
* `('dataset')` is the name of the ZFS dataset (eg: `'tank/tmp'`)
|
20
|
+
* `MATCHER` is a valid matcher for this resource
|
21
|
+
* `'value'` is the value to be tested
|
22
|
+
|
23
|
+
|
24
|
+
## Matchers
|
25
|
+
|
26
|
+
This InSpec audit resource has the matchers listed below, in addition to dynamically exposing all ZFS dataset properties available (see: `man zfs` for the list of supported properties.)
|
27
|
+
|
28
|
+
### be
|
29
|
+
|
30
|
+
<%= partial "/shared/matcher_be" %>
|
31
|
+
|
32
|
+
### be_mounted
|
33
|
+
|
34
|
+
The `be_mounted` matcher tests if the dataset is accessible from the file system:
|
35
|
+
|
36
|
+
it { should be_mounted }
|
37
|
+
|
38
|
+
### cmp
|
39
|
+
|
40
|
+
<%= partial "/shared/matcher_cmp" %>
|
41
|
+
|
42
|
+
### eq
|
43
|
+
|
44
|
+
<%= partial "/shared/matcher_eq" %>
|
45
|
+
|
46
|
+
### match
|
47
|
+
|
48
|
+
<%= partial "/shared/matcher_match" %>
|
49
|
+
|
50
|
+
## Examples
|
51
|
+
|
52
|
+
The following examples show how to use this InSpec audit resource.
|
53
|
+
|
54
|
+
### Test a dataset of 'tank/tmp'
|
55
|
+
|
56
|
+
describe zfs_dataset('tank/tmp') do
|
57
|
+
it { should be_mounted }
|
58
|
+
its('atime') { should eq 'on' }
|
59
|
+
its('compression') { should eq 'lz4' }
|
60
|
+
its('exec') { should eq 'off' }
|
61
|
+
its('readonly') { should eq 'off' }
|
62
|
+
its('setuid') { should eq 'off' }
|
63
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
---
|
2
|
+
title: About the zfs_pool Resource
|
3
|
+
---
|
4
|
+
|
5
|
+
# zfs_pool
|
6
|
+
|
7
|
+
Use the `zfs_pool` InSpec audit resource to test the ZFS pools on FreeBSD systems.
|
8
|
+
|
9
|
+
## Syntax
|
10
|
+
|
11
|
+
A `zfs_pool` resource block declares the ZFS pool properties that should be tested:
|
12
|
+
|
13
|
+
describe zfs_pool('pool') do
|
14
|
+
it { should MATCHER 'value' }
|
15
|
+
end
|
16
|
+
|
17
|
+
where
|
18
|
+
|
19
|
+
* `('pool')` is the name of the ZFS pool (eg: `'tank'`)
|
20
|
+
* `MATCHER` is a valid matcher for this resource
|
21
|
+
* `'value'` is the value to be tested
|
22
|
+
|
23
|
+
|
24
|
+
## Matchers
|
25
|
+
|
26
|
+
This InSpec audit resource has the matchers listed below, in addition to dynamically exposing all ZFS pool properties available (see: `man zpool` for the list of supported properties.)
|
27
|
+
|
28
|
+
### be
|
29
|
+
|
30
|
+
<%= partial "/shared/matcher_be" %>
|
31
|
+
|
32
|
+
### cmp
|
33
|
+
|
34
|
+
<%= partial "/shared/matcher_cmp" %>
|
35
|
+
|
36
|
+
### eq
|
37
|
+
|
38
|
+
<%= partial "/shared/matcher_eq" %>
|
39
|
+
|
40
|
+
### match
|
41
|
+
|
42
|
+
<%= partial "/shared/matcher_match" %>
|
43
|
+
|
44
|
+
## Examples
|
45
|
+
|
46
|
+
The following examples show how to use this InSpec audit resource.
|
47
|
+
|
48
|
+
### Test a pool of 'tank'
|
49
|
+
|
50
|
+
describe zfs_pool('tank') do
|
51
|
+
its('autoexpand') { should eq 'off' }
|
52
|
+
its('failmode') { should eq 'continue' }
|
53
|
+
its('feature@lz4_compress') { should eq 'active' }
|
54
|
+
its('health') { should eq 'ONLINE' }
|
55
|
+
its('listsnapshots') { should eq 'off' }
|
56
|
+
its('readonly') { should eq 'off' }
|
57
|
+
end
|
@@ -28,10 +28,10 @@ vs:
|
|
28
28
|
|
29
29
|
Ignoring case sensitivity:
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
describe some_resource do
|
32
|
+
its('setting') { should cmp 'raw' }
|
33
|
+
its('setting') { should cmp 'RAW' }
|
34
|
+
end
|
35
35
|
|
36
36
|
Printing octal values:
|
37
37
|
|
@@ -14,5 +14,5 @@ depends:
|
|
14
14
|
- name: windows-patch-benchmark
|
15
15
|
resolved_source:
|
16
16
|
url: https://github.com/chris-rock/windows-patch-benchmark/archive/master.tar.gz
|
17
|
-
sha256:
|
17
|
+
sha256: 6bdab40a3fe9f9de4e7c87f4f3844fdcf2c5cba6f84089b68d47c72392b51fdc
|
18
18
|
version_constraints: ">= 0"
|
Binary file
|
@@ -76,7 +76,7 @@ module Compliance
|
|
76
76
|
if !options['dctoken'].nil? || !options['usertoken'].nil?
|
77
77
|
msg = login_automate_config(url, options['user'], options['dctoken'], options['usertoken'], options['ent'], options['insecure'])
|
78
78
|
else
|
79
|
-
puts "Please specify a token using --dctoken='DATA_COLLECTOR_TOKEN' or usertoken='AUTOMATE_TOKEN' "
|
79
|
+
puts "Please specify a token using --dctoken='DATA_COLLECTOR_TOKEN' or --usertoken='AUTOMATE_TOKEN' "
|
80
80
|
exit 1
|
81
81
|
end
|
82
82
|
else
|
data/lib/inspec/resource.rb
CHANGED
@@ -132,6 +132,8 @@ require 'resources/windows_task'
|
|
132
132
|
require 'resources/xinetd'
|
133
133
|
require 'resources/wmi'
|
134
134
|
require 'resources/yum'
|
135
|
+
require 'resources/zfs_dataset'
|
136
|
+
require 'resources/zfs_pool'
|
135
137
|
|
136
138
|
# file formats, depend on json implementation
|
137
139
|
require 'resources/json'
|
@@ -791,13 +791,73 @@ class InspecRspecCli < InspecRspecJson # rubocop:disable Metrics/ClassLength
|
|
791
791
|
end
|
792
792
|
end
|
793
793
|
|
794
|
-
class InspecRspecJUnit <
|
794
|
+
class InspecRspecJUnit < InspecRspecJson
|
795
795
|
RSpec::Core::Formatters.register self, :close
|
796
796
|
|
797
|
-
|
798
|
-
|
797
|
+
#
|
798
|
+
# This is the last method is invoked through the formatter interface.
|
799
|
+
# Converts the junit formatter constructed output_hash into nokogiri generated
|
800
|
+
# XML and writes it to output.
|
801
|
+
#
|
802
|
+
def close(_notification)
|
803
|
+
require 'nokogiri'
|
804
|
+
xml_output = Nokogiri::XML::Builder.new { |xml|
|
805
|
+
xml.testsuites do
|
806
|
+
@output_hash[:profiles].each do |profile|
|
807
|
+
build_profile_xml(xml, profile)
|
808
|
+
end
|
809
|
+
end
|
810
|
+
}.to_xml
|
811
|
+
output.puts xml_output
|
799
812
|
end
|
800
813
|
|
801
|
-
|
814
|
+
private
|
815
|
+
|
816
|
+
def build_profile_xml(xml, profile)
|
817
|
+
xml.testsuite(
|
818
|
+
name: profile[:name],
|
819
|
+
tests: count_profile_tests(profile),
|
820
|
+
failed: count_profile_failed_tests(profile),
|
821
|
+
) do
|
822
|
+
profile[:controls].each do |control|
|
823
|
+
build_control_xml(xml, control)
|
824
|
+
end
|
825
|
+
end
|
826
|
+
end
|
827
|
+
|
828
|
+
def build_control_xml(xml, control)
|
829
|
+
return if control[:results].nil?
|
830
|
+
control[:results].each do |result|
|
831
|
+
build_result_xml(xml, control, result)
|
832
|
+
end
|
833
|
+
end
|
834
|
+
|
835
|
+
def build_result_xml(xml, control, result)
|
836
|
+
test_class = control[:title].nil? ? 'Anonymous' : control[:id]
|
837
|
+
xml.testcase(name: result[:code_desc], class: test_class, time: result[:run_time]) do
|
838
|
+
if result[:status] == 'failed'
|
839
|
+
xml.failure(message: result[:message])
|
840
|
+
elsif result[:status] == 'skipped'
|
841
|
+
xml.skipped
|
842
|
+
end
|
843
|
+
end
|
844
|
+
end
|
845
|
+
|
846
|
+
def count_profile_tests(profile)
|
847
|
+
profile[:controls].reduce(0) { |acc, elem|
|
848
|
+
acc + (elem[:results].nil? ? 0 : elem[:results].count)
|
849
|
+
}
|
850
|
+
end
|
851
|
+
|
852
|
+
def count_profile_failed_tests(profile)
|
853
|
+
profile[:controls].reduce(0) { |acc, elem|
|
854
|
+
if elem[:results].nil?
|
855
|
+
acc
|
856
|
+
else
|
857
|
+
acc + elem[:results].reduce(0) { |fail_test_total, test_case|
|
858
|
+
test_case[:status] == 'failed' ? fail_test_total + 1 : fail_test_total
|
859
|
+
}
|
860
|
+
end
|
861
|
+
}
|
802
862
|
end
|
803
863
|
end
|
data/lib/inspec/version.rb
CHANGED
data/lib/resources/file.rb
CHANGED
@@ -19,7 +19,7 @@ module Inspec::Resources
|
|
19
19
|
|
20
20
|
class FileResource < Inspec.resource(1)
|
21
21
|
include FilePermissionsSelector
|
22
|
-
include
|
22
|
+
include LinuxMountParser
|
23
23
|
|
24
24
|
name 'file'
|
25
25
|
desc 'Use the file InSpec audit resource to test all system file types, including files, directories, symbolic links, named pipes, sockets, character devices, block devices, and doors.'
|
@@ -21,10 +21,11 @@ module Inspec::Resources
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def loaded?
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
25
|
+
lsmod_cmd = '/sbin/lsmod'
|
26
|
+
else
|
27
|
+
lsmod_cmd = 'lsmod'
|
28
|
+
end
|
28
29
|
|
29
30
|
# get list of all modules
|
30
31
|
cmd = inspec.command(lsmod_cmd)
|
@@ -37,7 +38,7 @@ module Inspec::Resources
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def version
|
40
|
-
if inspec.os
|
41
|
+
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
41
42
|
modinfo_cmd = "/sbin/modinfo -F version #{@module}"
|
42
43
|
else
|
43
44
|
modinfo_cmd = "modinfo -F version #{@module}"
|
data/lib/resources/mount.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# author: Christoph Hartmann
|
3
3
|
# author: Dominik Richter
|
4
|
+
# author: Joseph Benden
|
4
5
|
|
5
6
|
require 'utils/simpleconfig'
|
6
7
|
|
@@ -18,13 +19,12 @@ module Inspec::Resources
|
|
18
19
|
its('options') { should include 'nodev' }
|
19
20
|
end
|
20
21
|
"
|
21
|
-
include MountParser
|
22
|
-
|
23
22
|
attr_reader :file
|
24
23
|
|
25
24
|
def initialize(path)
|
26
25
|
@path = path
|
27
|
-
|
26
|
+
@mount_manager = mount_manager_for_os
|
27
|
+
return skip_resource 'The `mount` resource is not supported on your OS yet.' if @mount_manager.nil?
|
28
28
|
@file = inspec.backend.file(@path)
|
29
29
|
end
|
30
30
|
|
@@ -49,12 +49,42 @@ module Inspec::Resources
|
|
49
49
|
line = mounted.stdout.lines.to_a.last if mounted.stdout.lines.count > 1
|
50
50
|
|
51
51
|
# parse content if we are on linux
|
52
|
-
@mount_options ||= parse_mount_options(line)
|
52
|
+
@mount_options ||= @mount_manager.parse_mount_options(line)
|
53
53
|
@mount_options[name]
|
54
54
|
end
|
55
55
|
|
56
56
|
def to_s
|
57
57
|
"Mount #{@path}"
|
58
58
|
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def mount_manager_for_os
|
63
|
+
os = inspec.os
|
64
|
+
if os.linux?
|
65
|
+
LinuxMounts.new(inspec)
|
66
|
+
elsif ['freebsd'].include?(os[:family])
|
67
|
+
BsdMounts.new(inspec)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class MountsInfo
|
73
|
+
attr_reader :inspec
|
74
|
+
def initialize(inspec)
|
75
|
+
@inspec = inspec
|
76
|
+
end
|
77
|
+
|
78
|
+
def parse_mount_options(_mount_line, _compatibility = false)
|
79
|
+
raise NotImplementedError
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class LinuxMounts < MountsInfo
|
84
|
+
include LinuxMountParser
|
85
|
+
end
|
86
|
+
|
87
|
+
class BsdMounts < MountsInfo
|
88
|
+
include BsdMountParser
|
59
89
|
end
|
60
90
|
end
|
data/lib/resources/service.rb
CHANGED
@@ -134,9 +134,9 @@ module Inspec::Resources
|
|
134
134
|
else
|
135
135
|
SysV.new(inspec, service_ctl || '/usr/sbin/service')
|
136
136
|
end
|
137
|
-
elsif %w{redhat fedora centos}.include?(platform)
|
137
|
+
elsif %w{redhat fedora centos oracle}.include?(platform)
|
138
138
|
version = os[:release].to_i
|
139
|
-
if (%w{ redhat centos }.include?(platform) && version >= 7) || (platform == 'fedora' && version >= 15)
|
139
|
+
if (%w{ redhat centos oracle }.include?(platform) && version >= 7) || (platform == 'fedora' && version >= 15)
|
140
140
|
Systemd.new(inspec, service_ctl)
|
141
141
|
else
|
142
142
|
SysV.new(inspec, service_ctl || '/sbin/service')
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# author: Joseph Benden
|
3
|
+
|
4
|
+
module Inspec::Resources
|
5
|
+
class ZfsDataset < Inspec.resource(1)
|
6
|
+
name 'zfs_dataset'
|
7
|
+
desc "
|
8
|
+
Use the zfs_dataset InSpec audit resource to test if the named
|
9
|
+
ZFS Dataset is present and/or has certain properties.
|
10
|
+
"
|
11
|
+
example "
|
12
|
+
describe zfs_dataset('tank/tmp') do
|
13
|
+
its('exec') { should eq('off') }
|
14
|
+
its('setuid') { should eq('off') }
|
15
|
+
end
|
16
|
+
"
|
17
|
+
|
18
|
+
def initialize(zfs_dataset)
|
19
|
+
return skip_resource 'The `zfs_dataset` resource is not supported on your OS yet.' if !inspec.os.bsd?
|
20
|
+
@zfs_dataset = zfs_dataset
|
21
|
+
|
22
|
+
@params = gather
|
23
|
+
end
|
24
|
+
|
25
|
+
# method called by 'it { should exist }'
|
26
|
+
def exists?
|
27
|
+
inspec.command("/sbin/zfs get -Hp all #{@zfs_dataset}").exit_status == 0
|
28
|
+
end
|
29
|
+
|
30
|
+
def mounted?
|
31
|
+
return false if !exists?
|
32
|
+
inspec.mount(@params['mountpoint']).mounted?
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_s
|
36
|
+
"ZFS Dataset #{@zfs_dataset}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def gather
|
40
|
+
cmd = inspec.command("/sbin/zfs get -Hp all #{@zfs_dataset}")
|
41
|
+
return nil if cmd.exit_status.to_i != 0
|
42
|
+
|
43
|
+
# parse data
|
44
|
+
cmd.stdout.chomp.split("\n").each_with_object(Hash.new(0)) do |line, h|
|
45
|
+
t = line.split("\t")
|
46
|
+
h[t[1].to_s] = t[2].to_s
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# override method
|
51
|
+
def exec
|
52
|
+
@params['exec']
|
53
|
+
end
|
54
|
+
|
55
|
+
# expose all parameters
|
56
|
+
def method_missing(name)
|
57
|
+
@params[name.to_s]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# author: Joseph Benden
|
3
|
+
|
4
|
+
module Inspec::Resources
|
5
|
+
class ZfsPool < Inspec.resource(1)
|
6
|
+
name 'zfs_pool'
|
7
|
+
desc "
|
8
|
+
Use the zfs_pool InSpec audit resource to test if the named
|
9
|
+
ZFS Pool is present and/or has certain properties.
|
10
|
+
"
|
11
|
+
example "
|
12
|
+
describe zfs_pool('tank') do
|
13
|
+
its('failmode') { should eq('continue') }
|
14
|
+
end
|
15
|
+
"
|
16
|
+
|
17
|
+
def initialize(zfs_pool)
|
18
|
+
return skip_resource 'The `zfs_pool` resource is not supported on your OS yet.' if !inspec.os.bsd?
|
19
|
+
@zfs_pool = zfs_pool
|
20
|
+
|
21
|
+
@params = gather
|
22
|
+
end
|
23
|
+
|
24
|
+
# method called by 'it { should exist }'
|
25
|
+
def exists?
|
26
|
+
inspec.command("/sbin/zpool get -Hp all #{@zfs_pool}").exit_status == 0
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
"ZFS Pool #{@zfs_pool}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def gather
|
34
|
+
cmd = inspec.command("/sbin/zpool get -Hp all #{@zfs_pool}")
|
35
|
+
return nil if cmd.exit_status.to_i != 0
|
36
|
+
|
37
|
+
# parse data
|
38
|
+
cmd.stdout.chomp.split("\n").each_with_object(Hash.new(0)) do |line, h|
|
39
|
+
t = line.split("\t")
|
40
|
+
h[t[1].to_s] = t[2].to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# expose all parameters
|
45
|
+
def method_missing(name)
|
46
|
+
@params[name.to_s]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/utils/parser.rb
CHANGED
@@ -63,7 +63,7 @@ module CommentParser
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
module
|
66
|
+
module LinuxMountParser
|
67
67
|
# this parses the output of mount command (only tested on linux)
|
68
68
|
# this method expects only one line of the mount output
|
69
69
|
def parse_mount_options(mount_line, compatibility = false)
|
@@ -94,6 +94,20 @@ module MountParser
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
+
module BsdMountParser
|
98
|
+
# this parses the output of mount command (only tested on freebsd)
|
99
|
+
# this method expects only one line of the mount output
|
100
|
+
def parse_mount_options(mount_line, _compatibility = false)
|
101
|
+
return {} if mount_line.nil? || mount_line.empty?
|
102
|
+
|
103
|
+
mount = mount_line.chomp.split(' ', 4)
|
104
|
+
options = mount[3].tr('()', '').split(', ')
|
105
|
+
|
106
|
+
# parse device and type
|
107
|
+
{ device: mount[0], type: options.shift, options: options }
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
97
111
|
module SolarisNetstatParser
|
98
112
|
# takes this as a input and parses the values
|
99
113
|
# UDP: IPv4
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02
|
11
|
+
date: 2017-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: train
|
@@ -346,6 +346,8 @@ files:
|
|
346
346
|
- docs/resources/xinetd_conf.md.erb
|
347
347
|
- docs/resources/yaml.md.erb
|
348
348
|
- docs/resources/yum.md.erb
|
349
|
+
- docs/resources/zfs_dataset.md.erb
|
350
|
+
- docs/resources/zfs_pool.md.erb
|
349
351
|
- docs/ruby_usage.md
|
350
352
|
- docs/shared/matcher_be.md.erb
|
351
353
|
- docs/shared/matcher_cmp.md.erb
|
@@ -384,7 +386,7 @@ files:
|
|
384
386
|
- examples/meta-profile/controls/example.rb
|
385
387
|
- examples/meta-profile/inspec.lock
|
386
388
|
- examples/meta-profile/inspec.yml
|
387
|
-
- examples/meta-profile/vendor/
|
389
|
+
- examples/meta-profile/vendor/6bdab40a3fe9f9de4e7c87f4f3844fdcf2c5cba6f84089b68d47c72392b51fdc.tar.gz
|
388
390
|
- examples/meta-profile/vendor/9ad48391d4e6efff0a13d06736c5b075fb021410e0a629e087bc21e9617d957c.tar.gz
|
389
391
|
- examples/meta-profile/vendor/e25d521fb1093b4c23b31a7dc8f41b5540236f4a433960b151bc427523662ab6.tar.gz
|
390
392
|
- examples/profile-attribute.yml
|
@@ -558,6 +560,8 @@ files:
|
|
558
560
|
- lib/resources/xinetd.rb
|
559
561
|
- lib/resources/yaml.rb
|
560
562
|
- lib/resources/yum.rb
|
563
|
+
- lib/resources/zfs_dataset.rb
|
564
|
+
- lib/resources/zfs_pool.rb
|
561
565
|
- lib/source_readers/flat.rb
|
562
566
|
- lib/source_readers/inspec.rb
|
563
567
|
- lib/utils/command_wrapper.rb
|