mirror of
https://github.com/inspec/inspec
synced 2025-03-01 05:47:29 +00:00
http resource: Make remote worker the default (#2520)
* http resource: Make remote worker the default Signed-off-by: Jerry Aldrich <jerryaldrichiii@gmail.com>
This commit is contained in:
parent
ecbede56fa
commit
9ebd807ea4
2 changed files with 19 additions and 37 deletions
|
@ -6,13 +6,6 @@ title: About the http Resource
|
||||||
|
|
||||||
Use the `http` InSpec audit resource to test an http endpoint.
|
Use the `http` InSpec audit resource to test an http endpoint.
|
||||||
|
|
||||||
<p class="warning">In InSpec 1.40 and earlier, this resource always executes on the host on which <code>inspec exec</code> is run, even if you use the <code>--target</code> option to remotely scan a different host.<br>
|
|
||||||
<br>
|
|
||||||
Beginning with InSpec 1.41, you can enable the ability to have the HTTP test execute on the remote target, provided <code>curl</code> is available. See the "Local vs. Remote" section below.<br>
|
|
||||||
<br>
|
|
||||||
Executing the HTTP test on the remote target will be the default behavior in InSpec 2.0.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
## Syntax
|
## Syntax
|
||||||
|
@ -38,15 +31,6 @@ where
|
||||||
* `ssl_verify` may be specified to enable or disable verification of SSL certificates (default to `true`)
|
* `ssl_verify` may be specified to enable or disable verification of SSL certificates (default to `true`)
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
## Local vs. Remote
|
|
||||||
|
|
||||||
Beginning with InSpec 1.41, you can enable the ability to have the HTTP test execute on the remote target:
|
|
||||||
|
|
||||||
describe http('http://www.example.com', enable_remote_worker: true) do
|
|
||||||
its('body') { should cmp 'awesome' }
|
|
||||||
end
|
|
||||||
|
|
||||||
In InSpec 2.0, the HTTP test will automatically execute remotely whenever InSpec is testing a remote node.
|
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
|
|
@ -22,23 +22,27 @@ module Inspec::Resources
|
||||||
its('Content-Length') { should cmp 258 }
|
its('Content-Length') { should cmp 258 }
|
||||||
its('Content-Type') { should cmp 'text/html; charset=UTF-8' }
|
its('Content-Type') { should cmp 'text/html; charset=UTF-8' }
|
||||||
end
|
end
|
||||||
|
|
||||||
# properly execute the HTTP call on the scanned machine instead of the
|
|
||||||
# machine executing InSpec. This will be the default behavior in InSpec 2.0.
|
|
||||||
describe http('http://localhost:8080', enable_remote_worker: true) do
|
|
||||||
its('body') { should cmp 'local web server on target machine' }
|
|
||||||
end
|
|
||||||
"
|
"
|
||||||
|
|
||||||
def initialize(url, opts = {})
|
def initialize(url, opts = {})
|
||||||
@url = url
|
@url = url
|
||||||
@opts = opts
|
@opts = opts
|
||||||
|
|
||||||
if use_remote_worker?
|
# Prior to InSpec 2.0 the HTTP test had to be instructed to run on the
|
||||||
return skip_resource 'curl is not available on the target machine' unless inspec.command('curl').exist?
|
# remote target machine. This warning will be removed after a few months
|
||||||
@worker = Worker::Remote.new(inspec, http_method, url, opts)
|
# to give users an opportunity to remove the unused option from their
|
||||||
else
|
# profiles.
|
||||||
|
if opts.key?(:enable_remote_worker) && !inspec.local_transport?
|
||||||
|
warn 'Ignoring `enable_remote_worker` option, the `http` resource ',
|
||||||
|
'remote worker is enabled by default for remote targets and ',
|
||||||
|
'cannot be disabled'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Run locally if InSpec is ran locally and remotely if ran remotely
|
||||||
|
if inspec.local_transport?
|
||||||
@worker = Worker::Local.new(http_method, url, opts)
|
@worker = Worker::Local.new(http_method, url, opts)
|
||||||
|
else
|
||||||
|
@worker = Worker::Remote.new(inspec, http_method, url, opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -62,17 +66,6 @@ module Inspec::Resources
|
||||||
"http #{http_method} on #{@url}"
|
"http #{http_method} on #{@url}"
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def use_remote_worker?
|
|
||||||
return false if inspec.local_transport?
|
|
||||||
return true if @opts[:enable_remote_worker]
|
|
||||||
|
|
||||||
warn "[DEPRECATION] #{self} will execute locally instead of the target machine. To execute remotely, add `enable_remote_worker: true`."
|
|
||||||
warn '[DEPRECATION] `enable_remote_worker: true` will be the default behavior in InSpec 2.0.'
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
class Worker
|
class Worker
|
||||||
class Base
|
class Base
|
||||||
attr_reader :http_method, :opts, :url
|
attr_reader :http_method, :opts, :url
|
||||||
|
@ -154,6 +147,11 @@ module Inspec::Resources
|
||||||
attr_reader :inspec
|
attr_reader :inspec
|
||||||
|
|
||||||
def initialize(inspec, http_method, url, opts)
|
def initialize(inspec, http_method, url, opts)
|
||||||
|
unless inspec.command('curl').exist?
|
||||||
|
raise Inspec::Exceptions::ResourceSkipped,
|
||||||
|
'curl is not available on the target machine'
|
||||||
|
end
|
||||||
|
|
||||||
@inspec = inspec
|
@inspec = inspec
|
||||||
super(http_method, url, opts)
|
super(http_method, url, opts)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue