在 MacOS 上使用 Conda 管理 Ansible 环境

Conda 将您 Ansible 所需的一切都集中到一个虚拟环境中,并使其与您的其他项目隔离。
154 位读者喜欢这个。
CICD with gears

opensource.com

如果您是使用 MacOS 的 Python 开发者,并且参与 Ansible 管理,您可能需要使用 Conda 包管理器来使您的 Ansible 工作与您的核心操作系统和其他本地项目隔离。

Ansible 基于 Python。Conda 不是使 Ansible 在 MacOS 上工作的必要条件,但它确实使管理 Python 版本和包依赖项变得更容易。这使您可以在 MacOS 上使用升级的 Python 版本,并将 Python 包依赖项在您的系统、Ansible 和其他编程项目之间保持隔离。

还有其他在 MacOS 上安装 Ansible 的方法。您可以使用 Homebrew,但如果您从事 Python 开发(或 Ansible 开发),您可能会发现在一个 Python 虚拟环境中管理 Ansible 可以减少一些困惑。我发现这更简单;Conda 帮助我将 Ansible 所需的一切都集中到一个虚拟环境中,并使其与所有其他项目完全隔离,而不是尝试将 Python 版本和依赖项加载到系统或 /usr/local 中。

本文重点介绍如何使用 Conda 将 Ansible 作为 Python 项目进行管理,以保持其清洁并与其他项目隔离。请继续阅读以了解如何安装 Conda、创建新的虚拟环境、安装 Ansible 并对其进行测试。

序言

最近,我想学习 Ansible,所以我需要弄清楚安装它的最佳方法。

我通常对在我的日常工作站中安装东西持谨慎态度。我尤其不喜欢对供应商的默认操作系统安装应用手动更新(这是我多年 Unix 系统管理经验中养成的一种偏好)。我真的很想使用 Python 3.7,但 MacOS 打包的是较旧的 2.7,我不会安装任何可能干扰核心 MacOS 系统的全局 Python 包。

因此,我开始使用本地 Ubuntu 18.04 虚拟机进行 Ansible 工作。这提供了一个真正的安全隔离级别,但我很快发现管理它很繁琐。我着手研究如何在原生 MacOS 上获得一个灵活但隔离的 Ansible 系统。

由于 Ansible 基于 Python,Conda 似乎是理想的解决方案。

安装 Conda

Conda 是一个开源实用程序,提供便捷的包和环境管理功能。它可以帮助您管理 Python 的多个版本、安装包依赖项、执行升级和维护项目隔离。如果您正在手动管理 Python 虚拟环境,Conda 将帮助简化和管理您的工作。请访问 Conda 文档 了解所有详细信息。

我为我的工作站选择了 Miniconda Python 3.7 安装,因为我想要最新的 Python 版本。无论您选择哪个版本,您始终可以使用其他 Python 版本安装新的虚拟环境。

要安装 Conda,请下载 PKG 格式文件,像往常一样双击,然后选择“仅为我安装”选项。安装在我的系统上占用了大约 158MB 的空间。

安装完成后,打开终端查看您拥有的内容。您应该看到

  • 您的 home 目录中有一个新的 miniconda3 目录
  • shell 提示符被修改为在前面加上单词“(base)”
  • .bash_profile 已使用 Conda 特定的设置进行更新

现在基础安装已完成,您就有了您的第一个 Python 虚拟环境。运行通常的 Python 版本检查应该可以证明这一点,并且您的 PATH 将指向新的位置

(base) $ which python
/Users/jfarrell/miniconda3/bin/python
(base) $ python --version
Python 3.7.1

现在 Conda 已安装,下一步是设置虚拟环境,然后安装并运行 Ansible。

为 Ansible 创建虚拟环境

我想将 Ansible 与我的其他 Python 项目隔离,所以我创建了一个新的虚拟环境并切换到它

(base) $ conda create --name ansible-env --clone base
(base) $ conda activate ansible-env
(ansible-env) $ conda env list

第一个命令将 Conda 基础克隆到一个名为 ansible-env 的新虚拟环境中。克隆会引入 Python 3.7 版本和一堆默认的 Python 模块,您可以根据需要添加、删除或升级这些模块。

