class Kustomize::Transform::ImageTransform

Constants

LENS_BY_KIND
TEMPLATE_CRONJOB_SPEC_LENS
TEMPLATE_POD_SPEC_LENS

Public Class Methods

create(op_spec) click to toggle source
# File lib/kustomize/transform/image_transform.rb, line 8
def self.create(op_spec)
  raise ArgumentError, "cannot specify both newTag and digest" if op_spec['newTag'] and op_spec['digest']

  new(
    name: op_spec['name'],
    new_name: op_spec['newName'],
    new_tag: op_spec['newTag'],
    new_digest: op_spec['digest']
  )
end
new(name:, new_name: nil, new_tag: nil, new_digest: nil) click to toggle source
# File lib/kustomize/transform/image_transform.rb, line 19
def initialize(name:, new_name: nil, new_tag: nil, new_digest: nil)
  @name = name
  @new_name = new_name
  @new_tag = new_tag
  @new_digest = new_digest
end

Public Instance Methods

rewrite(rc_doc) click to toggle source
# File lib/kustomize/transform/image_transform.rb, line 37
def rewrite(rc_doc)
  lens = LENS_BY_KIND[rc_doc['kind']]
  return rc_doc unless lens

  lens.update_in(rc_doc) do |image_str|
    image_parts = /^(.+?)([:@])(.+)$/.match(image_str)

    image_parts = if image_parts
      {name: image_parts[1], sigil: image_parts[2], ref: image_parts[3]}
    else
      {name: container['image'], sigil: ':', ref: 'latest'}
    end

    unless image_parts[:name] == @name
      next(:keep)
    end

    if @new_name
      image_parts[:name] = new_name
    end

    if @new_tag
      image_parts[:sigil] = ':'
      image_parts[:ref] = @new_tag
    elsif @new_digest
      image_parts[:sigil] = '@'
      image_parts[:ref] = @new_digest
    end

    new_image_str = "#{image_parts[:name]}#{image_parts[:sigil]}#{image_parts[:ref]}"
    [:set, new_image_str]
  end
end