Linux 中的遠端自動化工具
假設有一個計算環境,在 linux 中,它是靜態的和持久的。我有單向 ssh 連接,並且基礎設施是可信的——它是我的。
存在各種品牌的“企業”工具,例如 ansible,它們帶有預先固定的常式。最終,如果一個人想要修改它們,它們是一種痛苦。
接下來,你有你的氣流(dags)和 Luigis(python 中的 gnu-make 複製;python 是一種比 make 和 bash 低級的語言,不像 make 那樣不支持應用程序二進制介面)。從某種意義上說,這是一種痛苦,必須為高級任務編寫低級程式碼(python 已成為一種具有打字問題和版本控制問題的低級語言),並且您必須處理 python 包袱(虛擬 env/ anaconda/跨平台互操作)以使用任何東西。
在這些“產品、方案和工具”周圍,存在著“正常工作”的原生 unix/linux 作業系統和 docker 鏡像。
在這些 docker 映像和子系統(Linux 的 windows 子系統)中,您擁有所有這些“正常工作”的工具,包括 50 年曆史的項目“Make”,以及
zsh/bash
與.parallel``ssh
make
實際上是完全通用的,當我想編寫一些快速自動化時,它遠遠快於我在一周或兩週內可以做的任何事情luigi
/airflow
。它還可以作為辨識新工具的一種方式:如果某些東西變得太複雜,顯然它應該是一個較低級別語言的打包工具。此外,我不會產生任何與在不同的 Linux 發行版和 Windows 之間拖拽 Python 堆依賴項相關的固定成本。
但是,似乎缺少一塊瓷磚:當我想自動化在遠端機器上執行的任務時,make 的有效性會減弱。我試過
ssh -c "..."
了,但結果有點麻煩。在尋找解決方法的過程中,我遇到了
pachyderm
(數據科學數據版本控制)、luigi
(製作複製)、airflow
(不好玩)、ansible
(再次:tinkery python-based time sink),也許還有其他。我還遇到了一個 1980 年代/90 年代的工具,稱為
expect
andautoexpect
。這個工具似乎是原生的linux
,並且屬於適用於 linux、cygwin、我的遠端 linux 機器等的 windows 子系統上的“正常工作”類別。它似乎符合要求,而且更好的是它與我
make
的自動化方法配合得很好。總的來說,我對automation.exp
腳本內部嘈雜完全沒問題,因為它們是自動生成的。重要的部分是人工創建的組件——components.exp
沒有雜亂無章的小組合(所有與新時代工具相關的流程控制、配置、使用者登錄、文件和安裝包)。但是,
autoexpect
它是一個宏記錄器,您可能想要用它做的很多事情都涉及來自遠端機器的非確定性響應。這會帶來問題,除非您花時間成為expect
專家。拋開所有的序言,我很好奇:是否有替代方案
autoexpect
也屬於這些系統中的“公正”作品類別?而且,為了限制顯而易見,不要尋找我的自動化系統來要求我拖著機器安裝和維護 python 虛擬環境——厭倦了處理這種混亂。
對於遠端執行,您可能需要查看
env_parallel
:dostuff() { mystuff "$@" } alias mystuff='echo $my' my=My env_parallel -S server dostuff ::: a b c
這裡的想法是讓 GNU Parallel 將環境複製到遠端伺服器。因此,可以更輕鬆地在本地伺服器上定義復雜的功能並讓它們遠端執行,而無需處理您可能遇到的報價馬戲團
ssh -c "..."
。目前尚不清楚您是否需要
expect
. 如果是這樣,這將無法滿足您的需求。