Class: Ecr::Cleaner
Instance Method Summary
collapse
#logger
#execute, #user_params
#acm, #applicationautoscaling, #aws_options, #cfn, #cloudwatchlogs, #ec2, #ecr, #ecs, #elb, #s3, #ssm_client, #waf_client
#find_stack, #find_stack_resources, #stack_resources, #status, #task_definition_arns
Constructor Details
#initialize(docker_image_name, options = {}) ⇒ Cleaner
Returns a new instance of Cleaner.
9
10
11
12
13
14
15
16
|
# File 'lib/ufo/ecr/cleaner.rb', line 9
def initialize(docker_image_name, options={})
@docker_image_name = docker_image_name
@options = options
@keep = options[:ecr_keep] || Ufo.config.docker.ecr_keep
@tag_prefix = options[:tag_prefix] || "ufo"
end
|
Instance Method Details
#cleanup ⇒ Object
18
19
20
21
22
23
24
25
|
# File 'lib/ufo/ecr/cleaner.rb', line 18
def cleanup
return false unless @keep
return false unless ecr_image?
update_auth_token
image_tags = fetch_image_tags
delete_tags = image_tags[@keep..-1] delete_images(delete_tags)
end
|
#delete_images(tags) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/ufo/ecr/cleaner.rb', line 35
def delete_images(tags)
return if tags.nil? || tags.empty?
logger.info "Keeping #{@keep} most recent ECR images."
logger.info "Deleting these ECR images:"
tag_list = tags.map { |t| " #{repo_name}:#{t}" }
logger.info tag_list
image_ids = tags.map { |tag| {image_tag: tag} }
ecr.batch_delete_image(
repository_name: repo_name,
image_ids: image_ids)
end
|
#ecr_image? ⇒ Boolean
58
59
60
|
# File 'lib/ufo/ecr/cleaner.rb', line 58
def ecr_image?
@docker_image_name =~ /\.amazonaws\.com/
end
|
27
28
29
30
31
32
33
|
# File 'lib/ufo/ecr/cleaner.rb', line 27
def fetch_image_tags
ecr.list_images(repository_name: repo_name).
image_ids.
map { |image_id| image_id.image_tag }.
select { |image_tag| image_tag =~ Regexp.new("^#{@tag_prefix}-") }.
sort.reverse
end
|
#repo_name ⇒ Object
53
54
55
56
|
# File 'lib/ufo/ecr/cleaner.rb', line 53
def repo_name
@docker_image_name.split('/').last
end
|
#update_auth_token ⇒ Object
47
48
49
50
51
|
# File 'lib/ufo/ecr/cleaner.rb', line 47
def update_auth_token
repo_domain = "#{@docker_image_name.split('/').first}"
auth = Ecr::Auth.new(repo_domain)
auth.update
end
|