ansible playbook 中的raw,shell和 有什么区别command?什么时候使用哪个?
小智 9
command:在目标主机上执行远程命令,在其他 playbook 的任务的同一个 shell 中。
它可用于启动脚本 (.sh) 或执行简单命令。例如:
- name: Cat a file
command: cat somefile.txt
- name: Execute a script
command: somescript.sh param1 param2
Run Code Online (Sandbox Code Playgroud)
shell : 在目标主机上执行远程命令,打开一个新的 shell (/bin/sh)。
如果您想执行更复杂的命令,例如与管道连接的命令,则可以使用它。例如:
- name: Look for something in a file
shell: cat somefile.txt | grep something
Run Code Online (Sandbox Code Playgroud)
raw : 在目标主机上缺少解释器的情况下执行低级命令,一个常见的用例是安装 python。不应在所有其他情况下使用此模块(建议使用 command 和 shell)
由于我遇到了同样的问题,我也想在这里分享我的发现。
\ncommand和模块(注释:)shell也依赖于远程节点上正确安装的 Python 解释器。如果未满足该要求,则可能会遇到无法执行的错误gather_factssetup.py
python <ansiblePython.py>\nRun Code Online (Sandbox Code Playgroud)\n在 Debian 10 (Buster) 最小安装中,python3即已安装,但符号链接python丢失。
为了在应用所有其他角色之前正确初始化系统,我使用了模块的raw方法
ansible/initSrv/main.yml
\n- hosts: "{{ target_hosts }}"\n gather_facts: no # is necessary because setup.py depends on Python too\n\n pre_tasks:\n - name: "Make sure remote system is initialized correctly"\n raw: \'ln -s /usr/bin/python3 /usr/bin/python\'\n register: set_symlink\n failed_when: set_symlink.rc != 0 and set_symlink.rc != 1 \nRun Code Online (Sandbox Code Playgroud)\n这是在做类似的事情
\n/bin/sh -c \'ln -s /usr/bin/python3 /usr/bin/python\'\nRun Code Online (Sandbox Code Playgroud)\n在远程系统上。
\n进一步的文档
\nrawmodule \xe2\x80\x93 执行低级且肮脏的命令
\n\n一种常见的情况是
\npython在默认情况下未安装 python 的系统上安装。
...但不仅限于此
\n\n\n在角色之前执行的任务列表。
\n
另一个用例
\n\n| 归档时间: |
|
| 查看次数: |
3628 次 |
| 最近记录: |