03-常用模块(二)-命令模块

Ansible

Ansible version : 2.6.2

常用模块(二)

命令模块

  • command
  • expect
  • psexec
  • raw
  • script
  • shell
  • telnet

模块:command

概要
  • command模块通过空格分隔的参数列表获取命令名。
  • 给定的命令将在所有选定的节点上执行。 它不会通过shell处理,所以像$HOME这样的变量和<>|;&等操作都不会工作(如果需要这些功能,请使用【shell】模块)。
  • 对于Windows目标,请改用【win_command】模块。
参数
参数(*必选) 默认值 注释
argv 允许用户以列表与字符串的形式提供命令。 只能提供字符串或列表表单,而不能同时提供。 必须提供一个或另一个。
chdir 运行命令前切换到指定目录。
creates 文件名或(自2.0开始)glob模式,当它已经存在时,将不会运行此步骤。
* free_form 【command】模块使用自由格式命令运行。实际上并没有叫做free form 选项。
removes 文件名或(自2.0开始)glob模式,当它不存在时,将不会运行此步骤。
stdin 将命令的stdin直接设置指定值
warn yes 如果在ansible.cfg中启用了command_warnings,如果设置为no,不要警告这一行。
注意
  • 如果你想通过shell运行一个命令(假设你正在使用<,>,|等),你实际上想要shell模块。如果未正确引用,则解析shell元字符可能导致执行意外命令。因此,尽可能使用更安全【command】模块。

  • creates, removes, chdir可以在命令后指定。如果您只想在某个文件不存在的情况下运行命令,请使用此命令。

  • 从版本2.4开始,executable 参数将被删除。如果您需要此参数,请改用shell模块。

  • 对于Windows目标,请改用【win_command】模块。

例子
playbook

register参数将远程命令执行的输出结果存储在变量中,后续可以在when中对该变量进行检索确定下一步任务。

- name: return motd to registered var
  command: cat /etc/motd
  register: mymotd

当文件名或(自2.0开始)glob模式已经存在时,此步骤将不会运行。

- name: Run the command if the specified file does not exist.
  command: /usr/bin/make_database.sh arg1 arg2
  args:
    creates: /path/to/database

使用argv将命令作为列表发送。 务必将命令留空

- name: use argv to send the command as a list.  Be sure to leave command empty
  command:
  args:
    argv:
      - echo
      - testing

安全地使用模板变量来运行命令。 始终使用引用过滤器以避免注入问题。

- name: safely use templated variable to run command. Always use the quote filter to avoid injection issues.
  command: cat {{ myfile|quote }}
  register: myoutput

返回值

【command】模块特有返回值

关键字 返回/类型 描述
cmd 总是/list 在远程计算机上运行的cmd
delta 总是/字符串 cmd结束时间 - cmd开始时间
end 总是/字符串 cmd结束时间
start 总是/字符串 cmd开始时间

模块:shell

概要

【shell】模块通过空格分隔的参数列表获取命令名称。它几乎与【command】模块完全相同,但通过远程节点上的shell(/bin/sh)运行命令。

参数
参数(*必选) 默认值 注释
argv 允许用户以列表与字符串的形式提供命令。 只能提供字符串或列表表单,而不能同时提供。 必须提供一个或另一个。
chdir 运行命令前切换到指定目录。
creates 文件名或(自2.0开始)glob模式,当它已经存在时,将不会运行此步骤。
* free_form 【command】模块使用自由格式命令运行。实际上并没有叫做free form 选项。
removes 文件名或(自2.0开始)glob模式,当它不存在时,将不会运行此步骤。
stdin 将命令的stdin直接设置指定值
warn yes 如果在ansible.cfg中启用了command_warnings,如果设置为no,不要警告这一行。
注意
  • 如果要安全且可预测地执行命令,最好使用【command】模块。当编写playbooks的时候使用【command】,除非确切的需要使用【shell】,使用ad-hoc命令时,自行判断。
  • 要过滤传递给shell模块的任何变量,应该使用{{var | quote}},而不是{{var}},以确保它们不包含分号之类的有害内容。
  • 对于windows主机,使用【win_shell】替代。
  • 在playbook中创建多行脚本时,请用【script】替代。
返回值

【shell】模块特有返回值

关键字 返回/类型 描述
cmd 总是/列表 在远程计算机上运行的cmd
delta 总是/字符串 cmd结束时间 - cmd开始时间
end 总是/字符串 cmd结束时间
msg 总是/布尔值 改变
rc 总是/整型 命令返回码(0表示成功)
start 总是/字符串 cmd结束时间
stderr 总是/字符串 标准错误输出
stdout 总是/字符串 标准输出
stdout_lines 总是/列表 标准输出分成几行

模块:script

概要
  • 通过空格分隔的参数列表获取脚本名称。
  • 路径中的本地脚本将传输到远程节点并执行。
  • 使用的脚本将通过远程节点上的shell环境进行处理。
  • 该模块在远程系统上不需要python,跟【raw】模块类似。
  • windows也支持这个模块。
参数
参数(*必选) 默认值 注释
chdir 运行命令前切换到指定目录。
creates 当文件名已经存在时,将不会运行此步骤。
decrypt yes 此选项控制使用Vault的源文件自动解密。
executable 用于调用脚本的可执行文件的名称或者路径
* free_form 本地脚本文件的路径,后跟可选参数。实际上并没有叫做free form 选项。
remove 当文件名不存在时,将不会运行此步骤。
注意
  • 编写Ansible模块通常比推送脚本更好
  • 当脚本执行时,ssh连接插件将强制通过-tt进行伪tty分配。伪ttys没有stderr通道,所有stderr都被发送到stdout。如果像要分离stdout和stderr,切换到copy+command任务集合
  • 如果本地脚本的路径包含空格,则需要引用它。
例子
playbook

默认例子

- script: /some/local/script.sh --some-arguments 1234

如果不存在,则创建

- script: /some/local/create_file.sh --some-arguments 1234
  args:
    creates: /the/created/file.txt

指定非系统$PATH可执行路径

- hosts: localhost
  tasks:
  - name: python exec
    script: /tmp/1.py
    args:
      executable: /usr/local/python3/bin/python3

使用系统$PATH里面的路径

- hosts: localhost
  tasks:
  - name: python exec
    script: /tmp/1.py
    args:
      executable: python3

你可能感兴趣的:(03-常用模块(二)-命令模块)