第二个命令将 shell 上下文更改为此新的 ansible-env 环境。它为 Python 及其包含的模块设置了正确的路径。请注意,在执行 conda activate ansible-env 命令后,您的 shell 提示符会发生变化。

第三个命令不是必需的;它列出了已安装的 Python 模块及其版本和其他数据。

您始终可以使用 Conda 的 activate 命令在虚拟环境之间切换。这将使您返回到基础环境:conda activate base

安装 Ansible

有多种安装 Ansible 的方法,但使用 Conda 可以将 Ansible 版本和所有需要的依赖项打包在一个地方。Conda 提供了灵活性,既可以将所有内容隔离,又可以根据需要添加其他新环境(我稍后会演示)。

要安装相对较新版本的 Ansible,请使用

(base) $ conda activate ansible-env
(ansible-env) $ conda install -c conda-forge ansible

由于 Ansible 不是 Conda 默认通道的一部分,因此使用 -c 从备用通道搜索和安装。Ansible 现在已安装到 ansible-env 虚拟环境中,可以使用了。

使用 Ansible

现在您已经安装了 Conda 虚拟环境,您可以开始使用它了。首先,确保您要控制的节点已将您工作站的 SSH 密钥安装到正确的用户帐户。

打开一个新的 shell 并运行一些基本的 Ansible 命令

(base) $ conda activate ansible-env
(ansible-env) $ ansible --version
ansible 2.8.1
  config file = None
  configured module search path = ['/Users/jfarrell/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/jfarrell/miniconda3/envs/ansibleTest/lib/python3.7/site-packages/ansible
  executable location = /Users/jfarrell/miniconda3/envs/ansibleTest/bin/ansible
  python version = 3.7.1 (default, Dec 14 2018, 13:28:58) [Clang 4.0.1 (tags/RELEASE_401/final)]
(ansible-env) $ ansible all -m ping -u ansible
192.168.99.200 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

现在 Ansible 正在工作,您可以从源代码控制中拉出您的 playbook,并开始从您的 MacOS 工作站中使用它们。

克隆新的 Ansible 用于 Ansible 开发

这部分是纯粹可选的;只有当您想要额外的虚拟环境来修改 Ansible 或安全地尝试有问题的 Python 模块时才需要它。您可以使用以下命令将您的主 Ansible 环境克隆到开发副本中

(ansible-env) $ conda create --name ansible-dev --clone ansible-env
(ansible-env) $ conda activte ansible-dev
(ansible-dev) $

需要注意的陷阱

有时您可能会遇到 Conda 的问题。通常可以使用以下命令删除错误的环境

$ conda activate base
$ conda remove --name ansible-dev --all

如果您遇到无法解决的错误,通常可以通过在 ~/miniconda3/envs 中找到该环境并删除整个目录来直接删除该环境。如果基础环境损坏,您可以删除整个 ~/miniconda3 目录并从 PKG 文件重新安装它。只需确保保留您在 ~/miniconda3/envs 中的任何所需环境,或使用 Conda 工具转储环境配置并在以后重新创建它。

MacOS 上未包含 sshpass 程序。只有当您的 Ansible 工作需要您为 Ansible 提供 SSH 登录密码时才需要它。您可以在 SourceForge 上找到当前的 sshpass 源代码

最后,基础 Conda Python 模块列表可能缺少您工作所需的一些 Python 模块。如果您需要安装一个模块,首选 conda install <package> 命令,但在需要时可以使用 pip,Conda 将识别已安装的模块。

结论

Ansible 是一个强大的自动化实用程序,值得您付出所有努力去学习。Conda 是一个简单有效的 Python 虚拟环境管理工具。

在您的 MacOS 环境中保持软件安装隔离是维护日常工作环境的稳定性和理智的明智方法。Conda 特别有助于升级您的 Python 版本,将 Ansible 与您的其他项目隔离,并安全地 hack Ansible。

标签
James Farrell
我是一位长期的 UNIX 系统管理员和开源倡导者。近年来,我的主要重点是 Linux 和 FreeBSD 系统管理、网络、电信和 SAN/存储管理。我喜欢构建基础设施、将系统连接在一起、创建流程以及将人们聚集在一起以支持他们的技术工作。

评论已关闭。

© . All rights reserved.