command模块

  • command模块是ansible的默认模块,也就是指定了-m command
  • 只支持简单的命令执行
  • 命令中不能出现变量
  • 命令中不能出现特殊符号(<,>,|,:.&)

远程查看主机名

[root@localhost ~]# ansible all -m command -a 'hostname'
192.168.1.100 | CHANGED | rc=0 >>
web0
192.168.1.102 | CHANGED | rc=0 >>
web2
192.168.1.101 | CHANGED | rc=0 >>
web1
192.168.1.99 | CHANGED | rc=0 >>
localhost.localdomain

远程创建文件

ansible webservers -a 'touch /home/test.txt'
192.168.1.101 | CHANGED | rc=0 >>

192.168.1.100 | CHANGED | rc=0 >>

192.168.1.102 | CHANGED | rc=0 >>
[root@localhost ~]# ansible webservers -a 'ls /home/'
192.168.1.101 | CHANGED | rc=0 >>
test.txt
192.168.1.100 | CHANGED | rc=0 >>
test.txt
192.168.1.102 | CHANGED | rc=0 >>
test.txt

远程创建用户test

[root@localhost ~]# ansible webservers -m command  -a 'useradd test'
192.168.1.101 | CHANGED | rc=0 >>

192.168.1.100 | CHANGED | rc=0 >>

192.168.1.102 | CHANGED | rc=0 >>
  • cmd: 要在远程主机上执行的命令及其参数,是必需参数。
  • chdir: 在执行命令前更改到指定目录。
  • creates: 如果指定的文件存在,则不运行命令。
  • removes: 如果指定的文件不存在,则不运行命令。

shell模块(万能模块)

远程查看时间并保存到指定文件

[root@localhost ~]# ansible webservers -m shell -a "date > /home/test.txt "
192.168.1.100 | CHANGED | rc=0 >>

192.168.1.102 | CHANGED | rc=0 >>

192.168.1.101 | CHANGED | rc=0 >>

[root@localhost ~]# ansible webservers -m shell -a "cat /home/test.txt "
192.168.1.101 | CHANGED | rc=0 >>
2025年 02月 17日 星期一 17:24:20 CST
192.168.1.100 | CHANGED | rc=0 >>
2025年 02月 17日 星期一 17:24:20 CST
192.168.1.102 | CHANGED | rc=0 >>
2025年 02月 17日 星期一 17:24:20 CST 

远程执行复杂Linux命令

[root@localhost ~]# ansible webservers -m shell -a "mkdir -p /home/test/111;echo "hostname" > /home/test/111/ht.sh;chmod +x /home/test/111/ht.sh;/home/test/111/ht.sh "
192.168.1.102 | CHANGED | rc=0 >>
web2
192.168.1.101 | CHANGED | rc=0 >>
web1
192.168.1.100 | CHANGED | rc=0 >>
web0

[root@localhost ~]# ansible webservers -m shell -a "cat /home/test/111/ht.sh"
192.168.1.100 | CHANGED | rc=0 >>
hostname
192.168.1.101 | CHANGED | rc=0 >>
hostname
192.168.1.102 | CHANGED | rc=0 >>
hostname

copy模块

将数据推送到远程主机结点,无法拉取数据到本地

常用的参数

  • src: 本地文件路径,指明你要复制的源文件。
  • dest: 远程目标路径,指定文件要复制到的目标位置。
  • owner: 设置目标文件的拥有者。
  • group: 设置目标文件的所属用户组。
  • mode: 设置目标文件的权限(如0644)。
  • backup: 如果设置为yes,Ansible将在覆盖目标文件之前备份旧文件。
  • force: 是否强制覆盖目标文件。默认为yes,表示如果文件存在,则覆盖它。如果设置为no,则不会覆盖目标文件。
  • content: 允许你直接将内容写入文件,而不需要依赖本地源文件。

简单发送文件

[root@localhost home]# ansible webservers -m copy -a "src=/home/test.txt dest=/home/test.txt"
192.168.1.102 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "a33a3609d7749c9366909df2760e0f55",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:home_root_t:s0",
    "size": 13,
    "src": "/root/.ansible/tmp/ansible-tmp-1739787035.135853-15248-112730240381777/source",
    "state": "file",
    "uid": 0
}
192.168.1.100 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "a33a3609d7749c9366909df2760e0f55",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:home_root_t:s0",
    "size": 13,
    "src": "/root/.ansible/tmp/ansible-tmp-1739787034.8420439-15246-251065852174674/source",
    "state": "file",
    "uid": 0
}
192.168.1.101 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "a33a3609d7749c9366909df2760e0f55",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:home_root_t:s0",
    "size": 13,
    "src": "/root/.ansible/tmp/ansible-tmp-1739787034.9700463-15247-182115174466719/source",
    "state": "file",
    "uid": 0
}

[root@localhost home]# ansible webservers -m copy -a "src=/home/test.log dest=/home/test.txt"
192.168.1.100 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test.txt",
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "path": "/home/test.txt",
    "secontext": "unconfined_u:object_r:home_root_t:s0",
    "size": 13,
    "state": "file",
    "uid": 0
}
192.168.1.102 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test.txt",
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "path": "/home/test.txt",
    "secontext": "unconfined_u:object_r:home_root_t:s0",
    "size": 13,
    "state": "file",
    "uid": 0
}
192.168.1.101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test.txt",
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "path": "/home/test.txt",
    "secontext": "unconfined_u:object_r:home_root_t:s0",
    "size": 13,
    "state": "file",
    "uid": 0
}

