Sha256: bdf6ff4d87c5cb5138e40d2565cbb5f0b7e0332a454f58cd73e235d78e2aa24a

Contents?: true

Size: 1.52 KB

Versions: 4

Compression:

Stored size: 1.52 KB

Contents

module Kubes::Compiler::Dsl::Syntax
  class Resource < Kubes::Compiler::Dsl::Core::Base
    include Kubes::Compiler::Util::Normalize

    fields :apiVersion,  # <string>
           :kind,        # <string>
           :metadata,    # <Object>
           :result,      # <Object>
           :spec         # <Object>

    # kubectl explain deployment.metadata
    fields "annotations:hash",  # <map[string]string>
           "labels:hash",       # <map[string]string>
           :namespace           # <string>

    attr_accessor :kind_from_block

    # top-level of resource is quite common
    def default_result
      data = top.merge(default_top)
      data.deeper_merge!(default_result_append)
      data.deep_stringify_keys!
      HashSqueezer.squeeze(data)
    end

    # Where to set fields for generic kind
    def top
      @top ||= {}
    end

    def default_top
      {
        apiVersion: apiVersion,
        kind: kind,
        metadata: metadata,
        spec: spec,
      }
    end

    # can be overridden by subclasses. IE: secret
    def default_result_append
      {}
    end

    def default_apiVersion
      "v1"
    end

    def default_metadata
      {
        annotations: annotations,
        name: name,
        labels: labels,
        namespace: namespace,
      }
    end

    def default_kind
      return @kind_from_block if @kind_from_block
      normalize_kind(@path)
    end
    alias_method :resource_kind, :default_kind

    # For generic kind
    def field(name, data)
      top.deeper_merge!(name => data)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
kubes-0.7.4 lib/kubes/compiler/dsl/syntax/resource.rb
kubes-0.7.3 lib/kubes/compiler/dsl/syntax/resource.rb
kubes-0.7.2 lib/kubes/compiler/dsl/syntax/resource.rb
kubes-0.7.1 lib/kubes/compiler/dsl/syntax/resource.rb