inspec-core 4.3.2 → 4.6.3

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 (285) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -21
  3. data/etc/deprecations.json +10 -0
  4. data/etc/plugin_filters.json +8 -0
  5. data/lib/bundles/inspec-compliance/api.rb +1 -1
  6. data/lib/bundles/inspec-compliance/configuration.rb +1 -1
  7. data/lib/bundles/inspec-compliance/http.rb +1 -1
  8. data/lib/bundles/inspec-compliance/support.rb +1 -1
  9. data/lib/bundles/inspec-compliance/target.rb +1 -1
  10. data/lib/bundles/inspec-supermarket.rb +3 -7
  11. data/lib/bundles/inspec-supermarket/api.rb +10 -13
  12. data/lib/bundles/inspec-supermarket/cli.rb +12 -15
  13. data/lib/bundles/inspec-supermarket/target.rb +7 -11
  14. data/lib/fetchers/git.rb +14 -15
  15. data/lib/fetchers/local.rb +6 -10
  16. data/lib/fetchers/mock.rb +3 -5
  17. data/lib/fetchers/url.rb +42 -44
  18. data/lib/inspec.rb +23 -24
  19. data/lib/inspec/archive/tar.rb +2 -6
  20. data/lib/inspec/archive/zip.rb +3 -7
  21. data/lib/inspec/backend.rb +8 -9
  22. data/lib/inspec/base_cli.rb +64 -65
  23. data/lib/inspec/cached_fetcher.rb +2 -3
  24. data/lib/inspec/cli.rb +136 -97
  25. data/lib/inspec/config.rb +71 -61
  26. data/lib/inspec/control_eval_context.rb +22 -18
  27. data/lib/inspec/dependencies/cache.rb +2 -3
  28. data/lib/inspec/dependencies/dependency_set.rb +2 -3
  29. data/lib/inspec/dependencies/lockfile.rb +8 -9
  30. data/lib/inspec/dependencies/requirement.rb +7 -8
  31. data/lib/inspec/dependencies/resolver.rb +5 -7
  32. data/lib/inspec/describe.rb +2 -6
  33. data/lib/inspec/dist.rb +20 -0
  34. data/lib/inspec/dsl.rb +4 -7
  35. data/lib/inspec/dsl_shared.rb +1 -2
  36. data/lib/inspec/env_printer.rb +11 -12
  37. data/lib/inspec/errors.rb +0 -4
  38. data/lib/inspec/exceptions.rb +0 -1
  39. data/lib/inspec/expect.rb +5 -8
  40. data/lib/inspec/fetcher.rb +7 -10
  41. data/lib/inspec/file_provider.rb +24 -24
  42. data/lib/inspec/formatters.rb +3 -3
  43. data/lib/inspec/formatters/base.rb +8 -8
  44. data/lib/inspec/globals.rb +2 -2
  45. data/lib/inspec/impact.rb +5 -7
  46. data/lib/inspec/input_registry.rb +84 -33
  47. data/lib/inspec/library_eval_context.rb +3 -6
  48. data/lib/inspec/log.rb +1 -5
  49. data/lib/inspec/metadata.rb +17 -16
  50. data/lib/inspec/method_source.rb +5 -9
  51. data/lib/inspec/objects.rb +10 -12
  52. data/lib/inspec/objects/control.rb +7 -9
  53. data/lib/inspec/objects/describe.rb +9 -11
  54. data/lib/inspec/objects/each_loop.rb +1 -3
  55. data/lib/inspec/objects/input.rb +24 -26
  56. data/lib/inspec/objects/list.rb +4 -6
  57. data/lib/inspec/objects/or_test.rb +2 -4
  58. data/lib/inspec/objects/ruby_helper.rb +3 -5
  59. data/lib/inspec/objects/tag.rb +0 -2
  60. data/lib/inspec/objects/test.rb +9 -11
  61. data/lib/inspec/objects/value.rb +3 -5
  62. data/lib/inspec/plugin/v1.rb +2 -2
  63. data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
  64. data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
  65. data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
  66. data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
  67. data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
  68. data/lib/inspec/plugin/v1/plugins.rb +15 -19
  69. data/lib/inspec/plugin/v1/registry.rb +0 -4
  70. data/lib/inspec/plugin/v2.rb +8 -8
  71. data/lib/inspec/plugin/v2/activator.rb +1 -1
  72. data/lib/inspec/plugin/v2/config_file.rb +6 -6
  73. data/lib/inspec/plugin/v2/filter.rb +13 -13
  74. data/lib/inspec/plugin/v2/installer.rb +36 -24
  75. data/lib/inspec/plugin/v2/loader.rb +28 -28
  76. data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
  77. data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
  78. data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
  79. data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
  80. data/lib/inspec/plugin/v2/registry.rb +7 -7
  81. data/lib/inspec/polyfill.rb +0 -3
  82. data/lib/inspec/profile.rb +55 -63
  83. data/lib/inspec/profile_context.rb +27 -30
  84. data/lib/inspec/profile_vendor.rb +6 -9
  85. data/lib/inspec/reporters.rb +24 -24
  86. data/lib/inspec/reporters/automate.rb +17 -19
  87. data/lib/inspec/reporters/base.rb +1 -1
  88. data/lib/inspec/reporters/cli.rb +88 -91
  89. data/lib/inspec/reporters/json.rb +2 -4
  90. data/lib/inspec/reporters/json_automate.rb +1 -3
  91. data/lib/inspec/reporters/json_min.rb +1 -3
  92. data/lib/inspec/reporters/junit.rb +26 -28
  93. data/lib/inspec/reporters/yaml.rb +1 -3
  94. data/lib/inspec/require_loader.rb +0 -4
  95. data/lib/inspec/resource.rb +4 -125
  96. data/lib/inspec/resources.rb +121 -0
  97. data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
  98. data/lib/{resources → inspec/resources}/apache.rb +13 -14
  99. data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
  100. data/lib/{resources → inspec/resources}/apt.rb +17 -17
  101. data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
  102. data/lib/{resources → inspec/resources}/auditd.rb +62 -64
  103. data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
  104. data/lib/{resources → inspec/resources}/bash.rb +6 -8
  105. data/lib/{resources → inspec/resources}/bond.rb +15 -14
  106. data/lib/{resources → inspec/resources}/bridge.rb +8 -8
  107. data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
  108. data/lib/{resources → inspec/resources}/command.rb +11 -10
  109. data/lib/{resources → inspec/resources}/cpan.rb +12 -12
  110. data/lib/{resources → inspec/resources}/cran.rb +9 -9
  111. data/lib/{resources → inspec/resources}/crontab.rb +47 -48
  112. data/lib/{resources → inspec/resources}/csv.rb +5 -5
  113. data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
  114. data/lib/{resources → inspec/resources}/directory.rb +5 -7
  115. data/lib/{resources → inspec/resources}/docker.rb +63 -63
  116. data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
  117. data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
  118. data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
  119. data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
  120. data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
  121. data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
  122. data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
  123. data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
  124. data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
  125. data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
  126. data/lib/{resources → inspec/resources}/file.rb +80 -79
  127. data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
  128. data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
  129. data/lib/{resources → inspec/resources}/gem.rb +12 -12
  130. data/lib/{resources → inspec/resources}/groups.rb +28 -27
  131. data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
  132. data/lib/{resources → inspec/resources}/host.rb +31 -29
  133. data/lib/{resources → inspec/resources}/http.rb +24 -24
  134. data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
  135. data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
  136. data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
  137. data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
  138. data/lib/{resources → inspec/resources}/ini.rb +7 -8
  139. data/lib/{resources → inspec/resources}/interface.rb +30 -30
  140. data/lib/{resources → inspec/resources}/iptables.rb +8 -8
  141. data/lib/{resources → inspec/resources}/json.rb +8 -10
  142. data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
  143. data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
  144. data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
  145. data/lib/{resources → inspec/resources}/ksh.rb +6 -8
  146. data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
  147. data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
  148. data/lib/{resources → inspec/resources}/mount.rb +6 -8
  149. data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
  150. data/lib/inspec/resources/mysql.rb +81 -0
  151. data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
  152. data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
  153. data/lib/{resources → inspec/resources}/nginx.rb +16 -17
  154. data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
  155. data/lib/{resources → inspec/resources}/npm.rb +9 -10
  156. data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
  157. data/lib/{resources → inspec/resources}/oneget.rb +8 -8
  158. data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
  159. data/lib/{resources → inspec/resources}/os.rb +6 -8
  160. data/lib/{resources → inspec/resources}/os_env.rb +11 -12
  161. data/lib/{resources → inspec/resources}/package.rb +66 -65
  162. data/lib/{resources → inspec/resources}/packages.rb +13 -13
  163. data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
  164. data/lib/{resources → inspec/resources}/passwd.rb +18 -19
  165. data/lib/{resources → inspec/resources}/pip.rb +19 -19
  166. data/lib/{resources → inspec/resources}/platform.rb +9 -11
  167. data/lib/{resources → inspec/resources}/port.rb +134 -136
  168. data/lib/{resources → inspec/resources}/postgres.rb +40 -32
  169. data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
  170. data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
  171. data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
  172. data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
  173. data/lib/{resources → inspec/resources}/powershell.rb +17 -13
  174. data/lib/{resources → inspec/resources}/processes.rb +29 -29
  175. data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
  176. data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
  177. data/lib/inspec/resources/script.rb +1 -0
  178. data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
  179. data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
  180. data/lib/{resources → inspec/resources}/service.rb +74 -75
  181. data/lib/{resources → inspec/resources}/shadow.rb +44 -45
  182. data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
  183. data/lib/{resources → inspec/resources}/ssl.rb +28 -29
  184. data/lib/inspec/resources/sys_info.rb +30 -0
  185. data/lib/{resources → inspec/resources}/toml.rb +5 -7
  186. data/lib/{resources → inspec/resources}/users.rb +65 -65
  187. data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
  188. data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
  189. data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
  190. data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
  191. data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
  192. data/lib/{resources → inspec/resources}/wmi.rb +7 -8
  193. data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
  194. data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
  195. data/lib/{resources → inspec/resources}/xml.rb +7 -7
  196. data/lib/{resources → inspec/resources}/yaml.rb +5 -6
  197. data/lib/{resources → inspec/resources}/yum.rb +10 -10
  198. data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
  199. data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
  200. data/lib/inspec/rspec_extensions.rb +24 -8
  201. data/lib/inspec/rule.rb +14 -15
  202. data/lib/inspec/runner.rb +28 -28
  203. data/lib/inspec/runner_mock.rb +1 -5
  204. data/lib/inspec/runner_rspec.rb +18 -20
  205. data/lib/inspec/runtime_profile.rb +2 -5
  206. data/lib/inspec/schema.rb +142 -143
  207. data/lib/inspec/secrets.rb +3 -7
  208. data/lib/inspec/secrets/yaml.rb +3 -5
  209. data/lib/inspec/shell.rb +11 -15
  210. data/lib/inspec/shell_detector.rb +6 -7
  211. data/lib/inspec/source_reader.rb +4 -8
  212. data/lib/inspec/ui.rb +33 -39
  213. data/lib/inspec/ui_table_helper.rb +12 -0
  214. data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
  215. data/lib/{utils → inspec/utils}/convert.rb +0 -4
  216. data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
  217. data/lib/inspec/utils/deprecation.rb +6 -0
  218. data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
  219. data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
  220. data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
  221. data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
  222. data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
  223. data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
  224. data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
  225. data/lib/{utils → inspec/utils}/filter.rb +30 -33
  226. data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
  227. data/lib/{utils → inspec/utils}/find_files.rb +9 -12
  228. data/lib/{utils → inspec/utils}/hash.rb +1 -5
  229. data/lib/inspec/utils/json_log.rb +15 -0
  230. data/lib/inspec/utils/latest_version.rb +13 -0
  231. data/lib/{utils → inspec/utils}/modulator.rb +0 -3
  232. data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
  233. data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
  234. data/lib/{utils → inspec/utils}/parser.rb +45 -45
  235. data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
  236. data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
  237. data/lib/{utils → inspec/utils}/spdx.rb +1 -4
  238. data/lib/{utils → inspec/utils}/spdx.txt +0 -0
  239. data/lib/inspec/utils/telemetry.rb +3 -3
  240. data/lib/inspec/utils/telemetry/collector.rb +30 -9
  241. data/lib/inspec/utils/telemetry/data_series.rb +3 -1
  242. data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
  243. data/lib/inspec/version.rb +1 -1
  244. data/lib/matchers/matchers.rb +22 -25
  245. data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
  246. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
  247. data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
  248. data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
  249. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
  250. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
  251. data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
  252. data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
  253. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
  254. data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
  255. data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
  256. data/lib/plugins/inspec-habitat/Berksfile +2 -2
  257. data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
  258. data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
  259. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
  260. data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
  261. data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
  262. data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
  263. data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
  264. data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
  265. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
  266. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
  267. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
  268. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
  269. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
  270. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
  271. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
  272. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
  273. data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
  274. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
  275. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
  276. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
  277. data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
  278. data/lib/source_readers/flat.rb +6 -10
  279. data/lib/source_readers/inspec.rb +8 -12
  280. metadata +139 -140
  281. data/lib/resources/mysql.rb +0 -82
  282. data/lib/resources/sys_info.rb +0 -28
  283. data/lib/utils/deprecation.rb +0 -6
  284. data/lib/utils/json_log.rb +0 -18
  285. data/lib/utils/latest_version.rb +0 -22
