inspec-core 2.1.67

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.
Files changed (412) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3136 -0
  3. data/Gemfile +56 -0
  4. data/LICENSE +14 -0
  5. data/MAINTAINERS.md +33 -0
  6. data/MAINTAINERS.toml +52 -0
  7. data/README.md +453 -0
  8. data/bin/inspec +12 -0
  9. data/docs/.gitignore +2 -0
  10. data/docs/README.md +40 -0
  11. data/docs/dev/control-eval.md +62 -0
  12. data/docs/dsl_inspec.md +258 -0
  13. data/docs/dsl_resource.md +100 -0
  14. data/docs/glossary.md +99 -0
  15. data/docs/habitat.md +192 -0
  16. data/docs/inspec_and_friends.md +114 -0
  17. data/docs/matchers.md +169 -0
  18. data/docs/migration.md +293 -0
  19. data/docs/platforms.md +119 -0
  20. data/docs/plugin_kitchen_inspec.md +50 -0
  21. data/docs/profiles.md +378 -0
  22. data/docs/reporters.md +105 -0
  23. data/docs/resources/aide_conf.md.erb +76 -0
  24. data/docs/resources/apache.md.erb +67 -0
  25. data/docs/resources/apache_conf.md.erb +68 -0
  26. data/docs/resources/apt.md.erb +71 -0
  27. data/docs/resources/audit_policy.md.erb +47 -0
  28. data/docs/resources/auditd.md.erb +79 -0
  29. data/docs/resources/auditd_conf.md.erb +68 -0
  30. data/docs/resources/bash.md.erb +75 -0
  31. data/docs/resources/bond.md.erb +90 -0
  32. data/docs/resources/bridge.md.erb +57 -0
  33. data/docs/resources/bsd_service.md.erb +67 -0
  34. data/docs/resources/chocolatey_package.md.erb +58 -0
  35. data/docs/resources/command.md.erb +138 -0
  36. data/docs/resources/cpan.md.erb +79 -0
  37. data/docs/resources/cran.md.erb +64 -0
  38. data/docs/resources/crontab.md.erb +89 -0
  39. data/docs/resources/csv.md.erb +54 -0
  40. data/docs/resources/dh_params.md.erb +205 -0
  41. data/docs/resources/directory.md.erb +30 -0
  42. data/docs/resources/docker.md.erb +219 -0
  43. data/docs/resources/docker_container.md.erb +103 -0
  44. data/docs/resources/docker_image.md.erb +94 -0
  45. data/docs/resources/docker_service.md.erb +114 -0
  46. data/docs/resources/elasticsearch.md.erb +242 -0
  47. data/docs/resources/etc_fstab.md.erb +125 -0
  48. data/docs/resources/etc_group.md.erb +75 -0
  49. data/docs/resources/etc_hosts.md.erb +78 -0
  50. data/docs/resources/etc_hosts_allow.md.erb +74 -0
  51. data/docs/resources/etc_hosts_deny.md.erb +74 -0
  52. data/docs/resources/file.md.erb +526 -0
  53. data/docs/resources/filesystem.md.erb +41 -0
  54. data/docs/resources/firewalld.md.erb +107 -0
  55. data/docs/resources/gem.md.erb +79 -0
  56. data/docs/resources/group.md.erb +61 -0
  57. data/docs/resources/grub_conf.md.erb +101 -0
  58. data/docs/resources/host.md.erb +86 -0
  59. data/docs/resources/http.md.erb +197 -0
  60. data/docs/resources/iis_app.md.erb +122 -0
  61. data/docs/resources/iis_site.md.erb +135 -0
  62. data/docs/resources/inetd_conf.md.erb +94 -0
  63. data/docs/resources/ini.md.erb +76 -0
  64. data/docs/resources/interface.md.erb +58 -0
  65. data/docs/resources/iptables.md.erb +64 -0
  66. data/docs/resources/json.md.erb +63 -0
  67. data/docs/resources/kernel_module.md.erb +120 -0
  68. data/docs/resources/kernel_parameter.md.erb +53 -0
  69. data/docs/resources/key_rsa.md.erb +85 -0
  70. data/docs/resources/launchd_service.md.erb +57 -0
  71. data/docs/resources/limits_conf.md.erb +75 -0
  72. data/docs/resources/login_defs.md.erb +71 -0
  73. data/docs/resources/mount.md.erb +69 -0
  74. data/docs/resources/mssql_session.md.erb +60 -0
  75. data/docs/resources/mysql_conf.md.erb +99 -0
  76. data/docs/resources/mysql_session.md.erb +74 -0
  77. data/docs/resources/nginx.md.erb +79 -0
  78. data/docs/resources/nginx_conf.md.erb +138 -0
  79. data/docs/resources/npm.md.erb +60 -0
  80. data/docs/resources/ntp_conf.md.erb +60 -0
  81. data/docs/resources/oneget.md.erb +53 -0
  82. data/docs/resources/oracledb_session.md.erb +52 -0
  83. data/docs/resources/os.md.erb +141 -0
  84. data/docs/resources/os_env.md.erb +91 -0
  85. data/docs/resources/package.md.erb +120 -0
  86. data/docs/resources/packages.md.erb +67 -0
  87. data/docs/resources/parse_config.md.erb +103 -0
  88. data/docs/resources/parse_config_file.md.erb +138 -0
  89. data/docs/resources/passwd.md.erb +141 -0
  90. data/docs/resources/pip.md.erb +67 -0
  91. data/docs/resources/port.md.erb +137 -0
  92. data/docs/resources/postgres_conf.md.erb +79 -0
  93. data/docs/resources/postgres_hba_conf.md.erb +93 -0
  94. data/docs/resources/postgres_ident_conf.md.erb +76 -0
  95. data/docs/resources/postgres_session.md.erb +69 -0
  96. data/docs/resources/powershell.md.erb +102 -0
  97. data/docs/resources/processes.md.erb +109 -0
  98. data/docs/resources/rabbitmq_config.md.erb +41 -0
  99. data/docs/resources/registry_key.md.erb +158 -0
  100. data/docs/resources/runit_service.md.erb +57 -0
  101. data/docs/resources/security_policy.md.erb +47 -0
  102. data/docs/resources/service.md.erb +121 -0
  103. data/docs/resources/shadow.md.erb +146 -0
  104. data/docs/resources/ssh_config.md.erb +73 -0
  105. data/docs/resources/sshd_config.md.erb +83 -0
  106. data/docs/resources/ssl.md.erb +119 -0
  107. data/docs/resources/sys_info.md.erb +42 -0
  108. data/docs/resources/systemd_service.md.erb +57 -0
  109. data/docs/resources/sysv_service.md.erb +57 -0
  110. data/docs/resources/upstart_service.md.erb +57 -0
  111. data/docs/resources/user.md.erb +140 -0
  112. data/docs/resources/users.md.erb +127 -0
  113. data/docs/resources/vbscript.md.erb +55 -0
  114. data/docs/resources/virtualization.md.erb +57 -0
  115. data/docs/resources/windows_feature.md.erb +47 -0
  116. data/docs/resources/windows_hotfix.md.erb +53 -0
  117. data/docs/resources/windows_task.md.erb +95 -0
  118. data/docs/resources/wmi.md.erb +81 -0
  119. data/docs/resources/x509_certificate.md.erb +151 -0
  120. data/docs/resources/xinetd_conf.md.erb +156 -0
  121. data/docs/resources/xml.md.erb +85 -0
  122. data/docs/resources/yaml.md.erb +69 -0
  123. data/docs/resources/yum.md.erb +98 -0
  124. data/docs/resources/zfs_dataset.md.erb +53 -0
  125. data/docs/resources/zfs_pool.md.erb +47 -0
  126. data/docs/ruby_usage.md +203 -0
  127. data/docs/shared/matcher_be.md.erb +1 -0
  128. data/docs/shared/matcher_cmp.md.erb +43 -0
  129. data/docs/shared/matcher_eq.md.erb +3 -0
  130. data/docs/shared/matcher_include.md.erb +1 -0
  131. data/docs/shared/matcher_match.md.erb +1 -0
  132. data/docs/shell.md +217 -0
  133. data/examples/README.md +8 -0
  134. data/examples/inheritance/README.md +65 -0
  135. data/examples/inheritance/controls/example.rb +14 -0
  136. data/examples/inheritance/inspec.yml +15 -0
  137. data/examples/kitchen-ansible/.kitchen.yml +25 -0
  138. data/examples/kitchen-ansible/Gemfile +19 -0
  139. data/examples/kitchen-ansible/README.md +53 -0
  140. data/examples/kitchen-ansible/files/nginx.repo +6 -0
  141. data/examples/kitchen-ansible/tasks/main.yml +16 -0
  142. data/examples/kitchen-ansible/test/integration/default/default.yml +5 -0
  143. data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -0
  144. data/examples/kitchen-chef/.kitchen.yml +20 -0
  145. data/examples/kitchen-chef/Berksfile +3 -0
  146. data/examples/kitchen-chef/Gemfile +19 -0
  147. data/examples/kitchen-chef/README.md +27 -0
  148. data/examples/kitchen-chef/metadata.rb +7 -0
  149. data/examples/kitchen-chef/recipes/default.rb +6 -0
  150. data/examples/kitchen-chef/recipes/nginx.rb +30 -0
  151. data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -0
  152. data/examples/kitchen-puppet/.kitchen.yml +23 -0
  153. data/examples/kitchen-puppet/Gemfile +20 -0
  154. data/examples/kitchen-puppet/Puppetfile +25 -0
  155. data/examples/kitchen-puppet/README.md +53 -0
  156. data/examples/kitchen-puppet/manifests/site.pp +33 -0
  157. data/examples/kitchen-puppet/metadata.json +11 -0
  158. data/examples/kitchen-puppet/modules/.gitkeep +0 -0
  159. data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -0
  160. data/examples/meta-profile/README.md +37 -0
  161. data/examples/meta-profile/controls/example.rb +13 -0
  162. data/examples/meta-profile/inspec.yml +13 -0
  163. data/examples/profile-attribute.yml +2 -0
  164. data/examples/profile-attribute/README.md +14 -0
  165. data/examples/profile-attribute/controls/example.rb +11 -0
  166. data/examples/profile-attribute/inspec.yml +8 -0
  167. data/examples/profile-sensitive/README.md +29 -0
  168. data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -0
  169. data/examples/profile-sensitive/controls/sensitive.rb +9 -0
  170. data/examples/profile-sensitive/inspec.yml +8 -0
  171. data/examples/profile/README.md +48 -0
  172. data/examples/profile/controls/example.rb +23 -0
  173. data/examples/profile/controls/gordon.rb +36 -0
  174. data/examples/profile/controls/meta.rb +34 -0
  175. data/examples/profile/inspec.yml +10 -0
  176. data/examples/profile/libraries/gordon_config.rb +59 -0
  177. data/inspec-core.gemspec +43 -0
  178. data/lib/bundles/README.md +3 -0
  179. data/lib/bundles/inspec-artifact.rb +7 -0
  180. data/lib/bundles/inspec-artifact/README.md +1 -0
  181. data/lib/bundles/inspec-artifact/cli.rb +277 -0
  182. data/lib/bundles/inspec-compliance.rb +16 -0
  183. data/lib/bundles/inspec-compliance/.kitchen.yml +20 -0
  184. data/lib/bundles/inspec-compliance/README.md +193 -0
  185. data/lib/bundles/inspec-compliance/api.rb +360 -0
  186. data/lib/bundles/inspec-compliance/api/login.rb +193 -0
  187. data/lib/bundles/inspec-compliance/bootstrap.sh +41 -0
  188. data/lib/bundles/inspec-compliance/cli.rb +260 -0
  189. data/lib/bundles/inspec-compliance/configuration.rb +103 -0
  190. data/lib/bundles/inspec-compliance/http.rb +125 -0
  191. data/lib/bundles/inspec-compliance/images/cc-token.png +0 -0
  192. data/lib/bundles/inspec-compliance/support.rb +36 -0
  193. data/lib/bundles/inspec-compliance/target.rb +106 -0
  194. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -0
  195. data/lib/bundles/inspec-habitat.rb +12 -0
  196. data/lib/bundles/inspec-habitat/cli.rb +36 -0
  197. data/lib/bundles/inspec-habitat/log.rb +10 -0
  198. data/lib/bundles/inspec-habitat/profile.rb +391 -0
  199. data/lib/bundles/inspec-init.rb +8 -0
  200. data/lib/bundles/inspec-init/README.md +31 -0
  201. data/lib/bundles/inspec-init/cli.rb +97 -0
  202. data/lib/bundles/inspec-init/templates/profile/README.md +3 -0
  203. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -0
  204. data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -0
  205. data/lib/bundles/inspec-init/templates/profile/libraries/.gitkeep +0 -0
  206. data/lib/bundles/inspec-supermarket.rb +13 -0
  207. data/lib/bundles/inspec-supermarket/README.md +45 -0
  208. data/lib/bundles/inspec-supermarket/api.rb +84 -0
  209. data/lib/bundles/inspec-supermarket/cli.rb +73 -0
  210. data/lib/bundles/inspec-supermarket/target.rb +34 -0
  211. data/lib/fetchers/git.rb +163 -0
  212. data/lib/fetchers/local.rb +74 -0
  213. data/lib/fetchers/mock.rb +35 -0
  214. data/lib/fetchers/url.rb +247 -0
  215. data/lib/inspec.rb +24 -0
  216. data/lib/inspec/archive/tar.rb +29 -0
  217. data/lib/inspec/archive/zip.rb +19 -0
  218. data/lib/inspec/backend.rb +93 -0
  219. data/lib/inspec/base_cli.rb +368 -0
  220. data/lib/inspec/cached_fetcher.rb +66 -0
  221. data/lib/inspec/cli.rb +292 -0
  222. data/lib/inspec/completions/bash.sh.erb +45 -0
  223. data/lib/inspec/completions/fish.sh.erb +34 -0
  224. data/lib/inspec/completions/zsh.sh.erb +61 -0
  225. data/lib/inspec/control_eval_context.rb +179 -0
  226. data/lib/inspec/dependencies/cache.rb +72 -0
  227. data/lib/inspec/dependencies/dependency_set.rb +92 -0
  228. data/lib/inspec/dependencies/lockfile.rb +115 -0
  229. data/lib/inspec/dependencies/requirement.rb +123 -0
  230. data/lib/inspec/dependencies/resolver.rb +86 -0
  231. data/lib/inspec/describe.rb +27 -0
  232. data/lib/inspec/dsl.rb +66 -0
  233. data/lib/inspec/dsl_shared.rb +33 -0
  234. data/lib/inspec/env_printer.rb +157 -0
  235. data/lib/inspec/errors.rb +14 -0
  236. data/lib/inspec/exceptions.rb +12 -0
  237. data/lib/inspec/expect.rb +45 -0
  238. data/lib/inspec/fetcher.rb +45 -0
  239. data/lib/inspec/file_provider.rb +275 -0
  240. data/lib/inspec/formatters.rb +3 -0
  241. data/lib/inspec/formatters/base.rb +259 -0
  242. data/lib/inspec/formatters/json_rspec.rb +20 -0
  243. data/lib/inspec/formatters/show_progress.rb +12 -0
  244. data/lib/inspec/library_eval_context.rb +58 -0
  245. data/lib/inspec/log.rb +11 -0
  246. data/lib/inspec/metadata.rb +247 -0
  247. data/lib/inspec/method_source.rb +24 -0
  248. data/lib/inspec/objects.rb +14 -0
  249. data/lib/inspec/objects/attribute.rb +75 -0
  250. data/lib/inspec/objects/control.rb +61 -0
  251. data/lib/inspec/objects/describe.rb +92 -0
  252. data/lib/inspec/objects/each_loop.rb +36 -0
  253. data/lib/inspec/objects/list.rb +15 -0
  254. data/lib/inspec/objects/or_test.rb +40 -0
  255. data/lib/inspec/objects/ruby_helper.rb +15 -0
  256. data/lib/inspec/objects/tag.rb +27 -0
  257. data/lib/inspec/objects/test.rb +87 -0
  258. data/lib/inspec/objects/value.rb +27 -0
  259. data/lib/inspec/plugins.rb +60 -0
  260. data/lib/inspec/plugins/cli.rb +24 -0
  261. data/lib/inspec/plugins/fetcher.rb +86 -0
  262. data/lib/inspec/plugins/resource.rb +135 -0
  263. data/lib/inspec/plugins/secret.rb +15 -0
  264. data/lib/inspec/plugins/source_reader.rb +40 -0
  265. data/lib/inspec/polyfill.rb +12 -0
  266. data/lib/inspec/profile.rb +513 -0
  267. data/lib/inspec/profile_context.rb +208 -0
  268. data/lib/inspec/profile_vendor.rb +66 -0
  269. data/lib/inspec/reporters.rb +60 -0
  270. data/lib/inspec/reporters/automate.rb +76 -0
  271. data/lib/inspec/reporters/base.rb +25 -0
  272. data/lib/inspec/reporters/cli.rb +356 -0
  273. data/lib/inspec/reporters/json.rb +116 -0
  274. data/lib/inspec/reporters/json_min.rb +48 -0
  275. data/lib/inspec/reporters/junit.rb +78 -0
  276. data/lib/inspec/require_loader.rb +33 -0
  277. data/lib/inspec/resource.rb +190 -0
  278. data/lib/inspec/rule.rb +280 -0
  279. data/lib/inspec/runner.rb +345 -0
  280. data/lib/inspec/runner_mock.rb +41 -0
  281. data/lib/inspec/runner_rspec.rb +175 -0
  282. data/lib/inspec/runtime_profile.rb +26 -0
  283. data/lib/inspec/schema.rb +213 -0
  284. data/lib/inspec/secrets.rb +19 -0
  285. data/lib/inspec/secrets/yaml.rb +30 -0
  286. data/lib/inspec/shell.rb +220 -0
  287. data/lib/inspec/shell_detector.rb +90 -0
  288. data/lib/inspec/source_reader.rb +29 -0
  289. data/lib/inspec/version.rb +8 -0
  290. data/lib/matchers/matchers.rb +339 -0
  291. data/lib/resources/aide_conf.rb +151 -0
  292. data/lib/resources/apache.rb +48 -0
  293. data/lib/resources/apache_conf.rb +149 -0
  294. data/lib/resources/apt.rb +149 -0
  295. data/lib/resources/audit_policy.rb +63 -0
  296. data/lib/resources/auditd.rb +231 -0
  297. data/lib/resources/auditd_conf.rb +46 -0
  298. data/lib/resources/bash.rb +35 -0
  299. data/lib/resources/bond.rb +69 -0
  300. data/lib/resources/bridge.rb +122 -0
  301. data/lib/resources/chocolatey_package.rb +78 -0
  302. data/lib/resources/command.rb +73 -0
  303. data/lib/resources/cpan.rb +58 -0
  304. data/lib/resources/cran.rb +64 -0
  305. data/lib/resources/crontab.rb +169 -0
  306. data/lib/resources/csv.rb +56 -0
  307. data/lib/resources/dh_params.rb +77 -0
  308. data/lib/resources/directory.rb +25 -0
  309. data/lib/resources/docker.rb +236 -0
  310. data/lib/resources/docker_container.rb +89 -0
  311. data/lib/resources/docker_image.rb +83 -0
  312. data/lib/resources/docker_object.rb +57 -0
  313. data/lib/resources/docker_service.rb +90 -0
  314. data/lib/resources/elasticsearch.rb +169 -0
  315. data/lib/resources/etc_fstab.rb +94 -0
  316. data/lib/resources/etc_group.rb +154 -0
  317. data/lib/resources/etc_hosts.rb +66 -0
  318. data/lib/resources/etc_hosts_allow_deny.rb +112 -0
  319. data/lib/resources/file.rb +298 -0
  320. data/lib/resources/filesystem.rb +31 -0
  321. data/lib/resources/firewalld.rb +143 -0
  322. data/lib/resources/gem.rb +70 -0
  323. data/lib/resources/groups.rb +215 -0
  324. data/lib/resources/grub_conf.rb +227 -0
  325. data/lib/resources/host.rb +306 -0
  326. data/lib/resources/http.rb +253 -0
  327. data/lib/resources/iis_app.rb +101 -0
  328. data/lib/resources/iis_site.rb +148 -0
  329. data/lib/resources/inetd_conf.rb +54 -0
  330. data/lib/resources/ini.rb +29 -0
  331. data/lib/resources/interface.rb +129 -0
  332. data/lib/resources/iptables.rb +80 -0
  333. data/lib/resources/json.rb +111 -0
  334. data/lib/resources/kernel_module.rb +107 -0
  335. data/lib/resources/kernel_parameter.rb +58 -0
  336. data/lib/resources/key_rsa.rb +63 -0
  337. data/lib/resources/limits_conf.rb +46 -0
  338. data/lib/resources/login_def.rb +57 -0
  339. data/lib/resources/mount.rb +88 -0
  340. data/lib/resources/mssql_session.rb +101 -0
  341. data/lib/resources/mysql.rb +82 -0
  342. data/lib/resources/mysql_conf.rb +127 -0
  343. data/lib/resources/mysql_session.rb +85 -0
  344. data/lib/resources/nginx.rb +96 -0
  345. data/lib/resources/nginx_conf.rb +226 -0
  346. data/lib/resources/npm.rb +48 -0
  347. data/lib/resources/ntp_conf.rb +51 -0
  348. data/lib/resources/oneget.rb +71 -0
  349. data/lib/resources/oracledb_session.rb +139 -0
  350. data/lib/resources/os.rb +36 -0
  351. data/lib/resources/os_env.rb +86 -0
  352. data/lib/resources/package.rb +370 -0
  353. data/lib/resources/packages.rb +111 -0
  354. data/lib/resources/parse_config.rb +112 -0
  355. data/lib/resources/passwd.rb +76 -0
  356. data/lib/resources/pip.rb +130 -0
  357. data/lib/resources/platform.rb +109 -0
  358. data/lib/resources/port.rb +771 -0
  359. data/lib/resources/postgres.rb +131 -0
  360. data/lib/resources/postgres_conf.rb +114 -0
  361. data/lib/resources/postgres_hba_conf.rb +90 -0
  362. data/lib/resources/postgres_ident_conf.rb +79 -0
  363. data/lib/resources/postgres_session.rb +71 -0
  364. data/lib/resources/powershell.rb +67 -0
  365. data/lib/resources/processes.rb +204 -0
  366. data/lib/resources/rabbitmq_conf.rb +51 -0
  367. data/lib/resources/registry_key.rb +297 -0
  368. data/lib/resources/security_policy.rb +180 -0
  369. data/lib/resources/service.rb +794 -0
  370. data/lib/resources/shadow.rb +159 -0
  371. data/lib/resources/ssh_conf.rb +97 -0
  372. data/lib/resources/ssl.rb +99 -0
  373. data/lib/resources/sys_info.rb +28 -0
  374. data/lib/resources/toml.rb +32 -0
  375. data/lib/resources/users.rb +654 -0
  376. data/lib/resources/vbscript.rb +68 -0
  377. data/lib/resources/virtualization.rb +247 -0
  378. data/lib/resources/windows_feature.rb +84 -0
  379. data/lib/resources/windows_hotfix.rb +35 -0
  380. data/lib/resources/windows_task.rb +102 -0
  381. data/lib/resources/wmi.rb +110 -0
  382. data/lib/resources/x509_certificate.rb +137 -0
  383. data/lib/resources/xinetd.rb +106 -0
  384. data/lib/resources/xml.rb +46 -0
  385. data/lib/resources/yaml.rb +43 -0
  386. data/lib/resources/yum.rb +180 -0
  387. data/lib/resources/zfs_dataset.rb +60 -0
  388. data/lib/resources/zfs_pool.rb +49 -0
  389. data/lib/source_readers/flat.rb +39 -0
  390. data/lib/source_readers/inspec.rb +75 -0
  391. data/lib/utils/command_wrapper.rb +27 -0
  392. data/lib/utils/convert.rb +12 -0
  393. data/lib/utils/database_helpers.rb +77 -0
  394. data/lib/utils/enumerable_delegation.rb +9 -0
  395. data/lib/utils/erlang_parser.rb +192 -0
  396. data/lib/utils/file_reader.rb +25 -0
  397. data/lib/utils/filter.rb +273 -0
  398. data/lib/utils/filter_array.rb +27 -0
  399. data/lib/utils/find_files.rb +47 -0
  400. data/lib/utils/hash.rb +41 -0
  401. data/lib/utils/json_log.rb +18 -0
  402. data/lib/utils/latest_version.rb +22 -0
  403. data/lib/utils/modulator.rb +12 -0
  404. data/lib/utils/nginx_parser.rb +105 -0
  405. data/lib/utils/object_traversal.rb +49 -0
  406. data/lib/utils/parser.rb +274 -0
  407. data/lib/utils/pkey_reader.rb +15 -0
  408. data/lib/utils/plugin_registry.rb +93 -0
  409. data/lib/utils/simpleconfig.rb +120 -0
  410. data/lib/utils/spdx.rb +13 -0
  411. data/lib/utils/spdx.txt +344 -0
  412. metadata +713 -0
