Class: Inspec::Plugins::Fetcher

Inherits:
PluginRegistry::Plugin show all
Defined in:
lib/inspec/plugin/v1/plugin_types/fetcher.rb

Overview

An Inspec::Plugins::Fetcher is responsible for fetching a remote source to a local directory or file provided by the user.

In general, there are two kinds of fetchers. (1) Fetchers that implement this entire API (see the Git or Url fetchers for examples), and (2) fetchers that only implement self.resolve and then call the resolve_next method with a modified target hash. Fetchers in (2) do not need to implement the functions in this class because the caller will never actually get an instance of those fetchers.

Instance Attribute Summary collapse

Attributes inherited from PluginRegistry::Plugin

#parent

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from PluginRegistry::Plugin

name, priority, resolve, resolve_next

Instance Attribute Details

#targetObject

Returns the value of attribute target.



23
24
25
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 23

def target
  @target
end

Class Method Details

.plugin_registryObject



19
20
21
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 19

def self.plugin_registry
  Inspec::Fetcher::Registry
end

Instance Method Details

#archive_pathObject

The path to the archive on disk. This can be passed to a FileProvider to get access to the files in the fetched profile.



34
35
36
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 34

def archive_path
  raise "Fetcher #{self} does not implement `archive_path()`. This is required."
end

#cache_keyObject

The unique key based on the content of the remote archive.



64
65
66
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 64

def cache_key
  raise "Fetcher #{self} does not implement `cache_key()`. This is required for terminal fetchers."
end

#fetch(_path) ⇒ Object

Fetches the remote source to a local source, using the provided path as a partial filename. That is, if you pass /foo/bar/baz, the fetcher can create:

/foo/bar/baz/: A profile directory, or /foo/bar/baz.tar.gz: A profile tarball, or /foo/bar/baz.zip



47
48
49
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 47

def fetch(_path)
  raise "Fetcher #{self} does not implement `fetch()`. This is required."
end

#relative_targetObject

relative_target is provided to keep compatibility with 3rd party plugins.

Deprecated: This function may be removed in future versions of Inspec, don’t depend on it in new plugins.



104
105
106
107
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 104

def relative_target
  file_provider = Inspec::FileProvider.for_path(archive_path)
  file_provider.relative_provider
end

#requires_locking?Boolean

Returns false by default This is used to regulate cache contention. Fetchers that are sensitive to cache contention should return true.

Returns:

  • (Boolean)


112
113
114
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 112

def requires_locking?
  false
end

#resolved_sourceObject

The full specification of the remote source, with any ambigious references provided by the user resolved to an exact reference where possible. For example, in the Git provide, a tag will be resolved to an exact revision.



57
58
59
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 57

def resolved_source
  raise "Fetcher #{self} does not implement `resolved_source()`. This is required for terminal fetchers."
end

#update_from_opts(opts) ⇒ Object

This optional method may be used after a failed fetch. If the fetcher can be updated with information that might lead to a successful retrieval of alternative content, this method may be called.

Default implementation makes a peculiar assumption that the class has

a ivar named @archive_shasum and you have a fetcher opt that pairs with it named sha256, and those are the only two that matter for updating.

Return TrueClass if the fetcher was updated and a retry is in order Return FalseClass if the update contained no useful information and a retry should not be attempted



80
81
82
83
84
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 80

def update_from_opts(opts)
  changed = @archive_shasum != opts[:sha256]
  @archive_shasum = opts[:sha256]
  changed
end

#update_ivar_from_opt(opt_name, opts) ⇒ Object

Helper for above; usful when the subclass ivars whose names exactly match the names of the fetcher options.



88
89
90
91
92
93
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 88

def update_ivar_from_opt(opt_name, opts)
  ivar_sym = "@#{opt_name}".to_sym
  changed = instance_variable_get(ivar_sym) != opts[opt_name]
  instance_variable_set(ivar_sym, opts[opt_name])
  changed
end

#writable?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 25

def writable?
  false
end