@@ -10,13 +10,13 @@ PROFILE_PATH="{{pkg.path}}/{{pkg.name}}-{{pkg.version}}.tar.gz"
10
10
 
11
11
  while true; do
12
12
  echo "Executing ${PROFILE_IDENT}"
13
- exec inspec exec ${PROFILE_PATH} --json-config ${CONFIG} 2>&1 | tee ${LOG_FILE}
13
+ exec <%= Inspec::Dist::EXEC_NAME %> exec ${PROFILE_PATH} --json-config ${CONFIG} 2>&1 | tee ${LOG_FILE}
14
14
 
15
15
  exit_code=$?
16
16
  if [ $exit_code -eq 1 ]; then
17
- echo "InSpec run failed."
17
+ echo "<%= Inspec::Dist::PRODUCT_NAME %> run failed."
18
18
  else
19
- echo "InSpec run completed successfully."
19
+ echo "<%= Inspec::Dist::PRODUCT_NAME %> run completed successfully."
20
20
  if [ $exit_code -eq 0 ]; then
21
21
  echo "No controls failed or were skipped."
22
22
  elif [ $exit_code -eq 100 ]; then
@@ -18,7 +18,7 @@ do_before() {
18
18
  return 1
19
19
  fi
20
20
 
21
- # Execute an 'inspec compliance login' if a profile needs to be fetched from
21
+ # Execute an '<%= Inspec::Dist::EXEC_NAME %> compliance login' if a profile needs to be fetched from
22
22
  # the Automate server
23
23
  if [ "$(grep "compliance: " "$PLAN_CONTEXT/../inspec.yml")" ]; then
24
24
  _do_compliance_login;
@@ -29,10 +29,10 @@ do_setup_environment() {
29
29
  set_buildtime_env PROFILE_CACHE_DIR "$HAB_CACHE_SRC_PATH/$pkg_dirname"
30
30
  set_buildtime_env ARCHIVE_NAME "$pkg_name-$pkg_version.tar.gz"
31
31
 
32
- # InSpec loads `pry` which tries to expand `~`. This fails if HOME isn't set.
32
+ # <%= Inspec::Dist::PRODUCT_NAME %> loads `pry` which tries to expand `~`. This fails if HOME isn't set.
33
33
  set_runtime_env HOME "$pkg_svc_var_path"
34
34
 
35
- # InSpec will create a `.inspec` directory in the user's home directory.
35
+ # <%= Inspec::Dist::PRODUCT_NAME %> will create a `.inspec` directory in the user's home directory.
36
36
  # This overrides that to write to a place within the running service's path.
37
37
  # NOTE: Setting HOME does the same currently. This is here to be explicit.
38
38
  set_runtime_env INSPEC_CONFIG_DIR "$pkg_svc_var_path"
@@ -52,9 +52,9 @@ do_unpack() {
52
52
  }
53
53
 
54
54
  do_build() {
55
- inspec archive "$PROFILE_CACHE_DIR" \
56
- --overwrite \
57
- -o "$PROFILE_CACHE_DIR/$ARCHIVE_NAME"
55
+ <%= Inspec::Dist::EXEC_NAME %> archive "$PROFILE_CACHE_DIR" \
56
+ --overwrite \
57
+ -o "$PROFILE_CACHE_DIR/$ARCHIVE_NAME"
58
58
  }
59
59
 
60
60
  do_install() {
@@ -63,7 +63,7 @@ do_install() {
63
63
 
64
64
  _do_compliance_login() {
65
65
  if [ -z $COMPLIANCE_CREDS ]; then
66
- message="ERROR: Please perform an 'inspec compliance login' and set"
66
+ message="ERROR: Please perform an '<%= Inspec::Dist::EXEC_NAME %> compliance login' and set"
67
67
  message="$message \$HAB_STUDIO_SECRET_COMPLIANCE_CREDS to the contents of"
68
68
  message="$message '~/.inspec/compliance/config.json'"
69
69
  build_line "$message"
@@ -78,8 +78,8 @@ _do_compliance_login() {
78
78
  sed 's/"//g'
79
79
  )
80
80
  insecure=$(echo $COMPLIANCE_CREDS | jq .insecure)
81
- inspec compliance login --insecure $insecure \
82
- --user $user \
83
- --token $token \
84
- $automate_server
81
+ <%= Inspec::Dist::EXEC_NAME %> compliance login --insecure $insecure \
82
+ --user $user \
83
+ --token $token \
84
+ $automate_server
85
85
  }
@@ -4,7 +4,7 @@ module InspecPlugins
4
4
  plugin_name :'inspec-init'
5
5
 
6
6
  cli_command :init do
7
- require_relative 'inspec-init/cli'
7
+ require_relative "inspec-init/cli"
8
8
  InspecPlugins::Init::CLI
9
9
  end
10
10
  end
@@ -1,17 +1,15 @@
1
- # encoding: utf-8
2
-
3
- require 'pathname'
4
- require_relative 'renderer'
1
+ require "pathname"
2
+ require_relative "renderer"
5
3
 
6
4
  module InspecPlugins
7
5
  module Init
8
6
  class CLI < Inspec.plugin(2, :cli_command)
9
- subcommand_desc 'init SUBCOMMAND', 'Generate InSpec code'
7
+ subcommand_desc "init SUBCOMMAND", "Generate InSpec code"
10
8
 
11
- TEMPLATES_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'templates'))
9
+ TEMPLATES_PATH = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "templates"))
12
10
 
