Class: Kustomize::Transform::ImageTransform

Inherits:
Kustomize::Transform show all
Includes:
Accessory
Defined in:
lib/kustomize/transform/image_transform.rb

Constant Summary collapse

TEMPLATE_POD_SPEC_LENS =
Lens["spec", "template", "spec", "containers", Access.all, "image"]
TEMPLATE_CRONJOB_SPEC_LENS =
Lens["spec", "jobTemplate"] + TEMPLATE_POD_SPEC_LENS
LENS_BY_KIND =
{
  "Deployment" => TEMPLATE_POD_SPEC_LENS,
  "DaemonSet" => TEMPLATE_POD_SPEC_LENS,
  "StatefulSet" => TEMPLATE_POD_SPEC_LENS,
  "Job" => TEMPLATE_POD_SPEC_LENS,
  "CronJob" => TEMPLATE_CRONJOB_SPEC_LENS
}

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Kustomize::Transform

#inspect, #rewrite_all

Constructor Details

#initialize(name:, new_name: nil, new_tag: nil, new_digest: nil) ⇒ ImageTransform

Returns a new instance of ImageTransform.



19
20
21
22
23
24
# 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

Class Method Details

.create(op_spec) ⇒ Object

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
# 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

Instance Method Details

#rewrite(rc_doc) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 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