![如何让 salt-ssh 在远程节点上运行本地脚本?](https://linux22.com/image/714928/%E5%A6%82%E4%BD%95%E8%AE%A9%20salt-ssh%20%E5%9C%A8%E8%BF%9C%E7%A8%8B%E8%8A%82%E7%82%B9%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%9C%AC%E5%9C%B0%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
.::更新—已解决::.
在 @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
文件(如下),但不知道将其放在哪里。salt-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”位于与 master (DMZ) 不同的网络上。据我了解,传统的 salt 设置需要 minions 连接到 salt master。
自发布以来,我已经安装了 salt-sshsaltstack 仓库这似乎已经消除了msgpack
上面的错误。我还修改了上面 vagrant 特定链接中的一些示例,在 下添加了一个master
文件和states
目录/etc/salt
。我将状态文件(上面)放在 下/etc/salt/states/test.sls
。结果如下。
add script
我按照@wirap的建议在和之间添加了下划线run script
。这让我更进一步,如下所示。似乎客户端或服务器上的脚本路径存在一些错误。尚不确定。似乎我只需要使用文件state.apply
的名称.sls
(不带 .sls 扩展名)进行调用。
在/etc/salt/主服务器中:
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(“无需安装 salt-minion 即可通过 ssh 执行 salt 命令和状态。”)。如果您无法在 minions 上安装 salt-minion,则只需这样做
- 你把你的状态放在哪里了?通常在 /etc/salt/master 配置中,你写入状态文件所在的路径
- 不要逐字逐句地使用示例中提供的状态。我敢肯定,你不能在id 声明(
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 并不重要。不要让这让您感到困惑。