Conda 將 Ansible 所需的一切都收集到虛擬環境中並將其與其餘項目分開。html
若是你是一名使用 MacOS 並涉及到 Ansible 管理的 Python 開發人員,你可能但願使用 Conda 包管理器將 Ansible 的工做內容與核心操做系統和其餘本地項目分開。python
Ansible 基於 Python。要讓 Ansible 在 MacOS 上工做,Conda 並非必需要的,可是它確實讓你管理 Python 版本和包依賴變得更加容易。這容許你在 MacOS 上使用升級的 Python 版本,並在你的系統中、Ansible 和其餘編程項目之間保持 Python 包的依賴性相互獨立。linux
在 MacOS 上安裝 Ansible 還有其餘方法。你可使用 Homebrew,可是若是你對 Python 開發(或 Ansible 開發)感興趣,你可能會發如今一個獨立 Python 虛擬環境中管理 Ansible 能夠減小一些混亂。我以爲這更簡單;與其試圖將 Python 版本和依賴項加載到系統或 /usr/local
目錄中 ,還不如使用 Conda 幫助我將 Ansible 所需的一切都收集到一個虛擬環境中,並將其與其餘項目徹底分開。git
本文着重於使用 Conda 做爲 Python 項目來管理 Ansible,以保持它的乾淨並與其餘項目分開。請繼續閱讀,並瞭解如何安裝 Conda、建立新的虛擬環境、安裝 Ansible 並對其進行測試。github
最近,我想學習 Ansible,因此我須要找到安裝它的最佳方法。shell
我一般對在個人平常工做站上安裝東西很謹慎。我尤爲不喜歡對供應商的默認操做系統安裝應用手動更新(這是我多年做爲 Unix 系統管理的習慣)。我真的很想使用 Python 3.7,可是 MacOS 的 Python 包是舊的 2.7,我不會安裝任何可能干擾核心 MacOS 系統的全局 Python 包。macos
因此,我使用本地 Ubuntu 18.04 虛擬機上開始了個人 Ansible 工做。這提供了真正意義上的的安全隔離,但我很快發現管理它是很是乏味的。因此我着手研究如何在本機 MacOS 上得到一個靈活但獨立的 Ansible 系統。編程
因爲 Ansible 基於 Python,Conda 彷佛是理想的解決方案。安全
Conda 是一個開源軟件,它提供方便的包和環境管理功能。它能夠幫助你管理多個版本的 Python、安裝軟件包依賴關係、執行升級和維護項目隔離。若是你手動管理 Python 虛擬環境,Conda 將有助於簡化和管理你的工做。瀏覽 Conda 文檔能夠了解更多細節。bash
我選擇了 Miniconda Python 3.7 安裝在個人工做站中,由於我想要最新的 Python 版本。不管選擇哪一個版本,你均可以使用其餘版本的 Python 安裝新的虛擬環境。
要安裝 Conda,請下載 PKG 格式的文件,進行一般的雙擊,並選擇 「Install for me only」 選項。安裝在個人系統上佔用了大約 158 兆的空間。
安裝完成後,調出一個終端來查看你有什麼了。你應該看到:
miniconda3
目錄(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 與個人其餘 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 上下文更改成這個新的環境。它爲 Python 及其包含的模塊設置了正確的路徑。請注意,在 conda activate ansible-env
命令後,你的 shell 提示符會發生變化。
第三個命令不是必須的;它列出了安裝了哪些 Python 模塊及其版本和其餘數據。
你能夠隨時使用 Conda 的 activate
命令切換到另外一個虛擬環境。這將帶你回到基本環境:conda base
。
安裝 Ansible 有多種方法,可是使用 Conda 能夠將 Ansible 版本和全部須要的依賴項打包在一個地方。Conda 提供了靈活性,既能夠將全部內容分開,又能夠根據須要添加其餘新環境(我將在後面演示)。
要安裝 Ansible 的相對較新版本,請使用:
(base) $ conda activate ansible-env
(ansible-env) $ conda install -c conda-forge ansible
複製代碼
因爲 Ansible 不是 Conda 默認通道的一部分,所以 -c
用於從備用通道搜索和安裝。Ansible 現已安裝到 ansible-env
虛擬環境中,可使用了。
既然你已經安裝了 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 工做了,你能夠在控制檯中抽身,並從你的 MacOS 工做站中使用它們。
這部分徹底是可選的;只有當你想要額外的虛擬環境來修改 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 從其餘項目中分離出來,並安全地使用 Ansible。
via: opensource.com/article/19/…
做者:James Farrell 選題:lujun9972 譯者:heguangzhi 校對:wxy