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,89 +1,89 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright 2017, Christoph Hartmann
|
|
4
|
-
|
|
5
|
-
require_relative 'docker_object'
|
|
6
|
-
|
|
7
|
-
module Inspec::Resources
|
|
8
|
-
class DockerContainer < Inspec.resource(1)
|
|
9
|
-
include Inspec::Resources::DockerObject
|
|
10
|
-
|
|
11
|
-
name 'docker_container'
|
|
12
|
-
supports platform: 'unix'
|
|
13
|
-
desc ''
|
|
14
|
-
example "
|
|
15
|
-
describe docker_container('an-echo-server') do
|
|
16
|
-
it { should exist }
|
|
17
|
-
it { should be_running }
|
|
18
|
-
its('id') { should_not eq '' }
|
|
19
|
-
its('image') { should eq 'busybox:latest' }
|
|
20
|
-
its('repo') { should eq 'busybox' }
|
|
21
|
-
its('tag') { should eq 'latest' }
|
|
22
|
-
its('ports') { should eq [] }
|
|
23
|
-
its('command') { should eq 'nc -ll -p 1234 -e /bin/cat' }
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
describe docker_container(id: 'e2c52a183358') do
|
|
27
|
-
it { should exist }
|
|
28
|
-
it { should be_running }
|
|
29
|
-
end
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
def initialize(opts = {})
|
|
33
|
-
# if a string is provided, we expect it is the name
|
|
34
|
-
if opts.is_a?(String)
|
|
35
|
-
@opts = { name: opts }
|
|
36
|
-
else
|
|
37
|
-
@opts = opts
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def running?
|
|
42
|
-
status.downcase.start_with?('up') if object_info.entries.length == 1
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def status
|
|
46
|
-
object_info.status[0] if object_info.entries.length == 1
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def labels
|
|
50
|
-
object_info.labels[0] if object_info.entries.length == 1
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def ports
|
|
54
|
-
object_info.ports[0] if object_info.entries.length == 1
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def command
|
|
58
|
-
return unless object_info.entries.length == 1
|
|
59
|
-
|
|
60
|
-
cmd = object_info.commands[0]
|
|
61
|
-
cmd.slice(1, cmd.length - 2)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def image
|
|
65
|
-
object_info.images[0] if object_info.entries.length == 1
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def repo
|
|
69
|
-
parse_components_from_image(image)[:repo] if object_info.entries.size == 1
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def tag
|
|
73
|
-
parse_components_from_image(image)[:tag] if object_info.entries.size == 1
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def to_s
|
|
77
|
-
name = @opts[:name] || @opts[:id]
|
|
78
|
-
"Docker Container #{name}"
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
private
|
|
82
|
-
|
|
83
|
-
def object_info
|
|
84
|
-
return @info if defined?(@info)
|
|
85
|
-
opts = @opts
|
|
86
|
-
@info = inspec.docker.containers.where { names == opts[:name] || (!id.nil? && !opts[:id].nil? && (id == opts[:id] || id.start_with?(opts[:id]))) }
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright 2017, Christoph Hartmann
|
|
4
|
+
|
|
5
|
+
require_relative 'docker_object'
|
|
6
|
+
|
|
7
|
+
module Inspec::Resources
|
|
8
|
+
class DockerContainer < Inspec.resource(1)
|
|
9
|
+
include Inspec::Resources::DockerObject
|
|
10
|
+
|
|
11
|
+
name 'docker_container'
|
|
12
|
+
supports platform: 'unix'
|
|
13
|
+
desc ''
|
|
14
|
+
example "
|
|
15
|
+
describe docker_container('an-echo-server') do
|
|
16
|
+
it { should exist }
|
|
17
|
+
it { should be_running }
|
|
18
|
+
its('id') { should_not eq '' }
|
|
19
|
+
its('image') { should eq 'busybox:latest' }
|
|
20
|
+
its('repo') { should eq 'busybox' }
|
|
21
|
+
its('tag') { should eq 'latest' }
|
|
22
|
+
its('ports') { should eq [] }
|
|
23
|
+
its('command') { should eq 'nc -ll -p 1234 -e /bin/cat' }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe docker_container(id: 'e2c52a183358') do
|
|
27
|
+
it { should exist }
|
|
28
|
+
it { should be_running }
|
|
29
|
+
end
|
|
30
|
+
"
|
|
31
|
+
|
|
32
|
+
def initialize(opts = {})
|
|
33
|
+
# if a string is provided, we expect it is the name
|
|
34
|
+
if opts.is_a?(String)
|
|
35
|
+
@opts = { name: opts }
|
|
36
|
+
else
|
|
37
|
+
@opts = opts
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def running?
|
|
42
|
+
status.downcase.start_with?('up') if object_info.entries.length == 1
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def status
|
|
46
|
+
object_info.status[0] if object_info.entries.length == 1
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def labels
|
|
50
|
+
object_info.labels[0] if object_info.entries.length == 1
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def ports
|
|
54
|
+
object_info.ports[0] if object_info.entries.length == 1
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def command
|
|
58
|
+
return unless object_info.entries.length == 1
|
|
59
|
+
|
|
60
|
+
cmd = object_info.commands[0]
|
|
61
|
+
cmd.slice(1, cmd.length - 2)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def image
|
|
65
|
+
object_info.images[0] if object_info.entries.length == 1
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def repo
|
|
69
|
+
parse_components_from_image(image)[:repo] if object_info.entries.size == 1
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def tag
|
|
73
|
+
parse_components_from_image(image)[:tag] if object_info.entries.size == 1
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def to_s
|
|
77
|
+
name = @opts[:name] || @opts[:id]
|
|
78
|
+
"Docker Container #{name}"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
|
|
83
|
+
def object_info
|
|
84
|
+
return @info if defined?(@info)
|
|
85
|
+
opts = @opts
|
|
86
|
+
@info = inspec.docker.containers.where { names == opts[:name] || (!id.nil? && !opts[:id].nil? && (id == opts[:id] || id.start_with?(opts[:id]))) }
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright 2017, Christoph Hartmann
|
|
4
|
-
|
|
5
|
-
require_relative 'docker_object'
|
|
6
|
-
|
|
7
|
-
module Inspec::Resources
|
|
8
|
-
class DockerImage < Inspec.resource(1)
|
|
9
|
-
include Inspec::Resources::DockerObject
|
|
10
|
-
|
|
11
|
-
name 'docker_image'
|
|
12
|
-
supports platform: 'unix'
|
|
13
|
-
desc ''
|
|
14
|
-
example "
|
|
15
|
-
describe docker_image('alpine:latest') do
|
|
16
|
-
it { should exist }
|
|
17
|
-
its('id') { should_not eq '' }
|
|
18
|
-
its('image') { should eq 'alpine:latest' }
|
|
19
|
-
its('repo') { should eq 'alpine' }
|
|
20
|
-
its('tag') { should eq 'latest' }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe docker_image('alpine:latest') do
|
|
24
|
-
it { should exist }
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe docker_image(id: '4a415e366388') do
|
|
28
|
-
it { should exist }
|
|
29
|
-
end
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
def initialize(opts = {})
|
|
33
|
-
# do sanitizion of input values
|
|
34
|
-
o = opts.dup
|
|
35
|
-
o = { image: opts } if opts.is_a?(String)
|
|
36
|
-
@opts = sanitize_options(o)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def image
|
|
40
|
-
"#{repo}:#{tag}" if object_info.entries.size == 1
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def repo
|
|
44
|
-
object_info.repositories[0] if object_info.entries.size == 1
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def tag
|
|
48
|
-
object_info.tags[0] if object_info.entries.size == 1
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def to_s
|
|
52
|
-
img = @opts[:image] || @opts[:id]
|
|
53
|
-
"Docker Image #{img}"
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
private
|
|
57
|
-
|
|
58
|
-
def sanitize_options(opts)
|
|
59
|
-
opts.merge!(parse_components_from_image(opts[:image]))
|
|
60
|
-
|
|
61
|
-
# assume a "latest" tag if we don't have one
|
|
62
|
-
opts[:tag] ||= 'latest'
|
|
63
|
-
|
|
64
|
-
# if the ID isn't nil and doesn't contain a hash indicator (indicated by the presence
|
|
65
|
-
# of a colon, which separates the indicator from the actual hash), we assume it's sha256.
|
|
66
|
-
opts[:id] = 'sha256:' + opts[:id] unless opts[:id].nil? || opts[:id].include?(':')
|
|
67
|
-
|
|
68
|
-
# Assemble/reassemble the image from the repo and tag
|
|
69
|
-
opts[:image] = "#{opts[:repo]}:#{opts[:tag]}" unless opts[:repo].nil?
|
|
70
|
-
|
|
71
|
-
# return the santized opts back to the caller
|
|
72
|
-
opts
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def object_info
|
|
76
|
-
return @info if defined?(@info)
|
|
77
|
-
opts = @opts
|
|
78
|
-
@info = inspec.docker.images.where {
|
|
79
|
-
(repository == opts[:repo] && tag == opts[:tag]) || (!id.nil? && !opts[:id].nil? && (id == opts[:id] || id.start_with?(opts[:id])))
|
|
80
|
-
}
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright 2017, Christoph Hartmann
|
|
4
|
+
|
|
5
|
+
require_relative 'docker_object'
|
|
6
|
+
|
|
7
|
+
module Inspec::Resources
|
|
8
|
+
class DockerImage < Inspec.resource(1)
|
|
9
|
+
include Inspec::Resources::DockerObject
|
|
10
|
+
|
|
11
|
+
name 'docker_image'
|
|
12
|
+
supports platform: 'unix'
|
|
13
|
+
desc ''
|
|
14
|
+
example "
|
|
15
|
+
describe docker_image('alpine:latest') do
|
|
16
|
+
it { should exist }
|
|
17
|
+
its('id') { should_not eq '' }
|
|
18
|
+
its('image') { should eq 'alpine:latest' }
|
|
19
|
+
its('repo') { should eq 'alpine' }
|
|
20
|
+
its('tag') { should eq 'latest' }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe docker_image('alpine:latest') do
|
|
24
|
+
it { should exist }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe docker_image(id: '4a415e366388') do
|
|
28
|
+
it { should exist }
|
|
29
|
+
end
|
|
30
|
+
"
|
|
31
|
+
|
|
32
|
+
def initialize(opts = {})
|
|
33
|
+
# do sanitizion of input values
|
|
34
|
+
o = opts.dup
|
|
35
|
+
o = { image: opts } if opts.is_a?(String)
|
|
36
|
+
@opts = sanitize_options(o)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def image
|
|
40
|
+
"#{repo}:#{tag}" if object_info.entries.size == 1
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def repo
|
|
44
|
+
object_info.repositories[0] if object_info.entries.size == 1
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def tag
|
|
48
|
+
object_info.tags[0] if object_info.entries.size == 1
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_s
|
|
52
|
+
img = @opts[:image] || @opts[:id]
|
|
53
|
+
"Docker Image #{img}"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
def sanitize_options(opts)
|
|
59
|
+
opts.merge!(parse_components_from_image(opts[:image]))
|
|
60
|
+
|
|
61
|
+
# assume a "latest" tag if we don't have one
|
|
62
|
+
opts[:tag] ||= 'latest'
|
|
63
|
+
|
|
64
|
+
# if the ID isn't nil and doesn't contain a hash indicator (indicated by the presence
|
|
65
|
+
# of a colon, which separates the indicator from the actual hash), we assume it's sha256.
|
|
66
|
+
opts[:id] = 'sha256:' + opts[:id] unless opts[:id].nil? || opts[:id].include?(':')
|
|
67
|
+
|
|
68
|
+
# Assemble/reassemble the image from the repo and tag
|
|
69
|
+
opts[:image] = "#{opts[:repo]}:#{opts[:tag]}" unless opts[:repo].nil?
|
|
70
|
+
|
|
71
|
+
# return the santized opts back to the caller
|
|
72
|
+
opts
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def object_info
|
|
76
|
+
return @info if defined?(@info)
|
|
77
|
+
opts = @opts
|
|
78
|
+
@info = inspec.docker.images.where {
|
|
79
|
+
(repository == opts[:repo] && tag == opts[:tag]) || (!id.nil? && !opts[:id].nil? && (id == opts[:id] || id.start_with?(opts[:id])))
|
|
80
|
+
}
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright 2017, Christoph Hartmann
|
|
4
|
-
#
|
|
5
|
-
# author: Christoph Hartmann
|
|
6
|
-
# author: Patrick Muench
|
|
7
|
-
# author: Dominik Richter
|
|
8
|
-
# author: Matt Kulka
|
|
9
|
-
|
|
10
|
-
module Inspec::Resources::DockerObject
|
|
11
|
-
def exist?
|
|
12
|
-
object_info.exists?
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def id
|
|
16
|
-
object_info.ids[0] if object_info.entries.size == 1
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def parse_components_from_image(image_string)
|
|
22
|
-
# if the user did not supply an image string, they likely supplied individual
|
|
23
|
-
# option parameters, such as repo and tag. Return empty data back to the caller.
|
|
24
|
-
return {} if image_string.nil?
|
|
25
|
-
|
|
26
|
-
first_colon = image_string.index(':') || -1
|
|
27
|
-
first_slash = image_string.index('/') || -1
|
|
28
|
-
|
|
29
|
-
if image_string.count(':') == 2
|
|
30
|
-
# If there are two colons in the image string, it contains a repo-with-port and a tag.
|
|
31
|
-
# example: localhost:5000/chef/inspec:1.46.3
|
|
32
|
-
partitioned_string = image_string.rpartition(':')
|
|
33
|
-
repo = partitioned_string.first
|
|
34
|
-
tag = partitioned_string.last
|
|
35
|
-
image_name = repo.split('/')[1..-1].join
|
|
36
|
-
elsif image_string.count(':') == 1 && first_colon < first_slash
|
|
37
|
-
# If there's one colon in the image string, and it comes before a forward-slash,
|
|
38
|
-
# it contains a repo-with-port but no tag.
|
|
39
|
-
# example: localhost:5000/ubuntu
|
|
40
|
-
repo = image_string
|
|
41
|
-
tag = nil
|
|
42
|
-
image_name = repo.split('/')[1..-1].join
|
|
43
|
-
else
|
|
44
|
-
# If there's one colon in the image string and it doesn't preceed a slash, or if
|
|
45
|
-
# there is no colon at all, then it separates the repo from the tag, if there is a tag.
|
|
46
|
-
# example: chef/inspec:1.46.3
|
|
47
|
-
# example: chef/inspec
|
|
48
|
-
# example: ubuntu:14.04
|
|
49
|
-
repo, tag = image_string.split(':')
|
|
50
|
-
image_name = repo
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# return the repo, image_name and tag parsed from the string, which can be merged into
|
|
54
|
-
# the rest of the user-supplied options
|
|
55
|
-
{ repo: repo, image_name: image_name, tag: tag }
|
|
56
|
-
end
|
|
57
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright 2017, Christoph Hartmann
|
|
4
|
+
#
|
|
5
|
+
# author: Christoph Hartmann
|
|
6
|
+
# author: Patrick Muench
|
|
7
|
+
# author: Dominik Richter
|
|
8
|
+
# author: Matt Kulka
|
|
9
|
+
|
|
10
|
+
module Inspec::Resources::DockerObject
|
|
11
|
+
def exist?
|
|
12
|
+
object_info.exists?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def id
|
|
16
|
+
object_info.ids[0] if object_info.entries.size == 1
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def parse_components_from_image(image_string)
|
|
22
|
+
# if the user did not supply an image string, they likely supplied individual
|
|
23
|
+
# option parameters, such as repo and tag. Return empty data back to the caller.
|
|
24
|
+
return {} if image_string.nil?
|
|
25
|
+
|
|
26
|
+
first_colon = image_string.index(':') || -1
|
|
27
|
+
first_slash = image_string.index('/') || -1
|
|
28
|
+
|
|
29
|
+
if image_string.count(':') == 2
|
|
30
|
+
# If there are two colons in the image string, it contains a repo-with-port and a tag.
|
|
31
|
+
# example: localhost:5000/chef/inspec:1.46.3
|
|
32
|
+
partitioned_string = image_string.rpartition(':')
|
|
33
|
+
repo = partitioned_string.first
|
|
34
|
+
tag = partitioned_string.last
|
|
35
|
+
image_name = repo.split('/')[1..-1].join
|
|
36
|
+
elsif image_string.count(':') == 1 && first_colon < first_slash
|
|
37
|
+
# If there's one colon in the image string, and it comes before a forward-slash,
|
|
38
|
+
# it contains a repo-with-port but no tag.
|
|
39
|
+
# example: localhost:5000/ubuntu
|
|
40
|
+
repo = image_string
|
|
41
|
+
tag = nil
|
|
42
|
+
image_name = repo.split('/')[1..-1].join
|
|
43
|
+
else
|
|
44
|
+
# If there's one colon in the image string and it doesn't preceed a slash, or if
|
|
45
|
+
# there is no colon at all, then it separates the repo from the tag, if there is a tag.
|
|
46
|
+
# example: chef/inspec:1.46.3
|
|
47
|
+
# example: chef/inspec
|
|
48
|
+
# example: ubuntu:14.04
|
|
49
|
+
repo, tag = image_string.split(':')
|
|
50
|
+
image_name = repo
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# return the repo, image_name and tag parsed from the string, which can be merged into
|
|
54
|
+
# the rest of the user-supplied options
|
|
55
|
+
{ repo: repo, image_name: image_name, tag: tag }
|
|
56
|
+
end
|
|
57
|
+
end
|