Sha256: 871beb91d6d02980fed3c5384f2ad34fc69fe8bd08eebbcef14ff1440f98eae9

Contents?: true

Size: 1.8 KB

Versions: 7

Compression:

Stored size: 1.8 KB

Contents

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

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

    def run
      Kubes.config # trigger config load. So can set ENV['VAR'] in config/envs/dev.rb etc
      run_hooks("kubes.rb", name: "compile") do
        results = resources.map do |path|
          strategy = Strategy.new(@options.merge(path: path))
          strategy.compile
        end.compact

        results.each do |result|
          write(result)
        end
      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.decorate!(:post)
      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

7 entries across 7 versions & 1 rubygems

Version Path
kubes-0.4.7 lib/kubes/compiler.rb
kubes-0.4.6 lib/kubes/compiler.rb
kubes-0.4.5 lib/kubes/compiler.rb
kubes-0.4.4 lib/kubes/compiler.rb
kubes-0.4.3 lib/kubes/compiler.rb
kubes-0.4.2 lib/kubes/compiler.rb
kubes-0.4.1 lib/kubes/compiler.rb