13
- require_relative 'cli_profile'
14
- require_relative 'cli_plugin'
11
+ require_relative "cli_profile"
12
+ require_relative "cli_plugin"
15
13
  end
16
14
  end
17
15
  end
@@ -1,6 +1,4 @@
1
- # encoding: utf-8
2
-
3
- require_relative 'renderer'
1
+ require_relative "renderer"
4
2
 
5
3
  module InspecPlugins
6
4
  module Init
@@ -8,28 +6,28 @@ module InspecPlugins
8
6
  #-------------------------------------------------------------------#
9
7
  # inspec init plugin
10
8
  #-------------------------------------------------------------------#
11
- desc 'PLUGIN_NAME [options]', 'Generates an InSpec plugin, which can extend the functionality of InSpec itself.'
9
+ desc "plugin PLUGIN_NAME [options]", "Generates an InSpec plugin, which can extend the functionality of InSpec itself."
12
10
  # General options
13
- option :prompt, type: :boolean, default: true, desc: 'Interactively prompt for information to put in your generated plugin.'
14
- option :detail, type: :string, default: 'full', desc: "How detailed of a plugin to generate. 'full' is a normal full gem with tests; 'core' has tests but no gemspec; 'test-fixture' is stripped down for a test fixture."
11
+ option :prompt, type: :boolean, default: true, desc: "Interactively prompt for information to put in your generated plugin."
12
+ option :detail, type: :string, default: "full", desc: "How detailed of a plugin to generate. 'full' is a normal full gem with tests; 'core' has tests but no gemspec; 'test-fixture' is stripped down for a test fixture."
15
13
 
