无需互联网访问的 Ansible 配置

Ansible provisioning without internet access

我知道您可以在 Ansible 中设置代理以在公司网络后面进行配置: https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html

像这样:

environment:
    http_proxy: http://proxy.example.com:8080

不幸的是,在我的情况下,根本无法从服务器访问互联网。在本地下载角色并将它们放在 /roles 文件夹下似乎解决了角色问题,但角色在使用时仍然从互联网下载包:

package:
   name: package-name
   state: present

我想没有办法让 dry/pre 运行 所以 Ansible 下载所有的包,然后将其推送到 repo 和 运行 Ansible provision 使用本地下载的包?

这实际上不是关于 Ansible 的问题,因为 Ansible 所做的只是 运行 目标主机上的相关包管理系统(即 yum、dnf 或 apt 或其他)。那么问题来了,具体的包管理工具提供了什么样的解决方案,对于这种情况。

有多种解决方案,例如在 Centos/RHEL 世界中,您可以:

还有另一个 class 工具,通常称为 artefact repository。它们最初是作为存储从代码构建的二进制文件的工具,但添加了一系列功能作为代理和缓存来自各种来源的包(OS 包、PIP、NodeJS、Docker, ETC)。提供有限免费产品的两个示例:

他们当然仍然需要从源头收集这些包,所以在某些时候必须下载这些包以放置在这些系统中。

就像 clockworknet 指出的那样,这与 RHEL 包处理更相关。在封闭网络内部的某处设置本地镜像可以提供这种情况的解决方案。有关 "How to create a local mirror of the latest update for Red Hat Enterprise Linux 5, 6, 7 without using Satellite server?" 的更多信息:https://access.redhat.com/solutions/23016

我的解决方案:

注意:对 APT 这样做并且工作正常,期望对 yum 也是如此