Module: Kitchen::Configurable
- Included in:
- Driver::Base, Driver::SSHBase, LifecycleHooks, Provisioner::Base, Transport::Base, Verifier::Base
- Defined in:
- lib/kitchen/configurable.rb
Overview
A mixin for providing configuration-related behavior such as default config (static, computed, inherited), required config, local path expansion, etc.
Defined Under Namespace
Modules: ClassMethods
Instance Attribute Summary collapse
-
#instance ⇒ Kitchen::Instance
readonly
The associated instance.
Class Method Summary collapse
Instance Method Summary collapse
-
#[](attr) ⇒ Object
Provides hash-like access to configuration keys.
-
#bourne_shell? ⇒ TrueClass, FalseClass
True if ‘:shell_type` is `“bourne”` (or unset, for backwards compatability).
-
#calculate_path(path, opts = {}) ⇒ String
Find an appropriate path to a file or directory, based on graceful fallback rules or returns nil if path cannot be determined.
-
#config_keys ⇒ Array
Returns an array of configuration keys.
-
#diagnose ⇒ Hash
Returns a Hash of configuration and other useful diagnostic information.
-
#diagnose_plugin ⇒ Hash
Returns a Hash of configuration and other useful diagnostic information associated with the plugin itself (such as loaded version, class name, etc.).
-
#finalize_config!(instance) ⇒ self
A lifecycle method that should be invoked when the object is about ready to be used.
-
#name ⇒ String
Returns the name of this plugin, suitable for display in a CLI.
-
#powershell_shell? ⇒ TrueClass, FalseClass
True if ‘:shell_type` is `“powershell”`.
-
#remote_path_join(*parts) ⇒ String
Builds a file path based on the ‘:os_type` (`“windows”` or `“unix”`).
-
#unix_os? ⇒ TrueClass, FalseClass
True if ‘:os_type` is `“unix”` (or unset, for backwards compatibility).
-
#verify_dependencies ⇒ Object
Performs whatever tests that may be required to ensure that this plugin will be able to function in the current environment.
-
#windows_os? ⇒ TrueClass, FalseClass
True if ‘:os_type` is `“windows”`.
Instance Attribute Details
#instance ⇒ Kitchen::Instance (readonly)
Returns the associated instance.
34 35 36 |
# File 'lib/kitchen/configurable.rb', line 34 def instance @instance end |
Class Method Details
.included(base) ⇒ Object
29 30 31 |
# File 'lib/kitchen/configurable.rb', line 29 def self.included(base) base.extend(ClassMethods) end |
Instance Method Details
#[](attr) ⇒ Object
Provides hash-like access to configuration keys.
61 62 63 |
# File 'lib/kitchen/configurable.rb', line 61 def [](attr) config[attr] end |
#bourne_shell? ⇒ TrueClass, FalseClass
Returns true if ‘:shell_type` is `“bourne”` (or unset, for backwards compatability).
67 68 69 |
# File 'lib/kitchen/configurable.rb', line 67 def bourne_shell? ["bourne", nil].include?(instance.platform.shell_type) end |
#calculate_path(path, opts = {}) ⇒ String
Find an appropriate path to a file or directory, based on graceful fallback rules or returns nil if path cannot be determined.
Given an instance with suite named ‘“server”`, a `test_base_path` of `“/a/b”`, and a path segement of `“roles”` then following will be tried in order (first match that exists wins):
-
/a/b/server/roles
-
/a/b/roles
-
$PWD/roles
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/kitchen/configurable.rb', line 90 def calculate_path(path, opts = {}) type = opts.fetch(:type, :directory) base = opts.fetch(:base_path) do config.fetch(:test_base_path) do |key| raise UserError, "#{key} is not found in #{self}" end end [ File.join(base, instance.suite.name, path), File.join(base, path), File.join(Dir.pwd, path), ].find do |candidate| type == :directory ? File.directory?(candidate) : File.file?(candidate) end end |
#config_keys ⇒ Array
Returns an array of configuration keys.
110 111 112 |
# File 'lib/kitchen/configurable.rb', line 110 def config_keys config.keys end |
#diagnose ⇒ Hash
Returns a Hash of configuration and other useful diagnostic information.
117 118 119 120 121 |
# File 'lib/kitchen/configurable.rb', line 117 def diagnose result = {} config_keys.sort.each { |k| result[k] = config[k] } result end |
#diagnose_plugin ⇒ Hash
Returns a Hash of configuration and other useful diagnostic information associated with the plugin itself (such as loaded version, class name, etc.).
128 129 130 131 132 133 |
# File 'lib/kitchen/configurable.rb', line 128 def diagnose_plugin result = {} result[:name] = name result.merge!(self.class.diagnose) result end |
#finalize_config!(instance) ⇒ self
A lifecycle method that should be invoked when the object is about ready to be used. A reference to an Instance is required as configuration dependant data may be access through an Instance. This also acts as a hook point where the object may wish to perform other last minute checks, validations, or configuration expansions.
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/kitchen/configurable.rb', line 45 def finalize_config!(instance) raise ClientError, "Instance must be provided to #{self}" if instance.nil? @instance = instance deprecate_config! validate_config! load_needed_dependencies! self end |
#name ⇒ String
Returns the name of this plugin, suitable for display in a CLI.
138 139 140 |
# File 'lib/kitchen/configurable.rb', line 138 def name self.class.name.split("::").last end |
#powershell_shell? ⇒ TrueClass, FalseClass
Returns true if ‘:shell_type` is `“powershell”`.
143 144 145 |
# File 'lib/kitchen/configurable.rb', line 143 def powershell_shell? ["powershell"].include?(instance.platform.shell_type) end |
#remote_path_join(*parts) ⇒ String
Builds a file path based on the ‘:os_type` (`“windows”` or `“unix”`).
150 151 152 153 |
# File 'lib/kitchen/configurable.rb', line 150 def remote_path_join(*parts) path = File.join(*parts) windows_os? ? path.tr("/", "\\") : path.tr("\\", "/") end |
#unix_os? ⇒ TrueClass, FalseClass
Returns true if ‘:os_type` is `“unix”` (or unset, for backwards compatibility).
157 158 159 |
# File 'lib/kitchen/configurable.rb', line 157 def unix_os? ["unix", nil].include?(instance.platform.os_type) end |
#verify_dependencies ⇒ Object
Performs whatever tests that may be required to ensure that this plugin will be able to function in the current environment. This may involve checking for the presence of certain directories, software installed, etc.
168 169 170 |
# File 'lib/kitchen/configurable.rb', line 168 def verify_dependencies # this method may be left unimplemented if that is applicable end |
#windows_os? ⇒ TrueClass, FalseClass
Returns true if ‘:os_type` is `“windows”`.
173 174 175 |
# File 'lib/kitchen/configurable.rb', line 173 def windows_os? ["windows"].include?(instance.platform.os_type) end |