16
14
  # Templating vars
17
- option :author_email, type: :string, default: 'you@example.com', desc: 'Author Email for gemspec'
18
- option :author_name, type: :string, default: 'Your Name', desc: 'Author Name for gemspec'
19
- option :description, type: :string, default: '', desc: 'Multi-line description of the plugin'
20
- option :summary, type: :string, default: 'A plugin with a default summary', desc: 'One-line summary of your plugin'
21
- option :license_name, type: :string, default: 'Apache-2.0', desc: 'The name of a license'
22
- option :hook, type: :array, default: ['cli_command:my_command'], desc: 'A list of plugin hooks, in the form type1:name1, type2:name2, etc'
15
+ option :author_email, type: :string, default: "you@example.com", desc: "Author Email for gemspec"
16
+ option :author_name, type: :string, default: "Your Name", desc: "Author Name for gemspec"
17
+ option :description, type: :string, default: "", desc: "Multi-line description of the plugin"
18
+ option :summary, type: :string, default: "A plugin with a default summary", desc: "One-line summary of your plugin"
19
+ option :license_name, type: :string, default: "Apache-2.0", desc: "The name of a license"
20
+ option :hook, type: :array, default: ["cli_command:my_command"], desc: "A list of plugin hooks, in the form type1:name1, type2:name2, etc"
23
21
  # These vars have calculated defaults
