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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,326评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,228评论 1 304
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,979评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,489评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,894评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,900评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,075评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,803评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,565评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,778评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,255评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,582评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,254评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,151评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,952评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,035评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,839评论 2 277

推荐阅读更多精彩内容

  • ###### Ansible总结 ##### 运维工作: 系统安装(物理机、虚拟机)-->程序包安装、配置、服务启...
    二郎5阅读 1,957评论 0 4
  • Ansible Ansible version : 2.6.2 ad-hoc命令简介 什么是ad-hoc命令? a...
    洛神鬼道阅读 2,875评论 0 1
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,314评论 0 5
  • 一、inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况...
    GoGooGooo阅读 7,938评论 1 14
  • 一、简介 在Linux自动化运维中,常见的自动化运维工具可分为需要安装终端的puppet、func和不需要安装终端...
    小尛酒窝阅读 2,537评论 0 6