Class: SparkleFormation::Resources

Inherits:
Object
  • Object
show all
Extended by:
Utils::AnimalStrings
Defined in:
lib/sparkle_formation/resources.rb,
lib/sparkle_formation/resources/aws.rb,
lib/sparkle_formation/resources/heat.rb,
lib/sparkle_formation/resources/azure.rb,
lib/sparkle_formation/resources/rackspace.rb

Overview

Resources helper

Direct Known Subclasses

Aws, Azure, Heat, Rackspace

Defined Under Namespace

Classes: Aws, Azure, Heat, Rackspace

Constant Summary collapse

RESOURCE_TYPE_TR =

Characters to be removed from supplied key on matching

'_'
RESOURCE_TYPE_NAMESPACE_SPLITTER =

String to split for resource namespacing

'::'

Class Method Summary collapse

Methods included from Utils::AnimalStrings

camel, snake

Class Method Details

.base_keyString

Returns base registry key.

Returns:

  • (String)

    base registry key



23
24
25
# File 'lib/sparkle_formation/resources.rb', line 23

def base_key
  Bogo::Utility.snake(self.name.split('::').last) # rubocop:disable Style/RedundantSelf
end

.load(json_path_or_hash) ⇒ TrueClass

Register all discovered resources

Parameters:

  • json_path_or_hash (String, Hashish)

    path to files or hash

Returns:

  • (TrueClass)


59
60
61
62
63
64
65
66
67
68
69
# File 'lib/sparkle_formation/resources.rb', line 59

def load(json_path_or_hash)
  if(json_path_or_hash.is_a?(String))
    content = AttributeStruct.hashish.new(MultiJson.load(File.read(json_path_or_hash)))
  else
    content = json_path_or_hash
  end
  content.each do |type, hash|
    register(type, hash)
  end
  true
end

.load!TrueClass

Load the builtin AWS resources

Returns:

  • (TrueClass)


74
75
76
# File 'lib/sparkle_formation/resources.rb', line 74

def load!
  true
end

.lookup(key) ⇒ Hashish, NilClass

Registry information for given type

Parameters:

  • key (String, Symbol)

Returns:

  • (Hashish, NilClass)


123
124
125
# File 'lib/sparkle_formation/resources.rb', line 123

def lookup(key)
  @@registry[base_key][registry_key(key)]
end

.register(type, hash) ⇒ TrueClass

Register resource

Parameters:

  • type (String)

    Orchestration resource type

  • hash (Hash)

    metadata information

Returns:

  • (TrueClass)


32
33
34
35
36
37
38
39
# File 'lib/sparkle_formation/resources.rb', line 32

def register(type, hash)
  unless(class_variable_defined?(:@@registry))
    @@registry = AttributeStruct.hashish.new
  end
  @@registry[base_key] ||= AttributeStruct.hashish.new
  @@registry[base_key][type] = hash
  true
end

.registryHashish

Returns currently loaded AWS registry.

Returns:

  • (Hashish)

    currently loaded AWS registry



128
129
130
131
132
133
# File 'lib/sparkle_formation/resources.rb', line 128

def registry
  unless(class_variable_defined?(:@@registry))
    @@registry = AttributeStruct.hashish.new
  end
  @@registry[base_key]
end

.registry_key(key) ⇒ String, NilClass

Discover registry key via part searching

Parameters:

  • key (String, Symbol)

Returns:

  • (String, NilClass)


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
# File 'lib/sparkle_formation/resources.rb', line 82

def registry_key(key)
  o_key = key
  key = key.to_s.tr(self.const_get(:RESOURCE_TYPE_TR), '') # rubocop:disable Style/RedundantSelf
  snake_parts = nil
  result = @@registry[base_key].keys.detect do |ref|
    ref = ref.downcase
    snake_parts = ref.split(resource_type_splitter)
    until(snake_parts.empty?)
      break if snake_parts.join('') == key
      snake_parts.shift
    end
    !snake_parts.empty?
  end
  if(result)
    collisions = @@registry[base_key].keys.find_all do |ref|
      split_ref = ref.downcase.split(resource_type_splitter)
      ref = split_ref.slice(split_ref.size - snake_parts.size, split_ref.size).join('')
      key == ref
    end
    if(collisions.size > 1)
      raise ArgumentError.new 'Ambiguous dynamic name returned multiple matches! ' \
        "`#{o_key.inspect}` -> #{collisions.sort.join(', ')}"
    end
  end
  result
end

.resource(identifier, key = nil) ⇒ Hashish

Resource information

Parameters:

  • identifier (String, Symbol)

    resource identifier

  • key (String, Symbol) (defaults to: nil)

    specific data

Returns:

  • (Hashish)


46
47
48
49
50
51
52
53
# File 'lib/sparkle_formation/resources.rb', line 46

def resource(identifier, key=nil)
  res = lookup(identifier)
  if(key && res)
    res[key.to_sym]
  else
    res
  end
end

.resource_customizer(struct, lookup_key) ⇒ SparkleStruct

Simple hook method to allow resource customization if the specific provider requires/offers extra setup

Parameters:

Returns:



141
142
143
# File 'lib/sparkle_formation/resources.rb', line 141

def resource_customizer(struct, lookup_key)
  struct
end

.resource_type_splitterRegexp

rubocop:disable Style/RedundantSelf

Returns:

  • (Regexp)

    value for resource splitting



111
112
113
114
115
116
117
# File 'lib/sparkle_formation/resources.rb', line 111

def resource_type_splitter
  Regexp.new(
    [self.const_get(:RESOURCE_TYPE_NAMESPACE_SPLITTER)].flatten.compact.map{|value|
      Regexp.escape(value)
    }.join('|')
  )
end