inspec 2.0.32 → 2.0.45
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 +2991 -2970
- data/Gemfile +55 -55
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +446 -437
- data/Rakefile +322 -322
- 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 +169 -168
- 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_config_recorder.md.erb +71 -71
- 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 +144 -144
- data/docs/resources/aws_iam_role.md.erb +63 -63
- 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 +151 -151
- data/docs/resources/aws_security_groups.md.erb +91 -91
- data/docs/resources/aws_sns_topic.md.erb +63 -63
- 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 -170
- data/docs/resources/azure_resource_group.md.erb +284 -284
- data/docs/resources/azure_virtual_machine.md.erb +347 -347
- data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
- 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 +89 -89
- data/docs/resources/csv.md.erb +54 -54
- data/docs/resources/dh_params.md.erb +205 -205
- data/docs/resources/directory.md.erb +30 -30
- data/docs/resources/docker.md.erb +219 -219
- 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 +526 -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 +86 -86
- data/docs/resources/http.md.erb +196 -196
- 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 +63 -63
- data/docs/resources/kernel_module.md.erb +120 -120
- 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 +146 -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 +215 -215
- 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 +355 -350
- data/lib/inspec/cached_fetcher.rb +66 -66
- data/lib/inspec/cli.rb +292 -292
- 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 +135 -135
- 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 +54 -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 +345 -345
- data/lib/inspec/runner_mock.rb +41 -41
- data/lib/inspec/runner_rspec.rb +175 -175
- 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 -220
- 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 +41 -41
- 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 +159 -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_config_recorder.rb +98 -98
- 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 +149 -144
- data/lib/resources/aws/aws_iam_group.rb +56 -56
- data/lib/resources/aws/aws_iam_groups.rb +52 -45
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -46
- data/lib/resources/aws/aws_iam_policy.rb +125 -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 +108 -96
- data/lib/resources/aws/aws_kms_keys.rb +53 -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 +73 -69
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -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 +101 -102
- data/lib/resources/etc_group.rb +152 -156
- data/lib/resources/etc_hosts.rb +82 -81
- data/lib/resources/etc_hosts_allow_deny.rb +122 -123
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -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 +306 -300
- data/lib/resources/http.rb +251 -250
- data/lib/resources/iis_app.rb +101 -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 +80 -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 +370 -370
- 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 +99 -100
- data/lib/resources/postgres_ident_conf.rb +76 -78
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +53 -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 +146 -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 +68 -69
- data/lib/resources/virtualization.rb +247 -247
- data/lib/resources/windows_feature.rb +84 -84
- data/lib/resources/windows_hotfix.rb +35 -35
- data/lib/resources/windows_task.rb +102 -105
- data/lib/resources/wmi.rb +110 -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 +2 -2
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
class AwsSecurityGroups < Inspec.resource(1)
|
|
2
|
-
name 'aws_security_groups'
|
|
3
|
-
desc 'Verifies settings for AWS Security Groups in bulk'
|
|
4
|
-
example <<-EOX
|
|
5
|
-
# Verify that you have security groups defined
|
|
6
|
-
describe aws_security_groups do
|
|
7
|
-
it { should exist }
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# Verify you have more than the default security group
|
|
11
|
-
describe aws_security_groups do
|
|
12
|
-
its('entries.count') { should be > 1 }
|
|
13
|
-
end
|
|
14
|
-
EOX
|
|
15
|
-
supports platform: 'aws'
|
|
16
|
-
|
|
17
|
-
include AwsPluralResourceMixin
|
|
18
|
-
|
|
19
|
-
# Underlying FilterTable implementation.
|
|
20
|
-
filter = FilterTable.create
|
|
21
|
-
filter.add_accessor(:where)
|
|
22
|
-
.add_accessor(:entries)
|
|
23
|
-
.add(:exists?) { |x| !x.entries.empty? }
|
|
24
|
-
.add(:group_ids, field: :group_id)
|
|
25
|
-
filter.connect(self, :table)
|
|
26
|
-
|
|
27
|
-
def to_s
|
|
28
|
-
'EC2 Security Groups'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
-
def validate_params(raw_criteria)
|
|
34
|
-
unless raw_criteria.is_a? Hash
|
|
35
|
-
raise 'Unrecognized criteria for fetching Security Groups. ' \
|
|
36
|
-
"Use 'criteria: value' format."
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# No criteria yet
|
|
40
|
-
unless raw_criteria.empty?
|
|
41
|
-
raise ArgumentError, 'aws_ec2_security_groups does not currently accept resource parameters.'
|
|
42
|
-
end
|
|
43
|
-
raw_criteria
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def fetch_from_api
|
|
47
|
-
@table = []
|
|
48
|
-
backend = BackendFactory.create(inspec_runner)
|
|
49
|
-
backend.describe_security_groups({}).security_groups.each do |sg_info|
|
|
50
|
-
@table.push({
|
|
51
|
-
group_id: sg_info.group_id,
|
|
52
|
-
group_name: sg_info.group_name,
|
|
53
|
-
vpc_id: sg_info.vpc_id,
|
|
54
|
-
})
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
class Backend
|
|
59
|
-
class AwsClientApi < AwsBackendBase
|
|
60
|
-
BackendFactory.set_default_backend self
|
|
61
|
-
self.aws_client_class = Aws::EC2::Client
|
|
62
|
-
|
|
63
|
-
def describe_security_groups(query)
|
|
64
|
-
aws_service_client.describe_security_groups(query)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
1
|
+
class AwsSecurityGroups < Inspec.resource(1)
|
|
2
|
+
name 'aws_security_groups'
|
|
3
|
+
desc 'Verifies settings for AWS Security Groups in bulk'
|
|
4
|
+
example <<-EOX
|
|
5
|
+
# Verify that you have security groups defined
|
|
6
|
+
describe aws_security_groups do
|
|
7
|
+
it { should exist }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Verify you have more than the default security group
|
|
11
|
+
describe aws_security_groups do
|
|
12
|
+
its('entries.count') { should be > 1 }
|
|
13
|
+
end
|
|
14
|
+
EOX
|
|
15
|
+
supports platform: 'aws'
|
|
16
|
+
|
|
17
|
+
include AwsPluralResourceMixin
|
|
18
|
+
|
|
19
|
+
# Underlying FilterTable implementation.
|
|
20
|
+
filter = FilterTable.create
|
|
21
|
+
filter.add_accessor(:where)
|
|
22
|
+
.add_accessor(:entries)
|
|
23
|
+
.add(:exists?) { |x| !x.entries.empty? }
|
|
24
|
+
.add(:group_ids, field: :group_id)
|
|
25
|
+
filter.connect(self, :table)
|
|
26
|
+
|
|
27
|
+
def to_s
|
|
28
|
+
'EC2 Security Groups'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def validate_params(raw_criteria)
|
|
34
|
+
unless raw_criteria.is_a? Hash
|
|
35
|
+
raise 'Unrecognized criteria for fetching Security Groups. ' \
|
|
36
|
+
"Use 'criteria: value' format."
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# No criteria yet
|
|
40
|
+
unless raw_criteria.empty?
|
|
41
|
+
raise ArgumentError, 'aws_ec2_security_groups does not currently accept resource parameters.'
|
|
42
|
+
end
|
|
43
|
+
raw_criteria
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def fetch_from_api
|
|
47
|
+
@table = []
|
|
48
|
+
backend = BackendFactory.create(inspec_runner)
|
|
49
|
+
backend.describe_security_groups({}).security_groups.each do |sg_info|
|
|
50
|
+
@table.push({
|
|
51
|
+
group_id: sg_info.group_id,
|
|
52
|
+
group_name: sg_info.group_name,
|
|
53
|
+
vpc_id: sg_info.vpc_id,
|
|
54
|
+
})
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class Backend
|
|
59
|
+
class AwsClientApi < AwsBackendBase
|
|
60
|
+
BackendFactory.set_default_backend self
|
|
61
|
+
self.aws_client_class = Aws::EC2::Client
|
|
62
|
+
|
|
63
|
+
def describe_security_groups(query)
|
|
64
|
+
aws_service_client.describe_security_groups(query)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
class AwsSnsTopic < Inspec.resource(1)
|
|
2
|
-
name 'aws_sns_topic'
|
|
3
|
-
desc 'Verifies settings for an SNS Topic'
|
|
4
|
-
example "
|
|
5
|
-
describe aws_sns_topic('arn:aws:sns:us-east-1:123456789012:some-topic') do
|
|
6
|
-
it { should exist }
|
|
7
|
-
its('confirmed_subscription_count') { should_not be_zero }
|
|
8
|
-
end
|
|
9
|
-
"
|
|
10
|
-
supports platform: 'aws'
|
|
11
|
-
|
|
12
|
-
include AwsSingularResourceMixin
|
|
13
|
-
attr_reader :arn, :confirmed_subscription_count
|
|
14
|
-
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
def validate_params(raw_params)
|
|
18
|
-
validated_params = check_resource_param_names(
|
|
19
|
-
raw_params: raw_params,
|
|
20
|
-
allowed_params: [:arn],
|
|
21
|
-
allowed_scalar_name: :arn,
|
|
22
|
-
allowed_scalar_type: String,
|
|
23
|
-
)
|
|
24
|
-
# Validate the ARN
|
|
25
|
-
unless validated_params[:arn] =~ /^arn:aws:sns:[\w\-]+:\d{12}:[\S]+$/
|
|
26
|
-
raise ArgumentError, 'Malformed ARN for SNS topics. Expected an ARN of the form ' \
|
|
27
|
-
"'arn:aws:sns:REGION:ACCOUNT-ID:TOPIC-NAME'"
|
|
28
|
-
end
|
|
29
|
-
validated_params
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def fetch_from_api
|
|
33
|
-
aws_response = BackendFactory.create(inspec_runner).get_topic_attributes(topic_arn: @arn).attributes
|
|
34
|
-
@exists = true
|
|
35
|
-
|
|
36
|
-
# The response has a plain hash with CamelCase plain string keys and string values
|
|
37
|
-
@confirmed_subscription_count = aws_response['SubscriptionsConfirmed'].to_i
|
|
38
|
-
rescue Aws::SNS::Errors::NotFound
|
|
39
|
-
@exists = false
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Uses the SDK API to really talk to AWS
|
|
43
|
-
class Backend
|
|
44
|
-
class AwsClientApi < AwsBackendBase
|
|
45
|
-
BackendFactory.set_default_backend(self)
|
|
46
|
-
self.aws_client_class = Aws::SNS::Client
|
|
47
|
-
|
|
48
|
-
def get_topic_attributes(criteria)
|
|
49
|
-
aws_service_client.get_topic_attributes(criteria)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
1
|
+
class AwsSnsTopic < Inspec.resource(1)
|
|
2
|
+
name 'aws_sns_topic'
|
|
3
|
+
desc 'Verifies settings for an SNS Topic'
|
|
4
|
+
example "
|
|
5
|
+
describe aws_sns_topic('arn:aws:sns:us-east-1:123456789012:some-topic') do
|
|
6
|
+
it { should exist }
|
|
7
|
+
its('confirmed_subscription_count') { should_not be_zero }
|
|
8
|
+
end
|
|
9
|
+
"
|
|
10
|
+
supports platform: 'aws'
|
|
11
|
+
|
|
12
|
+
include AwsSingularResourceMixin
|
|
13
|
+
attr_reader :arn, :confirmed_subscription_count
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def validate_params(raw_params)
|
|
18
|
+
validated_params = check_resource_param_names(
|
|
19
|
+
raw_params: raw_params,
|
|
20
|
+
allowed_params: [:arn],
|
|
21
|
+
allowed_scalar_name: :arn,
|
|
22
|
+
allowed_scalar_type: String,
|
|
23
|
+
)
|
|
24
|
+
# Validate the ARN
|
|
25
|
+
unless validated_params[:arn] =~ /^arn:aws:sns:[\w\-]+:\d{12}:[\S]+$/
|
|
26
|
+
raise ArgumentError, 'Malformed ARN for SNS topics. Expected an ARN of the form ' \
|
|
27
|
+
"'arn:aws:sns:REGION:ACCOUNT-ID:TOPIC-NAME'"
|
|
28
|
+
end
|
|
29
|
+
validated_params
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def fetch_from_api
|
|
33
|
+
aws_response = BackendFactory.create(inspec_runner).get_topic_attributes(topic_arn: @arn).attributes
|
|
34
|
+
@exists = true
|
|
35
|
+
|
|
36
|
+
# The response has a plain hash with CamelCase plain string keys and string values
|
|
37
|
+
@confirmed_subscription_count = aws_response['SubscriptionsConfirmed'].to_i
|
|
38
|
+
rescue Aws::SNS::Errors::NotFound
|
|
39
|
+
@exists = false
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Uses the SDK API to really talk to AWS
|
|
43
|
+
class Backend
|
|
44
|
+
class AwsClientApi < AwsBackendBase
|
|
45
|
+
BackendFactory.set_default_backend(self)
|
|
46
|
+
self.aws_client_class = Aws::SNS::Client
|
|
47
|
+
|
|
48
|
+
def get_topic_attributes(criteria)
|
|
49
|
+
aws_service_client.get_topic_attributes(criteria)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
class AwsSubnet < Inspec.resource(1)
|
|
2
|
-
name 'aws_subnet'
|
|
3
|
-
desc 'This resource is used to test the attributes of a VPC subnet'
|
|
4
|
-
example "
|
|
5
|
-
describe aws_subnet(subnet_id: 'subnet-12345678') do
|
|
6
|
-
it { should exist }
|
|
7
|
-
its('cidr_block') { should eq '10.0.1.0/24' }
|
|
8
|
-
end
|
|
9
|
-
"
|
|
10
|
-
supports platform: 'aws'
|
|
11
|
-
|
|
12
|
-
include AwsSingularResourceMixin
|
|
13
|
-
attr_reader :assigning_ipv_6_address_on_creation, :availability_zone, :available_ip_address_count,
|
|
14
|
-
:available, :cidr_block, :default_for_az, :ipv_6_cidr_block_association_set,
|
|
15
|
-
:mapping_public_ip_on_launch, :subnet_id, :vpc_id
|
|
16
|
-
alias available? available
|
|
17
|
-
alias default_for_az? default_for_az
|
|
18
|
-
alias mapping_public_ip_on_launch? mapping_public_ip_on_launch
|
|
19
|
-
alias assigning_ipv_6_address_on_creation? assigning_ipv_6_address_on_creation
|
|
20
|
-
|
|
21
|
-
def to_s
|
|
22
|
-
"VPC Subnet #{@subnet_id}"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def validate_params(raw_params)
|
|
28
|
-
validated_params = check_resource_param_names(
|
|
29
|
-
raw_params: raw_params,
|
|
30
|
-
allowed_params: [:subnet_id],
|
|
31
|
-
allowed_scalar_name: :subnet_id,
|
|
32
|
-
allowed_scalar_type: String,
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
# Make sure the subnet_id parameter was specified and in the correct form.
|
|
36
|
-
if validated_params.key?(:subnet_id) && validated_params[:subnet_id] !~ /^subnet\-[0-9a-f]{8}/
|
|
37
|
-
raise ArgumentError, 'aws_subnet Subnet ID must be in the format "subnet-" followed by 8 hexadecimal characters.'
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
if validated_params.empty?
|
|
41
|
-
raise ArgumentError, 'You must provide a subnet_id to aws_subnet.'
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
validated_params
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def fetch_from_api
|
|
48
|
-
backend = BackendFactory.create(inspec_runner)
|
|
49
|
-
|
|
50
|
-
# Transform into filter format expected by AWS
|
|
51
|
-
filters = []
|
|
52
|
-
filters.push({ name: 'subnet-id', values: [@subnet_id] })
|
|
53
|
-
ds_response = backend.describe_subnets(filters: filters)
|
|
54
|
-
|
|
55
|
-
# If no subnets exist in the VPC, exist is false.
|
|
56
|
-
if ds_response.subnets.empty?
|
|
57
|
-
@exists = false
|
|
58
|
-
return
|
|
59
|
-
end
|
|
60
|
-
@exists = true
|
|
61
|
-
assign_properties(ds_response)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def assign_properties(ds_response)
|
|
65
|
-
@vpc_id = ds_response.subnets[0].vpc_id
|
|
66
|
-
@subnet_id = ds_response.subnets[0].subnet_id
|
|
67
|
-
@cidr_block = ds_response.subnets[0].cidr_block
|
|
68
|
-
@availability_zone = ds_response.subnets[0].availability_zone
|
|
69
|
-
@available_ip_address_count = ds_response.subnets[0].available_ip_address_count
|
|
70
|
-
@default_for_az = ds_response.subnets[0].default_for_az
|
|
71
|
-
@mapping_public_ip_on_launch = ds_response.subnets[0].map_public_ip_on_launch
|
|
72
|
-
@available = ds_response.subnets[0].state == 'available'
|
|
73
|
-
@ipv_6_cidr_block_association_set = ds_response.subnets[0].ipv_6_cidr_block_association_set
|
|
74
|
-
@assigning_ipv_6_address_on_creation = ds_response.subnets[0].assign_ipv_6_address_on_creation
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Uses the SDK API to really talk to AWS
|
|
78
|
-
class Backend
|
|
79
|
-
class AwsClientApi < AwsBackendBase
|
|
80
|
-
BackendFactory.set_default_backend(self)
|
|
81
|
-
self.aws_client_class = Aws::EC2::Client
|
|
82
|
-
|
|
83
|
-
def describe_subnets(query)
|
|
84
|
-
aws_service_client.describe_subnets(query)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
1
|
+
class AwsSubnet < Inspec.resource(1)
|
|
2
|
+
name 'aws_subnet'
|
|
3
|
+
desc 'This resource is used to test the attributes of a VPC subnet'
|
|
4
|
+
example "
|
|
5
|
+
describe aws_subnet(subnet_id: 'subnet-12345678') do
|
|
6
|
+
it { should exist }
|
|
7
|
+
its('cidr_block') { should eq '10.0.1.0/24' }
|
|
8
|
+
end
|
|
9
|
+
"
|
|
10
|
+
supports platform: 'aws'
|
|
11
|
+
|
|
12
|
+
include AwsSingularResourceMixin
|
|
13
|
+
attr_reader :assigning_ipv_6_address_on_creation, :availability_zone, :available_ip_address_count,
|
|
14
|
+
:available, :cidr_block, :default_for_az, :ipv_6_cidr_block_association_set,
|
|
15
|
+
:mapping_public_ip_on_launch, :subnet_id, :vpc_id
|
|
16
|
+
alias available? available
|
|
17
|
+
alias default_for_az? default_for_az
|
|
18
|
+
alias mapping_public_ip_on_launch? mapping_public_ip_on_launch
|
|
19
|
+
alias assigning_ipv_6_address_on_creation? assigning_ipv_6_address_on_creation
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
"VPC Subnet #{@subnet_id}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def validate_params(raw_params)
|
|
28
|
+
validated_params = check_resource_param_names(
|
|
29
|
+
raw_params: raw_params,
|
|
30
|
+
allowed_params: [:subnet_id],
|
|
31
|
+
allowed_scalar_name: :subnet_id,
|
|
32
|
+
allowed_scalar_type: String,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Make sure the subnet_id parameter was specified and in the correct form.
|
|
36
|
+
if validated_params.key?(:subnet_id) && validated_params[:subnet_id] !~ /^subnet\-[0-9a-f]{8}/
|
|
37
|
+
raise ArgumentError, 'aws_subnet Subnet ID must be in the format "subnet-" followed by 8 hexadecimal characters.'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
if validated_params.empty?
|
|
41
|
+
raise ArgumentError, 'You must provide a subnet_id to aws_subnet.'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
validated_params
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def fetch_from_api
|
|
48
|
+
backend = BackendFactory.create(inspec_runner)
|
|
49
|
+
|
|
50
|
+
# Transform into filter format expected by AWS
|
|
51
|
+
filters = []
|
|
52
|
+
filters.push({ name: 'subnet-id', values: [@subnet_id] })
|
|
53
|
+
ds_response = backend.describe_subnets(filters: filters)
|
|
54
|
+
|
|
55
|
+
# If no subnets exist in the VPC, exist is false.
|
|
56
|
+
if ds_response.subnets.empty?
|
|
57
|
+
@exists = false
|
|
58
|
+
return
|
|
59
|
+
end
|
|
60
|
+
@exists = true
|
|
61
|
+
assign_properties(ds_response)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def assign_properties(ds_response)
|
|
65
|
+
@vpc_id = ds_response.subnets[0].vpc_id
|
|
66
|
+
@subnet_id = ds_response.subnets[0].subnet_id
|
|
67
|
+
@cidr_block = ds_response.subnets[0].cidr_block
|
|
68
|
+
@availability_zone = ds_response.subnets[0].availability_zone
|
|
69
|
+
@available_ip_address_count = ds_response.subnets[0].available_ip_address_count
|
|
70
|
+
@default_for_az = ds_response.subnets[0].default_for_az
|
|
71
|
+
@mapping_public_ip_on_launch = ds_response.subnets[0].map_public_ip_on_launch
|
|
72
|
+
@available = ds_response.subnets[0].state == 'available'
|
|
73
|
+
@ipv_6_cidr_block_association_set = ds_response.subnets[0].ipv_6_cidr_block_association_set
|
|
74
|
+
@assigning_ipv_6_address_on_creation = ds_response.subnets[0].assign_ipv_6_address_on_creation
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Uses the SDK API to really talk to AWS
|
|
78
|
+
class Backend
|
|
79
|
+
class AwsClientApi < AwsBackendBase
|
|
80
|
+
BackendFactory.set_default_backend(self)
|
|
81
|
+
self.aws_client_class = Aws::EC2::Client
|
|
82
|
+
|
|
83
|
+
def describe_subnets(query)
|
|
84
|
+
aws_service_client.describe_subnets(query)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
class AwsSubnets < Inspec.resource(1)
|
|
2
|
-
name 'aws_subnets'
|
|
3
|
-
desc 'Verifies settings for VPC Subnets in bulk'
|
|
4
|
-
example "
|
|
5
|
-
# you should be able to test the cidr_block of a subnet
|
|
6
|
-
describe aws_subnets.where(vpc_id: 'vpc-123456789') do
|
|
7
|
-
its('subnet_ids') { should eq ['subnet-12345678', 'subnet-87654321'] }
|
|
8
|
-
its('cidr_blocks') { should eq ['172.31.96.0/20'] }
|
|
9
|
-
its('states') { should_not include 'pending' }
|
|
10
|
-
end
|
|
11
|
-
"
|
|
12
|
-
supports platform: 'aws'
|
|
13
|
-
|
|
14
|
-
include AwsPluralResourceMixin
|
|
15
|
-
|
|
16
|
-
def validate_params(resource_params)
|
|
17
|
-
unless resource_params.empty?
|
|
18
|
-
raise ArgumentError, 'aws_vpc_subnets does not accept resource parameters.'
|
|
19
|
-
end
|
|
20
|
-
resource_params
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def fetch_from_api
|
|
24
|
-
backend = BackendFactory.create(inspec_runner)
|
|
25
|
-
@table = backend.describe_subnets.subnets.map(&:to_h)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Underlying FilterTable implementation.
|
|
29
|
-
filter = FilterTable.create
|
|
30
|
-
filter.add_accessor(:where)
|
|
31
|
-
.add_accessor(:entries)
|
|
32
|
-
.add(:exists?) { |x| !x.entries.empty? }
|
|
33
|
-
.add(:vpc_ids, field: :vpc_id)
|
|
34
|
-
.add(:subnet_ids, field: :subnet_id)
|
|
35
|
-
.add(:cidr_blocks, field: :cidr_block)
|
|
36
|
-
.add(:states, field: :state)
|
|
37
|
-
filter.connect(self, :table)
|
|
38
|
-
|
|
39
|
-
def to_s
|
|
40
|
-
'EC2 VPC Subnets'
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
class Backend
|
|
44
|
-
class AwsClientApi < AwsBackendBase
|
|
45
|
-
BackendFactory.set_default_backend self
|
|
46
|
-
self.aws_client_class = Aws::EC2::Client
|
|
47
|
-
|
|
48
|
-
def describe_subnets(query = {})
|
|
49
|
-
aws_service_client.describe_subnets(query)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
1
|
+
class AwsSubnets < Inspec.resource(1)
|
|
2
|
+
name 'aws_subnets'
|
|
3
|
+
desc 'Verifies settings for VPC Subnets in bulk'
|
|
4
|
+
example "
|
|
5
|
+
# you should be able to test the cidr_block of a subnet
|
|
6
|
+
describe aws_subnets.where(vpc_id: 'vpc-123456789') do
|
|
7
|
+
its('subnet_ids') { should eq ['subnet-12345678', 'subnet-87654321'] }
|
|
8
|
+
its('cidr_blocks') { should eq ['172.31.96.0/20'] }
|
|
9
|
+
its('states') { should_not include 'pending' }
|
|
10
|
+
end
|
|
11
|
+
"
|
|
12
|
+
supports platform: 'aws'
|
|
13
|
+
|
|
14
|
+
include AwsPluralResourceMixin
|
|
15
|
+
|
|
16
|
+
def validate_params(resource_params)
|
|
17
|
+
unless resource_params.empty?
|
|
18
|
+
raise ArgumentError, 'aws_vpc_subnets does not accept resource parameters.'
|
|
19
|
+
end
|
|
20
|
+
resource_params
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def fetch_from_api
|
|
24
|
+
backend = BackendFactory.create(inspec_runner)
|
|
25
|
+
@table = backend.describe_subnets.subnets.map(&:to_h)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Underlying FilterTable implementation.
|
|
29
|
+
filter = FilterTable.create
|
|
30
|
+
filter.add_accessor(:where)
|
|
31
|
+
.add_accessor(:entries)
|
|
32
|
+
.add(:exists?) { |x| !x.entries.empty? }
|
|
33
|
+
.add(:vpc_ids, field: :vpc_id)
|
|
34
|
+
.add(:subnet_ids, field: :subnet_id)
|
|
35
|
+
.add(:cidr_blocks, field: :cidr_block)
|
|
36
|
+
.add(:states, field: :state)
|
|
37
|
+
filter.connect(self, :table)
|
|
38
|
+
|
|
39
|
+
def to_s
|
|
40
|
+
'EC2 VPC Subnets'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Backend
|
|
44
|
+
class AwsClientApi < AwsBackendBase
|
|
45
|
+
BackendFactory.set_default_backend self
|
|
46
|
+
self.aws_client_class = Aws::EC2::Client
|
|
47
|
+
|
|
48
|
+
def describe_subnets(query = {})
|
|
49
|
+
aws_service_client.describe_subnets(query)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|