Ansible——command 模块

目录

基本用法

指定主机

指定用户

指定不同的清单文件

通过sudo执行

使用更多的模块参数

1.使用特定的模块参数,例如chdir:

2.使用creates和removes参数:

creates参数

removes参数

并发控制

详细输出

例外处理

基本语法

常用参数

示例

[示例 1:简单执行命令](#示例 1:简单执行命令)

[示例 2:更改目录后执行命令](#示例 2:更改目录后执行命令)

[示例 3:仅当文件不存在时才创建文件](#示例 3:仅当文件不存在时才创建文件)

[示例 4:仅当文件存在时才删除文件](#示例 4:仅当文件存在时才删除文件)

[完整的 Playbook 示例](#完整的 Playbook 示例)


Ansible的command模块是一个非常基础和常用的模块,可以通过ansible命令结合一些选项来在远程主机上执行命令。与shell模块不同,command模块在执行命令时不会通过shell解释器来执行,因此无法处理像重定向、管道以及环境变量的展开等复杂的shell功能。

  • cmd: 要在远程主机上执行的命令及其参数,是必需参数。
  • chdir: 在执行命令前更改到指定目录。
  • creates: 如果指定的文件存在,则不运行命令。
  • removes: 如果指定的文件不存在,则不运行命令。
  • stdin: 要传递给命令的标准输入。
  • stdin_add_newline : 在传递的 stdin 后添加换行符(默认为 yes)。
  • strip_empty_ends : 删除命令输出中的空行(默认为 yes)。

基本用法

执行单个命令

bash 复制代码
ansible all -m command -a "ls /home"

这里all是指所有主机(可以是Inventory文件中的一个分组),-m选项指定使用command模块,-a选项后面跟的是要执行的命令。

指定主机

指定一个特定的主机或主机组

bash 复制代码
ansible web -m command -a "ls /etc/yum.repos.d/"

这里web是清单(Inventory)文件中的一个主机组。

指定用户

使用特定的用户来执行命令

bash 复制代码
ansible all -m command -a "ls /root" -u root

这里-u选项指定用root用户执行命令。

指定不同的清单文件

使用指定的清单(Inventory)文件

bash 复制代码
   ansible all -i /path/to/inventory_file -m command -a "ls /home"

这里-i选项指定使用特定的Inventory文件。

通过sudo执行

使用become(sudo)来提升权限执行命令

bash 复制代码
ansible all -m command -a "ls /root" --become

这里--become选项是为了在执行命令时提升权限。

使用更多的模块参数

1.使用特定的模块参数,例如chdir
   ansible all -m command -a "cmd='ls' chdir=/home"
  • cmd='ls': 表示要执行的命令是ls(列出目录内容)。
  • chdir=/home: 表示在执行ls命令时先切换到/home目录下执行。
2.使用createsremoves参数:
bash 复制代码
   ansible all -m command -a "cmd='touch /tmp/testfile' creates=/tmp/testfile"
  • cmd='touch /tmp/testfile': 表示要执行的命令是touch /tmp/testfile,这个命令会在/tmp目录中创建一个名为testfile的空文件。
  • creates=/tmp/testfile: 表示如果/tmp/testfile文件已经存在,那么就不执行命令。
bash 复制代码
ansible all -m command -a "cmd='rm /tmp/testfile' removes=/tmp/testfile"
  • cmd='rm /tmp/testfile': 表示要执行的命令是rm /tmp/testfile,这个命令会删除/tmp目录中的testfile文件。
  • removes=/tmp/testfile: 表示如果/tmp/testfile文件不存在,那么就不执行命令。

removes参数和creates参数都是用于控制命令是否执行的条件,但二者的逻辑相反。它们主要用于避免重复操作,并确保操作的幂等性。

creates参数

作用:当指定的文件或目录存在时,不执行命令。

使用场景:常用于需要创建文件或目录的操作,确保创建操作不会重复执行。

removes参数

作用:当指定的文件或目录不存在时,不执行命令。

使用场景:常用于需要删除文件或目录的操作,确保删除操作不会重复执行。

并发控制

限制并发执行的任务数

   ansible all -m command -a "ls /home" -f 10

这里-f选项用来限制同一时间内并发执行的任务数,默认为5。

详细输出

显示详细信息

bash 复制代码
ansible all -m command -a "ls /home" -v

这里-v选项用来显示详细信息,还可以使用-vv, -vvv等来增加详细级别。

例外处理

忽略某些错误继续执行

bash 复制代码
ansible all -m command -a "ls /nonexistent" --ignore-errors

下面是如何在 Ansible 的 YAML 文件中使用 command 模块的总结和示例。

基本语法

- name: 描述任务的名称
  command: <命令以及其参数>

常用参数

  • cmd: (必需)要执行的命令。
  • chdir: 在执行命令前更改的目录。
  • creates: 只有在指定的文件或目录不存在时才执行命令。
  • removes: 只有在指定的文件或目录存在时才执行命令。

示例

示例 1:简单执行命令
- name: Echo a message
  command: echo "Hello, World!"
示例 2:更改目录后执行命令
- name: List files in the /tmp directory
  command: ls -l
  args:
    chdir: /tmp
示例 3:仅当文件不存在时才创建文件
- name: Create a file if it does not exist
  command: touch /tmp/myfile
  args:
    creates: /tmp/myfile
示例 4:仅当文件存在时才删除文件
- name: Remove a file if it exists
  command: rm /tmp/myfile
  args:
    removes: /tmp/myfile

完整的 Playbook 示例

这是一个完整的 Ansible Playbook 示例,包含多个使用 command 模块的任务:

---
- name: Example Playbook for using command module
  hosts: all
  tasks:
    - name: Echo Hello World
      command: echo "Hello, World!"

    - name: List root directory
      command: ls -l /
      
    - name: Check if /tmp/testfile exists and create if it doesn't
      command: touch /tmp/testfile
      args:
        creates: /tmp/testfile

    - name: Remove /tmp/testfile if exists
      command: rm /tmp/testfile
      args:
        removes: /tmp/testfile
相关推荐
是垚不是土17 分钟前
Ansible--自动化运维工具
运维·git·学习·自动化·云计算·ansible
运维技术小记17 分钟前
Linux命令思维导图
linux
风间琉璃""18 分钟前
shell编写——脚本传参与运算
linux·运维·服务器·bash
暴力的bug制造机26 分钟前
【MySQL】库的操作(增删查改 | 备份 | 恢复)
linux·数据库·mysql·oracle
VVVVWeiYee30 分钟前
LSA详情与特殊区域
运维·网络·智能路由器·信息与通信
EEE1even39 分钟前
Linux光标快捷键
linux·运维·vim
南风与鱼1 小时前
Linux编辑器 - vim
linux·编辑器·vim
yuguo.im1 小时前
Nginx 架构与设计
运维·nginx·架构
爱丶狸1 小时前
linux命令之openssl用法
linux·运维·服务器·linux命令合集
昨天今天明天好多天1 小时前
【Linux】常用命令:alternatives、update-alternatives、scp、curl...
linux·运维·服务器