inspec 0.30.0 → 0.31.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +50 -2
- data/Gemfile +2 -1
- data/docs/cli.rst +1 -17
- data/docs/resources.rst +128 -0
- data/docs/shell.rst +130 -0
- data/inspec.gemspec +3 -4
- data/lib/bundles/inspec-compliance/.kitchen.yml +0 -1
- data/lib/bundles/inspec-compliance/README.md +8 -3
- data/lib/bundles/inspec-compliance/api.rb +21 -6
- data/lib/bundles/inspec-compliance/bootstrap.sh +13 -9
- data/lib/bundles/inspec-compliance/cli.rb +23 -19
- data/lib/bundles/inspec-compliance/target.rb +1 -0
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +42 -5
- data/lib/bundles/inspec-init/cli.rb +9 -0
- data/lib/bundles/inspec-supermarket/cli.rb +9 -0
- data/lib/bundles/inspec-supermarket/target.rb +2 -1
- data/lib/fetchers/local.rb +5 -2
- data/lib/fetchers/url.rb +1 -0
- data/lib/inspec/base_cli.rb +2 -1
- data/lib/inspec/cli.rb +14 -5
- data/lib/inspec/dependencies/dependency_set.rb +38 -0
- data/lib/inspec/dependencies/requirement.rb +103 -0
- data/lib/inspec/{dependencies.rb → dependencies/resolver.rb} +13 -132
- data/lib/inspec/dependencies/vendor_index.rb +98 -0
- data/lib/inspec/plugins/source_reader.rb +4 -0
- data/lib/inspec/profile.rb +2 -2
- data/lib/inspec/resource.rb +2 -0
- data/lib/inspec/runner.rb +13 -1
- data/lib/inspec/runner_mock.rb +4 -0
- data/lib/inspec/runner_rspec.rb +6 -2
- data/lib/inspec/shell.rb +22 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/iis_site.rb +107 -0
- data/lib/resources/port.rb +11 -4
- data/lib/resources/ssh_conf.rb +10 -2
- data/lib/resources/ssl.rb +94 -0
- data/lib/resources/xinetd.rb +11 -2
- data/lib/utils/parser.rb +6 -1
- metadata +17 -561
- data/lib/utils/hash_map.rb +0 -37
- data/tasks/maintainers.rb +0 -213
- data/test/bench/startup/startup.flat.txt +0 -1005
- data/test/bench/startup/startup.graph.html +0 -71958
- data/test/bench/startup/startup.grind.dat +0 -101602
- data/test/bench/startup/startup.stack.html +0 -24516
- data/test/bench/startup.flat.txt +0 -998
- data/test/bench/startup.graph.html +0 -71420
- data/test/bench/startup.grind.dat +0 -103554
- data/test/bench/startup.stack.html +0 -25015
- data/test/cookbooks/os_prepare/attributes/default.rb +0 -2
- data/test/cookbooks/os_prepare/files/empty.iso +0 -0
- data/test/cookbooks/os_prepare/files/example.csv +0 -7
- data/test/cookbooks/os_prepare/files/example.ini +0 -6
- data/test/cookbooks/os_prepare/files/example.json +0 -12
- data/test/cookbooks/os_prepare/files/example.yml +0 -7
- data/test/cookbooks/os_prepare/metadata.rb +0 -13
- data/test/cookbooks/os_prepare/recipes/_runit_service_centos.rb +0 -34
- data/test/cookbooks/os_prepare/recipes/_upstart_service_centos.rb +0 -25
- data/test/cookbooks/os_prepare/recipes/apache.rb +0 -14
- data/test/cookbooks/os_prepare/recipes/apt.rb +0 -20
- data/test/cookbooks/os_prepare/recipes/auditctl.rb +0 -8
- data/test/cookbooks/os_prepare/recipes/default.rb +0 -29
- data/test/cookbooks/os_prepare/recipes/file.rb +0 -46
- data/test/cookbooks/os_prepare/recipes/iptables.rb +0 -13
- data/test/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb +0 -34
- data/test/cookbooks/os_prepare/recipes/mount.rb +0 -33
- data/test/cookbooks/os_prepare/recipes/package.rb +0 -25
- data/test/cookbooks/os_prepare/recipes/postgres.rb +0 -20
- data/test/cookbooks/os_prepare/recipes/prep_container.rb +0 -15
- data/test/cookbooks/os_prepare/recipes/registry_key.rb +0 -87
- data/test/cookbooks/os_prepare/recipes/service.rb +0 -19
- data/test/cookbooks/os_prepare/templates/default/sv-default-svlog-run.erb +0 -2
- data/test/docker_run.rb +0 -162
- data/test/docker_test.rb +0 -58
- data/test/functional/helper.rb +0 -37
- data/test/functional/inheritance_test.rb +0 -62
- data/test/functional/inspec_archive_test.rb +0 -80
- data/test/functional/inspec_compliance_test.rb +0 -61
- data/test/functional/inspec_exec_json_test.rb +0 -122
- data/test/functional/inspec_exec_jsonmin_test.rb +0 -59
- data/test/functional/inspec_exec_test.rb +0 -123
- data/test/functional/inspec_json_profile_test.rb +0 -103
- data/test/functional/inspec_test.rb +0 -91
- data/test/helper.rb +0 -329
- data/test/integration/default/_debug_spec.rb +0 -8
- data/test/integration/default/apache_conf_spec.rb +0 -21
- data/test/integration/default/apt_spec.rb +0 -37
- data/test/integration/default/auditd_rules_spec.rb +0 -32
- data/test/integration/default/cmp_matcher_spec.rb +0 -115
- data/test/integration/default/csv_spec.rb +0 -11
- data/test/integration/default/etc_group_spec.rb +0 -29
- data/test/integration/default/file_spec.rb +0 -195
- data/test/integration/default/group_spec.rb +0 -59
- data/test/integration/default/ini_spec.rb +0 -11
- data/test/integration/default/iptables_spec.rb +0 -29
- data/test/integration/default/json_spec.rb +0 -11
- data/test/integration/default/kernel_module_spec.rb +0 -23
- data/test/integration/default/kernel_parameter_spec.rb +0 -60
- data/test/integration/default/mount_spec.rb +0 -19
- data/test/integration/default/os_spec.rb +0 -13
- data/test/integration/default/package_spec.rb +0 -30
- data/test/integration/default/port_spec.rb +0 -27
- data/test/integration/default/postgres_session_spec.rb +0 -13
- data/test/integration/default/powershell_spec.rb +0 -42
- data/test/integration/default/registry_key_spec.rb +0 -109
- data/test/integration/default/secpol_spec.rb +0 -11
- data/test/integration/default/service_spec.rb +0 -128
- data/test/integration/default/user_spec.rb +0 -96
- data/test/integration/default/vbscript_spec.rb +0 -22
- data/test/integration/default/wmi_spec.rb +0 -66
- data/test/integration/default/yaml_spec.rb +0 -11
- data/test/resource/command_test.rb +0 -33
- data/test/resource/dsl_test.rb +0 -45
- data/test/resource/file_test.rb +0 -146
- data/test/resource/ssh_config.rb +0 -9
- data/test/resource/sshd_config.rb +0 -9
- data/test/test-extra.yaml +0 -11
- data/test/test.yaml +0 -11
- data/test/unit/control_test.rb +0 -58
- data/test/unit/fetchers/local_test.rb +0 -67
- data/test/unit/fetchers/mock_test.rb +0 -43
- data/test/unit/fetchers/tar_test.rb +0 -36
- data/test/unit/fetchers/url_test.rb +0 -152
- data/test/unit/fetchers/zip_test.rb +0 -36
- data/test/unit/fetchers_test.rb +0 -65
- data/test/unit/metadata_test.rb +0 -137
- data/test/unit/mock/cmd/$env-PATH +0 -1
- data/test/unit/mock/cmd/Get-NetAdapter +0 -24
- data/test/unit/mock/cmd/GetUserAccount +0 -33
- data/test/unit/mock/cmd/GetWin32Group +0 -23
- data/test/unit/mock/cmd/Resolve-DnsName +0 -26
- data/test/unit/mock/cmd/Test-NetConnection +0 -4
- data/test/unit/mock/cmd/auditctl +0 -3
- data/test/unit/mock/cmd/auditctl-legacy +0 -7
- data/test/unit/mock/cmd/auditctl-s +0 -8
- data/test/unit/mock/cmd/auditpol +0 -2
- data/test/unit/mock/cmd/brew-info-jq +0 -1
- data/test/unit/mock/cmd/chage-l-root +0 -7
- data/test/unit/mock/cmd/dpkg-s-curl +0 -21
- data/test/unit/mock/cmd/dscl +0 -5
- data/test/unit/mock/cmd/env +0 -1
- data/test/unit/mock/cmd/etc-apt +0 -7
- data/test/unit/mock/cmd/find-apache2-conf-enabled +0 -1
- data/test/unit/mock/cmd/find-apache2-ports-conf +0 -1
- data/test/unit/mock/cmd/find-etc-rc-d-name-S +0 -12
- data/test/unit/mock/cmd/find-net-interface +0 -9
- data/test/unit/mock/cmd/find-xinetd.d +0 -2
- data/test/unit/mock/cmd/gem-list-local-a-q-rubocop +0 -1
- data/test/unit/mock/cmd/get-net-tcpconnection +0 -24
- data/test/unit/mock/cmd/get-netadapter-binding-bridge +0 -4
- data/test/unit/mock/cmd/get-package-firefox +0 -30
- data/test/unit/mock/cmd/get-package-ruby +0 -18
- data/test/unit/mock/cmd/get-service-dhcp +0 -10
- data/test/unit/mock/cmd/get-windows-feature +0 -7
- data/test/unit/mock/cmd/get-wmiobject +0 -9
- data/test/unit/mock/cmd/getent-hosts-example.com +0 -1
- data/test/unit/mock/cmd/getent-passwd-jfolmer +0 -1
- data/test/unit/mock/cmd/getent-passwd-root +0 -1
- data/test/unit/mock/cmd/hpux-netstat-inet +0 -10
- data/test/unit/mock/cmd/hpux-netstat-inet6 +0 -11
- data/test/unit/mock/cmd/id-chartmann +0 -1
- data/test/unit/mock/cmd/id-jfolmer +0 -1
- data/test/unit/mock/cmd/id-root +0 -1
- data/test/unit/mock/cmd/initctl--version +0 -5
- data/test/unit/mock/cmd/initctl-show-config-ssh +0 -3
- data/test/unit/mock/cmd/initctl-status-ssh +0 -1
- data/test/unit/mock/cmd/iptables-s +0 -6
- data/test/unit/mock/cmd/launchctl-list +0 -3
- data/test/unit/mock/cmd/logins-x +0 -4
- data/test/unit/mock/cmd/ls-1-etc-init.d +0 -2
- data/test/unit/mock/cmd/ls-sys-class-net-br +0 -2
- data/test/unit/mock/cmd/lsmod +0 -2
- data/test/unit/mock/cmd/lsof-nP-i-FpctPn +0 -63
- data/test/unit/mock/cmd/mount +0 -1
- data/test/unit/mock/cmd/mount-multiple +0 -2
- data/test/unit/mock/cmd/netstat-an.utf8 +0 -13
- data/test/unit/mock/cmd/netstat-tulpen +0 -6
- data/test/unit/mock/cmd/npm-ls-g--json-bower +0 -9
- data/test/unit/mock/cmd/pacman-qi-curl +0 -21
- data/test/unit/mock/cmd/ping-example.com +0 -6
- data/test/unit/mock/cmd/pip-show-jinja2 +0 -11
- data/test/unit/mock/cmd/pkg-info-system-file-system-zfs +0 -8
- data/test/unit/mock/cmd/pkginfo-l-SUNWzfsr +0 -7
- data/test/unit/mock/cmd/ps-aux +0 -5
- data/test/unit/mock/cmd/ps-auxZ +0 -3
- data/test/unit/mock/cmd/pw-usershow-root-7 +0 -1
- data/test/unit/mock/cmd/reg_schedule +0 -6
- data/test/unit/mock/cmd/rpm-qia-curl +0 -24
- data/test/unit/mock/cmd/s11-netstat-an-finet-finet6 +0 -32
- data/test/unit/mock/cmd/sbin_sysctl +0 -1
- data/test/unit/mock/cmd/secedit-export +0 -7
- data/test/unit/mock/cmd/service-e +0 -2
- data/test/unit/mock/cmd/service-sendmail-onestatus +0 -3
- data/test/unit/mock/cmd/service-sshd-status +0 -1
- data/test/unit/mock/cmd/sockstat +0 -5
- data/test/unit/mock/cmd/success +0 -0
- data/test/unit/mock/cmd/swlist-l-product +0 -1
- data/test/unit/mock/cmd/systemctl-show-all-dbus +0 -6
- data/test/unit/mock/cmd/systemctl-show-all-sshd +0 -7
- data/test/unit/mock/cmd/win32_product +0 -8
- data/test/unit/mock/cmd/yum-repolist-all +0 -52
- data/test/unit/mock/files/apache2.conf +0 -14
- data/test/unit/mock/files/auditd.conf +0 -4
- data/test/unit/mock/files/bond0 +0 -37
- data/test/unit/mock/files/etcgroup +0 -3
- data/test/unit/mock/files/example.csv +0 -6
- data/test/unit/mock/files/grub.conf +0 -21
- data/test/unit/mock/files/inetd.conf +0 -2
- data/test/unit/mock/files/kitchen.yml +0 -7
- data/test/unit/mock/files/limits.conf +0 -5
- data/test/unit/mock/files/login.defs +0 -5
- data/test/unit/mock/files/mysql.conf +0 -8
- data/test/unit/mock/files/mysql2.conf +0 -2
- data/test/unit/mock/files/ntp.conf +0 -5
- data/test/unit/mock/files/passwd +0 -2
- data/test/unit/mock/files/policyfile.lock.json +0 -12
- data/test/unit/mock/files/ports.conf +0 -6
- data/test/unit/mock/files/rootwrap.conf +0 -7
- data/test/unit/mock/files/serve-cgi-bin.conf +0 -20
- data/test/unit/mock/files/shadow +0 -2
- data/test/unit/mock/files/ssh_config +0 -5
- data/test/unit/mock/files/sshd_config +0 -7
- data/test/unit/mock/files/sysctl.conf +0 -7
- data/test/unit/mock/files/xinetd.conf +0 -9
- data/test/unit/mock/files/xinetd.d/.gitkeep +0 -0
- data/test/unit/mock/files/xinetd.d_chargen-dgram +0 -9
- data/test/unit/mock/files/xinetd.d_chargen-stream +0 -9
- data/test/unit/mock/profiles/complete-metadata/inspec.yml +0 -7
- data/test/unit/mock/profiles/complete-profile/controls/filesystem_spec.rb +0 -16
- data/test/unit/mock/profiles/complete-profile/inspec.yml +0 -10
- data/test/unit/mock/profiles/complete-profile/libraries/testlib.rb +0 -1
- data/test/unit/mock/profiles/empty-metadata/inspec.yml +0 -0
- data/test/unit/mock/profiles/legacy-complete-metadata/metadata.rb +0 -7
- data/test/unit/mock/profiles/legacy-complete-metadata/test/.gitkeep +0 -0
- data/test/unit/mock/profiles/legacy-empty-metadata/controls/.gitkeep +0 -0
- data/test/unit/mock/profiles/legacy-empty-metadata/metadata.rb +0 -0
- data/test/unit/mock/profiles/legacy-simple-metadata/metadata.rb +0 -1
- data/test/unit/mock/profiles/legacy-simple-metadata/test/.gitkeep +0 -0
- data/test/unit/mock/profiles/library/controls/filesystem_spec.rb +0 -7
- data/test/unit/mock/profiles/library/inspec.yml +0 -10
- data/test/unit/mock/profiles/library/libraries/gordonlib.rb +0 -2
- data/test/unit/mock/profiles/library/libraries/testlib.rb +0 -12
- data/test/unit/mock/profiles/resource-tiny/inspec.yml +0 -10
- data/test/unit/mock/profiles/resource-tiny/libraries/resource.rb +0 -3
- data/test/unit/mock/profiles/simple-metadata/inspec.yml +0 -1
- data/test/unit/mock/profiles/skippy-profile-os/controls/one.rb +0 -3
- data/test/unit/mock/profiles/skippy-profile-os/inspec.yml +0 -5
- data/test/unit/mock/profiles/spec_only/specfile.rb +0 -11
- data/test/unit/mock/profiles/supported_inspec/inspec.yml +0 -2
- data/test/unit/mock/profiles/unsupported_inspec/inspec.yml +0 -2
- data/test/unit/objects_test.rb +0 -65
- data/test/unit/plugin_test.rb +0 -44
- data/test/unit/plugins/resource_test.rb +0 -60
- data/test/unit/profile_context_test.rb +0 -345
- data/test/unit/profile_test.rb +0 -252
- data/test/unit/resources/apache_conf_test.rb +0 -31
- data/test/unit/resources/apt_test.rb +0 -46
- data/test/unit/resources/audit_policy_test.rb +0 -13
- data/test/unit/resources/auditd_conf_test.rb +0 -15
- data/test/unit/resources/auditd_rules_test.rb +0 -91
- data/test/unit/resources/bash_test.rb +0 -29
- data/test/unit/resources/bond_test.rb +0 -24
- data/test/unit/resources/bridge_test.rb +0 -56
- data/test/unit/resources/csv_test.rb +0 -35
- data/test/unit/resources/etc_group_test.rb +0 -37
- data/test/unit/resources/file_test.rb +0 -202
- data/test/unit/resources/gem_test.rb +0 -20
- data/test/unit/resources/group_test.rb +0 -96
- data/test/unit/resources/grub_conf_test.rb +0 -29
- data/test/unit/resources/host_test.rb +0 -38
- data/test/unit/resources/inetd_conf_test.rb +0 -15
- data/test/unit/resources/ini_test.rb +0 -16
- data/test/unit/resources/interface_test.rb +0 -54
- data/test/unit/resources/iptables_test.rb +0 -35
- data/test/unit/resources/json_test.rb +0 -36
- data/test/unit/resources/kernel_module_test.rb +0 -23
- data/test/unit/resources/kernel_parameter_test.rb +0 -13
- data/test/unit/resources/limits_conf_test.rb +0 -14
- data/test/unit/resources/login_def_test.rb +0 -16
- data/test/unit/resources/mount_test.rb +0 -26
- data/test/unit/resources/mysql_conf_test.rb +0 -14
- data/test/unit/resources/npm_test.rb +0 -20
- data/test/unit/resources/ntp_conf_test.rb +0 -16
- data/test/unit/resources/oneget_test.rb +0 -45
- data/test/unit/resources/os_env_test.rb +0 -18
- data/test/unit/resources/os_test.rb +0 -40
- data/test/unit/resources/package_test.rb +0 -87
- data/test/unit/resources/parse_config_test.rb +0 -26
- data/test/unit/resources/passwd_test.rb +0 -111
- data/test/unit/resources/pip_test.rb +0 -15
- data/test/unit/resources/port_test.rb +0 -165
- data/test/unit/resources/powershell_test.rb +0 -32
- data/test/unit/resources/processes_test.rb +0 -72
- data/test/unit/resources/registry_key_test.rb +0 -18
- data/test/unit/resources/security_policy_test.rb +0 -16
- data/test/unit/resources/service_test.rb +0 -305
- data/test/unit/resources/shadow_test.rb +0 -67
- data/test/unit/resources/ssh_conf_test.rb +0 -33
- data/test/unit/resources/user_test.rb +0 -124
- data/test/unit/resources/vbscript_test.rb +0 -18
- data/test/unit/resources/windows_feature.rb +0 -17
- data/test/unit/resources/wmi_test.rb +0 -42
- data/test/unit/resources/xinetd_test.rb +0 -60
- data/test/unit/resources/yaml_test.rb +0 -34
- data/test/unit/resources/yum_test.rb +0 -68
- data/test/unit/shell_detector_test.rb +0 -78
- data/test/unit/source_reader_test.rb +0 -17
- data/test/unit/source_readers/flat_test.rb +0 -61
- data/test/unit/source_readers/inspec_test.rb +0 -38
- data/test/unit/utils/filter_array_test.rb +0 -59
- data/test/unit/utils/filter_table_test.rb +0 -177
- data/test/unit/utils/find_files_test.rb +0 -23
- data/test/unit/utils/passwd_parser_test.rb +0 -32
- data/test/unit/utils/simpleconfig_test.rb +0 -80
- data/test/unit/utils/solaris_netstat_parser.rb +0 -124
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7863d5430d9891f4ec8895d615bb134047a237ee
|
|
4
|
+
data.tar.gz: 7b8b6d69f358812cd69aa40042f4a6bd0a2d52b7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 37d29c938cc8e6d234d27aaf92bf438eff4be4d4394469468ccf7b570f91165bb1d262e0c4c0594672e6b6d520cf8fe785fe883468a74d0553eb015ab181953f
|
|
7
|
+
data.tar.gz: 72ab6035eddcb9e64bed98d64fd9f38e3e6e30839786a073b08bf3fb9c4e4728e943753c353b4b31cbc745d60096e28fee4944c10f3d4a6685ad977294119d16
|
data/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,55 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
## [0.
|
|
4
|
-
[Full Changelog](https://github.com/chef/inspec/compare/v0.
|
|
3
|
+
## [0.31.0](https://github.com/chef/inspec/tree/0.31.0) (2016-08-19)
|
|
4
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.30.0...0.31.0)
|
|
5
|
+
|
|
6
|
+
**Implemented enhancements:**
|
|
7
|
+
|
|
8
|
+
- Support writing full tests in inspec shell [\#240](https://github.com/chef/inspec/issues/240)
|
|
9
|
+
- inspec shell documentation - Fix \#805 [\#925](https://github.com/chef/inspec/pull/925) ([ksubrama](https://github.com/ksubrama))
|
|
10
|
+
- Windows ports with pid and process name [\#912](https://github.com/chef/inspec/pull/912) ([alexpop](https://github.com/alexpop))
|
|
11
|
+
- Improve inspec shell by having it evaluate describe/control blocks. [\#909](https://github.com/chef/inspec/pull/909) ([ksubrama](https://github.com/ksubrama))
|
|
12
|
+
|
|
13
|
+
**Fixed bugs:**
|
|
14
|
+
|
|
15
|
+
- `inspec login help` help text inconsistent with `inspec` CLI usage [\#905](https://github.com/chef/inspec/issues/905)
|
|
16
|
+
- Subcommand help outputs incorrect usage line [\#895](https://github.com/chef/inspec/issues/895)
|
|
17
|
+
- `inspec compliance version` fails with stacktrace if no compliance URL is configured [\#894](https://github.com/chef/inspec/issues/894)
|
|
18
|
+
- `inspec` binary occasionally exits zero on SSH failures [\#840](https://github.com/chef/inspec/issues/840)
|
|
19
|
+
- inspec login fails [\#793](https://github.com/chef/inspec/issues/793)
|
|
20
|
+
- ssh\_config and sshd\_config matchers should be case-insensitive [\#759](https://github.com/chef/inspec/issues/759)
|
|
21
|
+
- Login succeeds but later commands fail [\#731](https://github.com/chef/inspec/issues/731)
|
|
22
|
+
- passwd resource does not ignore comments [\#725](https://github.com/chef/inspec/issues/725)
|
|
23
|
+
- remove tests and dev dependencies from released gem [\#924](https://github.com/chef/inspec/pull/924) ([arlimus](https://github.com/arlimus))
|
|
24
|
+
- update dependencies and loosen molinillo [\#917](https://github.com/chef/inspec/pull/917) ([arlimus](https://github.com/arlimus))
|
|
25
|
+
- Handle xinetd config with only one entry [\#846](https://github.com/chef/inspec/pull/846) ([chris-rock](https://github.com/chris-rock))
|
|
26
|
+
|
|
27
|
+
**Closed issues:**
|
|
28
|
+
|
|
29
|
+
- Document InSpec Shell [\#805](https://github.com/chef/inspec/issues/805)
|
|
30
|
+
|
|
31
|
+
**Merged pull requests:**
|
|
32
|
+
|
|
33
|
+
- fix functional test for compliance plugin [\#941](https://github.com/chef/inspec/pull/941) ([chris-rock](https://github.com/chris-rock))
|
|
34
|
+
- give accurate information for inspec compliance login --help [\#938](https://github.com/chef/inspec/pull/938) ([vjeffrey](https://github.com/vjeffrey))
|
|
35
|
+
- Document awesome where syntax for port [\#937](https://github.com/chef/inspec/pull/937) ([pburkholder](https://github.com/pburkholder))
|
|
36
|
+
- Fetch deps based on urls [\#935](https://github.com/chef/inspec/pull/935) ([stevendanna](https://github.com/stevendanna))
|
|
37
|
+
- Ease testing of compliance integration tests [\#934](https://github.com/chef/inspec/pull/934) ([chris-rock](https://github.com/chris-rock))
|
|
38
|
+
- restructure unit tests [\#933](https://github.com/chef/inspec/pull/933) ([chris-rock](https://github.com/chris-rock))
|
|
39
|
+
- return token stored message on login [\#932](https://github.com/chef/inspec/pull/932) ([vjeffrey](https://github.com/vjeffrey))
|
|
40
|
+
- fail gracefully on inspec compliance profiles when bad token is provided [\#930](https://github.com/chef/inspec/pull/930) ([vjeffrey](https://github.com/vjeffrey))
|
|
41
|
+
- Fix recursive deps for path-based deps [\#929](https://github.com/chef/inspec/pull/929) ([stevendanna](https://github.com/stevendanna))
|
|
42
|
+
- fix integration tests for Chef Compliance [\#928](https://github.com/chef/inspec/pull/928) ([chris-rock](https://github.com/chris-rock))
|
|
43
|
+
- Remove false username/passwd msg from inspec compliance login [\#927](https://github.com/chef/inspec/pull/927) ([vjeffrey](https://github.com/vjeffrey))
|
|
44
|
+
- inspec compliance version fails gracefully when no server config [\#926](https://github.com/chef/inspec/pull/926) ([vjeffrey](https://github.com/vjeffrey))
|
|
45
|
+
- add kitchen.yml for non-public kitchen boxes [\#922](https://github.com/chef/inspec/pull/922) ([chris-rock](https://github.com/chris-rock))
|
|
46
|
+
- Ignore comment lines in /etc/passwd [\#920](https://github.com/chef/inspec/pull/920) ([stevendanna](https://github.com/stevendanna))
|
|
47
|
+
- ssh\_config parse should be case insensitive [\#919](https://github.com/chef/inspec/pull/919) ([vjeffrey](https://github.com/vjeffrey))
|
|
48
|
+
- add ssl resource \(early access\) [\#914](https://github.com/chef/inspec/pull/914) ([arlimus](https://github.com/arlimus))
|
|
49
|
+
- Add iis\_site resource [\#907](https://github.com/chef/inspec/pull/907) ([chrisevett](https://github.com/chrisevett))
|
|
50
|
+
|
|
51
|
+
## [v0.30.0](https://github.com/chef/inspec/tree/v0.30.0) (2016-08-12)
|
|
52
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.29.0...v0.30.0)
|
|
5
53
|
|
|
6
54
|
**Implemented enhancements:**
|
|
7
55
|
|
data/Gemfile
CHANGED
|
@@ -18,10 +18,11 @@ group :test do
|
|
|
18
18
|
gem 'rubocop', '~> 0.36.0'
|
|
19
19
|
gem 'simplecov', '~> 0.10'
|
|
20
20
|
gem 'concurrent-ruby', '~> 0.9'
|
|
21
|
+
gem 'mocha', '~> 1.1'
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
group :integration do
|
|
24
|
-
gem 'berkshelf', '~> 4.
|
|
25
|
+
gem 'berkshelf', '~> 4.3'
|
|
25
26
|
gem 'test-kitchen', '~> 1.6'
|
|
26
27
|
gem 'kitchen-vagrant'
|
|
27
28
|
gem 'kitchen-inspec', '0.12.5'
|
data/docs/cli.rst
CHANGED
|
@@ -320,22 +320,6 @@ This subcommand has additional options:
|
|
|
320
320
|
|
|
321
321
|
|
|
322
322
|
|
|
323
|
-
scap
|
|
324
|
-
=====================================================
|
|
325
|
-
|
|
326
|
-
Scap commands
|
|
327
|
-
|
|
328
|
-
Syntax
|
|
329
|
-
-----------------------------------------------------
|
|
330
|
-
|
|
331
|
-
This subcommand has the following syntax:
|
|
332
|
-
|
|
333
|
-
.. code-block:: bash
|
|
334
|
-
|
|
335
|
-
$ inspec scap SUBCOMMAND ...
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
323
|
shell
|
|
340
324
|
=====================================================
|
|
341
325
|
|
|
@@ -359,7 +343,7 @@ This subcommand has additional options:
|
|
|
359
343
|
Choose a backend: local, ssh, winrm, docker.
|
|
360
344
|
|
|
361
345
|
``-c``, ``--command=COMMAND``
|
|
362
|
-
|
|
346
|
+
A single command string to run instead of launching the shell
|
|
363
347
|
|
|
364
348
|
``--host=HOST``
|
|
365
349
|
Specify a remote host which is tested.
|
data/docs/resources.rst
CHANGED
|
@@ -21,6 +21,7 @@ The following InSpec audit resources are available:
|
|
|
21
21
|
* `group <https://github.com/chef/inspec/blob/master/docs/resources.rst#group-1/>`_
|
|
22
22
|
* `grub_conf`_
|
|
23
23
|
* `host`_
|
|
24
|
+
* `iis_site`_
|
|
24
25
|
* `inetd_conf`_
|
|
25
26
|
* `interface`_
|
|
26
27
|
* `iptables`_
|
|
@@ -1799,6 +1800,107 @@ The following examples show how to use this InSpec audit resource.
|
|
|
1799
1800
|
end
|
|
1800
1801
|
|
|
1801
1802
|
|
|
1803
|
+
iis_site
|
|
1804
|
+
=====================================================
|
|
1805
|
+
Tests the status, path, bindings, and application pool of an IIS website. Supported in windows 2012 and higher.
|
|
1806
|
+
|
|
1807
|
+
**Stability: Experimental**
|
|
1808
|
+
|
|
1809
|
+
Syntax
|
|
1810
|
+
-----------------------------------------------------
|
|
1811
|
+
An ``iis_site`` |inspec resource| block declares the IIS web site properties to be tested:
|
|
1812
|
+
|
|
1813
|
+
.. code-block:: ruby
|
|
1814
|
+
describe iis_site('website') do
|
|
1815
|
+
it { should exist }
|
|
1816
|
+
it { should be_running }
|
|
1817
|
+
it { should have_app_pool('app_pool') }
|
|
1818
|
+
it { should have_binding('https :443:www.contoso.com sslFlags=0') }
|
|
1819
|
+
it { should have_path('C:\\inetpub\\wwwroot') }
|
|
1820
|
+
end
|
|
1821
|
+
|
|
1822
|
+
where
|
|
1823
|
+
|
|
1824
|
+
* ``iis_site()`` must specify a web site name
|
|
1825
|
+
* ``'website'`` is the web site name
|
|
1826
|
+
* ``have_app_pool('my_app_pool')`` tests that our site belongs to the 'my_app_pool' application pool
|
|
1827
|
+
* ``have_binding('my_binding')`` tests that our site has the specified binding. my_binding should be in the format of the default output from the Get-Website powershell cmdlet
|
|
1828
|
+
|
|
1829
|
+
Matchers
|
|
1830
|
+
-----------------------------------------------------
|
|
1831
|
+
This InSpec audit resource has the following matchers.
|
|
1832
|
+
|
|
1833
|
+
exist
|
|
1834
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1835
|
+
The ``exist`` matcher tests if the website exists in IIS:
|
|
1836
|
+
|
|
1837
|
+
.. code-block:: ruby
|
|
1838
|
+
|
|
1839
|
+
it { should exist }
|
|
1840
|
+
|
|
1841
|
+
be_running
|
|
1842
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1843
|
+
The ``be_running`` matcher tests if the IIS site is running
|
|
1844
|
+
|
|
1845
|
+
.. code-block:: ruby
|
|
1846
|
+
|
|
1847
|
+
it { should be_running }
|
|
1848
|
+
|
|
1849
|
+
have_app_pool
|
|
1850
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1851
|
+
The ``have_app_pool`` matcher tests if the IIS site belongs in the specified application pool
|
|
1852
|
+
|
|
1853
|
+
.. code-block:: ruby
|
|
1854
|
+
|
|
1855
|
+
it { should have_app_pool('Default App Pool') }
|
|
1856
|
+
|
|
1857
|
+
have_binding
|
|
1858
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1859
|
+
The ``have_binding`` matcher tests if the IIS site has the specified binding
|
|
1860
|
+
|
|
1861
|
+
.. code-block:: ruby
|
|
1862
|
+
|
|
1863
|
+
it { should have_binding('http :80:*' ) }
|
|
1864
|
+
|
|
1865
|
+
have_path
|
|
1866
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1867
|
+
The ``have_path`` matcher tests if the IIS site is located in the specified path
|
|
1868
|
+
|
|
1869
|
+
.. code-block:: ruby
|
|
1870
|
+
|
|
1871
|
+
it { should have_path('c:\\inetpub\\wwwroot\\my_site') }
|
|
1872
|
+
|
|
1873
|
+
|
|
1874
|
+
Examples
|
|
1875
|
+
-----------------------------------------------------
|
|
1876
|
+
The following examples show how to use this InSpec audit resource.
|
|
1877
|
+
|
|
1878
|
+
**Test if a web site 'My Site' is running and is located on disk at c:\\mysite**
|
|
1879
|
+
|
|
1880
|
+
.. code-block:: ruby
|
|
1881
|
+
|
|
1882
|
+
describe iis_site('My Site') do
|
|
1883
|
+
it { should be_running }
|
|
1884
|
+
it { should have_path('c:\\mysite') }
|
|
1885
|
+
end
|
|
1886
|
+
|
|
1887
|
+
**Test to see if 'Default Web Site' has been removed**
|
|
1888
|
+
|
|
1889
|
+
.. code-block:: ruby
|
|
1890
|
+
|
|
1891
|
+
describe iis_site('Default Web Site') do
|
|
1892
|
+
it { should_not exist }
|
|
1893
|
+
end
|
|
1894
|
+
|
|
1895
|
+
**Test 'New Website' is running in Default App Pool and listening on port 80 via http**
|
|
1896
|
+
|
|
1897
|
+
.. code-block:: ruby
|
|
1898
|
+
|
|
1899
|
+
describe iis_site('New Website') do
|
|
1900
|
+
it { should have_app_pool('app_pool') }
|
|
1901
|
+
it { should have_binding('http :80:*') }
|
|
1902
|
+
end
|
|
1903
|
+
|
|
1802
1904
|
|
|
1803
1905
|
|
|
1804
1906
|
inetd_conf
|
|
@@ -3462,6 +3564,18 @@ A ``port`` |inspec resource| block declares a port, and then depending on what n
|
|
|
3462
3564
|
|
|
3463
3565
|
where the ``processes`` returns the processes listening on port 514.
|
|
3464
3566
|
|
|
3567
|
+
or:
|
|
3568
|
+
|
|
3569
|
+
.. code-block:: ruby
|
|
3570
|
+
|
|
3571
|
+
describe port.where { protocol =~ /tcp/ && port > 22 && port < 80 } do
|
|
3572
|
+
it { should_not be_listening }
|
|
3573
|
+
end
|
|
3574
|
+
|
|
3575
|
+
where
|
|
3576
|
+
|
|
3577
|
+
* ``.where{}`` may specify a block to filter on attributes: port, address, protocol, process, pid, listening?
|
|
3578
|
+
|
|
3465
3579
|
Matchers
|
|
3466
3580
|
-----------------------------------------------------
|
|
3467
3581
|
This InSpec audit resource has the following matchers.
|
|
@@ -3554,6 +3668,20 @@ This check can be implemented in two equivalent ways:
|
|
|
3554
3668
|
it { should be_listening }
|
|
3555
3669
|
end
|
|
3556
3670
|
|
|
3671
|
+
**Test that no ports above 80 are listening**
|
|
3672
|
+
|
|
3673
|
+
.. code-block:: ruby
|
|
3674
|
+
|
|
3675
|
+
describe port.where { protocol =~ /tcp/ && port > 80 } do
|
|
3676
|
+
it { should_not be_listening }
|
|
3677
|
+
end
|
|
3678
|
+
|
|
3679
|
+
**Tests that only httpd and sshd are listening**
|
|
3680
|
+
|
|
3681
|
+
describe port.where { listening? } do
|
|
3682
|
+
its('processes') { should contain_exactly('sshd','httpd') }
|
|
3683
|
+
end
|
|
3684
|
+
|
|
3557
3685
|
postgres_conf
|
|
3558
3686
|
=====================================================
|
|
3559
3687
|
Use the ``postgres_conf`` |inspec resource| to test the contents of the configuration file for |postgresql|, typically located at ``/etc/postgresql/<version>/main/postgresql.conf`` or ``/var/lib/postgres/data/postgresql.conf``, depending on the platform.
|
data/docs/shell.rst
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
=====================================================
|
|
2
|
+
InSpec Shell Usage
|
|
3
|
+
=====================================================
|
|
4
|
+
|
|
5
|
+
The InSpec interactive shell is a pry based REPL that can be used to quickly run InSpec controls and tests without having to write it to a file. Its functionality is similar to ``chef shell`` - it provides a way to exercise the InSpec DSL, its resources, tests and plugins without having to create a profile or write a test file. See http://pryrepl.org/ for an introduction to what pry is and what it can do.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Launching the shell
|
|
9
|
+
-----------------------------------------------------
|
|
10
|
+
|
|
11
|
+
If you are using InSpec from a platform-specific package (rpm, msi, etc.) or from a chef prepared shell in ChefDK, you can directly launch InSpec shell against your local machine using the following. See https://docs.chef.io/install_dk.html#set-system-ruby for details.
|
|
12
|
+
|
|
13
|
+
.. code-block:: bash
|
|
14
|
+
|
|
15
|
+
$ inspec shell
|
|
16
|
+
$ inspec help shell # This will describe inspec shell usage
|
|
17
|
+
|
|
18
|
+
If you wish to connect to a remote machine (called a target within InSpec), you can use the ``-t`` flag. We support connecting using ssh, WinRm and docker. If no target is provided, we implicitly support the "local" target - i.e. tests running on the current machine running InSpec. For an ssh connection, use ``-i`` for specifying ssh key files, and the ``--sudo*`` commands for requesting a privelege escalation after logging in. For a WinRM connection, use ``--path`` to change the login path, ``--ssl`` to use SSL for transport layer encryption.
|
|
19
|
+
|
|
20
|
+
.. code-block:: bash
|
|
21
|
+
|
|
22
|
+
$ inspec shell -t ssh://root@192.168.64.2:11022 # Login to remote machine using ssh as root.
|
|
23
|
+
$ inspec shell -t ssh://user@hostname:1234 -i /path/to/user_key # Login to hostname on port 1234 as user using given ssh key.
|
|
24
|
+
$ inspec shell -t winrm://UserName:Password@windowsmachine:1234 # Login to windowsmachine over WinRM as UserName.
|
|
25
|
+
$ inspec shell -t docker://container_id # Login to a docker container.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
Using Ruby in InSpec shell
|
|
29
|
+
-----------------------------------------------------
|
|
30
|
+
|
|
31
|
+
Since InSpec shell is pry based, you may treat the shell as an interactive Ruby session. You may write Ruby expressions and evaluate them. Source high-lighting, automatic indentation and command history (using the up and down arrow keys) are available to make your experience more delightful. You can exit the shell using ``exit``.
|
|
32
|
+
|
|
33
|
+
.. code-block:: bash
|
|
34
|
+
|
|
35
|
+
$ inspec shell
|
|
36
|
+
Welcome to the interactive InSpec Shell
|
|
37
|
+
To find out how to use it, type: help
|
|
38
|
+
|
|
39
|
+
inspec> 1 + 2
|
|
40
|
+
=> 3
|
|
41
|
+
inspec> exit
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
Using InSpec DSL in InSpec shell
|
|
45
|
+
-----------------------------------------------------
|
|
46
|
+
|
|
47
|
+
InSpec shell will automatically evaluate the result of every command as if it were a test file. If you type in a Ruby command that is not an InSpec control or test, the shell will evaluate it as if it were a regular ruby command.
|
|
48
|
+
|
|
49
|
+
Bare InSpec resources are instantiated and their help text is presented. You may also access the resource contents or other matchers that they define. Run ``help <resource>`` to get more help on using a particular resource or see the InSpec resources documentation online.
|
|
50
|
+
|
|
51
|
+
.. code-block:: bash
|
|
52
|
+
|
|
53
|
+
$ inspec shell
|
|
54
|
+
Welcome to the interactive InSpec Shell
|
|
55
|
+
To find out how to use it, type: help
|
|
56
|
+
|
|
57
|
+
inspec> file('/Users/ksubramanian').directory?
|
|
58
|
+
=> true
|
|
59
|
+
inspec> os_env('HOME')
|
|
60
|
+
=> Environment variable HOME
|
|
61
|
+
inspec> os_env('HOME').content
|
|
62
|
+
=> /Users/ksubramanian
|
|
63
|
+
inspec> exit
|
|
64
|
+
|
|
65
|
+
InSpec tests are immediately executed.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
.. code-block:: bash
|
|
69
|
+
|
|
70
|
+
inspec> describe file('/Users') # Empty test.
|
|
71
|
+
Summary: 0 successful, 0 failures, 0 skipped
|
|
72
|
+
inspec> describe file('/Users') do # Test with one check.
|
|
73
|
+
inspec> it { should exist }
|
|
74
|
+
inspec> end
|
|
75
|
+
✔ File /Users should exist
|
|
76
|
+
|
|
77
|
+
Summary: 1 successful, 0 failures, 0 skipped
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
All tests in a control are immediately executed as well. If a control is redefined in the shell, the old control's tests are destroyed and replaced with the redefinition and the control is re-run.
|
|
81
|
+
|
|
82
|
+
.. code-block:: bash
|
|
83
|
+
|
|
84
|
+
inspec> control 'my_control' do
|
|
85
|
+
inspec> describe os_env('HOME') do
|
|
86
|
+
inspec> its('content') { should eq '/Users/ksubramanian' }
|
|
87
|
+
inspec> end
|
|
88
|
+
inspec> end
|
|
89
|
+
✔ my_control: Environment variable HOME content should eq "/Users/ksubramanian"
|
|
90
|
+
|
|
91
|
+
Summary: 1 successful, 0 failures, 0 skipped
|
|
92
|
+
|
|
93
|
+
Syntax errors are illegal tests are also detected and reported.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
.. code-block:: bash
|
|
97
|
+
|
|
98
|
+
inspec> control 'foo' do
|
|
99
|
+
inspec> thisisnonsense
|
|
100
|
+
inspec> end
|
|
101
|
+
NameError: undefined local variable or method `thisisnonsense' for #<#<Class:0x007fd63b571f98>:0x007fd639825cc8>
|
|
102
|
+
from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-expectations-3.5.0/lib/rspec/matchers.rb:967:in `method_missing'
|
|
103
|
+
inspec> control 'foo' do
|
|
104
|
+
inspec> describe file('wut') do
|
|
105
|
+
inspec> its('thismakesnosense') { should cmp 'fail' }
|
|
106
|
+
inspec> end
|
|
107
|
+
inspec> end
|
|
108
|
+
✖ foo: File wut thismakesnosense (undefined method `thismakesnosense' for File wut:Inspec::Resource::Registry::File)
|
|
109
|
+
|
|
110
|
+
Summary: 0 successful, 1 failures, 0 skipped
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
Running a single InSpec command
|
|
114
|
+
-----------------------------------------------------
|
|
115
|
+
|
|
116
|
+
If you wish to run a single InSpec command and fetch its results, you may use the ``-c`` flag. This is similar to using ``bash -c``.
|
|
117
|
+
|
|
118
|
+
.. code-block:: bash
|
|
119
|
+
$ inspec shell -c 'describe file("/Users/ksubramanian") do it { should exist } end'
|
|
120
|
+
|
|
121
|
+
Target: local://
|
|
122
|
+
|
|
123
|
+
✔ File /Users/ksubramanian should exist
|
|
124
|
+
|
|
125
|
+
Summary: 1 successful, 0 failures, 0 skipped
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
.. code-block:: bash
|
|
129
|
+
$ inspec shell --format json -c 'describe file("/Users/ksubramanian") do it { should exist } end'
|
|
130
|
+
{"version":"0.30.0","profiles":{"":{"supports":[],"controls":{"(generated from in_memory.rb:1 5aab65c33fb1f133d9244017958eef64)":{"title":null,"desc":null,"impact":0.5,"refs":[],"tags":{},"code":" rule = rule_class.new(id, profile_id, {}) do\n res = describe(*args, &block)\n end\n","source_location":{"ref":"/Users/ksubramanian/repo/chef/inspec/lib/inspec/profile_context.rb","line":184},"results":[{"status":"passed","code_desc":"File /Users/ksubramanian should exist","run_time":0.000747,"start_time":"2016-08-16 11:41:40 -0400"}]}},"groups":{"in_memory.rb":{"title":null,"controls":["(generated from in_memory.rb:1 5aab65c33fb1f133d9244017958eef64)"]}},"attributes":[]}},"other_checks":[],"summary":{"duration":0.001078,"example_count":1,"failure_count":0,"skip_count":0}}
|
data/inspec.gemspec
CHANGED
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
|
17
17
|
README.md Rakefile MAINTAINERS.toml MAINTAINERS.md LICENSE inspec.gemspec
|
|
18
18
|
Gemfile CHANGELOG.md .rubocop.yml
|
|
19
19
|
} + Dir.glob(
|
|
20
|
-
'{bin,docs,examples,lib
|
|
20
|
+
'{bin,docs,examples,lib}/**/*', File::FNM_DOTMATCH
|
|
21
21
|
).reject { |f| File.directory?(f) }
|
|
22
22
|
|
|
23
23
|
spec.executables = %w{ inspec }
|
|
@@ -34,7 +34,6 @@ Gem::Specification.new do |spec|
|
|
|
34
34
|
spec.add_dependency 'rspec-its', '~> 1.2'
|
|
35
35
|
spec.add_dependency 'pry', '~> 0'
|
|
36
36
|
spec.add_dependency 'hashie', '~> 3.4'
|
|
37
|
-
spec.add_dependency 'molinillo', '~> 0
|
|
38
|
-
|
|
39
|
-
spec.add_development_dependency 'mocha', '~> 1.1'
|
|
37
|
+
spec.add_dependency 'molinillo', '~> 0'
|
|
38
|
+
spec.add_dependency 'sslshake', '~> 1'
|
|
40
39
|
end
|
|
@@ -117,8 +117,10 @@ Pending: (Failures listed here are expected and do not affect your suite's statu
|
|
|
117
117
|
|
|
118
118
|
Finished in 0.02862 seconds (files took 0.62628 seconds to load)
|
|
119
119
|
5 examples, 0 failures, 1 pending
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
# Logout from Chef Compliance
|
|
120
123
|
|
|
121
|
-
# logout from Chef Compliance
|
|
122
124
|
```
|
|
123
125
|
$ inspec compliance logout
|
|
124
126
|
Successfully logged out
|
|
@@ -130,11 +132,14 @@ At this point of time, InSpec is not able to pick up the token directly, therefo
|
|
|
130
132
|
|
|
131
133
|
* run `kitchen converge`
|
|
132
134
|
* open https://192.168.251.2 and log in with user `admin` and password `admin`
|
|
133
|
-
* click on user->about and obtain the refresh token
|
|
135
|
+
* click on user->about and obtain the access token and the refresh token
|
|
134
136
|
* run `kitchen verify` with the required env variables:
|
|
135
137
|
|
|
136
138
|
```
|
|
137
|
-
|
|
139
|
+
# both token need to be set, since the test suite runs for each token type
|
|
140
|
+
export COMPLIANCE_ACCESSTOKEN='mycompliancetoken'
|
|
141
|
+
export COMPLIANCE_REFRESHTOKEN='myrefreshtoken'
|
|
142
|
+
kitchen verify
|
|
138
143
|
-----> Starting Kitchen (v1.7.3)
|
|
139
144
|
-----> Verifying <default-ubuntu-1404>...
|
|
140
145
|
Search `/Users/chartmann/Development/compliance/inspec/lib/bundles/inspec-compliance/test/integration/default` for tests
|
|
@@ -27,16 +27,24 @@ module Compliance
|
|
|
27
27
|
# TODO, api should not be dependent on .supported?
|
|
28
28
|
response = Compliance::HTTP.get(url, config['token'], config['insecure'], !config.supported?(:oidc))
|
|
29
29
|
data = response.body
|
|
30
|
-
|
|
30
|
+
response_code = response.code
|
|
31
|
+
case response_code
|
|
32
|
+
when '200'
|
|
33
|
+
msg = 'success'
|
|
31
34
|
profiles = JSON.parse(data)
|
|
32
35
|
# iterate over profiles
|
|
33
|
-
profiles.map do |owner, ps|
|
|
36
|
+
mapped_profiles = profiles.map do |owner, ps|
|
|
34
37
|
ps.keys.map do |name|
|
|
35
38
|
{ org: owner, name: name }
|
|
36
39
|
end
|
|
37
40
|
end.flatten
|
|
41
|
+
return msg, mapped_profiles
|
|
42
|
+
when '401'
|
|
43
|
+
msg = '401 Unauthorized. Please check your token.'
|
|
44
|
+
return msg, []
|
|
38
45
|
else
|
|
39
|
-
|
|
46
|
+
msg = "An unexpected error occurred (HTTP #{response_code}): #{response.message}"
|
|
47
|
+
return msg, []
|
|
40
48
|
end
|
|
41
49
|
end
|
|
42
50
|
|
|
@@ -44,8 +52,15 @@ module Compliance
|
|
|
44
52
|
# NB this method does not use Compliance::Configuration to allow for using
|
|
45
53
|
# it before we know the version (e.g. oidc or not)
|
|
46
54
|
def self.version(url, insecure)
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
if url.nil?
|
|
56
|
+
puts "
|
|
57
|
+
Server configuration information is missing.
|
|
58
|
+
Please login using `inspec compliance login https://compliance.test --user admin --insecure --token 'PASTE TOKEN HERE' `
|
|
59
|
+
"
|
|
60
|
+
else
|
|
61
|
+
response = Compliance::HTTP.get(url+'/version', nil, insecure)
|
|
62
|
+
data = response.body
|
|
63
|
+
end
|
|
49
64
|
if !data.nil?
|
|
50
65
|
JSON.parse(data)
|
|
51
66
|
else
|
|
@@ -55,7 +70,7 @@ module Compliance
|
|
|
55
70
|
|
|
56
71
|
# verifies that a profile
|
|
57
72
|
def self.exist?(config, profile)
|
|
58
|
-
profiles = Compliance::API.profiles(config)
|
|
73
|
+
_msg, profiles = Compliance::API.profiles(config)
|
|
59
74
|
if !profiles.empty?
|
|
60
75
|
index = profiles.index { |p| "#{p[:org]}/#{p[:name]}" == profile }
|
|
61
76
|
!index.nil? && index >= 0
|
|
@@ -20,18 +20,22 @@ sudo apt-get install chef-compliance
|
|
|
20
20
|
sudo chef-compliance-ctl reconfigure --accept-license
|
|
21
21
|
sudo chef-compliance-ctl restart
|
|
22
22
|
|
|
23
|
-
# build master version of inspec
|
|
24
|
-
sudo /opt/chef-compliance/embedded/bin/gem list inspec
|
|
25
|
-
|
|
26
|
-
cd /inspec
|
|
27
|
-
sudo /opt/chef-compliance/embedded/bin/gem build *.gemspec
|
|
28
|
-
sudo /opt/chef-compliance/embedded/bin/gem install inspec*.gem
|
|
29
|
-
sudo /opt/chef-compliance/embedded/bin/inspec version
|
|
30
|
-
sudo /opt/chef-compliance/embedded/bin/gem list inspec
|
|
31
|
-
|
|
32
23
|
# finalize setup
|
|
33
24
|
cd /
|
|
34
25
|
/opt/chef-compliance/embedded/service/core/bin/core setup --endpoint "http://127.0.0.1:10500/setup" --login "admin" --password "admin" --name "John Doe" --accept-eula
|
|
35
26
|
|
|
36
27
|
# wget --no-check-certificate http://127.0.0.1/api/version
|
|
37
28
|
# cat version
|
|
29
|
+
|
|
30
|
+
# install ruby 2.3
|
|
31
|
+
sudo apt-get install -y software-properties-common
|
|
32
|
+
sudo apt-add-repository -y ppa:brightbox/ruby-ng
|
|
33
|
+
sudo apt-get update
|
|
34
|
+
sudo apt-get install -y ruby2.3 ruby2.3-dev
|
|
35
|
+
ruby2.3 -v
|
|
36
|
+
|
|
37
|
+
# prepare the usage of bundler
|
|
38
|
+
sudo gem install bundler
|
|
39
|
+
cd /inspec
|
|
40
|
+
bundle install
|
|
41
|
+
BUNDLE_GEMFILE=/inspec/Gemfile bundle exec inspec version
|
|
@@ -9,8 +9,16 @@ module Compliance
|
|
|
9
9
|
class ComplianceCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
|
|
10
10
|
namespace 'compliance'
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
# TODO: find another solution, once https://github.com/erikhuda/thor/issues/261 is fixed
|
|
13
|
+
def self.banner(command, _namespace = nil, _subcommand = false)
|
|
14
|
+
"#{basename} #{subcommand_prefix} #{command.usage}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.subcommand_prefix
|
|
18
|
+
namespace
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "login SERVER --insecure --user='USER' --token='TOKEN'", 'Log in to a Chef Compliance SERVER'
|
|
14
22
|
option :insecure, aliases: :k, type: :boolean,
|
|
15
23
|
desc: 'Explicitly allows InSpec to perform "insecure" SSL connections and transfers'
|
|
16
24
|
option :user, type: :string, required: false,
|
|
@@ -23,36 +31,29 @@ module Compliance
|
|
|
23
31
|
desc: 'Chef Compliance access token'
|
|
24
32
|
option :refresh_token, type: :string, required: false,
|
|
25
33
|
desc: 'Chef Compliance refresh token'
|
|
26
|
-
def login(server) # rubocop:disable Metrics/AbcSize
|
|
34
|
+
def login(server) # rubocop:disable Metrics/AbcSize
|
|
27
35
|
# show warning if the Compliance Server does not support
|
|
28
|
-
if !Compliance::Configuration.new.supported?(:oidc)
|
|
29
|
-
puts 'Your server supports --user and --password only'
|
|
30
|
-
end
|
|
31
36
|
|
|
32
37
|
options['server'] = server
|
|
33
38
|
url = options['server'] + options['apipath']
|
|
34
39
|
if !options['user'].nil? && !options['password'].nil?
|
|
35
40
|
# username / password
|
|
36
|
-
|
|
41
|
+
_success, msg = login_legacy(url, options['user'], options['password'], options['insecure'])
|
|
37
42
|
elsif !options['user'].nil? && !options['token'].nil?
|
|
38
43
|
# access token
|
|
39
|
-
|
|
44
|
+
_success, msg = store_access_token(url, options['user'], options['token'], options['insecure'])
|
|
40
45
|
elsif !options['refresh_token'].nil? && !options['user'].nil?
|
|
41
46
|
# refresh token
|
|
42
|
-
|
|
47
|
+
_success, msg = store_refresh_token(url, options['refresh_token'], true, options['user'], options['insecure'])
|
|
43
48
|
# TODO: we should login with the refreshtoken here
|
|
44
49
|
elsif !options['refresh_token'].nil?
|
|
45
|
-
|
|
50
|
+
_success, msg = login_refreshtoken(url, options)
|
|
46
51
|
else
|
|
47
|
-
puts 'Please run `inspec compliance login` with options --token or --refresh_token and --
|
|
52
|
+
puts 'Please run `inspec compliance login SERVER` with options --token or --refresh_token, --user, and --insecure or --not-insecure'
|
|
48
53
|
exit 1
|
|
49
54
|
end
|
|
50
55
|
|
|
51
|
-
|
|
52
|
-
puts 'Successfully authenticated'
|
|
53
|
-
else
|
|
54
|
-
puts msg
|
|
55
|
-
end
|
|
56
|
+
puts '', msg
|
|
56
57
|
end
|
|
57
58
|
|
|
58
59
|
desc 'profiles', 'list all available profiles in Chef Compliance'
|
|
@@ -60,7 +61,7 @@ module Compliance
|
|
|
60
61
|
config = Compliance::Configuration.new
|
|
61
62
|
return if !loggedin(config)
|
|
62
63
|
|
|
63
|
-
profiles = Compliance::API.profiles(config)
|
|
64
|
+
msg, profiles = Compliance::API.profiles(config)
|
|
64
65
|
if !profiles.empty?
|
|
65
66
|
# iterate over profiles
|
|
66
67
|
headline('Available profiles:')
|
|
@@ -68,7 +69,8 @@ module Compliance
|
|
|
68
69
|
li("#{profile[:org]}/#{profile[:name]}")
|
|
69
70
|
}
|
|
70
71
|
else
|
|
71
|
-
puts 'Could not find any profiles'
|
|
72
|
+
puts msg, 'Could not find any profiles'
|
|
73
|
+
exit 1
|
|
72
74
|
end
|
|
73
75
|
end
|
|
74
76
|
|
|
@@ -160,6 +162,7 @@ module Compliance
|
|
|
160
162
|
else
|
|
161
163
|
puts 'Error during profile upload:'
|
|
162
164
|
puts msg
|
|
165
|
+
exit 1
|
|
163
166
|
end
|
|
164
167
|
end
|
|
165
168
|
|
|
@@ -171,6 +174,7 @@ module Compliance
|
|
|
171
174
|
puts "Chef Compliance version: #{info['version']}"
|
|
172
175
|
else
|
|
173
176
|
puts 'Could not determine server version.'
|
|
177
|
+
exit 1
|
|
174
178
|
end
|
|
175
179
|
end
|
|
176
180
|
|
|
@@ -223,7 +227,7 @@ module Compliance
|
|
|
223
227
|
success = true
|
|
224
228
|
msg = 'Successfully authenticated'
|
|
225
229
|
else
|
|
226
|
-
msg = '
|
|
230
|
+
msg = 'Response does not include a token'
|
|
227
231
|
end
|
|
228
232
|
else
|
|
229
233
|
msg = "Authentication failed for Server: #{url}"
|