Sha256: 5c1e3364163221f590a9745f8aa70de6965163069e34bf3d214fa816a20bb06b

Contents?: true

Size: 1.6 KB

Versions: 13

Compression:

Stored size: 1.6 KB

Contents

module Kubes
  class Compiler
    include Kubes::Logging
    include Kubes::Util::Consider

    def initialize(options={})
      @options = options
    end

    def run
      results = resources.map do |path|
        strategy = Strategy.new(@options.merge(path: path))
        strategy.compile
      end.compact

      results.each do |result|
        write(result)
      end

      puts "Compiled  .kubes/resources files to .kubes/output" if show_compiled_message?
    end

    def resources
      paths = []
      expr = "#{Kubes.root}/.kubes/resources/**/*"
      Dir.glob(expr).each do |path|
        next unless process?(path)
        paths << path
      end
      paths
    end

    # Only considering files 2 layers deep. So:
    #
    #    Yes = web/deployment.yaml
    #    No = web/deployment/dev.yaml
    #
    def process?(path)
      if Kubes.kustomize?
        File.file?(path)
      else
        consider?(path) && two_levels_deep?(path)
      end
    end

    def two_levels_deep?(path)
      rel_path = path.sub(%r{.*\.kubes/resources/},'')
      rel_path.split('/').size == 2
    end

    def write(result)
      result.write_decorate!
      filename, content = result.filename, result.content
      dest = "#{Kubes.root}/.kubes/output/#{filename}"

      if result.io?
        FileUtils.cp(filename, dest) # preserve permissions
      else
        FileUtils.mkdir_p(File.dirname(dest))
        IO.write(dest, content)
      end

      pretty_dest = dest.sub("#{Kubes.root}/",'')
      logger.debug "Compiled  #{pretty_dest}"
    end

    def show_compiled_message?
      !%w[g ge get].include?(ARGV.first)
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
kubes-0.3.5 lib/kubes/compiler.rb
kubes-0.3.4 lib/kubes/compiler.rb
kubes-0.3.3 lib/kubes/compiler.rb
kubes-0.3.2 lib/kubes/compiler.rb
kubes-0.3.1 lib/kubes/compiler.rb
kubes-0.3.0 lib/kubes/compiler.rb
kubes-0.2.6 lib/kubes/compiler.rb
kubes-0.2.5 lib/kubes/compiler.rb
kubes-0.2.4 lib/kubes/compiler.rb
kubes-0.2.3 lib/kubes/compiler.rb
kubes-0.2.2 lib/kubes/compiler.rb
kubes-0.2.1 lib/kubes/compiler.rb
kubes-0.2.0 lib/kubes/compiler.rb