Method: Inspec::ResourceDSL#__register
- Defined in:
- lib/inspec/plugin/v1/plugin_types/resource.rb
#__register(name, obj) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/inspec/plugin/v1/plugin_types/resource.rb', line 78 def __register(name, obj) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity cl = Class.new(obj) do # rubocop:disable Metrics/BlockLength attr_reader :resource_exception_message def initialize(backend, name, *args) @resource_skipped = false @resource_failed = false @supports = Inspec::Resource.supports[name.to_sym] @resource_exception_message = nil # attach the backend to this instance @__backend_runner__ = backend @__resource_name__ = name # check resource supports supported = @supports ? check_supports : true # check_supports has side effects! test_backend = defined?(Train::Transports::Mock::Connection) && backend.backend.class == Train::Transports::Mock::Connection # raise unless we are supported or in test unless supported || test_backend msg = "Unsupported resource/backend combination: %s / %s. Exiting." % [name, backend.platform.name] raise ArgumentError, msg end # call the resource initializer begin super(*args) rescue Inspec::Exceptions::ResourceSkipped => e skip_resource(e.) rescue Inspec::Exceptions::ResourceFailed => e fail_resource(e.) rescue NotImplementedError => e fail_resource(e.) unless @resource_failed rescue NoMethodError => e skip_resource(e.) unless @resource_failed end end def self.desc(description = nil) return @description if description.nil? @description = description end def self.example(example = nil) return @example if example.nil? @example = example end def check_supports require "inspec/resources/platform" status = inspec.platform.supported?(@supports) fail_msg = "Resource `#{@__resource_name__}` is not supported on platform #{inspec.platform.name}/#{inspec.platform.release}." fail_resource(fail_msg) unless status status end def skip_resource() @resource_skipped = true @resource_exception_message = end def resource_skipped? @resource_skipped end def fail_resource() @resource_failed = true @resource_exception_message = end def resource_failed? @resource_failed end def inspec @__backend_runner__ end end # rubocop:enable Lint/NestedMethodDefinition # Warn if a resource pack is overwriting a core resource. # Suppress warning if the resource is an AWS resource, see #3822 if __resource_registry.key?(name) && !name.start_with?("aws_") Inspec::Log.warn("Overwriting resource #{name}. To reference a specific version of #{name} use the resource() method") end __resource_registry[name] = cl end |