24
- option :homepage, type: :string, default: nil, desc: 'A URL for your project, often a GitHub link'
25
- option :module_name, type: :string, default: nil, desc: 'Module Name for your plugin package. Will change plugin name to CamelCase by default.'
26
- option :license_text, type: :string, default: '', hide: true
27
- option :plugin_name, type: :string, default: '', hide: true # This is here to give a uniform interface
28
- option :copyright, type: :string, default: nil, desc: 'A copyright statement, to be added to LICENSE'
22
+ option :homepage, type: :string, default: nil, desc: "A URL for your project, often a GitHub link"
23
+ option :module_name, type: :string, default: nil, desc: "Module Name for your plugin package. Will change plugin name to CamelCase by default."
24
+ option :license_text, type: :string, default: "", hide: true
25
+ option :plugin_name, type: :string, default: "", hide: true # This is here to give a uniform interface
26
+ option :copyright, type: :string, default: nil, desc: "A copyright statement, to be added to LICENSE"
29
27
 
30
28
  def plugin(plugin_name)
31
29
  plugin_type = determine_plugin_type(plugin_name)
32
- snake_case = plugin_name.tr('-', '_')
30
+ snake_case = plugin_name.tr("-", "_")
33
31
 
34
32
  template_vars = {
35
33
  name: plugin_name,
@@ -37,7 +35,7 @@ module InspecPlugins
37
35
  snake_case: snake_case,
38
36
  }.merge(plugin_vars_from_opts)
39
37
 
40
- template_path = File.join('plugins', plugin_type + '-plugin-template')
38
+ template_path = File.join("plugins", plugin_type + "-plugin-template")
41
39
 
42
40
  render_opts = {
43
41
  templates_path: TEMPLATES_PATH,
@@ -47,7 +45,7 @@ module InspecPlugins
47
45
  }
48
46
  renderer = InspecPlugins::Init::Renderer.new(ui, render_opts)
49
47
 
50
- renderer.render_with_values(template_path, plugin_type + ' plugin', template_vars)
48
+ renderer.render_with_values(template_path, plugin_type + " plugin", template_vars)
51
49
  end
52
50
 
53
51
  private
@@ -55,14 +53,14 @@ module InspecPlugins
55
53
  def determine_plugin_type(plugin_name)
56
54
  plugin_type = plugin_name.match(/^(inspec|train)\-/)
57
55
  unless plugin_type
58
- ui.error('Plugin names must begin with either ' + ui.emphasis('inspec') + ' or ' + ui.emphasis('train') + ' - saw ' + ui.emphasis(plugin_name))
56
+ ui.error("Plugin names must begin with either " + ui.emphasis("inspec") + " or " + ui.emphasis("train") + " - saw " + ui.emphasis(plugin_name))
59
57
  ui.exit(:usage_error)
60
58
  end
61
59
  options[:plugin_name] = plugin_name
62
60
 
63
61
  plugin_type = plugin_type[1]
64
- unless plugin_type == 'inspec'
65
- ui.error('Sorry, only InSpec (inspec-) plugins are supported at this time: Train (train-) support is not implemented yet.')
62
+ unless plugin_type == "inspec"
63
+ ui.error("Sorry, only InSpec (inspec-) plugins are supported at this time: Train (train-) support is not implemented yet.")
66
64
  ui.exit(:usage_error)
