美文网首页
03-常用模块(二)-命令模块

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

作者: 洛神鬼道 | 来源:发表于2018-08-31 15:09 被阅读0次

    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-常用模块(二)-命令模块

          本文链接:https://www.haomeiwen.com/subject/yagswftx.html