Module: Kube::Schema

Defined in:
lib/kube/schema.rb,
lib/kube/schema/version.rb,
lib/kube/schema/instance.rb,
lib/kube/schema/manifest.rb,
lib/kube/schema/resource.rb

Defined Under Namespace

Classes: Instance, Manifest, Resource

Constant Summary collapse

GEM_ROOT =
File.expand_path("../..", __dir__).freeze
SCHEMAS_DIR =
File.join(GEM_ROOT, "schemas").freeze
DEFAULT_VERSION =
"1.34"
VERSION =
"1.2.1"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.schema_versionObject

Set a default Kubernetes version for bare lookups like Kube::Schema. When nil, the DEFAULT_VERSION is used.



26
27
28
# File 'lib/kube/schema.rb', line 26

def schema_version
  @schema_version
end

Class Method Details

.[](key) ⇒ Object

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



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/kube/schema.rb', line 30

def [](key)
  if key.start_with?("v") && Gem::Version.correct?(key.sub("v", ""))
    raise Kube::IncorrectVersionFormat,
      "\nDon't preface the version with a \"v\"." \
      "\nUse Kube::Schema[\"#{key.sub("v", "")}\"] instead."
  end

  if Gem::Version.correct?(key)
    if has_version?(key)
      @instances[key] ||= Instance.new(key)
    else
      raise Kube::UnknownVersionError.new(
        "\n#{key} is an unknown version..." +
        "\nAvailable: #{schema_versions.join(", ")}"
      )
    end
  else
    Instance.new(schema_version || DEFAULT_VERSION)[key]
  end
end

.has_version?(version) ⇒ Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/kube/schema.rb', line 72

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

.latest_versionObject

The latest Kubernetes version available in the schemas directory.



68
69
70
# File 'lib/kube/schema.rb', line 68

def latest_version
  schema_versions.last
end

.parse(hash) ⇒ Object

Build a Resource from a hash.

Kube::Schema.parse(Kube::Schema["Deployment"].to_h) == Kube::Schema["Deployment"]

Raises:

  • (NotImplementedError)


53
54
55
# File 'lib/kube/schema.rb', line 53

def parse(hash)
  raise NotImplementedError
end

.schema_versionsArray<String>

Available Kubernetes versions, read from the local schemas directory.

Returns:

  • (Array<String>)

    sorted version strings like [“1.19”, “1.20”, …]



60
61
62
63
64
65
# File 'lib/kube/schema.rb', line 60

def schema_versions
  @schema_versions ||=
    Dir.glob(File.join(SCHEMAS_DIR, "v*.json")).map do |file_path|
      File.basename(file_path, ".json").sub(/\Av/, "")
    end.sort_by { Gem::Version.new(_1) }
end