67
65
  end
68
66
  plugin_type
@@ -70,19 +68,19 @@ module InspecPlugins
70
68
 
71
69
  def make_rename_map(_plugin_type, plugin_name, snake_case)
72
70
  {
73
- 'inspec-plugin-template.gemspec' => plugin_name + '.gemspec',
74
- File.join('lib', 'inspec-plugin-template') => File.join('lib', plugin_name),
75
- File.join('lib', 'inspec-plugin-template.rb') => File.join('lib', plugin_name + '.rb'),
76
- File.join('lib', 'inspec-plugin-template', 'cli_command.rb') => File.join('lib', plugin_name, 'cli_command.rb'),
77
- File.join('lib', 'inspec-plugin-template', 'plugin.rb') => File.join('lib', plugin_name, 'plugin.rb'),
78
- File.join('lib', 'inspec-plugin-template', 'version.rb') => File.join('lib', plugin_name, 'version.rb'),
79
- File.join('test', 'functional', 'inspec_plugin_template_test.rb') => File.join('test', 'functional', snake_case + '_test.rb'),
71
+ "inspec-plugin-template.gemspec" => plugin_name + ".gemspec",
72
+ File.join("lib", "inspec-plugin-template") => File.join("lib", plugin_name),
73
+ File.join("lib", "inspec-plugin-template.rb") => File.join("lib", plugin_name + ".rb"),
74
+ File.join("lib", "inspec-plugin-template", "cli_command.rb") => File.join("lib", plugin_name, "cli_command.rb"),
75
+ File.join("lib", "inspec-plugin-template", "plugin.rb") => File.join("lib", plugin_name, "plugin.rb"),
76
+ File.join("lib", "inspec-plugin-template", "version.rb") => File.join("lib", plugin_name, "version.rb"),
77
+ File.join("test", "functional", "inspec_plugin_template_test.rb") => File.join("test", "functional", snake_case + "_test.rb"),
80
78
  }
81
79
  end
82
80
 
83
81
  def plugin_vars_from_opts
84
82
  # Set dynamic default - module name is straightforward. Copyright, homepage, and license_text depend on other prompted vars.
85
- options[:module_name] ||= options[:plugin_name].sub(/^(inspec|train)\-/, '').split('-').map(&:capitalize).join('')
83
+ options[:module_name] ||= options[:plugin_name].sub(/^(inspec|train)\-/, "").split("-").map(&:capitalize).join("")
86
84
 
87
85
  if options[:prompt] && ui.interactive?
88
86
  vars = options.dup.merge(vars_from_prompts)
@@ -90,15 +88,15 @@ module InspecPlugins
90
88
  vars = options.dup.merge(vars_from_defaults)
91
89
 
92
90
  else
93
- ui.error('You requested interactive prompting for the template variables, but this does not seem to be an interactive terminal.')
91
+ ui.error("You requested interactive prompting for the template variables, but this does not seem to be an interactive terminal.")
94
92
  ui.exit(:usage_error)
95
93
  end
96
94
  vars.merge(parse_hook_option(options[:hook]))
97
95
  end
98
96
 
99
97
  def vars_from_defaults
100
- options[:copyright] ||= 'Copyright © ' + Date.today.year.to_s + ' ' + options[:author_name]
101
- options[:homepage] ||= 'https://github.com/' + options[:author_email].split('@').first + '/' + options[:plugin_name]
98
+ options[:copyright] ||= "Copyright © " + Date.today.year.to_s + " " + options[:author_name]
99
+ options[:homepage] ||= "https://github.com/" + options[:author_email].split("@").first + "/" + options[:plugin_name]
102
100
  options[:license_text] = fetch_license_text(options[:license_name])
103
101
  options
104
102
  end
@@ -110,17 +108,17 @@ module InspecPlugins
110
108
  summary: {},
111
109
  description: { mode: :multiline },
112
110
  module_name: {},
113
- copyright: { default_setter: proc { options[:copyright] ||= 'Copyright © ' + Date.today.year.to_s + ' ' + options[:author_name] } },
111
+ copyright: { default_setter: proc { options[:copyright] ||= "Copyright © " + Date.today.year.to_s + " " + options[:author_name] } },
114
112
  license_name: {
115
113
  mode: :select,
116
114
  choices: [
117
- { name: 'Apache 2.0', value: 'Apache-2.0', default: true },
118
- { name: 'Modified BSD', value: 'BSD-3-Clause' },
119
- { name: 'Proprietary (Closed Source)', value: 'Proprietary' },
120
- { name: 'Other (edit LICENSE yourself)', value: 'Other' },
115
+ { name: "Apache 2.0", value: "Apache-2.0", default: true },
116
+ { name: "Modified BSD", value: "BSD-3-Clause" },
117
+ { name: "Proprietary (Closed Source)", value: "Proprietary" },
118
+ { name: "Other (edit LICENSE yourself)", value: "Other" },
121
119
  ],
122
120
  },
