inspec 2.0.16 → 2.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +101 -101
- data/CHANGELOG.md +2949 -2944
- data/Gemfile +55 -55
- data/LICENSE +14 -14
- data/MAINTAINERS.md +31 -31
- data/MAINTAINERS.toml +47 -47
- data/README.md +438 -438
- data/Rakefile +284 -284
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +40 -40
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +93 -93
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +107 -107
- data/docs/matchers.md +165 -165
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +49 -49
- data/docs/profiles.md +370 -370
- data/docs/reporters.md +105 -105
- data/docs/resources/aide_conf.md.erb +75 -75
- data/docs/resources/apache.md.erb +67 -67
- data/docs/resources/apache_conf.md.erb +68 -68
- data/docs/resources/apt.md.erb +71 -71
- data/docs/resources/audit_policy.md.erb +47 -47
- data/docs/resources/auditd.md.erb +79 -79
- data/docs/resources/auditd_conf.md.erb +68 -68
- data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
- data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
- data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
- data/docs/resources/aws_ec2_instance.md.erb +106 -106
- data/docs/resources/aws_iam_access_key.md.erb +123 -123
- data/docs/resources/aws_iam_access_keys.md.erb +198 -198
- data/docs/resources/aws_iam_group.md.erb +46 -46
- data/docs/resources/aws_iam_groups.md.erb +43 -43
- data/docs/resources/aws_iam_password_policy.md.erb +76 -76
- data/docs/resources/aws_iam_policies.md.erb +82 -82
- data/docs/resources/aws_iam_policy.md.erb +146 -146
- data/docs/resources/aws_iam_role.md.erb +65 -65
- data/docs/resources/aws_iam_root_user.md.erb +58 -58
- data/docs/resources/aws_iam_user.md.erb +64 -64
- data/docs/resources/aws_iam_users.md.erb +89 -89
- data/docs/resources/aws_kms_keys.md.erb +84 -84
- data/docs/resources/aws_route_table.md.erb +47 -47
- data/docs/resources/aws_s3_bucket.md.erb +134 -134
- data/docs/resources/aws_security_group.md.erb +152 -152
- data/docs/resources/aws_security_groups.md.erb +92 -92
- data/docs/resources/aws_sns_topic.md.erb +62 -62
- data/docs/resources/aws_subnet.md.erb +133 -133
- data/docs/resources/aws_subnets.md.erb +126 -126
- data/docs/resources/aws_vpc.md.erb +120 -120
- data/docs/resources/aws_vpcs.md.erb +48 -48
- data/docs/resources/azure_generic_resource.md.erb +170 -139
- data/docs/resources/azure_resource_group.md.erb +284 -284
- data/docs/resources/azure_virtual_machine.md.erb +347 -314
- data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -182
- data/docs/resources/bash.md.erb +75 -75
- data/docs/resources/bond.md.erb +90 -90
- data/docs/resources/bridge.md.erb +57 -57
- data/docs/resources/bsd_service.md.erb +67 -67
- data/docs/resources/command.md.erb +138 -138
- data/docs/resources/cpan.md.erb +79 -79
- data/docs/resources/cran.md.erb +64 -64
- data/docs/resources/crontab.md.erb +88 -88
- data/docs/resources/csv.md.erb +54 -54
- data/docs/resources/dh_params.md.erb +217 -217
- data/docs/resources/directory.md.erb +30 -30
- data/docs/resources/docker.md.erb +164 -164
- data/docs/resources/docker_container.md.erb +104 -104
- data/docs/resources/docker_image.md.erb +94 -94
- data/docs/resources/docker_service.md.erb +114 -114
- data/docs/resources/elasticsearch.md.erb +242 -242
- data/docs/resources/etc_fstab.md.erb +125 -125
- data/docs/resources/etc_group.md.erb +75 -75
- data/docs/resources/etc_hosts.md.erb +78 -78
- data/docs/resources/etc_hosts_allow.md.erb +74 -74
- data/docs/resources/etc_hosts_deny.md.erb +74 -74
- data/docs/resources/file.md.erb +515 -515
- data/docs/resources/filesystem.md.erb +41 -41
- data/docs/resources/firewalld.md.erb +107 -107
- data/docs/resources/gem.md.erb +79 -79
- data/docs/resources/group.md.erb +61 -61
- data/docs/resources/grub_conf.md.erb +101 -101
- data/docs/resources/host.md.erb +78 -78
- data/docs/resources/http.md.erb +101 -101
- data/docs/resources/iis_app.md.erb +122 -122
- data/docs/resources/iis_site.md.erb +135 -135
- data/docs/resources/inetd_conf.md.erb +94 -94
- data/docs/resources/ini.md.erb +76 -76
- data/docs/resources/interface.md.erb +58 -58
- data/docs/resources/iptables.md.erb +64 -64
- data/docs/resources/json.md.erb +62 -62
- data/docs/resources/kernel_module.md.erb +107 -107
- data/docs/resources/kernel_parameter.md.erb +53 -53
- data/docs/resources/key_rsa.md.erb +85 -85
- data/docs/resources/launchd_service.md.erb +57 -57
- data/docs/resources/limits_conf.md.erb +75 -75
- data/docs/resources/login_def.md.erb +71 -71
- data/docs/resources/mount.md.erb +69 -69
- data/docs/resources/mssql_session.md.erb +60 -60
- data/docs/resources/mysql_conf.md.erb +99 -99
- data/docs/resources/mysql_session.md.erb +74 -74
- data/docs/resources/nginx.md.erb +79 -79
- data/docs/resources/nginx_conf.md.erb +128 -128
- data/docs/resources/npm.md.erb +60 -60
- data/docs/resources/ntp_conf.md.erb +60 -60
- data/docs/resources/oneget.md.erb +53 -53
- data/docs/resources/oracledb_session.md.erb +52 -52
- data/docs/resources/os.md.erb +141 -141
- data/docs/resources/os_env.md.erb +78 -78
- data/docs/resources/package.md.erb +120 -120
- data/docs/resources/packages.md.erb +67 -67
- data/docs/resources/parse_config.md.erb +103 -103
- data/docs/resources/parse_config_file.md.erb +138 -138
- data/docs/resources/passwd.md.erb +141 -141
- data/docs/resources/pip.md.erb +67 -67
- data/docs/resources/port.md.erb +137 -137
- data/docs/resources/postgres_conf.md.erb +79 -79
- data/docs/resources/postgres_hba_conf.md.erb +93 -93
- data/docs/resources/postgres_ident_conf.md.erb +76 -76
- data/docs/resources/postgres_session.md.erb +69 -69
- data/docs/resources/powershell.md.erb +102 -102
- data/docs/resources/processes.md.erb +109 -109
- data/docs/resources/rabbitmq_config.md.erb +41 -41
- data/docs/resources/registry_key.md.erb +158 -158
- data/docs/resources/runit_service.md.erb +57 -57
- data/docs/resources/security_policy.md.erb +47 -47
- data/docs/resources/service.md.erb +121 -121
- data/docs/resources/shadow.md.erb +144 -144
- data/docs/resources/ssh_config.md.erb +80 -80
- data/docs/resources/sshd_config.md.erb +83 -83
- data/docs/resources/ssl.md.erb +119 -119
- data/docs/resources/sys_info.md.erb +42 -42
- data/docs/resources/systemd_service.md.erb +57 -57
- data/docs/resources/sysv_service.md.erb +57 -57
- data/docs/resources/upstart_service.md.erb +57 -57
- data/docs/resources/user.md.erb +140 -140
- data/docs/resources/users.md.erb +127 -127
- data/docs/resources/vbscript.md.erb +55 -55
- data/docs/resources/virtualization.md.erb +57 -57
- data/docs/resources/windows_feature.md.erb +47 -47
- data/docs/resources/windows_hotfix.md.erb +53 -53
- data/docs/resources/windows_task.md.erb +95 -95
- data/docs/resources/wmi.md.erb +81 -81
- data/docs/resources/x509_certificate.md.erb +151 -151
- data/docs/resources/xinetd_conf.md.erb +156 -156
- data/docs/resources/xml.md.erb +85 -85
- data/docs/resources/yaml.md.erb +69 -69
- data/docs/resources/yum.md.erb +98 -98
- data/docs/resources/zfs_dataset.md.erb +53 -53
- data/docs/resources/zfs_pool.md.erb +47 -47
- data/docs/ruby_usage.md +203 -203
- data/docs/shared/matcher_be.md.erb +1 -1
- data/docs/shared/matcher_cmp.md.erb +43 -43
- data/docs/shared/matcher_eq.md.erb +3 -3
- data/docs/shared/matcher_include.md.erb +1 -1
- data/docs/shared/matcher_match.md.erb +1 -1
- data/docs/shell.md +172 -172
- data/examples/README.md +8 -8
- data/examples/inheritance/README.md +65 -65
- data/examples/inheritance/controls/example.rb +14 -14
- data/examples/inheritance/inspec.yml +15 -15
- data/examples/kitchen-ansible/.kitchen.yml +25 -25
- data/examples/kitchen-ansible/Gemfile +19 -19
- data/examples/kitchen-ansible/README.md +53 -53
- data/examples/kitchen-ansible/files/nginx.repo +6 -6
- data/examples/kitchen-ansible/tasks/main.yml +16 -16
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-chef/.kitchen.yml +20 -20
- data/examples/kitchen-chef/Berksfile +3 -3
- data/examples/kitchen-chef/Gemfile +19 -19
- data/examples/kitchen-chef/README.md +27 -27
- data/examples/kitchen-chef/metadata.rb +7 -7
- data/examples/kitchen-chef/recipes/default.rb +6 -6
- data/examples/kitchen-chef/recipes/nginx.rb +30 -30
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-puppet/.kitchen.yml +22 -22
- data/examples/kitchen-puppet/Gemfile +20 -20
- data/examples/kitchen-puppet/Puppetfile +25 -25
- data/examples/kitchen-puppet/README.md +53 -53
- data/examples/kitchen-puppet/manifests/site.pp +33 -33
- data/examples/kitchen-puppet/metadata.json +11 -11
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
- data/examples/meta-profile/README.md +37 -37
- data/examples/meta-profile/controls/example.rb +13 -13
- data/examples/meta-profile/inspec.yml +13 -13
- data/examples/profile-attribute.yml +2 -2
- data/examples/profile-attribute/README.md +14 -14
- data/examples/profile-attribute/controls/example.rb +11 -11
- data/examples/profile-attribute/inspec.yml +8 -8
- data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
- data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
- data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
- data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
- data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
- data/examples/profile-aws/inspec.yml +11 -11
- data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
- data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
- data/examples/profile-azure/inspec.yml +11 -11
- data/examples/profile-sensitive/README.md +29 -29
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
- data/examples/profile-sensitive/controls/sensitive.rb +9 -9
- data/examples/profile-sensitive/inspec.yml +8 -8
- data/examples/profile/README.md +48 -48
- data/examples/profile/controls/example.rb +23 -23
- data/examples/profile/controls/gordon.rb +36 -36
- data/examples/profile/controls/meta.rb +34 -34
- data/examples/profile/inspec.yml +10 -10
- data/examples/profile/libraries/gordon_config.rb +53 -53
- data/inspec.gemspec +47 -47
- data/lib/bundles/README.md +3 -3
- data/lib/bundles/inspec-artifact.rb +7 -7
- data/lib/bundles/inspec-artifact/README.md +1 -1
- data/lib/bundles/inspec-artifact/cli.rb +277 -277
- data/lib/bundles/inspec-compliance.rb +16 -16
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
- data/lib/bundles/inspec-compliance/README.md +185 -185
- data/lib/bundles/inspec-compliance/api.rb +316 -316
- data/lib/bundles/inspec-compliance/api/login.rb +152 -152
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +254 -254
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +86 -86
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +98 -98
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
- data/lib/bundles/inspec-habitat.rb +12 -12
- data/lib/bundles/inspec-habitat/cli.rb +36 -36
- data/lib/bundles/inspec-habitat/log.rb +10 -10
- data/lib/bundles/inspec-habitat/profile.rb +390 -390
- data/lib/bundles/inspec-init.rb +8 -8
- data/lib/bundles/inspec-init/README.md +31 -31
- data/lib/bundles/inspec-init/cli.rb +97 -97
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
- data/lib/bundles/inspec-supermarket.rb +13 -13
- data/lib/bundles/inspec-supermarket/README.md +45 -45
- data/lib/bundles/inspec-supermarket/api.rb +84 -84
- data/lib/bundles/inspec-supermarket/cli.rb +73 -73
- data/lib/bundles/inspec-supermarket/target.rb +34 -34
- data/lib/fetchers/git.rb +163 -163
- data/lib/fetchers/local.rb +74 -74
- data/lib/fetchers/mock.rb +35 -35
- data/lib/fetchers/url.rb +204 -204
- data/lib/inspec.rb +24 -24
- data/lib/inspec/archive/tar.rb +29 -29
- data/lib/inspec/archive/zip.rb +19 -19
- data/lib/inspec/backend.rb +92 -92
- data/lib/inspec/base_cli.rb +350 -333
- data/lib/inspec/cached_fetcher.rb +66 -66
- data/lib/inspec/cli.rb +292 -302
- data/lib/inspec/completions/bash.sh.erb +45 -45
- data/lib/inspec/completions/fish.sh.erb +34 -34
- data/lib/inspec/completions/zsh.sh.erb +61 -61
- data/lib/inspec/control_eval_context.rb +179 -179
- data/lib/inspec/dependencies/cache.rb +72 -72
- data/lib/inspec/dependencies/dependency_set.rb +92 -92
- data/lib/inspec/dependencies/lockfile.rb +115 -115
- data/lib/inspec/dependencies/requirement.rb +123 -123
- data/lib/inspec/dependencies/resolver.rb +86 -86
- data/lib/inspec/describe.rb +27 -27
- data/lib/inspec/dsl.rb +66 -66
- data/lib/inspec/dsl_shared.rb +33 -33
- data/lib/inspec/env_printer.rb +157 -157
- data/lib/inspec/errors.rb +13 -13
- data/lib/inspec/exceptions.rb +12 -12
- data/lib/inspec/expect.rb +45 -45
- data/lib/inspec/fetcher.rb +45 -45
- data/lib/inspec/file_provider.rb +275 -275
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +250 -250
- data/lib/inspec/formatters/json_rspec.rb +20 -20
- data/lib/inspec/formatters/show_progress.rb +12 -12
- data/lib/inspec/library_eval_context.rb +58 -58
- data/lib/inspec/log.rb +11 -11
- data/lib/inspec/metadata.rb +247 -247
- data/lib/inspec/method_source.rb +24 -24
- data/lib/inspec/objects.rb +14 -14
- data/lib/inspec/objects/attribute.rb +65 -65
- data/lib/inspec/objects/control.rb +61 -61
- data/lib/inspec/objects/describe.rb +92 -92
- data/lib/inspec/objects/each_loop.rb +36 -36
- data/lib/inspec/objects/list.rb +15 -15
- data/lib/inspec/objects/or_test.rb +40 -40
- data/lib/inspec/objects/ruby_helper.rb +15 -15
- data/lib/inspec/objects/tag.rb +27 -27
- data/lib/inspec/objects/test.rb +87 -87
- data/lib/inspec/objects/value.rb +27 -27
- data/lib/inspec/plugins.rb +60 -60
- data/lib/inspec/plugins/cli.rb +24 -24
- data/lib/inspec/plugins/fetcher.rb +86 -86
- data/lib/inspec/plugins/resource.rb +133 -133
- data/lib/inspec/plugins/secret.rb +15 -15
- data/lib/inspec/plugins/source_reader.rb +40 -40
- data/lib/inspec/polyfill.rb +12 -12
- data/lib/inspec/profile.rb +510 -510
- data/lib/inspec/profile_context.rb +207 -207
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +50 -50
- data/lib/inspec/reporters/base.rb +24 -24
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +116 -116
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +77 -77
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +186 -186
- data/lib/inspec/rule.rb +266 -266
- data/lib/inspec/runner.rb +344 -344
- data/lib/inspec/runner_mock.rb +41 -41
- data/lib/inspec/runner_rspec.rb +174 -174
- data/lib/inspec/runtime_profile.rb +26 -26
- data/lib/inspec/schema.rb +213 -213
- data/lib/inspec/secrets.rb +19 -19
- data/lib/inspec/secrets/yaml.rb +30 -30
- data/lib/inspec/shell.rb +220 -223
- data/lib/inspec/shell_detector.rb +90 -90
- data/lib/inspec/source_reader.rb +29 -29
- data/lib/inspec/version.rb +8 -8
- data/lib/matchers/matchers.rb +339 -339
- data/lib/resource_support/aws.rb +40 -40
- data/lib/resource_support/aws/aws_backend_base.rb +12 -12
- data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
- data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
- data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
- data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
- data/lib/resources/aide_conf.rb +160 -160
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +156 -156
- data/lib/resources/apt.rb +149 -149
- data/lib/resources/audit_policy.rb +63 -63
- data/lib/resources/auditd.rb +231 -231
- data/lib/resources/auditd_conf.rb +55 -55
- data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
- data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
- data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
- data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +144 -144
- data/lib/resources/aws/aws_iam_group.rb +56 -56
- data/lib/resources/aws/aws_iam_groups.rb +45 -45
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +46 -46
- data/lib/resources/aws/aws_iam_policy.rb +119 -119
- data/lib/resources/aws/aws_iam_role.rb +51 -51
- data/lib/resources/aws/aws_iam_root_user.rb +60 -60
- data/lib/resources/aws/aws_iam_user.rb +111 -111
- data/lib/resources/aws/aws_iam_users.rb +96 -96
- data/lib/resources/aws/aws_kms_keys.rb +46 -46
- data/lib/resources/aws/aws_route_table.rb +61 -61
- data/lib/resources/aws/aws_s3_bucket.rb +115 -115
- data/lib/resources/aws/aws_security_group.rb +93 -93
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- data/lib/resources/aws/aws_subnet.rb +88 -88
- data/lib/resources/aws/aws_subnets.rb +53 -53
- data/lib/resources/aws/aws_vpc.rb +69 -69
- data/lib/resources/aws/aws_vpcs.rb +45 -45
- data/lib/resources/azure/azure_backend.rb +377 -377
- data/lib/resources/azure/azure_generic_resource.rb +59 -59
- data/lib/resources/azure/azure_resource_group.rb +152 -152
- data/lib/resources/azure/azure_virtual_machine.rb +264 -264
- data/lib/resources/azure/azure_virtual_machine_data_disk.rb +136 -136
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +68 -68
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/command.rb +69 -69
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +170 -170
- data/lib/resources/csv.rb +60 -60
- data/lib/resources/dh_params.rb +82 -82
- data/lib/resources/directory.rb +25 -25
- data/lib/resources/docker.rb +236 -236
- data/lib/resources/docker_container.rb +89 -89
- data/lib/resources/docker_image.rb +83 -83
- data/lib/resources/docker_object.rb +57 -57
- data/lib/resources/docker_service.rb +90 -90
- data/lib/resources/elasticsearch.rb +169 -169
- data/lib/resources/etc_fstab.rb +102 -102
- data/lib/resources/etc_group.rb +156 -156
- data/lib/resources/etc_hosts.rb +81 -81
- data/lib/resources/etc_hosts_allow_deny.rb +123 -123
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +144 -144
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +237 -237
- data/lib/resources/host.rb +300 -300
- data/lib/resources/http.rb +250 -250
- data/lib/resources/iis_app.rb +104 -104
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +62 -62
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +69 -69
- data/lib/resources/json.rb +117 -117
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +67 -67
- data/lib/resources/limits_conf.rb +55 -55
- data/lib/resources/login_def.rb +66 -66
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +81 -81
- data/lib/resources/mysql_conf.rb +134 -134
- data/lib/resources/mysql_session.rb +71 -71
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +227 -227
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +58 -58
- data/lib/resources/oneget.rb +71 -71
- data/lib/resources/oracledb_session.rb +139 -139
- data/lib/resources/os.rb +36 -36
- data/lib/resources/os_env.rb +76 -76
- data/lib/resources/package.rb +363 -363
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +116 -116
- data/lib/resources/passwd.rb +74 -74
- data/lib/resources/pip.rb +89 -89
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +130 -130
- data/lib/resources/postgres_conf.rb +121 -121
- data/lib/resources/postgres_hba_conf.rb +100 -100
- data/lib/resources/postgres_ident_conf.rb +78 -78
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +57 -57
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +52 -52
- data/lib/resources/registry_key.rb +296 -296
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +789 -789
- data/lib/resources/shadow.rb +140 -140
- data/lib/resources/ssh_conf.rb +102 -102
- data/lib/resources/ssl.rb +99 -99
- data/lib/resources/sys_info.rb +28 -28
- data/lib/resources/toml.rb +32 -32
- data/lib/resources/users.rb +654 -654
- data/lib/resources/vbscript.rb +69 -69
- data/lib/resources/virtualization.rb +251 -251
- data/lib/resources/windows_feature.rb +84 -84
- data/lib/resources/windows_hotfix.rb +35 -35
- data/lib/resources/windows_task.rb +105 -105
- data/lib/resources/wmi.rb +113 -113
- data/lib/resources/x509_certificate.rb +143 -143
- data/lib/resources/xinetd.rb +111 -111
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +47 -47
- data/lib/resources/yum.rb +180 -180
- data/lib/resources/zfs_dataset.rb +60 -60
- data/lib/resources/zfs_pool.rb +49 -49
- data/lib/source_readers/flat.rb +39 -39
- data/lib/source_readers/inspec.rb +75 -75
- data/lib/utils/command_wrapper.rb +27 -27
- data/lib/utils/convert.rb +12 -12
- data/lib/utils/database_helpers.rb +77 -77
- data/lib/utils/erlang_parser.rb +192 -192
- data/lib/utils/filter.rb +272 -272
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +44 -44
- data/lib/utils/hash.rb +41 -41
- data/lib/utils/json_log.rb +18 -18
- data/lib/utils/latest_version.rb +22 -22
- data/lib/utils/modulator.rb +12 -12
- data/lib/utils/nginx_parser.rb +85 -85
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- data/lib/utils/plugin_registry.rb +93 -93
- data/lib/utils/simpleconfig.rb +120 -120
- data/lib/utils/spdx.rb +13 -13
- data/lib/utils/spdx.txt +343 -343
- metadata +1 -1
|
@@ -1,207 +1,207 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# author: Dominik Richter
|
|
3
|
-
# author: Christoph Hartmann
|
|
4
|
-
require 'inspec/log'
|
|
5
|
-
require 'inspec/rule'
|
|
6
|
-
require 'inspec/resource'
|
|
7
|
-
require 'inspec/library_eval_context'
|
|
8
|
-
require 'inspec/control_eval_context'
|
|
9
|
-
require 'inspec/require_loader'
|
|
10
|
-
require 'securerandom'
|
|
11
|
-
require 'inspec/objects/attribute'
|
|
12
|
-
|
|
13
|
-
module Inspec
|
|
14
|
-
class ProfileContext
|
|
15
|
-
def self.for_profile(profile, backend, attributes)
|
|
16
|
-
new(profile.name, backend, { 'profile' => profile,
|
|
17
|
-
'attributes' => attributes,
|
|
18
|
-
'check_mode' => profile.check_mode })
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
attr_reader :attributes, :profile_id, :resource_registry, :backend
|
|
22
|
-
attr_accessor :rules
|
|
23
|
-
def initialize(profile_id, backend, conf)
|
|
24
|
-
if backend.nil?
|
|
25
|
-
raise 'ProfileContext is initiated with a backend == nil. ' \
|
|
26
|
-
'This is a backend error which must be fixed upstream.'
|
|
27
|
-
end
|
|
28
|
-
@profile_id = profile_id
|
|
29
|
-
@backend = backend
|
|
30
|
-
@conf = conf.dup
|
|
31
|
-
@skip_only_if_eval = @conf['check_mode']
|
|
32
|
-
@rules = {}
|
|
33
|
-
@control_subcontexts = []
|
|
34
|
-
@lib_subcontexts = []
|
|
35
|
-
@require_loader = ::Inspec::RequireLoader.new
|
|
36
|
-
@attributes = []
|
|
37
|
-
# A local resource registry that only contains resources defined
|
|
38
|
-
# in the transitive dependency tree of the loaded profile.
|
|
39
|
-
@resource_registry = Inspec::Resource.new_registry
|
|
40
|
-
@library_eval_context = Inspec::LibraryEvalContext.create(@resource_registry, @require_loader)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def dependencies
|
|
44
|
-
if @conf['profile'].nil?
|
|
45
|
-
{}
|
|
46
|
-
else
|
|
47
|
-
@conf['profile'].locked_dependencies
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def to_resources_dsl
|
|
52
|
-
Inspec::Resource.create_dsl(self)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def control_eval_context
|
|
56
|
-
@control_eval_context ||= begin
|
|
57
|
-
ctx = Inspec::ControlEvalContext.create(self, to_resources_dsl)
|
|
58
|
-
ctx.new(@backend, @conf, dependencies, @require_loader, @skip_only_if_eval)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def reload_dsl
|
|
63
|
-
@control_eval_context = nil
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def profile_supports_platform?
|
|
67
|
-
return true if @conf['profile'].nil?
|
|
68
|
-
|
|
69
|
-
@conf['profile'].supports_platform?
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def profile_supports_inspec_version?
|
|
73
|
-
return true if @conf['profile'].nil?
|
|
74
|
-
|
|
75
|
-
@conf['profile'].supports_runtime?
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def remove_rule(id)
|
|
79
|
-
@rules[id] = nil if @rules.key?(id)
|
|
80
|
-
@control_subcontexts.each do |c|
|
|
81
|
-
c.remove_rule(id)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def all_controls
|
|
86
|
-
ret = @rules.values
|
|
87
|
-
ret += @control_subcontexts.map(&:all_rules).flatten
|
|
88
|
-
ret
|
|
89
|
-
end
|
|
90
|
-
alias all_rules all_controls
|
|
91
|
-
|
|
92
|
-
def subcontext_by_name(name)
|
|
93
|
-
found = @lib_subcontexts.find { |c| c.profile_id == name }
|
|
94
|
-
if !found
|
|
95
|
-
@lib_subcontexts.each do |c|
|
|
96
|
-
found = c.subcontext_by_name(name)
|
|
97
|
-
break if found
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
found
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def add_resources(context)
|
|
105
|
-
@resource_registry.merge!(context.resource_registry)
|
|
106
|
-
control_eval_context.add_resources(context)
|
|
107
|
-
@lib_subcontexts << context
|
|
108
|
-
reload_dsl
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def add_subcontext(context)
|
|
112
|
-
@control_subcontexts << context
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def load_libraries(libs)
|
|
116
|
-
lib_prefix = 'libraries' + File::SEPARATOR
|
|
117
|
-
autoloads = []
|
|
118
|
-
|
|
119
|
-
libs.sort_by! { |l| l[1] } # Sort on source path so load order is deterministic
|
|
120
|
-
libs.each do |content, source, line|
|
|
121
|
-
path = source
|
|
122
|
-
if source.start_with?(lib_prefix)
|
|
123
|
-
path = source.sub(lib_prefix, '')
|
|
124
|
-
autoloads.push(path) if File.dirname(path) == '.'
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
@require_loader.add(path, content, source, line)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# load all files directly that are flat inside the libraries folder
|
|
131
|
-
autoloads.each do |path|
|
|
132
|
-
next unless path.end_with?('.rb')
|
|
133
|
-
load_library_file(*@require_loader.load(path)) unless @require_loader.loaded?(path)
|
|
134
|
-
end
|
|
135
|
-
reload_dsl
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def load_control_file(*args)
|
|
139
|
-
# Set `skip_file` to `false` between file loads to prevent skips from spanning multiple control files
|
|
140
|
-
control_eval_context.skip_file = false
|
|
141
|
-
load_with_context(control_eval_context, *args)
|
|
142
|
-
end
|
|
143
|
-
alias load load_control_file
|
|
144
|
-
|
|
145
|
-
def load_library_file(*args)
|
|
146
|
-
load_with_context(@library_eval_context, *args)
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def load_with_context(context, content, source = nil, line = nil)
|
|
150
|
-
Inspec::Log.debug("Loading #{source || '<anonymous content>'} into #{self}")
|
|
151
|
-
@current_load = { file: source }
|
|
152
|
-
if content.is_a? Proc
|
|
153
|
-
context.instance_eval(&content)
|
|
154
|
-
elsif source.nil? && line.nil?
|
|
155
|
-
context.instance_eval(content)
|
|
156
|
-
else
|
|
157
|
-
context.instance_eval(content, source || 'unknown', line || 1)
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def unregister_rule(id)
|
|
162
|
-
@rules.delete(full_id(@profile_id, id))
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
attr_reader :current_load
|
|
166
|
-
|
|
167
|
-
def register_rule(r)
|
|
168
|
-
# get the full ID
|
|
169
|
-
file = if @current_load.nil?
|
|
170
|
-
'unknown'
|
|
171
|
-
else
|
|
172
|
-
@current_load[:file] || 'unknown'
|
|
173
|
-
end
|
|
174
|
-
r.instance_variable_set(:@__file, file)
|
|
175
|
-
r.instance_variable_set(:@__group_title, current_load[:title])
|
|
176
|
-
|
|
177
|
-
# add the rule to the registry
|
|
178
|
-
fid = full_id(Inspec::Rule.profile_id(r), Inspec::Rule.rule_id(r))
|
|
179
|
-
existing = @rules[fid]
|
|
180
|
-
if existing.nil?
|
|
181
|
-
@rules[fid] = r
|
|
182
|
-
else
|
|
183
|
-
Inspec::Rule.merge(existing, r)
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def register_attribute(name, options = {})
|
|
188
|
-
# we need to return an attribute object, to allow dermination of default values
|
|
189
|
-
attr = Attribute.new(name, options)
|
|
190
|
-
# read value from given gived values
|
|
191
|
-
attr.value = @conf['attributes'][attr.name] unless @conf['attributes'].nil?
|
|
192
|
-
@attributes.push(attr)
|
|
193
|
-
attr.value
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
def set_header(field, val)
|
|
197
|
-
@current_load[field] = val
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
private
|
|
201
|
-
|
|
202
|
-
def full_id(pid, rid)
|
|
203
|
-
return rid.to_s if pid.to_s.empty?
|
|
204
|
-
pid.to_s + '/' + rid.to_s
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# author: Dominik Richter
|
|
3
|
+
# author: Christoph Hartmann
|
|
4
|
+
require 'inspec/log'
|
|
5
|
+
require 'inspec/rule'
|
|
6
|
+
require 'inspec/resource'
|
|
7
|
+
require 'inspec/library_eval_context'
|
|
8
|
+
require 'inspec/control_eval_context'
|
|
9
|
+
require 'inspec/require_loader'
|
|
10
|
+
require 'securerandom'
|
|
11
|
+
require 'inspec/objects/attribute'
|
|
12
|
+
|
|
13
|
+
module Inspec
|
|
14
|
+
class ProfileContext
|
|
15
|
+
def self.for_profile(profile, backend, attributes)
|
|
16
|
+
new(profile.name, backend, { 'profile' => profile,
|
|
17
|
+
'attributes' => attributes,
|
|
18
|
+
'check_mode' => profile.check_mode })
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
attr_reader :attributes, :profile_id, :resource_registry, :backend
|
|
22
|
+
attr_accessor :rules
|
|
23
|
+
def initialize(profile_id, backend, conf)
|
|
24
|
+
if backend.nil?
|
|
25
|
+
raise 'ProfileContext is initiated with a backend == nil. ' \
|
|
26
|
+
'This is a backend error which must be fixed upstream.'
|
|
27
|
+
end
|
|
28
|
+
@profile_id = profile_id
|
|
29
|
+
@backend = backend
|
|
30
|
+
@conf = conf.dup
|
|
31
|
+
@skip_only_if_eval = @conf['check_mode']
|
|
32
|
+
@rules = {}
|
|
33
|
+
@control_subcontexts = []
|
|
34
|
+
@lib_subcontexts = []
|
|
35
|
+
@require_loader = ::Inspec::RequireLoader.new
|
|
36
|
+
@attributes = []
|
|
37
|
+
# A local resource registry that only contains resources defined
|
|
38
|
+
# in the transitive dependency tree of the loaded profile.
|
|
39
|
+
@resource_registry = Inspec::Resource.new_registry
|
|
40
|
+
@library_eval_context = Inspec::LibraryEvalContext.create(@resource_registry, @require_loader)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def dependencies
|
|
44
|
+
if @conf['profile'].nil?
|
|
45
|
+
{}
|
|
46
|
+
else
|
|
47
|
+
@conf['profile'].locked_dependencies
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_resources_dsl
|
|
52
|
+
Inspec::Resource.create_dsl(self)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def control_eval_context
|
|
56
|
+
@control_eval_context ||= begin
|
|
57
|
+
ctx = Inspec::ControlEvalContext.create(self, to_resources_dsl)
|
|
58
|
+
ctx.new(@backend, @conf, dependencies, @require_loader, @skip_only_if_eval)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def reload_dsl
|
|
63
|
+
@control_eval_context = nil
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def profile_supports_platform?
|
|
67
|
+
return true if @conf['profile'].nil?
|
|
68
|
+
|
|
69
|
+
@conf['profile'].supports_platform?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def profile_supports_inspec_version?
|
|
73
|
+
return true if @conf['profile'].nil?
|
|
74
|
+
|
|
75
|
+
@conf['profile'].supports_runtime?
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def remove_rule(id)
|
|
79
|
+
@rules[id] = nil if @rules.key?(id)
|
|
80
|
+
@control_subcontexts.each do |c|
|
|
81
|
+
c.remove_rule(id)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def all_controls
|
|
86
|
+
ret = @rules.values
|
|
87
|
+
ret += @control_subcontexts.map(&:all_rules).flatten
|
|
88
|
+
ret
|
|
89
|
+
end
|
|
90
|
+
alias all_rules all_controls
|
|
91
|
+
|
|
92
|
+
def subcontext_by_name(name)
|
|
93
|
+
found = @lib_subcontexts.find { |c| c.profile_id == name }
|
|
94
|
+
if !found
|
|
95
|
+
@lib_subcontexts.each do |c|
|
|
96
|
+
found = c.subcontext_by_name(name)
|
|
97
|
+
break if found
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
found
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def add_resources(context)
|
|
105
|
+
@resource_registry.merge!(context.resource_registry)
|
|
106
|
+
control_eval_context.add_resources(context)
|
|
107
|
+
@lib_subcontexts << context
|
|
108
|
+
reload_dsl
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def add_subcontext(context)
|
|
112
|
+
@control_subcontexts << context
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def load_libraries(libs)
|
|
116
|
+
lib_prefix = 'libraries' + File::SEPARATOR
|
|
117
|
+
autoloads = []
|
|
118
|
+
|
|
119
|
+
libs.sort_by! { |l| l[1] } # Sort on source path so load order is deterministic
|
|
120
|
+
libs.each do |content, source, line|
|
|
121
|
+
path = source
|
|
122
|
+
if source.start_with?(lib_prefix)
|
|
123
|
+
path = source.sub(lib_prefix, '')
|
|
124
|
+
autoloads.push(path) if File.dirname(path) == '.'
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
@require_loader.add(path, content, source, line)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# load all files directly that are flat inside the libraries folder
|
|
131
|
+
autoloads.each do |path|
|
|
132
|
+
next unless path.end_with?('.rb')
|
|
133
|
+
load_library_file(*@require_loader.load(path)) unless @require_loader.loaded?(path)
|
|
134
|
+
end
|
|
135
|
+
reload_dsl
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def load_control_file(*args)
|
|
139
|
+
# Set `skip_file` to `false` between file loads to prevent skips from spanning multiple control files
|
|
140
|
+
control_eval_context.skip_file = false
|
|
141
|
+
load_with_context(control_eval_context, *args)
|
|
142
|
+
end
|
|
143
|
+
alias load load_control_file
|
|
144
|
+
|
|
145
|
+
def load_library_file(*args)
|
|
146
|
+
load_with_context(@library_eval_context, *args)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def load_with_context(context, content, source = nil, line = nil)
|
|
150
|
+
Inspec::Log.debug("Loading #{source || '<anonymous content>'} into #{self}")
|
|
151
|
+
@current_load = { file: source }
|
|
152
|
+
if content.is_a? Proc
|
|
153
|
+
context.instance_eval(&content)
|
|
154
|
+
elsif source.nil? && line.nil?
|
|
155
|
+
context.instance_eval(content)
|
|
156
|
+
else
|
|
157
|
+
context.instance_eval(content, source || 'unknown', line || 1)
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def unregister_rule(id)
|
|
162
|
+
@rules.delete(full_id(@profile_id, id))
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
attr_reader :current_load
|
|
166
|
+
|
|
167
|
+
def register_rule(r)
|
|
168
|
+
# get the full ID
|
|
169
|
+
file = if @current_load.nil?
|
|
170
|
+
'unknown'
|
|
171
|
+
else
|
|
172
|
+
@current_load[:file] || 'unknown'
|
|
173
|
+
end
|
|
174
|
+
r.instance_variable_set(:@__file, file)
|
|
175
|
+
r.instance_variable_set(:@__group_title, current_load[:title])
|
|
176
|
+
|
|
177
|
+
# add the rule to the registry
|
|
178
|
+
fid = full_id(Inspec::Rule.profile_id(r), Inspec::Rule.rule_id(r))
|
|
179
|
+
existing = @rules[fid]
|
|
180
|
+
if existing.nil?
|
|
181
|
+
@rules[fid] = r
|
|
182
|
+
else
|
|
183
|
+
Inspec::Rule.merge(existing, r)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def register_attribute(name, options = {})
|
|
188
|
+
# we need to return an attribute object, to allow dermination of default values
|
|
189
|
+
attr = Attribute.new(name, options)
|
|
190
|
+
# read value from given gived values
|
|
191
|
+
attr.value = @conf['attributes'][attr.name] unless @conf['attributes'].nil?
|
|
192
|
+
@attributes.push(attr)
|
|
193
|
+
attr.value
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def set_header(field, val)
|
|
197
|
+
@current_load[field] = val
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
private
|
|
201
|
+
|
|
202
|
+
def full_id(pid, rid)
|
|
203
|
+
return rid.to_s if pid.to_s.empty?
|
|
204
|
+
pid.to_s + '/' + rid.to_s
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# author: Adam Leff
|
|
3
|
-
|
|
4
|
-
require 'inspec/profile'
|
|
5
|
-
|
|
6
|
-
module Inspec
|
|
7
|
-
class ProfileVendor
|
|
8
|
-
attr_reader :profile_path
|
|
9
|
-
|
|
10
|
-
def initialize(path)
|
|
11
|
-
@profile_path = Pathname.new(path)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def vendor!
|
|
15
|
-
vendor_dependencies
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# The URL fetcher uses a Tempfile to retrieve the vendored
|
|
19
|
-
# profile, which creates a file that is only readable by
|
|
20
|
-
# the current user. In most circumstances, this is likely OK.
|
|
21
|
-
# However, in environments like a Habitat package, these files
|
|
22
|
-
# need to be readable by all users or the Habitat Supervisor
|
|
23
|
-
# may not be able to start InSpec correctly.
|
|
24
|
-
#
|
|
25
|
-
# This method makes sure all vendored files are mode 644 for this
|
|
26
|
-
# use case. This method is not called by default - the caller
|
|
27
|
-
# vendoring the profile must make the decision as to whether this
|
|
28
|
-
# is necessary.
|
|
29
|
-
def make_readable
|
|
30
|
-
Dir.glob("#{cache_path}/**/*") do |e|
|
|
31
|
-
FileUtils.chmod(0644, e) if File.file?(e)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def cache_path
|
|
36
|
-
profile_path.join('vendor')
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def lockfile
|
|
40
|
-
profile_path.join('inspec.lock')
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
private
|
|
44
|
-
|
|
45
|
-
def profile
|
|
46
|
-
@profile ||= Inspec::Profile.for_target(profile_path.to_s, profile_opts)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def profile_opts
|
|
50
|
-
{
|
|
51
|
-
vendor_cache: Inspec::Cache.new(cache_path.to_s),
|
|
52
|
-
backend: Inspec::Backend.create(target: 'mock://'),
|
|
53
|
-
}
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def vendor_dependencies
|
|
57
|
-
delete_vendored_data
|
|
58
|
-
File.write(lockfile, profile.generate_lockfile.to_yaml)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def delete_vendored_data
|
|
62
|
-
FileUtils.rm_rf(cache_path) if cache_path.exist?
|
|
63
|
-
File.delete(lockfile) if lockfile.exist?
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# author: Adam Leff
|
|
3
|
+
|
|
4
|
+
require 'inspec/profile'
|
|
5
|
+
|
|
6
|
+
module Inspec
|
|
7
|
+
class ProfileVendor
|
|
8
|
+
attr_reader :profile_path
|
|
9
|
+
|
|
10
|
+
def initialize(path)
|
|
11
|
+
@profile_path = Pathname.new(path)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def vendor!
|
|
15
|
+
vendor_dependencies
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# The URL fetcher uses a Tempfile to retrieve the vendored
|
|
19
|
+
# profile, which creates a file that is only readable by
|
|
20
|
+
# the current user. In most circumstances, this is likely OK.
|
|
21
|
+
# However, in environments like a Habitat package, these files
|
|
22
|
+
# need to be readable by all users or the Habitat Supervisor
|
|
23
|
+
# may not be able to start InSpec correctly.
|
|
24
|
+
#
|
|
25
|
+
# This method makes sure all vendored files are mode 644 for this
|
|
26
|
+
# use case. This method is not called by default - the caller
|
|
27
|
+
# vendoring the profile must make the decision as to whether this
|
|
28
|
+
# is necessary.
|
|
29
|
+
def make_readable
|
|
30
|
+
Dir.glob("#{cache_path}/**/*") do |e|
|
|
31
|
+
FileUtils.chmod(0644, e) if File.file?(e)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def cache_path
|
|
36
|
+
profile_path.join('vendor')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def lockfile
|
|
40
|
+
profile_path.join('inspec.lock')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def profile
|
|
46
|
+
@profile ||= Inspec::Profile.for_target(profile_path.to_s, profile_opts)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def profile_opts
|
|
50
|
+
{
|
|
51
|
+
vendor_cache: Inspec::Cache.new(cache_path.to_s),
|
|
52
|
+
backend: Inspec::Backend.create(target: 'mock://'),
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def vendor_dependencies
|
|
57
|
+
delete_vendored_data
|
|
58
|
+
File.write(lockfile, profile.generate_lockfile.to_yaml)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def delete_vendored_data
|
|
62
|
+
FileUtils.rm_rf(cache_path) if cache_path.exist?
|
|
63
|
+
File.delete(lockfile) if lockfile.exist?
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|