Class: ContainerRegistry::Tag

Inherits:
Object
  • Object
show all
Includes:
Gitlab::Utils::StrongMemoize
Defined in:
lib/container_registry/tag.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repository, name) ⇒ Tag

Returns a new instance of Tag.



13
14
15
16
# File 'lib/container_registry/tag.rb', line 13

def initialize(repository, name)
  @repository = repository
  @name = name
end

Instance Attribute Details

#created_atObject



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/container_registry/tag.rb', line 76

def created_at
  return @created_at if @created_at

  strong_memoize(:memoized_created_at) do
    next unless config

    DateTime.rfc3339(config['created'])
  rescue ArgumentError
    nil
  end
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/container_registry/tag.rb', line 7

def name
  @name
end

#repositoryObject (readonly)

Returns the value of attribute repository.



7
8
9
# File 'lib/container_registry/tag.rb', line 7

def repository
  @repository
end

#updated_atObject

Returns the value of attribute updated_at.



7
8
9
# File 'lib/container_registry/tag.rb', line 7

def updated_at
  @updated_at
end

Instance Method Details

#[](key) ⇒ Object



48
49
50
51
52
# File 'lib/container_registry/tag.rb', line 48

def [](key)
  return unless manifest

  manifest[key]
end

#configObject



68
69
70
71
72
73
74
# File 'lib/container_registry/tag.rb', line 68

def config
  return unless config_blob&.data

  strong_memoize(:config) do
    ContainerRegistry::Config.new(self, config_blob)
  end
end

#config_blobObject



60
61
62
63
64
65
66
# File 'lib/container_registry/tag.rb', line 60

def config_blob
  return unless manifest && manifest['config']

  strong_memoize(:config_blob) do
    repository.blob(manifest['config'])
  end
end

#digestObject



54
55
56
57
58
# File 'lib/container_registry/tag.rb', line 54

def digest
  strong_memoize(:digest) do
    client.repository_tag_digest(repository.path, name)
  end
end

#force_created_at_from_iso8601(string_value) ⇒ Object

this function will set and memoize a created_at to avoid a #config_blob call.



90
91
92
93
94
95
96
97
98
# File 'lib/container_registry/tag.rb', line 90

def force_created_at_from_iso8601(string_value)
  date =
    begin
      DateTime.iso8601(string_value)
    rescue ArgumentError
      nil
    end
  instance_variable_set(ivar(:memoized_created_at), date)
end

#latest?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/container_registry/tag.rb', line 22

def latest?
  name == "latest"
end

#layersObject



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/container_registry/tag.rb', line 111

def layers
  return unless manifest

  strong_memoize(:layers) do
    layers = manifest['layers'] || manifest['fsLayers']

    layers.map do |layer|
      repository.blob(layer)
    end
  end
end

#locationObject



44
45
46
# File 'lib/container_registry/tag.rb', line 44

def location
  "#{repository.location}:#{name}"
end

#manifestObject



34
35
36
37
38
# File 'lib/container_registry/tag.rb', line 34

def manifest
  strong_memoize(:manifest) do
    client.repository_manifest(repository.path, name)
  end
end

#pathObject



40
41
42
# File 'lib/container_registry/tag.rb', line 40

def path
  "#{repository.path}:#{name}"
end

#put(digests) ⇒ Object



123
124
125
# File 'lib/container_registry/tag.rb', line 123

def put(digests)
  repository.client.put_tag(repository.path, name, digests)
end

#total_sizeObject

rubocop: disable CodeReuse/ActiveRecord



128
129
130
131
132
# File 'lib/container_registry/tag.rb', line 128

def total_size
  return unless layers

  layers.sum(&:size) if v2?
end

#unsafe_deleteObject

Deletes the image associated with this tag Note this will delete the image and all tags associated with it. Consider using DeleteTagsService instead.



138
139
140
141
142
# File 'lib/container_registry/tag.rb', line 138

def unsafe_delete
  return unless digest

  client.delete_repository_tag_by_digest(repository.path, digest)
end

#v1?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/container_registry/tag.rb', line 26

def v1?
  manifest && manifest['schemaVersion'] == 1
end

#v2?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/container_registry/tag.rb', line 30

def v2?
  manifest && manifest['schemaVersion'] == 2
end

#valid?Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/container_registry/tag.rb', line 18

def valid?
  manifest.present?
end