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
data/lib/resources/xml.rb
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
module Inspec::Resources
|
|
4
|
-
class XmlConfig < JsonConfig
|
|
5
|
-
name 'xml'
|
|
6
|
-
supports platform: 'unix'
|
|
7
|
-
supports platform: 'windows'
|
|
8
|
-
desc 'Use the xml InSpec resource to test configuration data in an XML file'
|
|
9
|
-
example "
|
|
10
|
-
describe xml('default.xml') do
|
|
11
|
-
its('key/sub_key') { should eq(['value']) }
|
|
12
|
-
its(['root/name.with.a.period']) { should cmp 'so_many_dots' }
|
|
13
|
-
end
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
def parse(content)
|
|
17
|
-
require 'rexml/document'
|
|
18
|
-
REXML::Document.new(content)
|
|
19
|
-
rescue => e
|
|
20
|
-
raise Inspec::Exceptions::ResourceFailed, "Unable to parse XML: #{e.message}"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def value(key)
|
|
24
|
-
output = []
|
|
25
|
-
REXML::XPath.each(@params, key.first.to_s) do |element|
|
|
26
|
-
if element.is_a?(REXML::Attribute)
|
|
27
|
-
output.push(element.to_s)
|
|
28
|
-
elsif element.is_a?(REXML::Element)
|
|
29
|
-
output.push(element.text)
|
|
30
|
-
else
|
|
31
|
-
raise Inspec::Exceptions::ResourceFailed, "Unknown XML object received (#{element.class}): #{element}"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
output
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
# used by JsonConfig to build up a full to_s method
|
|
41
|
-
# based on whether a file path, content, or command was supplied.
|
|
42
|
-
def resource_base_name
|
|
43
|
-
'XML'
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Inspec::Resources
|
|
4
|
+
class XmlConfig < JsonConfig
|
|
5
|
+
name 'xml'
|
|
6
|
+
supports platform: 'unix'
|
|
7
|
+
supports platform: 'windows'
|
|
8
|
+
desc 'Use the xml InSpec resource to test configuration data in an XML file'
|
|
9
|
+
example "
|
|
10
|
+
describe xml('default.xml') do
|
|
11
|
+
its('key/sub_key') { should eq(['value']) }
|
|
12
|
+
its(['root/name.with.a.period']) { should cmp 'so_many_dots' }
|
|
13
|
+
end
|
|
14
|
+
"
|
|
15
|
+
|
|
16
|
+
def parse(content)
|
|
17
|
+
require 'rexml/document'
|
|
18
|
+
REXML::Document.new(content)
|
|
19
|
+
rescue => e
|
|
20
|
+
raise Inspec::Exceptions::ResourceFailed, "Unable to parse XML: #{e.message}"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def value(key)
|
|
24
|
+
output = []
|
|
25
|
+
REXML::XPath.each(@params, key.first.to_s) do |element|
|
|
26
|
+
if element.is_a?(REXML::Attribute)
|
|
27
|
+
output.push(element.to_s)
|
|
28
|
+
elsif element.is_a?(REXML::Element)
|
|
29
|
+
output.push(element.text)
|
|
30
|
+
else
|
|
31
|
+
raise Inspec::Exceptions::ResourceFailed, "Unknown XML object received (#{element.class}): #{element}"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
output
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
# used by JsonConfig to build up a full to_s method
|
|
41
|
+
# based on whether a file path, content, or command was supplied.
|
|
42
|
+
def resource_base_name
|
|
43
|
+
'XML'
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/resources/yaml.rb
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
require 'yaml'
|
|
4
|
-
|
|
5
|
-
# Parses a yaml document
|
|
6
|
-
# Usage:
|
|
7
|
-
# describe yaml('.kitchen.yaml') do
|
|
8
|
-
# its('driver.name') { should eq('vagrant') }
|
|
9
|
-
# end
|
|
10
|
-
module Inspec::Resources
|
|
11
|
-
class YamlConfig < JsonConfig
|
|
12
|
-
name 'yaml'
|
|
13
|
-
supports platform: 'unix'
|
|
14
|
-
supports platform: 'windows'
|
|
15
|
-
supports platform: 'esx'
|
|
16
|
-
supports platform: 'cisco'
|
|
17
|
-
desc 'Use the yaml InSpec audit resource to test configuration data in a YAML file.'
|
|
18
|
-
example "
|
|
19
|
-
describe yaml('config.yaml') do
|
|
20
|
-
its(['driver', 'name']) { should eq 'vagrant' }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe yaml({ command: 'retrieve_data.py --yaml' }) do
|
|
24
|
-
its('state') { should eq 'open' }
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe yaml({ content: \"key1: value1\nkey2: value2\" }) do
|
|
28
|
-
its('key2') { should cmp 'value2' }
|
|
29
|
-
end
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
# override file load and parse hash from yaml
|
|
33
|
-
def parse(content)
|
|
34
|
-
YAML.load(content)
|
|
35
|
-
rescue => e
|
|
36
|
-
raise Inspec::Exceptions::ResourceFailed, "Unable to parse YAML: #{e.message}"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
private
|
|
40
|
-
|
|
41
|
-
# used by JsonConfig to build up a full to_s method
|
|
42
|
-
# based on whether a file path, content, or command was supplied.
|
|
43
|
-
def resource_base_name
|
|
44
|
-
'YAML'
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'yaml'
|
|
4
|
+
|
|
5
|
+
# Parses a yaml document
|
|
6
|
+
# Usage:
|
|
7
|
+
# describe yaml('.kitchen.yaml') do
|
|
8
|
+
# its('driver.name') { should eq('vagrant') }
|
|
9
|
+
# end
|
|
10
|
+
module Inspec::Resources
|
|
11
|
+
class YamlConfig < JsonConfig
|
|
12
|
+
name 'yaml'
|
|
13
|
+
supports platform: 'unix'
|
|
14
|
+
supports platform: 'windows'
|
|
15
|
+
supports platform: 'esx'
|
|
16
|
+
supports platform: 'cisco'
|
|
17
|
+
desc 'Use the yaml InSpec audit resource to test configuration data in a YAML file.'
|
|
18
|
+
example "
|
|
19
|
+
describe yaml('config.yaml') do
|
|
20
|
+
its(['driver', 'name']) { should eq 'vagrant' }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe yaml({ command: 'retrieve_data.py --yaml' }) do
|
|
24
|
+
its('state') { should eq 'open' }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe yaml({ content: \"key1: value1\nkey2: value2\" }) do
|
|
28
|
+
its('key2') { should cmp 'value2' }
|
|
29
|
+
end
|
|
30
|
+
"
|
|
31
|
+
|
|
32
|
+
# override file load and parse hash from yaml
|
|
33
|
+
def parse(content)
|
|
34
|
+
YAML.load(content)
|
|
35
|
+
rescue => e
|
|
36
|
+
raise Inspec::Exceptions::ResourceFailed, "Unable to parse YAML: #{e.message}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# used by JsonConfig to build up a full to_s method
|
|
42
|
+
# based on whether a file path, content, or command was supplied.
|
|
43
|
+
def resource_base_name
|
|
44
|
+
'YAML'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/resources/yum.rb
CHANGED
|
@@ -1,180 +1,180 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
# Usage:
|
|
4
|
-
# describe yum do
|
|
5
|
-
# its('repos') { should exist }
|
|
6
|
-
# end
|
|
7
|
-
#
|
|
8
|
-
# describe yum do
|
|
9
|
-
# its('repos') { should include 'base/7/x86_64' }
|
|
10
|
-
# its('epel') { should exist }
|
|
11
|
-
# its('epel') { should be_enabled }
|
|
12
|
-
# end
|
|
13
|
-
#
|
|
14
|
-
# Filter for a specific repo by name
|
|
15
|
-
# - use full identifier e.g. 'updates/7/x86_64'
|
|
16
|
-
# - use short identifier e.g. 'updates'
|
|
17
|
-
#
|
|
18
|
-
# describe yum.repo('epel') do
|
|
19
|
-
# it { should exist }
|
|
20
|
-
# it { should be_enabled }
|
|
21
|
-
# its('baseurl') { should include 'mycompany.biz' }
|
|
22
|
-
# end
|
|
23
|
-
#
|
|
24
|
-
# deprecated:
|
|
25
|
-
# describe yumrepo('epel') do
|
|
26
|
-
# it { should exist }
|
|
27
|
-
# it { should be_enabled }
|
|
28
|
-
# end
|
|
29
|
-
|
|
30
|
-
module Inspec::Resources
|
|
31
|
-
class Yum < Inspec.resource(1)
|
|
32
|
-
name 'yum'
|
|
33
|
-
supports platform: 'unix'
|
|
34
|
-
desc 'Use the yum InSpec audit resource to test the configuration of Yum repositories.'
|
|
35
|
-
example "
|
|
36
|
-
describe yum.repo('name') do
|
|
37
|
-
it { should exist }
|
|
38
|
-
it { should be_enabled }
|
|
39
|
-
end
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
# returns all repositories
|
|
43
|
-
# works as following:
|
|
44
|
-
# search for Repo-id
|
|
45
|
-
# parse data in hashmap
|
|
46
|
-
# store data in object
|
|
47
|
-
# until \n
|
|
48
|
-
def repositories
|
|
49
|
-
return @cache if defined?(@cache)
|
|
50
|
-
# parse the repository data from yum
|
|
51
|
-
# we cannot use -C, because this is not reliable and may lead to errors
|
|
52
|
-
@command_result = inspec.command('yum -v repolist all')
|
|
53
|
-
@content = @command_result.stdout
|
|
54
|
-
@cache = []
|
|
55
|
-
repo = {}
|
|
56
|
-
in_repo = false
|
|
57
|
-
@content.each_line do |line|
|
|
58
|
-
# detect repo start
|
|
59
|
-
in_repo = true if line =~ /^\s*Repo-id\s*:\s*(.*)\b/
|
|
60
|
-
# detect repo end
|
|
61
|
-
if line == "\n" && in_repo
|
|
62
|
-
in_repo = false
|
|
63
|
-
@cache.push(repo)
|
|
64
|
-
repo = {}
|
|
65
|
-
end
|
|
66
|
-
# parse repo content
|
|
67
|
-
if in_repo == true
|
|
68
|
-
val = /^\s*([^:]*?)\s*:\s*(.*?)\s*$/.match(line)
|
|
69
|
-
repo[repo_key(strip(val[1]))] = strip(val[2])
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
@cache
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def repos
|
|
76
|
-
repositories.map { |repo| repo['id'] }
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def repo(repo)
|
|
80
|
-
YumRepo.new(self, repo)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# alias for yum.repo('reponame')
|
|
84
|
-
def method_missing(name)
|
|
85
|
-
repo(name.to_s) if !name.nil?
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def to_s
|
|
89
|
-
'Yum Repository'
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
private
|
|
93
|
-
|
|
94
|
-
# Removes lefthand and righthand whitespace
|
|
95
|
-
def strip(value)
|
|
96
|
-
value&.strip
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Optimize the key value
|
|
100
|
-
def repo_key(key)
|
|
101
|
-
return key if key.nil?
|
|
102
|
-
key.gsub('Repo-', '').downcase
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
class YumRepo
|
|
107
|
-
def initialize(yum, reponame)
|
|
108
|
-
@yum = yum
|
|
109
|
-
@reponame = reponame
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# extracts the shortname from a repo id
|
|
113
|
-
# e.g. extras/7/x86_64 -> extras
|
|
114
|
-
def shortname(id)
|
|
115
|
-
val = %r{^\s*([^/]*?)/(.*?)\s*$}.match(id)
|
|
116
|
-
val.nil? ? nil : val[1]
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def info
|
|
120
|
-
return @cache if defined?(@cache)
|
|
121
|
-
selection = @yum.repositories.select { |e| e['id'] == @reponame || shortname(e['id']) == @reponame }
|
|
122
|
-
@cache = selection.empty? ? {} : selection.first
|
|
123
|
-
@cache
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def exist?
|
|
127
|
-
!info.empty?
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def enabled?
|
|
131
|
-
return false unless exist?
|
|
132
|
-
info['status'] == 'enabled'
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# provide a method for each of the repo metadata items we know about
|
|
136
|
-
[
|
|
137
|
-
:baseurl,
|
|
138
|
-
:expire,
|
|
139
|
-
:filename,
|
|
140
|
-
:mirrors,
|
|
141
|
-
:pkgs,
|
|
142
|
-
:size,
|
|
143
|
-
:status,
|
|
144
|
-
:updated,
|
|
145
|
-
].each do |key|
|
|
146
|
-
define_method key do
|
|
147
|
-
info[key.to_s]
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def to_s
|
|
152
|
-
"YumRepo #{@reponame}"
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
# for compatability with serverspec
|
|
157
|
-
# this is deprecated syntax and will be removed in future versions
|
|
158
|
-
class YumRepoLegacy < Yum
|
|
159
|
-
name 'yumrepo'
|
|
160
|
-
|
|
161
|
-
def initialize(name)
|
|
162
|
-
super()
|
|
163
|
-
@repository = repo(name)
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def exists?
|
|
167
|
-
deprecated
|
|
168
|
-
@repository.exist?
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
def enabled?
|
|
172
|
-
deprecated
|
|
173
|
-
@repository.enabled?
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def deprecated
|
|
177
|
-
warn '[DEPRECATION] `yumrepo(reponame)` is deprecated. Please use `yum.repo(reponame)` instead.'
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
# Usage:
|
|
4
|
+
# describe yum do
|
|
5
|
+
# its('repos') { should exist }
|
|
6
|
+
# end
|
|
7
|
+
#
|
|
8
|
+
# describe yum do
|
|
9
|
+
# its('repos') { should include 'base/7/x86_64' }
|
|
10
|
+
# its('epel') { should exist }
|
|
11
|
+
# its('epel') { should be_enabled }
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
# Filter for a specific repo by name
|
|
15
|
+
# - use full identifier e.g. 'updates/7/x86_64'
|
|
16
|
+
# - use short identifier e.g. 'updates'
|
|
17
|
+
#
|
|
18
|
+
# describe yum.repo('epel') do
|
|
19
|
+
# it { should exist }
|
|
20
|
+
# it { should be_enabled }
|
|
21
|
+
# its('baseurl') { should include 'mycompany.biz' }
|
|
22
|
+
# end
|
|
23
|
+
#
|
|
24
|
+
# deprecated:
|
|
25
|
+
# describe yumrepo('epel') do
|
|
26
|
+
# it { should exist }
|
|
27
|
+
# it { should be_enabled }
|
|
28
|
+
# end
|
|
29
|
+
|
|
30
|
+
module Inspec::Resources
|
|
31
|
+
class Yum < Inspec.resource(1)
|
|
32
|
+
name 'yum'
|
|
33
|
+
supports platform: 'unix'
|
|
34
|
+
desc 'Use the yum InSpec audit resource to test the configuration of Yum repositories.'
|
|
35
|
+
example "
|
|
36
|
+
describe yum.repo('name') do
|
|
37
|
+
it { should exist }
|
|
38
|
+
it { should be_enabled }
|
|
39
|
+
end
|
|
40
|
+
"
|
|
41
|
+
|
|
42
|
+
# returns all repositories
|
|
43
|
+
# works as following:
|
|
44
|
+
# search for Repo-id
|
|
45
|
+
# parse data in hashmap
|
|
46
|
+
# store data in object
|
|
47
|
+
# until \n
|
|
48
|
+
def repositories
|
|
49
|
+
return @cache if defined?(@cache)
|
|
50
|
+
# parse the repository data from yum
|
|
51
|
+
# we cannot use -C, because this is not reliable and may lead to errors
|
|
52
|
+
@command_result = inspec.command('yum -v repolist all')
|
|
53
|
+
@content = @command_result.stdout
|
|
54
|
+
@cache = []
|
|
55
|
+
repo = {}
|
|
56
|
+
in_repo = false
|
|
57
|
+
@content.each_line do |line|
|
|
58
|
+
# detect repo start
|
|
59
|
+
in_repo = true if line =~ /^\s*Repo-id\s*:\s*(.*)\b/
|
|
60
|
+
# detect repo end
|
|
61
|
+
if line == "\n" && in_repo
|
|
62
|
+
in_repo = false
|
|
63
|
+
@cache.push(repo)
|
|
64
|
+
repo = {}
|
|
65
|
+
end
|
|
66
|
+
# parse repo content
|
|
67
|
+
if in_repo == true
|
|
68
|
+
val = /^\s*([^:]*?)\s*:\s*(.*?)\s*$/.match(line)
|
|
69
|
+
repo[repo_key(strip(val[1]))] = strip(val[2])
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
@cache
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def repos
|
|
76
|
+
repositories.map { |repo| repo['id'] }
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def repo(repo)
|
|
80
|
+
YumRepo.new(self, repo)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# alias for yum.repo('reponame')
|
|
84
|
+
def method_missing(name)
|
|
85
|
+
repo(name.to_s) if !name.nil?
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def to_s
|
|
89
|
+
'Yum Repository'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
private
|
|
93
|
+
|
|
94
|
+
# Removes lefthand and righthand whitespace
|
|
95
|
+
def strip(value)
|
|
96
|
+
value&.strip
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Optimize the key value
|
|
100
|
+
def repo_key(key)
|
|
101
|
+
return key if key.nil?
|
|
102
|
+
key.gsub('Repo-', '').downcase
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
class YumRepo
|
|
107
|
+
def initialize(yum, reponame)
|
|
108
|
+
@yum = yum
|
|
109
|
+
@reponame = reponame
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# extracts the shortname from a repo id
|
|
113
|
+
# e.g. extras/7/x86_64 -> extras
|
|
114
|
+
def shortname(id)
|
|
115
|
+
val = %r{^\s*([^/]*?)/(.*?)\s*$}.match(id)
|
|
116
|
+
val.nil? ? nil : val[1]
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def info
|
|
120
|
+
return @cache if defined?(@cache)
|
|
121
|
+
selection = @yum.repositories.select { |e| e['id'] == @reponame || shortname(e['id']) == @reponame }
|
|
122
|
+
@cache = selection.empty? ? {} : selection.first
|
|
123
|
+
@cache
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def exist?
|
|
127
|
+
!info.empty?
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def enabled?
|
|
131
|
+
return false unless exist?
|
|
132
|
+
info['status'] == 'enabled'
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# provide a method for each of the repo metadata items we know about
|
|
136
|
+
[
|
|
137
|
+
:baseurl,
|
|
138
|
+
:expire,
|
|
139
|
+
:filename,
|
|
140
|
+
:mirrors,
|
|
141
|
+
:pkgs,
|
|
142
|
+
:size,
|
|
143
|
+
:status,
|
|
144
|
+
:updated,
|
|
145
|
+
].each do |key|
|
|
146
|
+
define_method key do
|
|
147
|
+
info[key.to_s]
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def to_s
|
|
152
|
+
"YumRepo #{@reponame}"
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# for compatability with serverspec
|
|
157
|
+
# this is deprecated syntax and will be removed in future versions
|
|
158
|
+
class YumRepoLegacy < Yum
|
|
159
|
+
name 'yumrepo'
|
|
160
|
+
|
|
161
|
+
def initialize(name)
|
|
162
|
+
super()
|
|
163
|
+
@repository = repo(name)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def exists?
|
|
167
|
+
deprecated
|
|
168
|
+
@repository.exist?
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def enabled?
|
|
172
|
+
deprecated
|
|
173
|
+
@repository.enabled?
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def deprecated
|
|
177
|
+
warn '[DEPRECATION] `yumrepo(reponame)` is deprecated. Please use `yum.repo(reponame)` instead.'
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|