module Kubes::Kubectl::Ordering

Public Instance Methods

files() click to toggle source
# File lib/kubes/kubectl/ordering.rb, line 53
def files
  files = []
  Dir.glob(search_expr).each do |path|
    next unless process?(path)
    file = path.sub("#{Kubes.root}/", '')
    files << file
  end
  files
end
filter_files(sorted) click to toggle source
# File lib/kubes/kubectl/ordering.rb, line 21
def filter_files(sorted)
  skip = Kubes.config.skip
  skip += ENV['KUBES_SKIP'].split(' ') if ENV['KUBES_SKIP']
  return sorted if skip.empty?
  sorted.reject do |file|
    skip.detect { |text| file.include?(text) }
  end
end
index_for(type, value) click to toggle source

type: kinds or roles value: Examples: kind: deployment, role: web

# File lib/kubes/kubectl/ordering.rb, line 32
def index_for(type, value)
  order = Kubes.config.kubectl.order.send(type) # kinds or roles
  index = order.index(value.to_s) || 999
  i = index.to_s.rjust(3, "0") # pad with 0
  "#{i}-#{value}" # append name so that terms with same index get order alphabetically
end
process?(path) click to toggle source

Only considering files 2 layers deep. So:

Yes = web/deployment.yaml
No = web/deployment/dev.yaml
# File lib/kubes/kubectl/ordering.rb, line 68
def process?(path)
  if Kubes.kustomize?
    File.file?(path)
  else
    consider?(path) && two_levels_deep?(path)
  end
end
search_expr() click to toggle source

kubes apply # {role: nil, resource: nil} kubes apply clock # {role: “clock”, resource: nil} kubes apply clock deployment # {role: “clock”, resource: “deployment”}

# File lib/kubes/kubectl/ordering.rb, line 42
def search_expr
  role, resource = @options[:role], @options[:resource]
  if role && resource
    "#{Kubes.root}/.kubes/output/#{role}/#{resource}.yaml"
  elsif role
    "#{Kubes.root}/.kubes/output/#{role}/*.yaml"
  else
    "#{Kubes.root}/.kubes/output/**/*.yaml"
  end
end
sorted_files() click to toggle source
# File lib/kubes/kubectl/ordering.rb, line 3
def sorted_files
  sorted = files.sort_by do |file|
    # .kubes/output/web/service.yaml
    words = file.split('/')
    role, kind = words[2], words[3] # web, deployment
    kind = kind.sub('.yaml','').underscore.camelize if kind

    kind_i = index_for(:kinds, kind)
    role_i = index_for(:roles, role)

    "#{role_i}/#{kind_i}"
  end

  sorted = filter_files(sorted)

  @name == "delete" ? sorted.reverse : sorted
end
two_levels_deep?(path) click to toggle source
# File lib/kubes/kubectl/ordering.rb, line 76
def two_levels_deep?(path)
  rel_path = path.sub(%r{.*\.kubes/(resources|output)/},'')
  rel_path.split('/').size == 2
end