2016-05-09 19:14:46 +00:00
|
|
|
module ContainerRegistry
|
2016-05-04 12:22:54 +00:00
|
|
|
class Repository
|
|
|
|
attr_reader :registry, :name
|
|
|
|
|
|
|
|
def initialize(registry, name)
|
|
|
|
@registry, @name = registry, name
|
|
|
|
end
|
|
|
|
|
|
|
|
def client
|
|
|
|
@client ||= registry.client
|
|
|
|
end
|
|
|
|
|
2016-05-09 19:27:06 +00:00
|
|
|
def path
|
|
|
|
[registry.path, name].compact.join('/')
|
|
|
|
end
|
|
|
|
|
2016-05-04 12:22:54 +00:00
|
|
|
def [](tag)
|
2016-05-09 19:14:46 +00:00
|
|
|
ContainerRegistry::Tag.new(self, tag)
|
2016-05-04 12:22:54 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def manifest
|
|
|
|
return @manifest if defined?(@manifest)
|
|
|
|
@manifest = client.repository_tags(name)
|
|
|
|
end
|
|
|
|
|
|
|
|
def valid?
|
|
|
|
manifest.present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def tags
|
|
|
|
return @tags if defined?(@tags)
|
2016-05-04 14:16:54 +00:00
|
|
|
return [] unless manifest && manifest['tags']
|
2016-05-12 18:03:04 +00:00
|
|
|
|
2016-05-04 12:22:54 +00:00
|
|
|
@tags = manifest['tags'].map do |tag|
|
2016-05-09 19:14:46 +00:00
|
|
|
ContainerRegistry::Tag.new(self, tag)
|
2016-05-04 12:22:54 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-04 12:35:18 +00:00
|
|
|
def delete_tags
|
|
|
|
return unless tags
|
2016-05-12 18:03:04 +00:00
|
|
|
|
2016-05-16 23:03:55 +00:00
|
|
|
tags.all?(&:delete)
|
2016-05-04 12:22:54 +00:00
|
|
|
end
|
2016-05-04 13:15:16 +00:00
|
|
|
|
|
|
|
def mount_blob(blob)
|
|
|
|
return unless blob
|
2016-05-12 18:03:04 +00:00
|
|
|
|
2016-05-04 13:15:16 +00:00
|
|
|
client.repository_mount_blob(name, blob.digest, blob.repository.name)
|
|
|
|
end
|
|
|
|
|
|
|
|
def mount_manifest(tag, manifest)
|
|
|
|
client.put_repository_manifest(name, tag, manifest)
|
|
|
|
end
|
|
|
|
|
|
|
|
def copy_to(other_repository)
|
|
|
|
tags.all? do |tag|
|
|
|
|
tag.copy_to(other_repository)
|
|
|
|
end
|
|
|
|
end
|
2016-05-04 12:22:54 +00:00
|
|
|
end
|
|
|
|
end
|