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,93 +1,93 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# author: Dominik Richter
|
|
3
|
-
# author: Christoph Hartmann
|
|
4
|
-
|
|
5
|
-
class PluginRegistry
|
|
6
|
-
attr_reader :registry
|
|
7
|
-
|
|
8
|
-
def initialize
|
|
9
|
-
@registry = {}
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Resolve a target via available plugins.
|
|
13
|
-
#
|
|
14
|
-
# @param [String] target to resolve
|
|
15
|
-
# @return [Plugin] plugin instance if it can be resolved, nil otherwise
|
|
16
|
-
def resolve(target)
|
|
17
|
-
modules.each do |m|
|
|
18
|
-
res = m.resolve(target)
|
|
19
|
-
return res unless res.nil?
|
|
20
|
-
end
|
|
21
|
-
nil
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
# Get all registered plugins sorted by priority, with highest first
|
|
27
|
-
#
|
|
28
|
-
# @return [Array[Plugin]] sorted list of plugins
|
|
29
|
-
def modules
|
|
30
|
-
@registry.values
|
|
31
|
-
.sort_by { |x| x.respond_to?(:priority) ? x.priority : 0 }
|
|
32
|
-
.reverse
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
class PluginRegistry
|
|
37
|
-
class Plugin
|
|
38
|
-
# Retrieve the plugin registry associated with this plugin
|
|
39
|
-
#
|
|
40
|
-
# @return [PluginRegistry] plugin registry for this plugin
|
|
41
|
-
def self.plugin_registry
|
|
42
|
-
raise "Plugin #{self} does not implement `self.plugin_registry()`. This method is required"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Register a new plugin by name
|
|
46
|
-
#
|
|
47
|
-
# @param [String] the unique name of this plugin
|
|
48
|
-
# @return [nil] disregard
|
|
49
|
-
def self.name(name)
|
|
50
|
-
raise "Trying to register #{self} with name == nil" if name.nil?
|
|
51
|
-
@name = name
|
|
52
|
-
plugin_registry.registry[name] = self
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# This plugin's priority. Set it by providing the priority as an
|
|
56
|
-
# argument. Higher numbers ensure that the plugin is
|
|
57
|
-
# called early to check if a target belongs to it. When called without
|
|
58
|
-
# an argument, it retrieves this plugin's priority. Defaults to 0.
|
|
59
|
-
#
|
|
60
|
-
# @param [Numeric] Priority as a number. Will only be set if != nil
|
|
61
|
-
# @return [Numeric] This plugin's priority
|
|
62
|
-
def self.priority(x = nil)
|
|
63
|
-
@priority = x unless x.nil?
|
|
64
|
-
@priority || 0
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Try to resolve the target. If this plugin cannot handle it, the result
|
|
68
|
-
# will be nil. If, however, the plugin can resolve it, the resulting
|
|
69
|
-
# object will be an instance of this plugin. This means, that the interface
|
|
70
|
-
# that this base class provides, is the basis for the returned type.
|
|
71
|
-
#
|
|
72
|
-
# @param [String] target to try to resolve
|
|
73
|
-
# @return [Plugin] instance if it can be resolved, nil otherwise
|
|
74
|
-
def self.resolve(_target)
|
|
75
|
-
raise "Plugin #{self} does not implement `self.resolve(target)`. This method is required"
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# When a plugin's resolve doesn't lead to the final state, it can
|
|
79
|
-
# use this method to hand it back for another resolver to handle.
|
|
80
|
-
#
|
|
81
|
-
# @param [Any] the current target that needs resolving
|
|
82
|
-
# @param [Plugin] an instance of the calling resolver
|
|
83
|
-
# @return [Plugin] instance if it can be resolved, nil otherwise
|
|
84
|
-
def self.resolve_next(target, parent)
|
|
85
|
-
res = plugin_registry.resolve(target)
|
|
86
|
-
res.parent = parent
|
|
87
|
-
res
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
attr_reader :target
|
|
91
|
-
attr_accessor :parent
|
|
92
|
-
end
|
|
93
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# author: Dominik Richter
|
|
3
|
+
# author: Christoph Hartmann
|
|
4
|
+
|
|
5
|
+
class PluginRegistry
|
|
6
|
+
attr_reader :registry
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@registry = {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Resolve a target via available plugins.
|
|
13
|
+
#
|
|
14
|
+
# @param [String] target to resolve
|
|
15
|
+
# @return [Plugin] plugin instance if it can be resolved, nil otherwise
|
|
16
|
+
def resolve(target)
|
|
17
|
+
modules.each do |m|
|
|
18
|
+
res = m.resolve(target)
|
|
19
|
+
return res unless res.nil?
|
|
20
|
+
end
|
|
21
|
+
nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
# Get all registered plugins sorted by priority, with highest first
|
|
27
|
+
#
|
|
28
|
+
# @return [Array[Plugin]] sorted list of plugins
|
|
29
|
+
def modules
|
|
30
|
+
@registry.values
|
|
31
|
+
.sort_by { |x| x.respond_to?(:priority) ? x.priority : 0 }
|
|
32
|
+
.reverse
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class PluginRegistry
|
|
37
|
+
class Plugin
|
|
38
|
+
# Retrieve the plugin registry associated with this plugin
|
|
39
|
+
#
|
|
40
|
+
# @return [PluginRegistry] plugin registry for this plugin
|
|
41
|
+
def self.plugin_registry
|
|
42
|
+
raise "Plugin #{self} does not implement `self.plugin_registry()`. This method is required"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Register a new plugin by name
|
|
46
|
+
#
|
|
47
|
+
# @param [String] the unique name of this plugin
|
|
48
|
+
# @return [nil] disregard
|
|
49
|
+
def self.name(name)
|
|
50
|
+
raise "Trying to register #{self} with name == nil" if name.nil?
|
|
51
|
+
@name = name
|
|
52
|
+
plugin_registry.registry[name] = self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# This plugin's priority. Set it by providing the priority as an
|
|
56
|
+
# argument. Higher numbers ensure that the plugin is
|
|
57
|
+
# called early to check if a target belongs to it. When called without
|
|
58
|
+
# an argument, it retrieves this plugin's priority. Defaults to 0.
|
|
59
|
+
#
|
|
60
|
+
# @param [Numeric] Priority as a number. Will only be set if != nil
|
|
61
|
+
# @return [Numeric] This plugin's priority
|
|
62
|
+
def self.priority(x = nil)
|
|
63
|
+
@priority = x unless x.nil?
|
|
64
|
+
@priority || 0
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Try to resolve the target. If this plugin cannot handle it, the result
|
|
68
|
+
# will be nil. If, however, the plugin can resolve it, the resulting
|
|
69
|
+
# object will be an instance of this plugin. This means, that the interface
|
|
70
|
+
# that this base class provides, is the basis for the returned type.
|
|
71
|
+
#
|
|
72
|
+
# @param [String] target to try to resolve
|
|
73
|
+
# @return [Plugin] instance if it can be resolved, nil otherwise
|
|
74
|
+
def self.resolve(_target)
|
|
75
|
+
raise "Plugin #{self} does not implement `self.resolve(target)`. This method is required"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# When a plugin's resolve doesn't lead to the final state, it can
|
|
79
|
+
# use this method to hand it back for another resolver to handle.
|
|
80
|
+
#
|
|
81
|
+
# @param [Any] the current target that needs resolving
|
|
82
|
+
# @param [Plugin] an instance of the calling resolver
|
|
83
|
+
# @return [Plugin] instance if it can be resolved, nil otherwise
|
|
84
|
+
def self.resolve_next(target, parent)
|
|
85
|
+
res = plugin_registry.resolve(target)
|
|
86
|
+
res.parent = parent
|
|
87
|
+
res
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
attr_reader :target
|
|
91
|
+
attr_accessor :parent
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/utils/simpleconfig.rb
CHANGED
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# copyright: 2015, Dominik Richter
|
|
3
|
-
# author: Dominik Richter
|
|
4
|
-
# author: Christoph Hartmann
|
|
5
|
-
|
|
6
|
-
require 'utils/parser'
|
|
7
|
-
|
|
8
|
-
class SimpleConfig
|
|
9
|
-
include CommentParser
|
|
10
|
-
|
|
11
|
-
attr_reader :params, :groups
|
|
12
|
-
def initialize(raw_data, opts = {})
|
|
13
|
-
parse(raw_data, opts)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Parse some data
|
|
17
|
-
# quotes: quoting characters, which are parsed, so everything inside
|
|
18
|
-
# it will be part of a string
|
|
19
|
-
# multiline: allow quoted text to span multiple lines
|
|
20
|
-
# comment_char: char which identifies comments
|
|
21
|
-
# standalone_comments: comments must appear alone in a line; if set to true,
|
|
22
|
-
# no comments can be added to the end of an assignment/statement line
|
|
23
|
-
def parse(raw_data, opts = nil)
|
|
24
|
-
@params = {}
|
|
25
|
-
@groups = []
|
|
26
|
-
@vals = @params
|
|
27
|
-
options = default_options.merge(opts || {})
|
|
28
|
-
return if raw_data.nil?
|
|
29
|
-
|
|
30
|
-
# prepare raw data if required
|
|
31
|
-
if !options[:line_separator].nil?
|
|
32
|
-
raw_data = raw_data.tr(options[:line_separator], "\n")
|
|
33
|
-
end
|
|
34
|
-
rest = raw_data
|
|
35
|
-
rest = parse_rest(rest, options) until rest.empty?
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
def parse_values(match, values)
|
|
41
|
-
start_idx = 2
|
|
42
|
-
i = 0
|
|
43
|
-
count = values - 1
|
|
44
|
-
return match[start_idx] if values == 1
|
|
45
|
-
|
|
46
|
-
# iterate over expected parameters
|
|
47
|
-
values = []
|
|
48
|
-
loop do
|
|
49
|
-
values.push(match[start_idx + i])
|
|
50
|
-
i += 1
|
|
51
|
-
break if i > count
|
|
52
|
-
end
|
|
53
|
-
values
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def parse_params_line(line, opts)
|
|
57
|
-
# now line contains what we are interested in parsing
|
|
58
|
-
# check if it is an assignment
|
|
59
|
-
m = opts[:assignment_regex].match(line)
|
|
60
|
-
return nil if m.nil?
|
|
61
|
-
|
|
62
|
-
if opts[:multiple_values]
|
|
63
|
-
@vals[m[1]] ||= []
|
|
64
|
-
@vals[m[1]].push(parse_values(m, opts[:key_values]))
|
|
65
|
-
else
|
|
66
|
-
@vals[m[1]] = parse_values(m, opts[:key_values])
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def parse_group_line(line, opts)
|
|
71
|
-
return nil if opts[:group_re].nil?
|
|
72
|
-
m = opts[:group_re].match(line)
|
|
73
|
-
return nil if m.nil?
|
|
74
|
-
@groups.push(m[1])
|
|
75
|
-
|
|
76
|
-
# We use a Hashie::Mash to provide method syntax for retrieving
|
|
77
|
-
# values. For configs that have keys whose values may be hashes
|
|
78
|
-
# (such as a mysql config that has [sections]), providing
|
|
79
|
-
# a hash whose values are accessible via methods provide
|
|
80
|
-
# a better user experience with `its` blocks.
|
|
81
|
-
@vals = @params[m[1]] = Hashie::Mash.new
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def parse_implicit_assignment_line(line, opts)
|
|
85
|
-
return nil if is_empty_line(line)
|
|
86
|
-
if opts[:multiple_values]
|
|
87
|
-
@vals[line.strip] ||= []
|
|
88
|
-
else
|
|
89
|
-
@vals[line.strip] = ''
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def parse_rest(rest, opts)
|
|
94
|
-
line, idx_nl = parse_comment_line(rest, opts)
|
|
95
|
-
parse_params_line(line, opts) or
|
|
96
|
-
parse_group_line(line, opts) or
|
|
97
|
-
parse_implicit_assignment_line(line, opts)
|
|
98
|
-
|
|
99
|
-
# return whatever is left
|
|
100
|
-
rest[(idx_nl + 1)..-1] || ''
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def is_empty_line(l)
|
|
104
|
-
l =~ /^\s*$/
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def default_options
|
|
108
|
-
{
|
|
109
|
-
quotes: '',
|
|
110
|
-
multiline: false,
|
|
111
|
-
comment_char: '#',
|
|
112
|
-
line_separator: nil, # uses this char to seperate lines before parsing
|
|
113
|
-
assignment_regex: /^\s*([^=]*?)\s*=\s*(.*?)\s*$/,
|
|
114
|
-
group_re: /\[([^\]]+)\]\s*$/,
|
|
115
|
-
key_values: 1, # default for key=value, may require for 'key val1 val2 val3'
|
|
116
|
-
standalone_comments: false,
|
|
117
|
-
multiple_values: false,
|
|
118
|
-
}
|
|
119
|
-
end
|
|
120
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# copyright: 2015, Dominik Richter
|
|
3
|
+
# author: Dominik Richter
|
|
4
|
+
# author: Christoph Hartmann
|
|
5
|
+
|
|
6
|
+
require 'utils/parser'
|
|
7
|
+
|
|
8
|
+
class SimpleConfig
|
|
9
|
+
include CommentParser
|
|
10
|
+
|
|
11
|
+
attr_reader :params, :groups
|
|
12
|
+
def initialize(raw_data, opts = {})
|
|
13
|
+
parse(raw_data, opts)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Parse some data
|
|
17
|
+
# quotes: quoting characters, which are parsed, so everything inside
|
|
18
|
+
# it will be part of a string
|
|
19
|
+
# multiline: allow quoted text to span multiple lines
|
|
20
|
+
# comment_char: char which identifies comments
|
|
21
|
+
# standalone_comments: comments must appear alone in a line; if set to true,
|
|
22
|
+
# no comments can be added to the end of an assignment/statement line
|
|
23
|
+
def parse(raw_data, opts = nil)
|
|
24
|
+
@params = {}
|
|
25
|
+
@groups = []
|
|
26
|
+
@vals = @params
|
|
27
|
+
options = default_options.merge(opts || {})
|
|
28
|
+
return if raw_data.nil?
|
|
29
|
+
|
|
30
|
+
# prepare raw data if required
|
|
31
|
+
if !options[:line_separator].nil?
|
|
32
|
+
raw_data = raw_data.tr(options[:line_separator], "\n")
|
|
33
|
+
end
|
|
34
|
+
rest = raw_data
|
|
35
|
+
rest = parse_rest(rest, options) until rest.empty?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def parse_values(match, values)
|
|
41
|
+
start_idx = 2
|
|
42
|
+
i = 0
|
|
43
|
+
count = values - 1
|
|
44
|
+
return match[start_idx] if values == 1
|
|
45
|
+
|
|
46
|
+
# iterate over expected parameters
|
|
47
|
+
values = []
|
|
48
|
+
loop do
|
|
49
|
+
values.push(match[start_idx + i])
|
|
50
|
+
i += 1
|
|
51
|
+
break if i > count
|
|
52
|
+
end
|
|
53
|
+
values
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def parse_params_line(line, opts)
|
|
57
|
+
# now line contains what we are interested in parsing
|
|
58
|
+
# check if it is an assignment
|
|
59
|
+
m = opts[:assignment_regex].match(line)
|
|
60
|
+
return nil if m.nil?
|
|
61
|
+
|
|
62
|
+
if opts[:multiple_values]
|
|
63
|
+
@vals[m[1]] ||= []
|
|
64
|
+
@vals[m[1]].push(parse_values(m, opts[:key_values]))
|
|
65
|
+
else
|
|
66
|
+
@vals[m[1]] = parse_values(m, opts[:key_values])
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def parse_group_line(line, opts)
|
|
71
|
+
return nil if opts[:group_re].nil?
|
|
72
|
+
m = opts[:group_re].match(line)
|
|
73
|
+
return nil if m.nil?
|
|
74
|
+
@groups.push(m[1])
|
|
75
|
+
|
|
76
|
+
# We use a Hashie::Mash to provide method syntax for retrieving
|
|
77
|
+
# values. For configs that have keys whose values may be hashes
|
|
78
|
+
# (such as a mysql config that has [sections]), providing
|
|
79
|
+
# a hash whose values are accessible via methods provide
|
|
80
|
+
# a better user experience with `its` blocks.
|
|
81
|
+
@vals = @params[m[1]] = Hashie::Mash.new
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def parse_implicit_assignment_line(line, opts)
|
|
85
|
+
return nil if is_empty_line(line)
|
|
86
|
+
if opts[:multiple_values]
|
|
87
|
+
@vals[line.strip] ||= []
|
|
88
|
+
else
|
|
89
|
+
@vals[line.strip] = ''
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def parse_rest(rest, opts)
|
|
94
|
+
line, idx_nl = parse_comment_line(rest, opts)
|
|
95
|
+
parse_params_line(line, opts) or
|
|
96
|
+
parse_group_line(line, opts) or
|
|
97
|
+
parse_implicit_assignment_line(line, opts)
|
|
98
|
+
|
|
99
|
+
# return whatever is left
|
|
100
|
+
rest[(idx_nl + 1)..-1] || ''
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def is_empty_line(l)
|
|
104
|
+
l =~ /^\s*$/
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def default_options
|
|
108
|
+
{
|
|
109
|
+
quotes: '',
|
|
110
|
+
multiline: false,
|
|
111
|
+
comment_char: '#',
|
|
112
|
+
line_separator: nil, # uses this char to seperate lines before parsing
|
|
113
|
+
assignment_regex: /^\s*([^=]*?)\s*=\s*(.*?)\s*$/,
|
|
114
|
+
group_re: /\[([^\]]+)\]\s*$/,
|
|
115
|
+
key_values: 1, # default for key=value, may require for 'key val1 val2 val3'
|
|
116
|
+
standalone_comments: false,
|
|
117
|
+
multiple_values: false,
|
|
118
|
+
}
|
|
119
|
+
end
|
|
120
|
+
end
|
data/lib/utils/spdx.rb
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# author: Christoph Hartmann
|
|
3
|
-
# author: Dominik Richter
|
|
4
|
-
class Spdx
|
|
5
|
-
def self.licenses
|
|
6
|
-
spdx_file = File.join(File.dirname(__FILE__), 'spdx.txt').freeze
|
|
7
|
-
File.read(spdx_file).split("\n")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.valid_license?(license)
|
|
11
|
-
licenses.include?(license)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# author: Christoph Hartmann
|
|
3
|
+
# author: Dominik Richter
|
|
4
|
+
class Spdx
|
|
5
|
+
def self.licenses
|
|
6
|
+
spdx_file = File.join(File.dirname(__FILE__), 'spdx.txt').freeze
|
|
7
|
+
File.read(spdx_file).split("\n")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.valid_license?(license)
|
|
11
|
+
licenses.include?(license)
|
|
12
|
+
end
|
|
13
|
+
end
|