@@ -0,0 +1,3 @@
1
+ Use the `eq` matcher to test the equality of two values: `its('Port') { should eq '22' }`.
2
+
3
+ Using `its('Port') { should eq 22 }` will fail because `22` is not a string value! Use the `cmp` matcher for less restrictive value comparisons.
@@ -0,0 +1 @@
1
+ Use the `include` matcher to verify that a string value is included in a list: `its('list') { should include 'string' }`.
@@ -0,0 +1 @@
1
+ Use the `match` matcher to check if a string matches a regular expression: `its('string') { should_not match /regex/ }`.
@@ -0,0 +1,217 @@
1
+ ---
2
+ title: InSpec Shell
3
+ ---
4
+
5
+ # InSpec Shell
6
+
7
+ The InSpec interactive shell is a pry based REPL that can be used to
8
+ quickly run InSpec controls and tests without having to write it to a
9
+ file. Its functionality is similar to [chef-shell](https://docs.chef.io/chef_shell.html) as it provides a way
10
+ to exercise the InSpec DSL, its resources, tests, and plugins without
11
+ having to create a profile or write a test file. See
12
+ [http://pryrepl.org/](http://pryrepl.org/) for an introduction to what pry is and what it can
13
+ do.
14
+
15
+ See [Explore InSpec resources](https://learn.chef.io/modules/explore-inspec-resources#/) on Learn Chef Rally for a hands-on example that uses InSpec shell.
16
+
17
+ ## Launching the shell
18
+
19
+ If you are using InSpec from a platform-specific package (rpm, msi,
20
+ etc.) or from a chef prepared shell in ChefDK, you can directly launch
21
+ InSpec shell against your local machine using the following. See
22
+ <https://docs.chef.io/install_dk.html#set-system-ruby> for details.
23
+
24
+ ```bash
25
+ $ inspec shell
26
+ $ inspec help shell # This will describe inspec shell usage
27
+ ```
28
+
29
+ If you wish to connect to a remote machine (called a target within
30
+ InSpec), you can use the `-t` flag. We support connecting using SSH,
31
+ WinRM and docker. If no target is provided, we implicitly support the
32
+ "local" target - i.e. tests running on the current machine running
33
+ InSpec. For an SSH connection, use `-i` for specifying SSH key files,
34
+ and the `--sudo*` commands for requesting a privilege escalation after
35
+ logging in. For a WinRM connection, use `--path` to change the login
36
+ path, `--ssl` to use SSL for transport layer encryption.
37
+
38
+ ```bash
39
+ $ inspec shell -t ssh://root@192.168.64.2:11022 # Login to remote machine using ssh as root.
40
+ $ inspec shell -t ssh://user@hostname:1234 -i /path/to/user_key # Login to hostname on port 1234 as user using given ssh key.
41
+ $ inspec shell -t winrm://UserName:Password@windowsmachine:1234 # Login to windowsmachine over WinRM as UserName.
42
+ $ inspec shell -t docker://container_id # Login to a Docker container.
43
+ ```
44
+
45
+ ## Resource Packs
46
+
47
+ Use resource packs to share custom resources with other InSpec users.
48
+ A resource pack is an InSpec profile that contains only custom resources and no other controls or tests.
49
+
50
+ For example, the profile in [`examples/profile`](https://github.com/chef/inspec/tree/master/examples/profile)in the InSpec git repo defines a [`gordon_config` resource](https://github.com/chef/inspec/blob/master/examples/profile/controls/gordon.rb). To use these resources within the InSpec shell, you will need to download and specify them as a dependency.
51
+
52
+ Once you have local access to the profile, you can use the `gordon_config` custom resource provided in the `examples/profile` GitHub repo in your local environment :
53
+
54
+ ```bash
55
+ inspec shell --depends examples/profile
56
+ ```
57
+
58
+ Once inside the shell your resource will be available:
59
+
60
+ ```ruby
61
+ inspec> gordon_config
62
+ ```
63
+
64
+ ## Using Ruby in InSpec shell
65
+
66
+ Since InSpec shell is pry based, you may treat the shell as an
67
+ interactive Ruby session. You may write Ruby expressions and evaluate
68
+ them. Source high-lighting, automatic indentation and command history
69
+ (using the up and down arrow keys) are available to make your experience
70
+ more delightful. You can exit the shell using `exit`.
71
+
72
+ ```bash
73
+ $ inspec shell
74
+ Welcome to the interactive InSpec Shell
75
+ To find out how to use it, type: help
76
+
77
+ inspec> 1 + 2
78
+ => 3
79
+ inspec> exit
80
+ ```
81
+
82
+ ## Using InSpec DSL in InSpec shell
83
+
84
+ InSpec shell will automatically evaluate the result of every command as
85
+ if it were a test file. If you type in a Ruby command that is not an
86
+ InSpec control or test, the shell will evaluate it as if it were a
87
+ regular ruby command.
88
+
89
+ Bare InSpec resources are instantiated and their help text is presented.
90
+ You may also access the resource contents or other matchers that they
91
+ define. Run `help <resource>` to get more help on using a particular
92
+ resource or see the InSpec resources documentation online.
93
+
94
+ ```bash
95
+ $ inspec shell
96
+ Welcome to the interactive InSpec Shell
97
+ To find out how to use it, type: help
98
+
99
+ inspec> file('/Users/myuser').directory?
100
+ => true
101
+ inspec> os_env('HOME')
102
+ => Environment variable HOME
103
+ inspec> os_env('HOME').content
104
+ => /Users/myuser
105
+ inspec> exit
106
+ ```
107
+
108
+ InSpec tests are immediately executed.
109
+
110
+ ```bash
111
+ inspec> describe file('/Users') # Empty test.
112
+ Summary: 0 successful, 0 failures, 0 skipped
113
+ inspec> describe file('/Users') do # Test with one check.
114
+ inspec> it { should exist }
115
+ inspec> end
116
+ ✔ File /Users should exist
117
+
118
+ Summary: 1 successful, 0 failures, 0 skipped
119
+ ```
120
+
121
+ All tests in a control are immediately executed as well. If a control is
122
+ redefined in the shell, the old control's tests are destroyed and
123
+ replaced with the redefinition and the control is re-run.
124
+
125
+ ```bash
126
+ inspec> control 'my_control' do
127
+ inspec> describe os_env('HOME') do
128
+ inspec> its('content') { should eq '/Users/myuser' }
129
+ inspec> end
130
+ inspec> end
131
+ ✔ my_control: Environment variable HOME content should eq "/Users/myuser"
132
+
133
+ Summary: 1 successful, 0 failures, 0 skipped
134
+ ```
135
+
136
+ Syntax errors are illegal tests are also detected and reported.
137
+
138
+ ```bash
139
+ inspec> control 'foo' do
140
+ inspec> thisisnonsense
141
+ inspec> end
142
+ NameError: undefined local variable or method `thisisnonsense' for #<#<Class:0x007fd63b571f98>:0x007fd639825cc8>
143
+ from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-expectations-3.5.0/lib/rspec/matchers.rb:967:in `method_missing'
144
+ inspec> control 'foo' do
145
+ inspec> describe file('wut') do
146
+ inspec> its('thismakesnosense') { should cmp 'fail' }
147
+ inspec> end
148
+ inspec> end
149
+ ✖ foo: File wut thismakesnosense (undefined method `thismakesnosense' for File wut:Inspec::Resource::Registry::File)
150
+
151
+ Summary: 0 successful, 1 failures, 0 skipped
152
+ ```
153
+
154
+ ## Running a single InSpec command
155
+
156
+ If you wish to run a single InSpec command and fetch its results, you
157
+ may use the `-c` flag. This is similar to using `bash -c`.
158
+
159
+ ```bash
160
+ $ inspec shell -c 'describe file("/Users/myuser") do it { should exist } end'
161
+ Target: local://
162
+
163
+ ✔ File /Users/myuser should exist
164
+
165
+ Summary: 1 successful, 0 failures, 0 skipped
166
+ ```
167
+
168
+ ```bash
169
+ $ inspec shell --format json -c 'describe file("/Users/test") do it { should exist } end'
170
+ {
171
+ "version": "1.49.2",
172
+ "controls": [{
173
+ "status": "passed",
174
+ "code_desc": "File /Users/test should exist",
175
+ "run_time": 0.002374,
176
+ "start_time": "2018-01-06 18:32:38 -0500"
177
+ }],
178
+ "other_checks": [],
179
+ "profiles": [{
180
+ "name": "inspec-shell",
181
+ "supports": [],
182
+ "controls": [{
183
+ "title": null,
184
+ "desc": null,
185
+ "impact": 0.5,
186
+ "refs": [],
187
+ "tags": {},
188
+ "code": "",
189
+ "source_location": {
190
+ "ref": "/usr/local/lib/ruby/gems/2.4.0/gems/inspec-1.49.2/lib/inspec/control_eval_context.rb",
191
+ "line": 89
192
+ },
193
+ "id": "(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)",
194
+ "results": [{
195
+ "status": "passed",
196
+ "code_desc": "File /Users/test should exist",
197
+ "run_time": 0.002374,
198
+ "start_time": "2018-01-06 18:32:38 -0500"
199
+ }]
200
+ }],
201
+ "groups": [{
202
+ "title": null,
203
+ "controls": ["(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)"],
204
+ "id": "unknown"
205
+ }],
206
+ "attributes": [],
207
+ "sha256": "29c070a90b7e3521babf618215573284a790d92907783d5b2c138f411bfd2e74"
208
+ }],
209
+ "platform": {
210
+ "name": "mac_os_x",
211
+ "release": "17.3.0"
212
+ },
213
+ "statistics": {
214
+ "duration": 0.003171
215
+ }
216
+ }
217
+ ```
@@ -0,0 +1,8 @@
1
+ # InSpec examples
2
+
3
+ This directory contains multiple examples that explain the usage of the InSpec:
4
+
5
+ - `kitchen-chef` Test-Kitchen with [Chef and InSpec](kitchen-chef/README.md)
6
+ - `kitchen-puppet` Test-Kitchen with [Puppet and InSpec](kitchen-puppet/README.md)
7
+ - `kitchen-ansible` Test-Kitchen with [Ansible and InSpec](kitchen-ansible/README.md)
8
+ - `profile` Example of an InSpec profile
@@ -0,0 +1,65 @@
1
+ # Example InSpec Profile
2
+
3
+ This example shows the use of InSpec [profile](../../docs/profiles.rst) inheritance.
4
+
5
+ ## Verify a profile
6
+
7
+ InSpec ships with built-in features to verify a profile structure.
8
+
9
+ ```bash
10
+ $ inspec check examples/inheritance
11
+ ```
12
+
13
+ ## Execute a profile
14
+
15
+ To run a profile on a local machine use `inspec exec /path/to/profile`. All dependencies are automatically resolved.
16
+
17
+ ```bash
18
+ $ inspec exec examples/inheritance
19
+ ```
20
+
21
+ ## Set attributes for dependent profiles
22
+
23
+ Without setting attributes, an `inspec exec` would return the following:
24
+
25
+ ```
26
+ $ inspec git:(master) ✗ b inspec exec examples/inheritance
27
+
28
+ Profile: InSpec example inheritance (inheritance)
29
+ Version: 1.0.0
30
+ Target: local://
31
+
32
+
33
+ ○ gordon-1.0: Verify the version number of Gordon (1 skipped)
34
+ ○ Can't find file "/tmp/gordon/config.yaml"
35
+ ✔ File content should match nil
36
+ ✔ ssh-1: Allow only SSH Protocol 2
37
+ ✔ File /bin/sh should be owned by "root"
38
+
39
+ File /tmp
40
+ ✔ should be directory
41
+ alice should
42
+ ✖ eq "bob"
43
+
44
+ expected: "bob"
45
+ got: "alice"
46
+
47
+ (compared using ==)
48
+
49
+ should eq
50
+ ✖ "secret"
51
+
52
+ expected: "secret"
53
+ got: nil
54
+
55
+ (compared using ==)
56
+
57
+
58
+ Test Summary: 3 successful, 2 failures, 1 skipped
59
+ ```
60
+
61
+ To pass in attributes, just call:
62
+
63
+ ```
64
+ $ inspec exec examples/inheritance --attrs examples/profile-attribute.yml
65
+ ```
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+ # copyright: 2016, Chef Software, Inc.
3
+
4
+ # manipulate controls of `profile`
5
+ include_controls 'profile' do
6
+ skip_control 'tmp-1.0'
7
+
8
+ control 'gordon-1.0' do
9
+ impact 0.0
10
+ end
11
+ end
12
+
13
+ # load all controls of `profile-attribute`
14
+ include_controls 'profile-attribute'
@@ -0,0 +1,15 @@
1
+ name: inheritance
2
+ title: InSpec example inheritance
3
+ maintainer: Chef Software, Inc.
4
+ copyright: Chef Software, Inc.
5
+ copyright_email: support@chef.io
6
+ license: Apache-2.0
7
+ summary: Demonstrates the use of InSpec profile inheritance
8
+ version: 1.0.0
9
+ supports:
10
+ - os-family: unix
11
+ depends:
12
+ - name: profile
13
+ path: ../profile
14
+ - name: profile-attribute
15
+ path: ../profile-attribute
@@ -0,0 +1,25 @@
1
+ ---
2
+ driver:
3
+ name: vagrant
4
+
5
+ provisioner:
6
+ hosts: webservers
7
+ name: ansible_playbook
8
+ # Use el7 epel repo instead of the default el6
9
+ ansible_yum_repo: "https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm"
10
+ require_chef_for_busser: false
11
+ require_ruby_for_busser: false
12
+ ansible_verbosity: 2
13
+ ansible_verbose: true
14
+ # starting playbook is at: test/integration/default/default.yml
15
+
16
+ verifier:
17
+ name: inspec
18
+
19
+ platforms:
20
+ - name: centos-7.1
21
+ - name: ubuntu-12.04
22
+ - name: ubuntu-14.04
23
+
24
+ suites:
25
+ - name: default
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ source 'https://rubygems.org'
3
+
4
+ gem 'inspec', path: '../../.'
5
+
6
+ group :test do
7
+ gem 'bundler', '~> 1.5'
8
+ gem 'minitest', '~> 5.5'
9
+ gem 'rake', '~> 10'
10
+ gem 'simplecov', '~> 0.10'
11
+ end
12
+
13
+ group :integration do
14
+ gem 'test-kitchen', '~> 1.4'
15
+ gem 'kitchen-ansible'
16
+ gem 'kitchen-vagrant'
17
+ gem 'kitchen-inspec'
18
+ gem 'concurrent-ruby', '~> 1.0'
19
+ end
@@ -0,0 +1,53 @@
1
+ # Test-Kitchen - InSpec with Ansible Example
2
+
3
+ This example demonstrates a complete roundtrip via [Test-Kitchen](http://kitchen.ci/).
4
+
5
+ ```bash
6
+ # install all dependencies
7
+ $ bundle install
8
+ # show all available tests
9
+ $ bundle exec kitchen list
10
+ Instance Driver Provisioner Verifier Transport Last Action
11
+ default-centos-71 Vagrant AnsiblePlaybook Inspec Ssh <Not Created>
12
+ default-ubuntu-1204 Vagrant AnsiblePlaybook Inspec Ssh <Not Created>
13
+ default-ubuntu-1404 Vagrant AnsiblePlaybook Inspec Ssh <Not Created>
14
+
15
+ # Now we are ready to run a complete test
16
+ $ bundle exec kitchen test default-ubuntu-1404
17
+ -----> Starting Kitchen (v1.4.2)
18
+ -----> Cleaning up any prior instances of <default-ubuntu-1404>
19
+ -----> Destroying <default-ubuntu-1404>...
20
+ Finished destroying <default-ubuntu-1404> (0m0.00s).
21
+ -----> Testing <default-ubuntu-1404>
22
+ -----> Creating <default-ubuntu-1404>...
23
+ Bringing machine 'default' up with 'virtualbox' provider...
24
+ ==> default: Importing base box 'opscode-ubuntu-14.04'...
25
+
26
+ ...
27
+
28
+ Vagrant instance <default-ubuntu-1404> created.
29
+ Finished creating <default-ubuntu-1404> (0m37.51s).
30
+ -----> Converging <default-ubuntu-1404>...
31
+ Preparing files for transfer
32
+ Preparing playbook
33
+
34
+ ...
35
+
36
+ Finished converging <default-ubuntu-1404> (1m14.53s).
37
+ -----> Setting up <default-ubuntu-1404>...
38
+ Finished setting up <default-ubuntu-1404> (0m0.00s).
39
+ -----> Verifying <default-ubuntu-1404>...
40
+ .....
41
+
42
+ Finished in 0.08796 seconds (files took 1 minute 52.3 seconds to load)
43
+ 5 examples, 0 failures
44
+
45
+ Finished verifying <default-ubuntu-1404> (0m0.27s).
46
+ -----> Destroying <default-ubuntu-1404>...
47
+ ==> default: Forcing shutdown of VM...
48
+ ==> default: Destroying VM and associated drives...
49
+ Vagrant instance <default-ubuntu-1404> destroyed.
50
+ Finished destroying <default-ubuntu-1404> (0m4.41s).
51
+ Finished testing <default-ubuntu-1404> (1m56.73s).
52
+ -----> Kitchen is finished. (1m57.06s)
53
+ ```
@@ -0,0 +1,6 @@
1
+ [nginx]
2
+ name=Nginx Repo
3
+ baseurl=http://nginx.org/packages/centos/7/x86_64
4
+ enabled=1
5
+ gpgcheck=1
6
+ gpgkey=http://nginx.org/keys/nginx_signing.key
@@ -0,0 +1,16 @@
1
+ ---
2
+ - name: create nginx yum repo if OS family is RedHat
3
+ copy: src=nginx.repo dest=/etc/yum.repos.d/
4
+ owner=root group=root mode=0644
5
+ when: (ansible_os_family == "RedHat" and ansible_distribution_major_version == "7")
6
+
7
+ - name: ensure nginx is at the latest version if OS family is RedHat
8
+ yum: name=nginx state=latest
9
+ when: ansible_os_family == "RedHat"
10
+
11
+ - name: ensure nginx is at the latest version if OS family is Debian
12
+ apt: name=nginx state=latest
13
+ when: ansible_os_family == "Debian"
14
+
15
+ - name: ensure nginx is running (and enable it at boot)
16
+ service: name=nginx state=started enabled=yes