inspec 1.51.6 → 1.51.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (404) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +101 -101
  3. data/CHANGELOG.md +2915 -2902
  4. data/Gemfile +53 -53
  5. data/LICENSE +14 -14
  6. data/MAINTAINERS.md +31 -31
  7. data/MAINTAINERS.toml +47 -47
  8. data/README.md +419 -419
  9. data/Rakefile +167 -167
  10. data/bin/inspec +12 -12
  11. data/docs/.gitignore +2 -2
  12. data/docs/README.md +40 -40
  13. data/docs/dsl_inspec.md +258 -258
  14. data/docs/dsl_resource.md +93 -93
  15. data/docs/glossary.md +99 -99
  16. data/docs/habitat.md +191 -191
  17. data/docs/inspec_and_friends.md +107 -107
  18. data/docs/matchers.md +165 -165
  19. data/docs/migration.md +293 -293
  20. data/docs/plugin_kitchen_inspec.md +49 -49
  21. data/docs/profiles.md +370 -370
  22. data/docs/resources/aide_conf.md.erb +78 -78
  23. data/docs/resources/apache.md.erb +66 -66
  24. data/docs/resources/apache_conf.md.erb +67 -67
  25. data/docs/resources/apt.md.erb +70 -70
  26. data/docs/resources/audit_policy.md.erb +46 -46
  27. data/docs/resources/auditd.md.erb +78 -78
  28. data/docs/resources/auditd_conf.md.erb +68 -68
  29. data/docs/resources/auditd_rules.md.erb +116 -116
  30. data/docs/resources/bash.md.erb +74 -74
  31. data/docs/resources/bond.md.erb +89 -89
  32. data/docs/resources/bridge.md.erb +54 -54
  33. data/docs/resources/bsd_service.md.erb +65 -65
  34. data/docs/resources/command.md.erb +137 -137
  35. data/docs/resources/cpan.md.erb +77 -77
  36. data/docs/resources/cran.md.erb +63 -63
  37. data/docs/resources/crontab.md.erb +87 -87
  38. data/docs/resources/csv.md.erb +53 -53
  39. data/docs/resources/dh_params.md.erb +216 -216
  40. data/docs/resources/directory.md.erb +28 -28
  41. data/docs/resources/docker.md.erb +163 -163
  42. data/docs/resources/docker_container.md.erb +99 -99
  43. data/docs/resources/docker_image.md.erb +93 -93
  44. data/docs/resources/docker_service.md.erb +113 -113
  45. data/docs/resources/elasticsearch.md.erb +230 -230
  46. data/docs/resources/etc_fstab.md.erb +124 -124
  47. data/docs/resources/etc_group.md.erb +74 -74
  48. data/docs/resources/etc_hosts.md.erb +75 -75
  49. data/docs/resources/etc_hosts_allow.md.erb +73 -73
  50. data/docs/resources/etc_hosts_deny.md.erb +73 -73
  51. data/docs/resources/file.md.erb +512 -512
  52. data/docs/resources/filesystem.md.erb +40 -40
  53. data/docs/resources/firewalld.md.erb +105 -105
  54. data/docs/resources/gem.md.erb +78 -78
  55. data/docs/resources/group.md.erb +60 -60
  56. data/docs/resources/grub_conf.md.erb +101 -100
  57. data/docs/resources/host.md.erb +77 -77
  58. data/docs/resources/http.md.erb +104 -98
  59. data/docs/resources/iis_app.md.erb +120 -116
  60. data/docs/resources/iis_site.md.erb +132 -128
  61. data/docs/resources/inetd_conf.md.erb +95 -84
  62. data/docs/resources/ini.md.erb +72 -69
  63. data/docs/resources/interface.md.erb +55 -46
  64. data/docs/resources/iptables.md.erb +63 -63
  65. data/docs/resources/json.md.erb +61 -61
  66. data/docs/resources/kernel_module.md.erb +106 -106
  67. data/docs/resources/kernel_parameter.md.erb +58 -58
  68. data/docs/resources/key_rsa.md.erb +73 -73
  69. data/docs/resources/launchd_service.md.erb +56 -56
  70. data/docs/resources/limits_conf.md.erb +66 -66
  71. data/docs/resources/login_def.md.erb +62 -62
  72. data/docs/resources/mount.md.erb +68 -68
  73. data/docs/resources/mssql_session.md.erb +59 -59
  74. data/docs/resources/mysql_conf.md.erb +98 -98
  75. data/docs/resources/mysql_session.md.erb +73 -73
  76. data/docs/resources/nginx.md.erb +78 -78
  77. data/docs/resources/nginx_conf.md.erb +127 -127
  78. data/docs/resources/npm.md.erb +59 -59
  79. data/docs/resources/ntp_conf.md.erb +59 -59
  80. data/docs/resources/oneget.md.erb +52 -52
  81. data/docs/resources/oracledb_session.md.erb +51 -51
  82. data/docs/resources/os.md.erb +140 -140
  83. data/docs/resources/os_env.md.erb +77 -77
  84. data/docs/resources/package.md.erb +119 -119
  85. data/docs/resources/packages.md.erb +66 -66
  86. data/docs/resources/parse_config.md.erb +102 -102
  87. data/docs/resources/parse_config_file.md.erb +137 -137
  88. data/docs/resources/passwd.md.erb +140 -140
  89. data/docs/resources/pip.md.erb +66 -66
  90. data/docs/resources/port.md.erb +136 -136
  91. data/docs/resources/postgres_conf.md.erb +78 -78
  92. data/docs/resources/postgres_hba_conf.md.erb +92 -92
  93. data/docs/resources/postgres_ident_conf.md.erb +75 -75
  94. data/docs/resources/postgres_session.md.erb +68 -68
  95. data/docs/resources/powershell.md.erb +101 -101
  96. data/docs/resources/processes.md.erb +107 -107
  97. data/docs/resources/rabbitmq_config.md.erb +40 -40
  98. data/docs/resources/registry_key.md.erb +157 -157
  99. data/docs/resources/runit_service.md.erb +56 -56
  100. data/docs/resources/security_policy.md.erb +46 -46
  101. data/docs/resources/service.md.erb +120 -120
  102. data/docs/resources/shadow.md.erb +143 -143
  103. data/docs/resources/ssh_config.md.erb +79 -79
  104. data/docs/resources/sshd_config.md.erb +82 -82
  105. data/docs/resources/ssl.md.erb +118 -118
  106. data/docs/resources/sys_info.md.erb +41 -41
  107. data/docs/resources/systemd_service.md.erb +56 -56
  108. data/docs/resources/sysv_service.md.erb +56 -56
  109. data/docs/resources/upstart_service.md.erb +56 -56
  110. data/docs/resources/user.md.erb +139 -139
  111. data/docs/resources/users.md.erb +126 -126
  112. data/docs/resources/vbscript.md.erb +54 -54
  113. data/docs/resources/virtualization.md.erb +56 -56
  114. data/docs/resources/windows_feature.md.erb +46 -46
  115. data/docs/resources/windows_hotfix.md.erb +52 -52
  116. data/docs/resources/windows_task.md.erb +89 -89
  117. data/docs/resources/wmi.md.erb +80 -80
  118. data/docs/resources/x509_certificate.md.erb +150 -150
  119. data/docs/resources/xinetd_conf.md.erb +155 -155
  120. data/docs/resources/xml.md.erb +84 -84
  121. data/docs/resources/yaml.md.erb +68 -68
  122. data/docs/resources/yum.md.erb +97 -97
  123. data/docs/resources/zfs_dataset.md.erb +52 -52
  124. data/docs/resources/zfs_pool.md.erb +46 -46
  125. data/docs/ruby_usage.md +203 -203
  126. data/docs/shared/matcher_be.md.erb +1 -1
  127. data/docs/shared/matcher_cmp.md.erb +43 -43
  128. data/docs/shared/matcher_eq.md.erb +3 -3
  129. data/docs/shared/matcher_include.md.erb +1 -1
  130. data/docs/shared/matcher_match.md.erb +1 -1
  131. data/docs/shell.md +172 -172
  132. data/examples/README.md +8 -8
  133. data/examples/inheritance/README.md +65 -65
  134. data/examples/inheritance/controls/example.rb +14 -14
  135. data/examples/inheritance/inspec.yml +15 -15
  136. data/examples/kitchen-ansible/.kitchen.yml +25 -25
  137. data/examples/kitchen-ansible/Gemfile +19 -19
  138. data/examples/kitchen-ansible/README.md +53 -53
  139. data/examples/kitchen-ansible/files/nginx.repo +6 -6
  140. data/examples/kitchen-ansible/tasks/main.yml +16 -16
  141. data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
  142. data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
  143. data/examples/kitchen-chef/.kitchen.yml +20 -20
  144. data/examples/kitchen-chef/Berksfile +3 -3
  145. data/examples/kitchen-chef/Gemfile +19 -19
  146. data/examples/kitchen-chef/README.md +27 -27
  147. data/examples/kitchen-chef/metadata.rb +7 -7
  148. data/examples/kitchen-chef/recipes/default.rb +6 -6
  149. data/examples/kitchen-chef/recipes/nginx.rb +30 -30
  150. data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
  151. data/examples/kitchen-puppet/.kitchen.yml +22 -22
  152. data/examples/kitchen-puppet/Gemfile +20 -20
  153. data/examples/kitchen-puppet/Puppetfile +25 -25
  154. data/examples/kitchen-puppet/README.md +53 -53
  155. data/examples/kitchen-puppet/manifests/site.pp +33 -33
  156. data/examples/kitchen-puppet/metadata.json +11 -11
  157. data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
  158. data/examples/meta-profile/README.md +37 -37
  159. data/examples/meta-profile/controls/example.rb +13 -13
  160. data/examples/meta-profile/inspec.yml +13 -13
  161. data/examples/profile-attribute.yml +2 -2
  162. data/examples/profile-attribute/README.md +14 -14
  163. data/examples/profile-attribute/controls/example.rb +11 -11
  164. data/examples/profile-attribute/inspec.yml +8 -8
  165. data/examples/profile-sensitive/README.md +29 -29
  166. data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
  167. data/examples/profile-sensitive/controls/sensitive.rb +9 -9
  168. data/examples/profile-sensitive/inspec.yml +8 -8
  169. data/examples/profile/README.md +48 -48
  170. data/examples/profile/controls/example.rb +23 -23
  171. data/examples/profile/controls/gordon.rb +36 -36
  172. data/examples/profile/controls/meta.rb +34 -34
  173. data/examples/profile/inspec.yml +10 -10
  174. data/examples/profile/libraries/gordon_config.rb +53 -53
  175. data/inspec.gemspec +47 -47
  176. data/lib/bundles/README.md +3 -3
  177. data/lib/bundles/inspec-artifact.rb +7 -7
  178. data/lib/bundles/inspec-artifact/README.md +1 -1
  179. data/lib/bundles/inspec-artifact/cli.rb +277 -277
  180. data/lib/bundles/inspec-compliance.rb +16 -16
  181. data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
  182. data/lib/bundles/inspec-compliance/README.md +185 -185
  183. data/lib/bundles/inspec-compliance/api.rb +316 -316
  184. data/lib/bundles/inspec-compliance/api/login.rb +152 -152
  185. data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
  186. data/lib/bundles/inspec-compliance/cli.rb +277 -277
  187. data/lib/bundles/inspec-compliance/configuration.rb +103 -103
  188. data/lib/bundles/inspec-compliance/http.rb +86 -86
  189. data/lib/bundles/inspec-compliance/support.rb +36 -36
  190. data/lib/bundles/inspec-compliance/target.rb +98 -98
  191. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
  192. data/lib/bundles/inspec-habitat.rb +12 -12
  193. data/lib/bundles/inspec-habitat/cli.rb +36 -36
  194. data/lib/bundles/inspec-habitat/log.rb +10 -10
  195. data/lib/bundles/inspec-habitat/profile.rb +390 -390
  196. data/lib/bundles/inspec-init.rb +8 -8
  197. data/lib/bundles/inspec-init/README.md +31 -31
  198. data/lib/bundles/inspec-init/cli.rb +97 -97
  199. data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
  200. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
  201. data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
  202. data/lib/bundles/inspec-supermarket.rb +13 -13
  203. data/lib/bundles/inspec-supermarket/README.md +45 -45
  204. data/lib/bundles/inspec-supermarket/api.rb +84 -84
  205. data/lib/bundles/inspec-supermarket/cli.rb +65 -65
  206. data/lib/bundles/inspec-supermarket/target.rb +34 -34
  207. data/lib/fetchers/git.rb +163 -163
  208. data/lib/fetchers/local.rb +74 -74
  209. data/lib/fetchers/mock.rb +35 -35
  210. data/lib/fetchers/url.rb +204 -204
  211. data/lib/inspec.rb +24 -24
  212. data/lib/inspec/archive/tar.rb +29 -29
  213. data/lib/inspec/archive/zip.rb +19 -19
  214. data/lib/inspec/backend.rb +92 -92
  215. data/lib/inspec/base_cli.rb +324 -322
  216. data/lib/inspec/cached_fetcher.rb +66 -66
  217. data/lib/inspec/cli.rb +298 -298
  218. data/lib/inspec/completions/bash.sh.erb +45 -45
  219. data/lib/inspec/completions/fish.sh.erb +34 -34
  220. data/lib/inspec/completions/zsh.sh.erb +61 -61
  221. data/lib/inspec/control_eval_context.rb +179 -179
  222. data/lib/inspec/dependencies/cache.rb +72 -72
  223. data/lib/inspec/dependencies/dependency_set.rb +92 -92
  224. data/lib/inspec/dependencies/lockfile.rb +115 -115
  225. data/lib/inspec/dependencies/requirement.rb +123 -123
  226. data/lib/inspec/dependencies/resolver.rb +86 -86
  227. data/lib/inspec/describe.rb +27 -27
  228. data/lib/inspec/dsl.rb +66 -66
  229. data/lib/inspec/dsl_shared.rb +33 -33
  230. data/lib/inspec/env_printer.rb +157 -157
  231. data/lib/inspec/errors.rb +13 -13
  232. data/lib/inspec/exceptions.rb +12 -12
  233. data/lib/inspec/expect.rb +45 -45
  234. data/lib/inspec/fetcher.rb +45 -45
  235. data/lib/inspec/file_provider.rb +275 -275
  236. data/lib/inspec/formatters.rb +3 -3
  237. data/lib/inspec/formatters/base.rb +208 -208
  238. data/lib/inspec/formatters/json_rspec.rb +20 -20
  239. data/lib/inspec/formatters/show_progress.rb +12 -12
  240. data/lib/inspec/library_eval_context.rb +58 -58
  241. data/lib/inspec/log.rb +11 -11
  242. data/lib/inspec/metadata.rb +253 -253
  243. data/lib/inspec/method_source.rb +24 -24
  244. data/lib/inspec/objects.rb +14 -14
  245. data/lib/inspec/objects/attribute.rb +65 -65
  246. data/lib/inspec/objects/control.rb +61 -61
  247. data/lib/inspec/objects/describe.rb +92 -92
  248. data/lib/inspec/objects/each_loop.rb +36 -36
  249. data/lib/inspec/objects/list.rb +15 -15
  250. data/lib/inspec/objects/or_test.rb +40 -40
  251. data/lib/inspec/objects/ruby_helper.rb +15 -15
  252. data/lib/inspec/objects/tag.rb +27 -27
  253. data/lib/inspec/objects/test.rb +87 -87
  254. data/lib/inspec/objects/value.rb +27 -27
  255. data/lib/inspec/plugins.rb +60 -60
  256. data/lib/inspec/plugins/cli.rb +24 -24
  257. data/lib/inspec/plugins/fetcher.rb +86 -86
  258. data/lib/inspec/plugins/resource.rb +132 -132
  259. data/lib/inspec/plugins/secret.rb +15 -15
  260. data/lib/inspec/plugins/source_reader.rb +40 -40
  261. data/lib/inspec/polyfill.rb +12 -12
  262. data/lib/inspec/profile.rb +510 -510
  263. data/lib/inspec/profile_context.rb +207 -207
  264. data/lib/inspec/profile_vendor.rb +66 -66
  265. data/lib/inspec/reporters.rb +50 -33
  266. data/lib/inspec/reporters/base.rb +24 -23
  267. data/lib/inspec/reporters/cli.rb +395 -395
  268. data/lib/inspec/reporters/json.rb +134 -132
  269. data/lib/inspec/reporters/json_min.rb +48 -44
  270. data/lib/inspec/reporters/junit.rb +77 -77
  271. data/lib/inspec/require_loader.rb +33 -33
  272. data/lib/inspec/resource.rb +176 -176
  273. data/lib/inspec/rule.rb +266 -266
  274. data/lib/inspec/runner.rb +340 -337
  275. data/lib/inspec/runner_mock.rb +41 -41
  276. data/lib/inspec/runner_rspec.rb +163 -185
  277. data/lib/inspec/runtime_profile.rb +26 -26
  278. data/lib/inspec/schema.rb +186 -186
  279. data/lib/inspec/secrets.rb +19 -19
  280. data/lib/inspec/secrets/yaml.rb +30 -30
  281. data/lib/inspec/shell.rb +223 -223
  282. data/lib/inspec/shell_detector.rb +90 -90
  283. data/lib/inspec/source_reader.rb +29 -29
  284. data/lib/inspec/version.rb +8 -8
  285. data/lib/matchers/matchers.rb +397 -397
  286. data/lib/resources/aide_conf.rb +160 -160
  287. data/lib/resources/apache.rb +49 -49
  288. data/lib/resources/apache_conf.rb +158 -158
  289. data/lib/resources/apt.rb +150 -150
  290. data/lib/resources/audit_policy.rb +64 -64
  291. data/lib/resources/auditd.rb +233 -233
  292. data/lib/resources/auditd_conf.rb +56 -56
  293. data/lib/resources/auditd_rules.rb +205 -205
  294. data/lib/resources/bash.rb +36 -36
  295. data/lib/resources/bond.rb +69 -69
  296. data/lib/resources/bridge.rb +123 -123
  297. data/lib/resources/command.rb +69 -69
  298. data/lib/resources/cpan.rb +60 -60
  299. data/lib/resources/cran.rb +66 -66
  300. data/lib/resources/crontab.rb +169 -169
  301. data/lib/resources/csv.rb +58 -58
  302. data/lib/resources/dh_params.rb +83 -83
  303. data/lib/resources/directory.rb +25 -25
  304. data/lib/resources/docker.rb +239 -239
  305. data/lib/resources/docker_container.rb +92 -92
  306. data/lib/resources/docker_image.rb +86 -86
  307. data/lib/resources/docker_object.rb +57 -57
  308. data/lib/resources/docker_service.rb +94 -94
  309. data/lib/resources/elasticsearch.rb +168 -168
  310. data/lib/resources/etc_fstab.rb +102 -102
  311. data/lib/resources/etc_group.rb +157 -157
  312. data/lib/resources/etc_hosts.rb +81 -81
  313. data/lib/resources/etc_hosts_allow_deny.rb +122 -122
  314. data/lib/resources/file.rb +298 -298
  315. data/lib/resources/filesystem.rb +31 -31
  316. data/lib/resources/firewalld.rb +144 -144
  317. data/lib/resources/gem.rb +71 -71
  318. data/lib/resources/groups.rb +213 -213
  319. data/lib/resources/grub_conf.rb +237 -237
  320. data/lib/resources/host.rb +300 -300
  321. data/lib/resources/http.rb +252 -252
  322. data/lib/resources/iis_app.rb +103 -103
  323. data/lib/resources/iis_site.rb +147 -147
  324. data/lib/resources/inetd_conf.rb +63 -63
  325. data/lib/resources/ini.rb +29 -29
  326. data/lib/resources/interface.rb +130 -130
  327. data/lib/resources/iptables.rb +70 -70
  328. data/lib/resources/json.rb +115 -115
  329. data/lib/resources/kernel_module.rb +110 -110
  330. data/lib/resources/kernel_parameter.rb +58 -58
  331. data/lib/resources/key_rsa.rb +67 -67
  332. data/lib/resources/limits_conf.rb +56 -56
  333. data/lib/resources/login_def.rb +67 -67
  334. data/lib/resources/mount.rb +90 -90
  335. data/lib/resources/mssql_session.rb +103 -103
  336. data/lib/resources/mysql.rb +82 -82
  337. data/lib/resources/mysql_conf.rb +133 -133
  338. data/lib/resources/mysql_session.rb +72 -72
  339. data/lib/resources/nginx.rb +97 -97
  340. data/lib/resources/nginx_conf.rb +228 -228
  341. data/lib/resources/npm.rb +48 -48
  342. data/lib/resources/ntp_conf.rb +59 -59
  343. data/lib/resources/oneget.rb +72 -72
  344. data/lib/resources/oracledb_session.rb +140 -140
  345. data/lib/resources/os.rb +46 -46
  346. data/lib/resources/os_env.rb +76 -76
  347. data/lib/resources/package.rb +357 -357
  348. data/lib/resources/packages.rb +112 -112
  349. data/lib/resources/parse_config.rb +116 -116
  350. data/lib/resources/passwd.rb +96 -96
  351. data/lib/resources/pip.rb +89 -89
  352. data/lib/resources/platform.rb +112 -112
  353. data/lib/resources/port.rb +771 -771
  354. data/lib/resources/postgres.rb +132 -132
  355. data/lib/resources/postgres_conf.rb +122 -122
  356. data/lib/resources/postgres_hba_conf.rb +101 -101
  357. data/lib/resources/postgres_ident_conf.rb +79 -79
  358. data/lib/resources/postgres_session.rb +72 -72
  359. data/lib/resources/powershell.rb +58 -58
  360. data/lib/resources/processes.rb +204 -204
  361. data/lib/resources/rabbitmq_conf.rb +53 -53
  362. data/lib/resources/registry_key.rb +296 -296
  363. data/lib/resources/security_policy.rb +181 -181
  364. data/lib/resources/service.rb +784 -784
  365. data/lib/resources/shadow.rb +141 -141
  366. data/lib/resources/ssh_conf.rb +102 -102
  367. data/lib/resources/ssl.rb +99 -99
  368. data/lib/resources/sys_info.rb +26 -26
  369. data/lib/resources/toml.rb +32 -32
  370. data/lib/resources/users.rb +652 -652
  371. data/lib/resources/vbscript.rb +70 -70
  372. data/lib/resources/virtualization.rb +251 -251
  373. data/lib/resources/windows_feature.rb +85 -85
  374. data/lib/resources/windows_hotfix.rb +35 -35
  375. data/lib/resources/windows_task.rb +106 -106
  376. data/lib/resources/wmi.rb +114 -114
  377. data/lib/resources/x509_certificate.rb +143 -143
  378. data/lib/resources/xinetd.rb +112 -112
  379. data/lib/resources/xml.rb +45 -45
  380. data/lib/resources/yaml.rb +45 -45
  381. data/lib/resources/yum.rb +181 -181
  382. data/lib/resources/zfs_dataset.rb +60 -60
  383. data/lib/resources/zfs_pool.rb +49 -49
  384. data/lib/source_readers/flat.rb +39 -39
  385. data/lib/source_readers/inspec.rb +75 -75
  386. data/lib/utils/command_wrapper.rb +27 -27
  387. data/lib/utils/convert.rb +12 -12
  388. data/lib/utils/database_helpers.rb +77 -77
  389. data/lib/utils/erlang_parser.rb +192 -192
  390. data/lib/utils/filter.rb +272 -272
  391. data/lib/utils/filter_array.rb +27 -27
  392. data/lib/utils/find_files.rb +44 -44
  393. data/lib/utils/hash.rb +41 -41
  394. data/lib/utils/json_log.rb +18 -18
  395. data/lib/utils/latest_version.rb +22 -22
  396. data/lib/utils/modulator.rb +12 -12
  397. data/lib/utils/nginx_parser.rb +85 -85
  398. data/lib/utils/object_traversal.rb +49 -49
  399. data/lib/utils/parser.rb +274 -274
  400. data/lib/utils/plugin_registry.rb +93 -93
  401. data/lib/utils/simpleconfig.rb +132 -132
  402. data/lib/utils/spdx.rb +13 -13
  403. data/lib/utils/spdx.txt +343 -343
  404. metadata +2 -2