123
- homepage: { default_setter: proc { options[:homepage] ||= 'https://github.com/' + options[:author_email].split('@').first + '/' + options[:plugin_name] } }
121
+ homepage: { default_setter: proc { options[:homepage] ||= "https://github.com/" + options[:author_email].split("@").first + "/" + options[:plugin_name] } },
124
122
  # TODO: Handle hooks, when we ever have more than one type of plugin
125
123
  }
126
124
 
@@ -132,7 +130,7 @@ module InspecPlugins
132
130
  end
133
131
 
134
132
  def prompt_for_options(option_order) # rubocop: disable Metrics/AbcSize
135
- option_defs = self.class.all_commands['plugin'].options
133
+ option_defs = self.class.all_commands["plugin"].options
136
134
 
137
135
  option_order.each do |opt_name, prompt_options|
138
136
  opt_def = option_defs[opt_name]
@@ -140,15 +138,15 @@ module InspecPlugins
140
138
 
141
139
  case prompt_options[:mode]
142
140
  when :select
143
- options[opt_name] = ui.prompt.select('Choose ' + opt_def.description + ':', prompt_options[:choices])
144
- if opt_name == :license_name && options[opt_name] == 'Other'
145
- ui.plain_line 'OK, be sure to update the ' + ui.emphasis('LICENSE') + ' file with your license details.'
141
+ options[opt_name] = ui.prompt.select("Choose " + opt_def.description + ":", prompt_options[:choices])
142
+ if opt_name == :license_name && options[opt_name] == "Other"
143
+ ui.plain_line "OK, be sure to update the " + ui.emphasis("LICENSE") + " file with your license details."
146
144
  end
147
145
  when :multiline
148
- options[opt_name] = ui.prompt.multiline('Enter ' + opt_def.description + '. Press Control-D to end.', default: options[opt_name])
146
+ options[opt_name] = ui.prompt.multiline("Enter " + opt_def.description + ". Press Control-D to end.", default: options[opt_name])
149
147
  else
150
148
  # Assume plain ask
151
- options[opt_name] = ui.prompt.ask('Enter ' + opt_def.description + ':', default: options[opt_name])
149
+ options[opt_name] = ui.prompt.ask("Enter " + opt_def.description + ":", default: options[opt_name])
152
150
  end
153
151
  end
154
152
  end
@@ -156,11 +154,11 @@ module InspecPlugins
156
154
  def parse_hook_option(raw_option)
157
155
  hooks_by_type = {}
158
156
  raw_option.each do |entry|
159
- parts = entry.split(':')
157
+ parts = entry.split(":")
160
158
  type = parts.first.to_sym
161
159
  name = parts.last
162
160
  if hooks_by_type.key?(type)
163
- ui.error 'The InSpec plugin generator can currently only generate one hook of each type'
161
+ ui.error "The InSpec plugin generator can currently only generate one hook of each type"
164
162
  ui.exit(:usage_error)
165
163
  end
166
164
  hooks_by_type[type] = name
@@ -168,19 +166,19 @@ module InspecPlugins
168
166
 
169
167
  vars = { hooks: hooks_by_type }
170
168
  if hooks_by_type.key?(:cli_command)
171
- vars[:command_name_dashes] = hooks_by_type[:cli_command].tr('_', '-')
172
- vars[:command_name_snake] = hooks_by_type[:cli_command].tr('-', '_')
169
+ vars[:command_name_dashes] = hooks_by_type[:cli_command].tr("_", "-")
170
+ vars[:command_name_snake] = hooks_by_type[:cli_command].tr("-", "_")
173
171
  end
174
172
  vars
175
173
  end
176
174
 
177
175
  def fetch_license_text(license_name)
178
176
  case license_name
179
- when 'Proprietary'
177
+ when "Proprietary"
180
178
  <<~EOL
181
179
  Proprietary software. All Rights Reserved.
182
180
  EOL
183
- when 'Apache-2.0'
181
+ when "Apache-2.0"
184
182
  <<~EOL
185
183
  Licensed under the Apache License, Version 2.0 (the "License");
186
184
  you may not use this file except in compliance with the License.
@@ -193,7 +191,7 @@ module InspecPlugins
193
191
  limitations under the License.
194
192
 
195
193
  EOL
196
- when 'BSD-3-Clause'
194
+ when "BSD-3-Clause"
197
195
  <<~EOL
198
196
  Modified BSD License
199
197
  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
@@ -209,31 +207,31 @@ module InspecPlugins
209
207
 
210
208
  def make_skip_list
211
209
  case options[:detail]
212
- when 'full'
210
+ when "full"
213
211
  []
214
- when 'core'
212
+ when "core"
215
213
  [
216
- 'Gemfile',
217
- 'inspec-plugin-template.gemspec',
218
- 'LICENSE',
219
- 'Rakefile',
214
+ "Gemfile",
215
+ "inspec-plugin-template.gemspec",
216
+ "LICENSE",
217
+ "Rakefile",
220
218
  ]
