ansible all -m command -a '要执行的命令列表'
# 因为command是默认模块,所以-m可以省略
# -a 是ansible用于指定模块参数的选项
ansible all -a '要执行的命令列表'
# 比如,查看所有的主机的磁盘利用率
ansible all -a 'df -h'
# command在某些场景下,命令无法正确执行,比如
ansible all -a 'echo $HOSTNAME'
# 故提供Shell模块
Shell
# 打印远程主机名称
ansible all -m shell -a 'echo $HOSTNAME'
# 更改远程口令
ansible all -m shell -a 'echo root|passwd --stdin root123'
Script
用于在其他主机上运行脚本,他会先将脚本推送,再执行:
ansible all -m script -a test.sh
Copy
向其他主机发送文件:
# 向其他主机发送selinux配置,并且备份原有配置文件
# src代表当前主机的文件位置,dest代表拷贝到远程主机的文件位置,backup代表备份
ansible all -m copy -a 'src=/root/ansible/selinux dest=/etc/selinux/config backup=yes'
# 复制指定文件的权限与所属
ansible all -m copy -a 'src=/etc/shadow dest=/data/ mode=000 owner=root'
# 生成f2文件,内容手动指定
ansible all -m copy -a 'content="hell\nworld" dest=/data/a.txt'
Fetch
与copy相反,用于拉取远程主机的文件到本机,只能抓取文件,不可以抓取目录:
# 抓取被控端的日志文件到本机
ansible all -m fetch -a "path=/var/log/messages dest=/data"
# 如果要抓取多个文件,或者路径,需要先打包再抓取
ansible all -m shell -a 'tar Jcf /root/log.tar.xz /var/log/*.log'
ansible all -m fetch -a 'src=/root/log.tar.xz dest=/data/'
File
用于操作文件的模块,包含设置文件相关属性,创建目录文件链接,删除等:
# 创建文件
ansible all -m file -a 'name=/data/f3 state=touch'
# 创建文件夹
ansible all -m file -a 'name=/data/mydir state=directory'
# 删除文件、文件夹
ansible all -m file -a 'name=/data/f3 state=absent'
# 创建软链接
ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link'
Hostname
主机名管理:
# 一改就统一改,永久且立即生效
ansible 192.168.30.101 -m hostname -a 'name=server1'
Cron
计划任务,支持的时间有: minute, hour, day, month, weekday
# 创建时钟同步任务 每五分钟同步一次
ansible all -m cron -a "minute=*5 job='/usr/sbin/update 172.16.0.1 &> /dev/null' name=Synctime"
# 每周一周三周五,每分钟执行FBI Warning
ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall FBI warning" name=Warning'
# 可以通过 crontab -e查看生成的定时任务
# 禁用定时任务(注意,job和name必须写,否则关闭的可能不是一个定时任务)
ansible all -m cron -a 'disable=true job="/usr/bin/wall FBI warning" name=Warning'
# 重新启用定时任务
ansible all -m cron -a 'disable=false job="/usr/bin/wall FBI warning" name=Warning'
# 删除定时任务
ansible all -m cron -a 'job="/usr/bin/wall FBI warning" name=Warning state=absent'
Yum
yum包管理:
# 安装httpd
ansible all -m yum -a 'name=httpd state=present'
# 安装httpd最新版
ansible all -m yum -a 'name=httpd state=lasted'
# 安装多个包
ansible all -m yum -a 'name=httpd,memcached state=lasted'
# 删除httpd
ansible all -m yum -a 'name=httpd state=absent'
# 查看已安装的包
ansible all -m yum -a 'name=httpd list=installed'
Service
管理服务。
# 启动、并开启激动 vsftpd,支持的状态还有 restarted、stopped、reloaded
ansible websrvs -m service -a 'name=vsftpd state=started enable=yes'
User
管理用户。
# 设置nginx服务账号
ansible nginxs -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=80 comment="Nginx Server"'
# 删除账号
ansible nginxs -m user -a 'name=nginx state=absent'
Group
管理组。
# 设置nginx组
ansible ngins -m group -a 'name=nginx system=yes gid=80'
PlayBook
剧本,由yaml编写,制定了ansible的任务。
创建playbook yaml文件:
# 一个playbook包含多个play
- hosts: all
remote_user: root
# 一个play包含多个task,一个task对应一个action
tasks:
- name: show me the name
ansible.builtin.command: hostname
- name: say hello
ansible.builtin.shell:
cmd: echo hello
- name: other
# action 等同于上面的写法
action: shell echo hello2