ansible的模块记录了文件属性,文件的MD5值,判断了文件是否变化,如果没有发生变化,不做处理,提升批量管理的效率

发送文件并且指定文件属性

[root@localhost home]# ansible webservers -m copy -a "src=/home/test.log dest=/home/test/111/ht.sh owner=test mode=600"
192.168.1.100 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test/111/ht.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "a33a3609d7749c9366909df2760e0f55",
    "mode": "0600",
    "owner": "test",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 13,
    "src": "/root/.ansible/tmp/ansible-tmp-1739787778.9725525-15369-213488798312190/source",
    "state": "file",
    "uid": 1000
}
192.168.1.102 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test/111/ht.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "a33a3609d7749c9366909df2760e0f55",
    "mode": "0600",
    "owner": "test",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 13,
    "src": "/root/.ansible/tmp/ansible-tmp-1739787778.9794927-15371-248776510729889/source",
    "state": "file",
    "uid": 1000
}
192.168.1.101 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "62459c2b6ddc2d955c0372d9327b60259510e928",
    "dest": "/home/test/111/ht.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "a33a3609d7749c9366909df2760e0f55",
    "mode": "0600",
    "owner": "test",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 13,
    "src": "/root/.ansible/tmp/ansible-tmp-1739787778.972367-15370-236613693451300/source",
    "state": "file",
    "uid": 1000
}
[root@localhost home]# ansible webservers -m shell -a "ls -l /home/test/111/ht.sh"
192.168.1.101 | CHANGED | rc=0 >>
-rw-------. 1 test root 13 2月  17 18:23 /home/test/111/ht.sh
192.168.1.102 | CHANGED | rc=0 >>
-rw-------. 1 test root 13 2月  17 18:23 /home/test/111/ht.sh
192.168.1.100 | CHANGED | rc=0 >>
-rw-------. 1 test root 13 2月  17 18:23 /home/test/111/ht.sh

发送文件且做好备份

直接在命令中添加backup=yes参数

[root@localhost home]# ansible webservers -m copy -a "src=/home/test.log dest=/home/test/111/ht.sh backup=yes"
192.168.1.100 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "backup_file": "/home/test/111/ht.sh.10759.2025-02-17@18:29:04~",
    "changed": true,
    "checksum": "133da17c9e6c9255dcc4b17123a2ffe9406ca633",
    "dest": "/home/test/111/ht.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "8b32df0e95abe075b89b769f13661c5b",
    "mode": "0600",
    "owner": "test",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 25,
    "src": "/root/.ansible/tmp/ansible-tmp-1739788142.9244893-15527-131926242226088/source",
    "state": "file",
    "uid": 1000
}
192.168.1.101 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "backup_file": "/home/test/111/ht.sh.10780.2025-02-17@18:29:04~",
    "changed": true,
    "checksum": "133da17c9e6c9255dcc4b17123a2ffe9406ca633",
    "dest": "/home/test/111/ht.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "8b32df0e95abe075b89b769f13661c5b",
    "mode": "0600",
    "owner": "test",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 25,
    "src": "/root/.ansible/tmp/ansible-tmp-1739788142.9834116-15528-184526183865167/source",
    "state": "file",
    "uid": 1000
}
192.168.1.102 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "backup_file": "/home/test/111/ht.sh.10688.2025-02-17@18:29:04~",
    "changed": true,
    "checksum": "133da17c9e6c9255dcc4b17123a2ffe9406ca633",
    "dest": "/home/test/111/ht.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "8b32df0e95abe075b89b769f13661c5b",
    "mode": "0600",
    "owner": "test",
    "secontext": "unconfined_u:object_r:user_home_t:s0",
    "size": 25,
    "src": "/root/.ansible/tmp/ansible-tmp-1739788142.9529815-15529-214010968136679/source",
    "state": "file",
    "uid": 1000
}
[root@localhost home]# ansible webservers -m shell -a "ls -l /home/test/111/"
192.168.1.102 | CHANGED | rc=0 >>
总用量 8
-rw-------. 1 test root 25 2月  17 18:29 ht.sh
-rw-------. 1 test root 13 2月  17 18:23 ht.sh.10688.2025-02-17@18:29:04~
192.168.1.100 | CHANGED | rc=0 >>
总用量 8
-rw-------. 1 test root 25 2月  17 18:29 ht.sh
-rw-------. 1 test root 13 2月  17 18:23 ht.sh.10759.2025-02-17@18:29:04~
192.168.1.101 | CHANGED | rc=0 >>
总用量 8
-rw-------. 1 test root 25 2月  17 18:29 ht.sh
-rw-------. 1 test root 13 2月  17 18:23 ht.sh.10780.2025-02-17@18:29:04~
[root@localhost home]# ansible webservers -m shell -a "cat /home/test/111/ht.sh"
192.168.1.100 | CHANGED | rc=0 >>
who are you?
are you ok?
192.168.1.102 | CHANGED | rc=0 >>
who are you?
are you ok?
192.168.1.101 | CHANGED | rc=0 >>
who are you?
are you ok?
[root@localhost home]# ansible webservers -m shell -a "cat /home/test/111/ht.sh.*"
192.168.1.101 | CHANGED | rc=0 >>
who are you?
192.168.1.100 | CHANGED | rc=0 >>
who are you?
192.168.1.102 | CHANGED | rc=0 >>
who are you?