【发布时间】:2019-12-27 14:19:40
【问题描述】:
Ansible 的优势之一是无代理架构。 Ansible 使用 Python,而且几乎总是预装在任何发行版上。因此,在 Ansible 需要发挥其魔力的机器上不需要客户端或代理。
最近的经验让我们怀疑这在实践中是否正确。
例如,当前的 Ansible 提供了用于生成证书的模块,如文章 Generating self-signed OpenSSL certs with Ansible 2.4's crypto modules | Jeff Geerling 中所述
但如果你使用这些,你还需要:pip、python-dev。这些依赖项最初会失败,因为您需要为 python_version 和 python_user 提供值。
现在事情变得一团糟。我们正在目标机器上创建一个 Python 开发环境来创建一个自签名证书。例如,许多其他东西被拖进来
python,python-dev,python3,python3-dev,make,gcc,python-pip,python3-pip,build-essential,libssl-dev,zlib1g-dev,libbz2-dev,libreadline-dev,libsqlite0-dev ,wget,curl,llvm,libncurses5-dev,libncursesw5-dev,xz-utils,tk-dev,git,libffi-dev,libxml2-dev,libxslt1-dev,libyaml-dev
现在请注意,我们正在使用 Ansible 的默认部分创建自签名证书。然而,这些模块需要的东西不属于 Linux 上任何标准 Python 发行版的一部分。
事实上,为了创建一个自签名证书——这通常通过几个 bash 命令完成——我们正在构建一个一次性的自定义 Ansible 客户端。这很可能会失败,例如显示类似
的消息无法导入所需的 Python 库 (setuptools) myserver 的 Python /usr/bin/python
所以我在这一点上的结论是,Ansible 并不是真正的无代理,实际上确实需要目标机器上的某种客户端/代理。此客户端/代理只是动态下载、编译、链接和配置。
如果我们需要这样做只是为了使用标准 Ansible 模块,我们已经有效地证明了需要 Ansible 客户端和/或某种类型的代理。
当然,不会出现任何官方 Ansible 客户端/代理,因为 Ansible 被吹捧为无需代理,并且除了 Python 之外不需要任何其他东西。
但也许有人不厌其烦地创建了这样一个客户端?是否有某种安装程序可以安装 Ansible 声称支持的模块的所有依赖项?
【问题讨论】:
-
"agent-less" 意味着它使用
ssh来执行所有可能的命令,而代理可能会侦听某些端口并接收诸如 HTTP 消息并应用更改。毫不奇怪,您需要一些依赖项来做某事。即使你说你可以通过 bash 命令生成证书,你首先需要安装 OpenSSL。
标签: python ansible client agent