
.::更新已解決::.
在 @wirap 的幫助下,它現在正在工作。我已將腳本目錄符號連結到/etc/salt/states/scripts
並使用此test.sls
配置,它現在正在工作。
/root/bin/updater/scripts/pam-setup-access:
file.managed:
- name: /tmp/pam-setup-access
- source: salt://scripts/pam-setup-access
- mode: 0700
run_script:
cmd.run:
- name: /tmp/pam-setup-access
file.absent:
- name: /tmp/pam-setup-access
我是 salt-ssh 新手,正在查看一些信息這裡關於如何執行駐留在我的管理框 ( /root/bin/updater/scripts/pam-setup-access
) 上的腳本,該腳本位於我也具有 root 存取權限的遠端節點上。
我創建了一個state
文件(如下),但不確定要將其放置在哪裡。鹽-ssh文件只是提到/etc/salt/master
所以我查了一下但是那些文檔似乎特定於 vagrant 和軟體包安裝。
add script:
file.managed:
- name: pam-setup-access
- source: /root/bin/updater/scripts/pam-setup-access
run script:
cmd.run:
- name: pam-setup-access
最後,我嘗試簡單地從當前目錄運行狀態文件,如第一個連結所示,但我只是感到惱火。我缺什麼?
# salt-ssh '*' state.apply test.sls
nod0:
[CRITICAL] Unable to import msgpack or msgpack_pure python modules
Function state.apply is not available
nod1:
[CRITICAL] Unable to import msgpack or msgpack_pure python modules
Function state.apply is not available
。
我需要使用 salt-ssh,因為幾個「minions」駐留在與主伺服器 (DMZ) 分開的網路上。據我了解,傳統的 salt 設定需要 Minions 連接到 salt master。
自從發布以來,我已經安裝了 salt-sshsaltstack 倉庫這似乎已經擺脫了msgpack
上面的錯誤。我還修改了上面 vagrant 特定連結中的一些範例,master
在states
./etc/salt
我已將狀態文件(上面)放在/etc/salt/states/test.sls
.結果如下。
我按照@wirap的建議在add script
和之間添加了下劃線。run script
這讓我更進一步,如下圖所示。客戶端或伺服器上的腳本路徑似乎存在一些錯誤。尚未確定。看來我只需要state.apply
使用檔案名稱來呼叫.sls
(不帶 .sls 副檔名)。
/etc/salt/master:
file_roots:
base:
- /etc/salt/states
當我現在啟動 salt-ssh 時,我得到:
# salt-ssh '*' state.apply test
nod0:
----------
ID: add_script
Function: file.managed
Name: pam-setup-access
Result: False
Comment: Specified file pam-setup-access is not an absolute path
Started: 11:53:50.237379
Duration: 0.602 ms
Changes:
----------
ID: run_script
Function: cmd.run
Name: pam-setup-access
Result: False
Comment: Command "pam-setup-access" run
Started: 11:53:50.238629
Duration: 8.297 ms
Changes:
----------
pid:
1037
retcode:
127
stderr:
/bin/bash: pam-setup-access: command not found
stdout:
Summary for nod0
------------
Succeeded: 0 (changed=1)
Failed: 2
------------
Total states run: 2
Total run time: 8.899 ms
nod1:
----------
ID: add_script
Function: file.managed
Name: pam-setup-access
Result: False
Comment: Specified file pam-setup-access is not an absolute path
Started: 11:53:50.476743
Duration: 0.555 ms
Changes:
----------
ID: run_script
Function: cmd.run
Name: pam-setup-access
Result: False
Comment: Command "pam-setup-access" run
Started: 11:53:50.477906
Duration: 7.5 ms
Changes:
----------
pid:
30772
retcode:
127
stderr:
/bin/bash: pam-setup-access: command not found
stdout:
Summary for nod1
------------
Succeeded: 0 (changed=1)
Failed: 2
------------
Total states run: 2
Total run time: 8.055 ms
答案1
- 您確定要使用 salt-ssh (「透過 ssh 執行 salt 指令和狀態而不安裝 salt-minion。」)。如果你無法在你的minions上安裝salt-minion,你只需要這樣做
- 你把你的州放在哪裡了?通常在 /etc/salt/master 配置中編寫狀態檔案所在的路徑
- 不要逐字使用範例中提供的狀態。我很確定你不能有空間身份聲明(
add script:
)。 - 我不知道你的錯誤訊息。這個線程這裡提出以下建議:“msgpack 錯誤非常具有誤導性,因為它完全無關。似乎您的一個 server.conf 檔案在一個 Minion 上具有無效的 utf-8,而該檔案在另一個 Minion 上不存在?”我強烈懷疑您的州 ID 中的空格(“”)。根據我的經驗,如果狀態文件或支柱中存在無效字符,SaltStack 可能會發出相當誤導性的錯誤訊息。
額外提示:
- 看這裡有關如何設定狀態樹的資訊。
- 也許可以使用已經安裝的 SaltStack(docker、Vagrant?)來學習它的工作原理。由於 UtahDave 在 SaltStack 中非常活躍,我會選擇他的示範(免責聲明:我自己沒有測試過!)
更新:當您使用 file.managed 時:
source
的參數file.managed
是主節點上的路徑(相對於狀態路徑),而不是目標路徑。- 您需要指定目標上的路徑,這就是您收到錯誤的原因:“指定的檔案 pam-setup-access 不是絕對路徑”
例子:
/root/bin/updater/scripts/pam-setup-access
file.managed:
- source: salt://files/pam-setup-access
是相同的:
some-arbitrary-id
file.managed:
- name: /root/bin/updater/scripts/pam-setup-access
- source: salt://files/pam-setup-access
https://docs.saltstack.com/en/develop/ref/states/all/salt.states.file.html#module-salt.states.file
cmd.run 也是如此。
閱讀一般的SaltStack 教學。當你設計狀態時,使用 salt-ssh 還是 salt 並不重要。不要讓這件事讓你感到困惑。