如何使用Ansible删除包含图像的AWS ECS存储库

时间:2017-11-30 12:33:43

标签: amazon-web-services ansible amazon-ecs

我想使用Ansible删除AWS ECS存储库。 我的Ansible版本是2.4.1.0,它应该"#34;支持这一点,因为您可以在此处查找:http://docs.ansible.com/ansible/latest/ecs_ecr_module

但是它没有按预期工作,因为我的存储库仍然包含docker镜像。

以下是代码段:

- name: destroy-ecr-repos
  ecs_ecr: name=jenkins-app state=absent

生成的错误消息为:

... 
The error was: RepositoryNotEmptyException: An error occurred (RepositoryNotEmptyException) when calling the DeleteRepository operation: The repository with name 'jenkins-app' in registry with id 'xyz' cannot be deleted because it still contains images 
...

在AWS控制台中,它可以正常运行。只有一个警告文本提醒您存储库中仍有图像。但是你仍然可以强制删除。

现在我的问题:
是否有可能强制删除存储库,包括其图像?
......或者...... 在删除存储库之前,我可以单独使用其他工具删除它们吗?

也许没有来自ansible方面的实现,我必须使用' shell'而不是模块(也许可以打开一个功能请求)。

我非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

好的,现在我发现,目前没有任何ansible功能支持在删除ecs上的存储库时隐式删除​​图像。

BUT
尽管我的丑陋对我有用,但我已经实施了一个解决方法。 我只是在实际删除ecs repo之前使用aws cli删除每个shell模块的图像。

以下是要执行此操作的代码段:

- name: Delete remaining images in our repositories
  shell: |
    aws ecr list-images --repository-name jenkins-app --query 'imageIds[*]' --output text | while read imageId; do aws ecr batch-delete-image --repository-name jenkins-app --image-ids imageDigest=$imageId; done

- name: destroy-ecr-repo jenkins-app
  ecs_ecr: name=jenkins-app state=absent

希望在ansible之前帮助遇到此问题的人实现通过内置模块删除图像的可能性。