@@ -1,93 +1,93 @@
1
- ---
2
- title: Resource DSL
3
- ---
4
-
5
- # Resource DSL
6
-
7
- InSpec provides a mechanism for defining custom resources. These become
8
- available with their respective names and provide easy functionality to
9
- profiles.
10
-
11
- ## Resource location
12
-
13
- Resources may be added to profiles in the libraries folder:
14
-
15
- ```bash
16
- $ tree examples/profile
17
- examples/profile
18
- ...
19
- ├── libraries
20
- │   └── gordon_config.rb
21
- ```
22
-
23
- ## Resource structure
24
-
25
- The smallest possible resource takes this form:
26
-
27
- ```ruby
28
- class Tiny < Inspec.resource(1)
29
- name 'tiny'
30
- end
31
- ```
32
-
33
- Resources are written as a regular Ruby class which inherits from
34
- Inspec.resource. The number (1) specifies the version this resource
35
- plugin targets. As InSpec evolves, this interface may change and may
36
- require a higher version.
37
-
38
- The following attributes can be configured:
39
-
40
- * name - Identifier of the resource (required)
41
- * desc - Description of the resource (optional)
42
- * example - Example usage of the resource (optional)
43
-
44
- The following methods are available to the resource:
45
-
46
- * inspec - Contains a registry of all other resources to interact with the operating system or target in general.
47
- * skip\_resource - A resource may call this method to indicate, that requirements aren't met. All tests that use this resource will be marked as skipped.
48
-
49
- The following example shows a full resource using attributes and methods
50
- to provide simple access to a configuration file:
51
-
52
- ```ruby
53
- class GordonConfig < Inspec.resource(1)
54
- name 'gordon_config'
55
-
56
- desc '
57
- Resource description ...
58
- '
59
-
60
- example '
61
- describe gordon_config do
62
- its("signal") { should eq "on" }
63
- end
64
- '
65
-
66
- # Load the configuration file on initialization
67
- def initialize(path = nil)
68
- @path = path || '/etc/gordon.conf'
69
- @params = SimpleConfig.new( read_content )
70
- end
71
-
72
- # Expose all parameters of the configuration file.
73
- def method_missing(name)
74
- @params[name]
75
- end
76
-
77
- private
78
-
79
- def read_content
80
- f = inspec.file(@path)
81
- # Test if the path exist and that it's a file
82
- if f.file?
83
- # Retrieve the file's contents
84
- f.content
85
- else
86
- # If the file doesn't exist, skip all tests that use gordon_config
87
- skip_resource "Can't read config from #{@path}."
88
- end
89
- end
90
- end
91
- ```
92
-
93
- For a full example, see our [example resource](https://github.com/chef/inspec/blob/master/examples/profile/libraries/gordon_config.rb).
1
+ ---
2
+ title: Resource DSL
3
+ ---
4
+
5
+ # Resource DSL
6
+
7
+ InSpec provides a mechanism for defining custom resources. These become
8
+ available with their respective names and provide easy functionality to
9
+ profiles.
10
+
11
+ ## Resource location
12
+
13
+ Resources may be added to profiles in the libraries folder:
14
+
15
+ ```bash
16
+ $ tree examples/profile
17
+ examples/profile
18
+ ...
19
+ ├── libraries
20
+ │   └── gordon_config.rb
21
+ ```
22
+
23
+ ## Resource structure
24
+
25
+ The smallest possible resource takes this form:
26
+
27
+ ```ruby
28
+ class Tiny < Inspec.resource(1)
29
+ name 'tiny'
30
+ end
31
+ ```
32
+
33
+ Resources are written as a regular Ruby class which inherits from
34
+ Inspec.resource. The number (1) specifies the version this resource
35
+ plugin targets. As InSpec evolves, this interface may change and may
36
+ require a higher version.
37
+
38
+ The following attributes can be configured:
39
+
40
+ * name - Identifier of the resource (required)
41
+ * desc - Description of the resource (optional)
42
+ * example - Example usage of the resource (optional)
43
+
44
+ The following methods are available to the resource:
45
+
46
+ * inspec - Contains a registry of all other resources to interact with the operating system or target in general.
47
+ * skip\_resource - A resource may call this method to indicate, that requirements aren't met. All tests that use this resource will be marked as skipped.
48
+
49
+ The following example shows a full resource using attributes and methods
50
+ to provide simple access to a configuration file:
51
+
52
+ ```ruby
53
+ class GordonConfig < Inspec.resource(1)
54
+ name 'gordon_config'
55
+
56
+ desc '
57
+ Resource description ...
58
+ '
59
+
60
+ example '
61
+ describe gordon_config do
62
+ its("signal") { should eq "on" }
63
+ end
64
+ '
65
+
66
+ # Load the configuration file on initialization
67
+ def initialize(path = nil)
68
+ @path = path || '/etc/gordon.conf'
69
+ @params = SimpleConfig.new( read_content )
70
+ end
71
+
72
+ # Expose all parameters of the configuration file.
73
+ def method_missing(name)
74
+ @params[name]
75
+ end
76
+
77
+ private
78
+
79
+ def read_content
80
+ f = inspec.file(@path)
81
+ # Test if the path exist and that it's a file
82
+ if f.file?
83
+ # Retrieve the file's contents
84
+ f.content
85
+ else
86
+ # If the file doesn't exist, skip all tests that use gordon_config
87
+ skip_resource "Can't read config from #{@path}."
88
+ end
89
+ end
90
+ end
91
+ ```
92
+
93
+ For a full example, see our [example resource](https://github.com/chef/inspec/blob/master/examples/profile/libraries/gordon_config.rb).
@@ -1,99 +1,99 @@
1
- # InSpec Glossary
2
-
3
- ## Basic Syntax
4
- ```
5
- describe foo('/path/to/foo.txt') do
6
- its('blah') { should cmp '123' }
7
- it { should exist }
8
- it { should be_reasonable }
9
- it { should_not be_ridiculous }
10
- end
11
- ```
12
- ## Basic Elements:
13
-
14
- ### describe **foo**, where
15
-
16
- * `foo` is the _resource_
17
-
18
- ### describe foo **('/path/to/foo.txt')**, where
19
-
20
- * `'/path/to/foo.txt'` is the _resource parameter_
21
-
22
- ## Tests:
23
-
24
- ### **its('blah') { should cmp '123' }** is an _individual test_, where
25
-
26
- * `blah` is a _property_
27
- * { should cmp '123' } is a _condition statement_
28
- * `should` is the _condition_
29
- * `cmp` is the _matcher_
30
- * `'123'` is the _expected result_
31
-
32
- ### **{ should exist }** is a _condition statement_, where
33
-
34
- * `should` is the _condition_
35
- * `exist` is the _matcher_
36
-
37
- ### **{ should be\_reasonable }** is a _condition statement_, where
38
-
39
- * `should` is the _condition_
40
- * `be_reasonable` is the _matcher_
41
-
42
- ### **{ should\_not be\_ridiculous }** is a _negative condition statement_, where
43
-
44
- * `should_not` is the _negative condition_
45
- * `be_ridiculous` is the _matcher_
46
-
47
- ## Advanced Syntax
48
-
49
- ```
50
- describe foos('/path/to/foo.txt', ssl_verify: true).where { names == 'blah' } do
51
- its('jared') { should cmp >= 123 }
52
- its('jared.sort.first.monkey') { should be `loud` }
53
- its(['jared', 'monkey.with.dots']) { should be `loud` }
54
- end
55
- ```
56
-
57
- ## Advanced Elements:
58
-
59
- ### describe **foos**, where
60
-
61
- * `foos` is a _plural resource_
62
-
63
- ### describe foos **('/path/to/foo.txt', ssl_verify: true)**, where
64
-
65
- * `'/path/to/foo.txt'` and `ssl_verify: true` are the _resource parameters_. Resources take one or more parameters.
66
-
67
- ## Filters:
68
-
69
- ### describe foos ('/path/to/foo.txt', ssl_verify: true)**.where { names == 'blah' }**
70
-
71
- * `.where { names == 'blah' }` is an example of a **filter**.
72
- * `{ names == 'blah' }` is an example of a _filter clause_
73
- * Some resources support one or more filters.
74
- * Filters are used on plural resources.
75
- * Some resources, such as `etc_hosts` are explicitly plural, while others, such as `passwd` are implicitly plural.
76
-
77
- ### **{ names == 'my-name' && spots == true }** are filter criteria
78
-
79
- * `names` compares output to `blah`
80
- * `has spots` evaluates to `true` or `false`
81
-
82
- ## Properties:
83
-
84
- ### **its('jared') { should cmp >= 123 }**
85
-
86
- * `jared` is the _property_
87
-
88
- ### **{ should cmp >= 123 }** is a conditional statement that uses a matcher with an operator and expected value.
89
-
90
- * `cmp` is the _matcher_
91
- * `>=` is the operator (some matchers accept operators)
92
- * `123` is the expected value
93
-
94
- ## Properties with advanced usage:
95
-
96
- ### Some properties may have advanced usage:
97
- #### **its `('jared.sort.first.monkey') { should be `loud` }`**
98
-
99
- * `jared.sort.first.monkey` is an example of the `jared` property with an advanced usage
1
+ # InSpec Glossary
2
+
3
+ ## Basic Syntax
4
+ ```
5
+ describe foo('/path/to/foo.txt') do
6
+ its('blah') { should cmp '123' }
7
+ it { should exist }
8
+ it { should be_reasonable }
9
+ it { should_not be_ridiculous }
10
+ end
11
+ ```
12
+ ## Basic Elements:
13
+
14
+ ### describe **foo**, where
15
+
16
+ * `foo` is the _resource_
17
+
18
+ ### describe foo **('/path/to/foo.txt')**, where
19
+
20
+ * `'/path/to/foo.txt'` is the _resource parameter_
21
+
22
+ ## Tests:
23
+
24
+ ### **its('blah') { should cmp '123' }** is an _individual test_, where
25
+
26
+ * `blah` is a _property_
27
+ * { should cmp '123' } is a _condition statement_
28
+ * `should` is the _condition_
29
+ * `cmp` is the _matcher_
30
+ * `'123'` is the _expected result_
31
+
32
+ ### **{ should exist }** is a _condition statement_, where
33
+
34
+ * `should` is the _condition_
35
+ * `exist` is the _matcher_
36
+
37
+ ### **{ should be\_reasonable }** is a _condition statement_, where
38
+
39
+ * `should` is the _condition_
40
+ * `be_reasonable` is the _matcher_
41
+
42
+ ### **{ should\_not be\_ridiculous }** is a _negative condition statement_, where
43
+
44
+ * `should_not` is the _negative condition_
45
+ * `be_ridiculous` is the _matcher_
46
+
47
+ ## Advanced Syntax
48
+
49
+ ```
50
+ describe foos('/path/to/foo.txt', ssl_verify: true).where { names == 'blah' } do
51
+ its('jared') { should cmp >= 123 }
52
+ its('jared.sort.first.monkey') { should be `loud` }
53
+ its(['jared', 'monkey.with.dots']) { should be `loud` }
54
+ end
55
+ ```
56
+
57
+ ## Advanced Elements:
58
+
59
+ ### describe **foos**, where
60
+
61
+ * `foos` is a _plural resource_
62
+
63
+ ### describe foos **('/path/to/foo.txt', ssl_verify: true)**, where
64
+
65
+ * `'/path/to/foo.txt'` and `ssl_verify: true` are the _resource parameters_. Resources take one or more parameters.
66
+
67
+ ## Filters:
68
+
69
+ ### describe foos ('/path/to/foo.txt', ssl_verify: true)**.where { names == 'blah' }**
70
+
71
+ * `.where { names == 'blah' }` is an example of a **filter**.
72
+ * `{ names == 'blah' }` is an example of a _filter clause_
73
+ * Some resources support one or more filters.
74
+ * Filters are used on plural resources.
75
+ * Some resources, such as `etc_hosts` are explicitly plural, while others, such as `passwd` are implicitly plural.
76
+
77
+ ### **{ names == 'my-name' && spots == true }** are filter criteria
78
+
79
+ * `names` compares output to `blah`
80
+ * `has spots` evaluates to `true` or `false`
81
+
82
+ ## Properties:
83
+
84
+ ### **its('jared') { should cmp >= 123 }**
85
+
86
+ * `jared` is the _property_
87
+
88
+ ### **{ should cmp >= 123 }** is a conditional statement that uses a matcher with an operator and expected value.
89
+
90
+ * `cmp` is the _matcher_
91
+ * `>=` is the operator (some matchers accept operators)
92
+ * `123` is the expected value
93
+
94
+ ## Properties with advanced usage:
95
+
96
+ ### Some properties may have advanced usage:
97
+ #### **its `('jared.sort.first.monkey') { should be `loud` }`**
98
+
99
+ * `jared.sort.first.monkey` is an example of the `jared` property with an advanced usage
@@ -1,192 +1,192 @@
1
- ---
2
- title: InSpec Integration with Habitat
3
- ---
4
-
5
- # Habitat Integration
6
-
7
- InSpec provides an easy method to create an executable Habitat package for an InSpec profile. When run via the Habitat Supervisor, the package will run InSpec with your profile and write out its findings to a JSON file. This provides the ability to ship your compliance controls alongside your Habitat-packaged application and continuously run InSpec, providing you *Continuous Compliance.*
8
-
9
- ## What is Habitat?
10
-
11
- Habitat by Chef is our new Application Automation tool that aims to make it easy, safe, and fast to build, deploy, and manage applications. From build dependencies, runtime dependencies, dynamic configuration, and service discovery (just to name a few), Habitat packages the automation with the application instead of relying on an underlying platform.
12
-
13
- To learn more about Habitat and try our demos and tutorials, visit [https://www.habitat.sh](https://www.habitat.sh).
14
-
15
- ## Using the Habitat Integration
16
-
17
- After creating a Habitat package for an InSpec profile (see CLI commands below) and uploading the package to a Habitat Depot or manually distributing to a host, start the Habitat Supervisor with your package:
18
-
19
- ```bash
20
- hab start adamleff/inspec-profile-frontend1
21
- ```
22
-
23
- The Habitat Supervisor will install InSpec and execute your profile in a loop. By default, the loop runs every 300 seconds but can be changed via the `sleep_time` configuration value:
24
-
25
- ```bash
26
- HAB_INSPEC_PROFILE_FRONTEND1="sleep_time = 60" hab start adamleff/inspec-profile-frontend1
27
- ```
28
-
29
- The Habitat Supervisor will display output like this:
30
-
31
- ```
32
- hab start adamleff/inspec-profile-frontend1
33
- ∵ Missing package for core/hab-sup/0.17.0
34
- » Installing core/hab-sup/0.17.0
35
- ↓ Downloading core/hab-sup/0.17.0/20170214235450
36
- 1.68 MB / 1.68 MB - [=========================================================================] 100.00 % 7.43 MB/s
37
-
38
- ... more Habitat output here ...
39
-
40
- hab-sup(MN): Starting adamleff/inspec-profile-frontend1/0.1.0/20170328173005
41
- hab-sup(CS): adamleff/inspec-profile-frontend1/0.1.0/20170328173005 is not installed
42
- ↓ Downloading adamleff-20160617201047 public origin key
43
- 79 B / 79 B | [===============================================================================] 100.00 % 2.64 MB/s
44
- ☑ Cached adamleff-20160617201047 public origin key
45
- ↓ Downloading chef/inspec/1.17.0/20170321214949
46
- 16.93 MB / 16.93 MB / [======================================================================] 100.00 % 10.49 MB/s
47
-
48
- ... more Habitat output here ...
49
-
50
- ★ Install of adamleff/inspec-profile-frontend1/0.1.0/20170328173005 complete with 9 new packages installed.
51
- hab-sup(MR): Butterfly Member ID d9bd761e18c144469d755b1b97406eb2
52
- hab-sup(MR): Starting butterfly on 0.0.0.0:9638
53
- hab-sup(MR): Starting http-gateway on 0.0.0.0:9631
54
- inspec-profile-frontend1.default(SR): Initializing
55
- inspec-profile-frontend1.default(SV): Starting process as user=hab, group=hab
56
- inspec-profile-frontend1.default(O): Executing InSpec for adamleff/inspec-profile-frontend1
57
- inspec-profile-frontend1.default(O): InSpec run completed successfully.
58
- inspec-profile-frontend1.default(O): sleeping for 300 seconds
59
- ```
60
-
61
- The above sample output shows the supervisor starting, downloading the necessary dependencies for the supervisor and the InSpec profile, and then shows the supervisor running InSpec successfully.
62
-
63
- InSpec will write a JSON file in the `${svc_var_path}/inspec_results` directory containing the results of the last InSpec run. For example, for the `adamleff/inspec-profile-frontend1` package, the InSpec results will be at:
64
-
65
- ```
66
- /hab/svc/inspec-profile-frontend1/var/inspec_results/inspec-profile-frontend1.json
67
- ```
68
-
69
- ## InSpec Habitat CLI Commands
70
-
71
- ### inspec habitat profile create
72
-
73
- Create a Habitat package for an InSpec profile. InSpec will validate the profile, fetch and vendor any dependencies (if necessary), and build the Habitat package with a dependency on the latest InSpec. The resulting package will be saved to the current working directory.
74
-
75
- The package file will be named:
76
-
77
- ```
78
- HABITAT_ORIGIN-inspec-profile-PROFILE_NAME-PROFILE_VERSION-BUILD_ID-x86_64-linux.hart
79
- ```
80
-
81
- For example:
82
-
83
- ```
84
- adamleff-inspec-profile-frontend1-0.1.0-20170328173005-x86_64-linux.hart
85
- ```
86
-
87
- #### Syntax
88
-
89
- ```bash
90
- inspec habitat profile create PROFILE_DIRECTORY
91
- ```
92
-
93
- Example:
94
-
95
- ```bash
96
- inspec habitat profile create ~/profiles/frontend1
97
- ```
98
-
99
- ### inspec habitat profile create
100
-
101
- Create a Habitat package for an InSpec profile. InSpec will validate the profile, fetch and vendor any dependencies (if necessary), and build the Habitat package with a dependency on the latest InSpec. The resulting package will be saved to the current working directory.
102
-
103
- The package can then be manually uploaded to a Habitat Depot or manually distributed to a host and installed via `hab pkg install`.
104
-
105
- The package file will be named:
106
-
107
- ```
108
- HABITAT_ORIGIN-inspec-profile-PROFILE_NAME-PROFILE_VERSION-BUILD_ID-x86_64-linux.hart
109
- ```
110
-
111
- For example:
112
-
113
- ```
114
- adamleff-inspec-profile-frontend1-0.1.0-20170328173005-x86_64-linux.hart
115
- ```
116
-
117
- #### Syntax
118
-
119
- ```bash
120
- inspec habitat profile create PROFILE_DIRECTORY
121
- ```
122
-
123
- #### Example
124
-
125
- ```bash
126
- inspec habitat profile create ~/profiles/frontend1
127
- ```
128
-
129
- #### Example Output
130
-
131
- ```
132
- $ habitat profile create ~/profiles/frontend1
133
- [2017-03-28T13:29:32-04:00] INFO: Creating a Habitat artifact for profile: /Users/aleff/profiles/frontend1
134
- [2017-03-28T13:29:32-04:00] INFO: Checking to see if Habitat is installed...
135
- [2017-03-28T13:29:32-04:00] INFO: Copying profile contents to the work directory...
136
- [2017-03-28T13:29:32-04:00] INFO: Generating Habitat plan at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/plan.sh...
137
- [2017-03-28T13:29:32-04:00] INFO: Generating a Habitat run hook at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/hooks/run...
138
- [2017-03-28T13:29:32-04:00] INFO: Generating Habitat's default.toml configuration...
139
- [2017-03-28T13:29:32-04:00] INFO: Building our Habitat artifact...
140
- hab-studio: Destroying Studio at /hab/studios/src (default)
141
- hab-studio: Creating Studio at /hab/studios/src (default)
142
- hab-studio: Importing adamleff secret origin key
143
- » Importing origin key from standard input
144
- ★ Imported secret origin key adamleff-20160617201047.
145
- » Installing core/hab-backline
146
- ↓ Downloading core/hab-backline/0.19.0/20170311034116
147
- 2.17 KB / 2.17 KB / [=========================================================================] 100.00 % 4.33 MB/s
148
-
149
- ... more Habitat output here...
150
-
151
- [2017-03-28T13:30:18-04:00] INFO: Copying artifact to /Users/aleff...
152
- ```
153
-
154
- ### inspec habitat profile upload
155
-
156
- Create and then upload a Habitat package for an InSpec profile. Like the `inspec habitat profile create` command, InSpec will validate the profile, fetch and vendor any dependencies (if necessary), and build the Habitat package with a dependency on the latest InSpec. However, instead of saving the package locally to the workstation, InSpec will upload it to the depot defined in the `HAB_DEPOT` environment variable. If `HAB_DEPOT` is not defined, the package will be uploaded to the public Habitat depot at [https://app.habitat.sh](https://app.habitat.sh).
157
-
158
- #### Syntax
159
-
160
- ```bash
161
- inspec habitat profile upload PROFILE_DIRECTORY
162
- ```
163
-
164
- #### Example
165
-
166
- ```bash
167
- inspec habitat profile upload ~/profiles/frontend1
168
- ```
169
-
170
- #### Example Output
171
- ```
172
- [2017-03-28T13:29:32-04:00] INFO: Creating a Habitat artifact for profile: /Users/aleff/profiles/frontend1
173
- [2017-03-28T13:29:32-04:00] INFO: Checking to see if Habitat is installed...
174
- [2017-03-28T13:29:32-04:00] INFO: Copying profile contents to the work directory...
175
- [2017-03-28T13:29:32-04:00] INFO: Generating Habitat plan at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/plan.sh...
176
- [2017-03-28T13:29:32-04:00] INFO: Generating a Habitat run hook at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/hooks/run...
177
- [2017-03-28T13:29:32-04:00] INFO: Generating Habitat's default.toml configuration...
178
- [2017-03-28T13:29:32-04:00] INFO: Building our Habitat artifact...
179
- hab-studio: Destroying Studio at /hab/studios/src (default)
180
- hab-studio: Creating Studio at /hab/studios/src (default)
181
- hab-studio: Importing adamleff secret origin key
182
- » Importing origin key from standard input
183
- ★ Imported secret origin key adamleff-20160617201047.
184
- » Installing core/hab-backline
185
- ↓ Downloading core/hab-backline/0.19.0/20170311034116
186
- 2.17 KB / 2.17 KB / [=========================================================================] 100.00 % 4.33 MB/s
187
-
188
- ... more Habitat output here...
189
-
190
- [2017-03-28T13:30:18-04:00] INFO: Uploading the Habitat artifact to our Depot...
191
- [2017-03-28T13:30:23-04:00] INFO: Upload complete!
1
+ ---
2
+ title: InSpec Integration with Habitat
3
+ ---
4
+
5
+ # Habitat Integration
6
+
7
+ InSpec provides an easy method to create an executable Habitat package for an InSpec profile. When run via the Habitat Supervisor, the package will run InSpec with your profile and write out its findings to a JSON file. This provides the ability to ship your compliance controls alongside your Habitat-packaged application and continuously run InSpec, providing you *Continuous Compliance.*
8
+
9
+ ## What is Habitat?
10
+
11
+ Habitat by Chef is our new Application Automation tool that aims to make it easy, safe, and fast to build, deploy, and manage applications. From build dependencies, runtime dependencies, dynamic configuration, and service discovery (just to name a few), Habitat packages the automation with the application instead of relying on an underlying platform.
12
+
13
+ To learn more about Habitat and try our demos and tutorials, visit [https://www.habitat.sh](https://www.habitat.sh).
14
+
15
+ ## Using the Habitat Integration
16
+
17
+ After creating a Habitat package for an InSpec profile (see CLI commands below) and uploading the package to a Habitat Depot or manually distributing to a host, start the Habitat Supervisor with your package:
18
+
19
+ ```bash
20
+ hab start adamleff/inspec-profile-frontend1
21
+ ```
22
+
23
+ The Habitat Supervisor will install InSpec and execute your profile in a loop. By default, the loop runs every 300 seconds but can be changed via the `sleep_time` configuration value:
24
+
25
+ ```bash
26
+ HAB_INSPEC_PROFILE_FRONTEND1="sleep_time = 60" hab start adamleff/inspec-profile-frontend1
27
+ ```
28
+
29
+ The Habitat Supervisor will display output like this:
30
+
31
+ ```
32
+ hab start adamleff/inspec-profile-frontend1
33
+ ∵ Missing package for core/hab-sup/0.17.0
34
+ » Installing core/hab-sup/0.17.0
35
+ ↓ Downloading core/hab-sup/0.17.0/20170214235450
36
+ 1.68 MB / 1.68 MB - [=========================================================================] 100.00 % 7.43 MB/s
37
+
38
+ ... more Habitat output here ...
39
+
40
+ hab-sup(MN): Starting adamleff/inspec-profile-frontend1/0.1.0/20170328173005
41
+ hab-sup(CS): adamleff/inspec-profile-frontend1/0.1.0/20170328173005 is not installed
42
+ ↓ Downloading adamleff-20160617201047 public origin key
43
+ 79 B / 79 B | [===============================================================================] 100.00 % 2.64 MB/s
44
+ ☑ Cached adamleff-20160617201047 public origin key
45
+ ↓ Downloading chef/inspec/1.17.0/20170321214949
46
+ 16.93 MB / 16.93 MB / [======================================================================] 100.00 % 10.49 MB/s
47
+
48
+ ... more Habitat output here ...
49
+
50
+ ★ Install of adamleff/inspec-profile-frontend1/0.1.0/20170328173005 complete with 9 new packages installed.
51
+ hab-sup(MR): Butterfly Member ID d9bd761e18c144469d755b1b97406eb2
52
+ hab-sup(MR): Starting butterfly on 0.0.0.0:9638
53
+ hab-sup(MR): Starting http-gateway on 0.0.0.0:9631
54
+ inspec-profile-frontend1.default(SR): Initializing
55
+ inspec-profile-frontend1.default(SV): Starting process as user=hab, group=hab
56
+ inspec-profile-frontend1.default(O): Executing InSpec for adamleff/inspec-profile-frontend1
57
+ inspec-profile-frontend1.default(O): InSpec run completed successfully.
58
+ inspec-profile-frontend1.default(O): sleeping for 300 seconds
59
+ ```
60
+
61
+ The above sample output shows the supervisor starting, downloading the necessary dependencies for the supervisor and the InSpec profile, and then shows the supervisor running InSpec successfully.
62
+
63
+ InSpec will write a JSON file in the `${svc_var_path}/inspec_results` directory containing the results of the last InSpec run. For example, for the `adamleff/inspec-profile-frontend1` package, the InSpec results will be at:
64
+
65
+ ```
66
+ /hab/svc/inspec-profile-frontend1/var/inspec_results/inspec-profile-frontend1.json
67
+ ```
68
+
69
+ ## InSpec Habitat CLI Commands
70
+
71
+ ### inspec habitat profile create
72
+
73
+ Create a Habitat package for an InSpec profile. InSpec will validate the profile, fetch and vendor any dependencies (if necessary), and build the Habitat package with a dependency on the latest InSpec. The resulting package will be saved to the current working directory.
74
+
75
+ The package file will be named:
76
+
77
+ ```
78
+ HABITAT_ORIGIN-inspec-profile-PROFILE_NAME-PROFILE_VERSION-BUILD_ID-x86_64-linux.hart
79
+ ```
80
+
81
+ For example:
82
+
83
+ ```
84
+ adamleff-inspec-profile-frontend1-0.1.0-20170328173005-x86_64-linux.hart
85
+ ```
86
+
87
+ #### Syntax
88
+
89
+ ```bash
90
+ inspec habitat profile create PROFILE_DIRECTORY
91
+ ```
92
+
93
+ Example:
94
+
95
+ ```bash
96
+ inspec habitat profile create ~/profiles/frontend1
97
+ ```
98
+
99
+ ### inspec habitat profile create
100
+
101
+ Create a Habitat package for an InSpec profile. InSpec will validate the profile, fetch and vendor any dependencies (if necessary), and build the Habitat package with a dependency on the latest InSpec. The resulting package will be saved to the current working directory.
102
+
103
+ The package can then be manually uploaded to a Habitat Depot or manually distributed to a host and installed via `hab pkg install`.
104
+
105
+ The package file will be named:
106
+
107
+ ```
108
+ HABITAT_ORIGIN-inspec-profile-PROFILE_NAME-PROFILE_VERSION-BUILD_ID-x86_64-linux.hart
109
+ ```
110
+
111
+ For example:
112
+
113
+ ```
114
+ adamleff-inspec-profile-frontend1-0.1.0-20170328173005-x86_64-linux.hart
115
+ ```
116
+
117
+ #### Syntax
118
+
119
+ ```bash
120
+ inspec habitat profile create PROFILE_DIRECTORY
121
+ ```
122
+
123
+ #### Example
124
+
125
+ ```bash
126
+ inspec habitat profile create ~/profiles/frontend1
127
+ ```
128
+
129
+ #### Example Output
130
+
131
+ ```
132
+ $ habitat profile create ~/profiles/frontend1
133
+ [2017-03-28T13:29:32-04:00] INFO: Creating a Habitat artifact for profile: /Users/aleff/profiles/frontend1
134
+ [2017-03-28T13:29:32-04:00] INFO: Checking to see if Habitat is installed...
135
+ [2017-03-28T13:29:32-04:00] INFO: Copying profile contents to the work directory...
136
+ [2017-03-28T13:29:32-04:00] INFO: Generating Habitat plan at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/plan.sh...
137
+ [2017-03-28T13:29:32-04:00] INFO: Generating a Habitat run hook at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/hooks/run...
138
+ [2017-03-28T13:29:32-04:00] INFO: Generating Habitat's default.toml configuration...
139
+ [2017-03-28T13:29:32-04:00] INFO: Building our Habitat artifact...
140
+ hab-studio: Destroying Studio at /hab/studios/src (default)
141
+ hab-studio: Creating Studio at /hab/studios/src (default)
142
+ hab-studio: Importing adamleff secret origin key
143
+ » Importing origin key from standard input
144
+ ★ Imported secret origin key adamleff-20160617201047.
145
+ » Installing core/hab-backline
146
+ ↓ Downloading core/hab-backline/0.19.0/20170311034116
147
+ 2.17 KB / 2.17 KB / [=========================================================================] 100.00 % 4.33 MB/s
148
+
149
+ ... more Habitat output here...
150
+
151
+ [2017-03-28T13:30:18-04:00] INFO: Copying artifact to /Users/aleff...
152
+ ```
153
+
154
+ ### inspec habitat profile upload
155
+
156
+ Create and then upload a Habitat package for an InSpec profile. Like the `inspec habitat profile create` command, InSpec will validate the profile, fetch and vendor any dependencies (if necessary), and build the Habitat package with a dependency on the latest InSpec. However, instead of saving the package locally to the workstation, InSpec will upload it to the depot defined in the `HAB_DEPOT` environment variable. If `HAB_DEPOT` is not defined, the package will be uploaded to the public Habitat depot at [https://app.habitat.sh](https://app.habitat.sh).
157
+
158
+ #### Syntax
159
+
160
+ ```bash
161
+ inspec habitat profile upload PROFILE_DIRECTORY
162
+ ```
163
+
164
+ #### Example
165
+
166
+ ```bash
167
+ inspec habitat profile upload ~/profiles/frontend1
168
+ ```
169
+
170
+ #### Example Output
171
+ ```
172
+ [2017-03-28T13:29:32-04:00] INFO: Creating a Habitat artifact for profile: /Users/aleff/profiles/frontend1
173
+ [2017-03-28T13:29:32-04:00] INFO: Checking to see if Habitat is installed...
174
+ [2017-03-28T13:29:32-04:00] INFO: Copying profile contents to the work directory...
175
+ [2017-03-28T13:29:32-04:00] INFO: Generating Habitat plan at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/plan.sh...
176
+ [2017-03-28T13:29:32-04:00] INFO: Generating a Habitat run hook at /var/folders/v5/z54gb76j2rs3wrn65hmtyf1r0000gp/T/inspec-habitat-exporter20170328-4932-kg2ltd/habitat/hooks/run...
177
+ [2017-03-28T13:29:32-04:00] INFO: Generating Habitat's default.toml configuration...
178
+ [2017-03-28T13:29:32-04:00] INFO: Building our Habitat artifact...
179
+ hab-studio: Destroying Studio at /hab/studios/src (default)
180
+ hab-studio: Creating Studio at /hab/studios/src (default)
181
+ hab-studio: Importing adamleff secret origin key
182
+ » Importing origin key from standard input
183
+ ★ Imported secret origin key adamleff-20160617201047.
184
+ » Installing core/hab-backline
185
+ ↓ Downloading core/hab-backline/0.19.0/20170311034116
186
+ 2.17 KB / 2.17 KB / [=========================================================================] 100.00 % 4.33 MB/s
187
+
188
+ ... more Habitat output here...
189
+
190
+ [2017-03-28T13:30:18-04:00] INFO: Uploading the Habitat artifact to our Depot...
191
+ [2017-03-28T13:30:23-04:00] INFO: Upload complete!
192
192
  ```