Module: KubeSchema

Defined in:
lib/kube_schema.rb,
lib/kube_schema/version.rb,
lib/kube_schema/instance.rb,
lib/kube_schema/resource.rb,
lib/kube_schema/schema_cache.rb,
lib/kube_schema/schema_index.rb

Defined Under Namespace

Modules: SchemaCache Classes: Instance, Resource, SchemaIndex, UnknownVersionError

Constant Summary collapse

GEM_ROOT =
File.expand_path("..", __dir__).freeze
SCHEMA_INDEX =
File.join(GEM_ROOT, "data").freeze
DEFAULT_VERSION =

2025-04-16

"1.34.4"
VERSION =
"1.0.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.schema_versionObject

Set a default Kubernetes version for bare lookups like KubeSchema. When nil, the latest version found in the schemas directory is used.



22
23
24
# File 'lib/kube_schema.rb', line 22

def schema_version
  @schema_version
end

Class Method Details

.[](key) ⇒ Object

KubeSchema => cached Instance (supports [“Deployment”] chaining) KubeSchema => Resource via the default version KubeSchema => Resource via the default version



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/kube_schema.rb', line 27

def [](key)
  is_a_version = -> (key) { Gem::Version.correct?(key) }

  if is_a_version.(key)
    if has_version?(key)
      @instances[key] ||= Instance.new(key)
    else
      raise UnknownVersionError.new(
        "\n#{key} is an unknown version..." +
        "\nUse `KubeSchema.schema_versions` to get a list."
      )
    end
  else
    Instance.new(schema_version || DEFAULT_VERSION)[key]
  end
end

.has_version?(version) ⇒ Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/kube_schema.rb', line 63

def has_version?(version)
  schema_versions.include?(version)
end

.latest_versionObject

The latest Kubernetes version available in the schemas directory, determined by sorting the filenames with Gem::Version.



59
60
61
# File 'lib/kube_schema.rb', line 59

def latest_version
  schema_versions.last
end

.parse(hash) ⇒ Object

Build a Resource from a hash.

KubeSchema.parse(KubeSchema["Deployment"].to_h) == KubeSchema["Deployment"]

Raises:

  • (NotImplementedError)


46
47
48
# File 'lib/kube_schema.rb', line 46

def parse(hash)
  raise NotImplementedError
end

.schema_versionsObject



50
51
52
53
54
55
# File 'lib/kube_schema.rb', line 50

def schema_versions
  @schema_versions ||=
    Dir.glob(SCHEMA_INDEX + "/v*.txt").map do |file_path|
      file_path.split("/").last.gsub(".txt", "")[1..-1]
    end.sort_by { Gem::Version.new(_1) }
end