221
- when 'test-fixture'
219
+ when "test-fixture"
222
220
  [
223
- 'Gemfile',
224
- 'inspec-plugin-template.gemspec',
225
- 'LICENSE',
226
- 'Rakefile',
227
- File.join('test', 'fixtures', 'README.md'),
228
- File.join('test', 'fixtures'),
229
- File.join('test', 'functional', 'inspec_plugin_template_test.rb'),
230
- File.join('test', 'functional', 'README.md'),
231
- File.join('test', 'unit', 'cli_args_test.rb'),
232
- File.join('test', 'unit', 'plugin_def_test.rb'),
233
- File.join('test', 'unit', 'README.md'),
234
- File.join('test', 'unit'),
235
- File.join('test', 'helper.rb'),
236
- File.join('test'),
221
+ "Gemfile",
222
+ "inspec-plugin-template.gemspec",
223
+ "LICENSE",
224
+ "Rakefile",
225
+ File.join("test", "fixtures", "README.md"),
226
+ File.join("test", "fixtures"),
227
+ File.join("test", "functional", "inspec_plugin_template_test.rb"),
228
+ File.join("test", "functional", "README.md"),
229
+ File.join("test", "unit", "cli_args_test.rb"),
230
+ File.join("test", "unit", "plugin_def_test.rb"),
231
+ File.join("test", "unit", "README.md"),
232
+ File.join("test", "unit"),
233
+ File.join("test", "helper.rb"),
234
+ File.join("test"),
237
235
  ]
238
236
  else
239
237
  ui.error "Unrecognized value for 'detail': #{options[:detail]} - expected one of full, core, test-fixture"
@@ -1,7 +1,5 @@
1
- # encoding: utf-8
2
-
3
- require 'pathname'
4
- require_relative 'renderer'
1
+ require "pathname"
2
+ require_relative "renderer"
5
3
 
6
4
  module InspecPlugins
7
5
  module Init
@@ -11,8 +9,8 @@ module InspecPlugins
11
9
  #-------------------------------------------------------------------#
12
10
  def self.valid_profile_platforms
13
11
  # Look in the 'template/profiles' directory and detect which platforms are available.
14
- profile_templates_dir = File.join(TEMPLATES_PATH, 'profiles')
15
- Dir.glob(File.join(profile_templates_dir, '*')).select { |p| File.directory?(p) }.map { |d| File.basename(d) }
12
+ profile_templates_dir = File.join(TEMPLATES_PATH, "profiles")
13
+ Dir.glob(File.join(profile_templates_dir, "*")).select { |p| File.directory?(p) }.map { |d| File.basename(d) }
16
14
  end
17
15
 
18
16
  no_commands do
@@ -21,17 +19,17 @@ module InspecPlugins
21
19
  end
22
20
  end
23
21
 
24
- desc 'profile [OPTIONS] NAME', 'Generate a new profile'
25
- option :platform, default: 'os', type: :string, aliases: [:p],
22
+ desc "profile [OPTIONS] NAME", "Generate a new profile"
23
+ option :platform, default: "os", type: :string, aliases: [:p],
26
24
  desc: "Which platform to generate a profile for: choose from #{valid_profile_platforms.join(', ')}"
27
25
  option :overwrite, type: :boolean, default: false,
28
- desc: 'Overwrites existing directory'
26
+ desc: "Overwrites existing directory"
29
27
  def profile(new_profile_name)
30
28
  unless valid_profile_platforms.include?(options[:platform])
31
29
  ui.error "Unable to generate profile: No template available for platform '#{options[:platform]}' (expected one of: #{valid_profile_platforms.join(', ')})"
32
30
  ui.exit(:usage_error)
33
31
  end
34
- template_path = File.join('profiles', options[:platform])
32
+ template_path = File.join("profiles", options[:platform])
35
33
 
36
34
  render_opts = {
37
35
  templates_path: TEMPLATES_PATH,
@@ -42,7 +40,7 @@ module InspecPlugins
42
40
  vars = {
43
41
  name: new_profile_name,
44
42
  }
45
- renderer.render_with_values(template_path, 'profile', vars)
43
+ renderer.render_with_values(template_path, "profile", vars)
46
44
  end
47
45
  end
48
46
  end
@@ -1,5 +1,5 @@
1
- require 'fileutils'
2
- require 'erb'
1
+ require "fileutils"
2
+ require "erb"
3
3
 
4
4
  module InspecPlugins
5
5
  module Init
@@ -24,7 +24,7 @@ module InspecPlugins
24
24
  source_dir = File.join(templates_path, template_subdir_path)
25
25
 
26
26
  # prepare glob for all subdirectories and files
27
- template_glob = File.join(source_dir, '**', '{*,.*}')
27
+ template_glob = File.join(source_dir, "**", "{*,.*}")
28
28
 
29
29
  # Use the name attribute to define the path to the new thing.
30
30
  # May contain slashes.
@@ -43,7 +43,7 @@ module InspecPlugins
43
43
  ui.exit(:usage_error)
44
44
  end
45
45
 
46
- ui.headline('InSpec Code Generator')
46
+ ui.headline("InSpec Code Generator")
47
47
 
48
48
  ui.plain_line "Creating new #{template_type} at #{ui.emphasis(full_destination_path)}"
49
49