在Ansible中如何在远程主机上运行本地PowerShell脚本

90次阅读
没有评论

*
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: IndexError: list index out of rangefatal: [delorian-car-1.local]: FAILED! => {“msg”: “Unexpected failure during module execution.”, “stdout”: “”}


## 解决方案
> 请注意以下操作可能因版本差异而有所不同,且在开始操作前请做好备份。
### 最佳解决方案
您可以使用Ansible变量将文件加载到变量中,然后将变量传递给shell模块(例如win_shell)。这样,您可以将内联脚本更改为将本地脚本文件存储为变量字符串,然后传递给shell模块。

以下是一个示例:
```yaml
- hosts: "DocsTimeMachines"
  tasks:
    - name: Calibrate Flux Capacitors
      win_shell: "{{ lookup('file', 'scripts/calibrate_flux_capacitor.ps1') }}"

在上述示例中,您可以在Playbook所在的目录下创建一个”scripts”目录,并将脚本文件放在其中。这将会通过lookup函数将脚本内容加载到Ansible变量中,并通过win_shell模块在远程主机上执行。

虽然这种方法可以解决问题,但它可能无法满足您希望使用命名参数来调用脚本的需求。例如,您可能希望以类似以下方式调用脚本:

scripts/calibrate_flux_capacitor.ps1 --mrfusion_enabled=false --hover_systems_enabled=false --retro_1950s_transistor_hack_enabled=true

如果您仍然想要在变量中调用脚本并传递命名参数,您可能需要进一步探索如何使用Ansible的变量和模块来实现。另外,您还可以考虑编写脚本来处理这些命名参数,并在脚本内部解析和处理它们。

额外提示:如果您想要使用类似命名参数的方式调用脚本,您可能需要进一步研究Ansible的变量传递和模块参数的用法。

补充解决方案

另一种方法是直接在Ansible中调用脚本,并将参数作为字符串传递给脚本。以下是一个示例:

- hosts: "TimeMachines"
  tasks:
    - name: Calibrate Flux Capacitors
      script: "scripts/calibrate_flux_cap.ps1 -some_arg 'some_value'"

在上面的示例中,我们直接使用了”script”模块,并将脚本名和参数传递给它。在PowerShell脚本内部,您可以使用PowerShell的params()功能来获取和处理传递的参数。

请注意,这个方法可以让您在Ansible中直接调用脚本并传递参数,但是在使用时需要确保脚本能够正确处理参数。

注意:如果您使用的是不同版本的Ansible,可能会有细微的差异,请根据您的实际情况进行适当的调整。

希望这些解决方案能够帮助您在Ansible中成功运行本地PowerShell脚本并在远程主机上执行。如有更多疑问,请随时提问。

正文完