ansible的“ raw”,“ shell”和“ command”之间有什么区别?

时间:2019-09-05 11:04:14

标签: ansible

该可玩的剧本中的rawshellcommand有什么区别?以及何时使用哪个?

2 个答案:

答案 0 :(得分:3)

command:与其他剧本任务的外壳相同,在目标主机上执行远程命令。
它可以用于启动脚本(.sh)或执行简单的命令。例如:

- name: Cat a file
  command: cat somefile.txt

- name: Execute a script
  command: somescript.sh param1 param2

shell:在目标主机上执行远程命令,打开新的外壳程序(/ bin / sh)。
如果要执行更复杂的命令(例如与管道连接的命令),可以使用它。例如:

- name: Look for something in a file
  shell: cat somefile.txt | grep something

raw:在目标主机上缺少解释器的情况下执行低级命令,常见的用例是安装python。请勿在其他所有情况下(建议使用命令和shell)使用此模块

答案 1 :(得分:1)

由于我一直在讨论相同的问题,所以我也想在这里分享我的发现。

commandshell模块以及gather_facts取决于远程主机上正确安装的Python解释器。如果未满足该要求,则可能无法执行

python <ansiblePython.py>

在Debian 10(Buster)的最小安装中,即安装了python3,但缺少指向python的符号链接。

为了在应用所有其他角色之前正确地初始化系统,我对raw模块使用了一种方法

ansible / initSrv / main.yml

- hosts: "{{ target_hosts }}"
  gather_facts: no

  pre_tasks:
  - name: "Make sure remote system is initialized correctly"
    raw: 'ln -s /usr/bin/python3 /usr/bin/python'
    register: set_symlink
    failed_when: set_symlink.rc != 0 and set_symlink.rc != 1 

正在做类似的事情

/bin/sh -c 'ln -s /usr/bin/python3 /usr/bin/python'

在远程系统上。