模块帮助命令: ansible-doc file 模块名称
模块名称查询: ansible-doc -l
功能: 在远程主机执行shell命令,此为默认模块,可忽略 -m选项;
注意: 不支持管道 | , shell模块支持
参数 | 选项 | 含义 |
---|---|---|
chdir | chdir /root | 执行ansible时,切换到指定目录 |
creates | creates /tmp/test.txt | 如果文件存在,则跳过执行 |
removes | removes /tmp/text.txt | 如果文件存在,则执行 |
示例1:chdir, 切换目录执行shell命令;
[root@jenkins-001 ~]# ansible webservers -m command -a 'chdir=/tmp pwd'
192.168.5.28 | CHANGED | rc=0 >>
/tmp
示例2:creates , 如果文件存在,则跳过执行。 如果文件不存在则执行
[root@jenkins-001 ~]# ansible webservers -m command -a 'creates=/tmp/123.txt ifconfig ens32'
192.168.5.28 | SUCCESS | rc=0 >>
skipped, since /tmp/123.txt exists
[root@jenkins-001 ~]# ansible webservers -m command -a 'creates=/tmp/456.txt ifconfig ens32'
192.168.5.28 | CHANGED | rc=0 >>
ens32: flags=4163 mtu 1500
示例3:removes, 如果文件存在,则执行。如果文件不存在则跳过执行
[root@jenkins-001 ~]# ansible webservers -m command -a 'removes=/tmp/123.txt ifconfig ens32'
192.168.5.28 | CHANGED | rc=0 >>
ens32: flags=4163 mtu 1500
[root@jenkins-001 ~]# ansible webservers -m command -a 'removes=/tmp/456.txt ifconfig ens32'
192.168.5.28 | SUCCESS | rc=0 >>
skipped, since /tmp/456.txt does not exist
功能: 软件安装
参数 | 选项 | 含义 |
---|---|---|
name | 安装软件包的名称 | |
state | present absent latest |
安装 删除 最新版 |
enablerepo | 通过哪个仓库获取 | |
disablerepo | 不是用哪些仓库的包 | |
exclude | 排除 ,升级的时候比如不升级kernel |
示例1:安装vftpd软件包
[root@jenkins-001 ~]# ansible webservers -m yum -a 'name=vsftpd state=present'
验证:
[root@web-002 ~]# rpm -qa vsftpd
vsftpd-3.0.2-29.el7_9.x86_64
示例2: 删除vsftpd
[root@jenkins-001 ~]# ansible webservers -m yum -a 'name=vsftpd state=absent'
验证:
[root@web-002 ~]# rpm -qa vsftpd
[root@web-002 ~]#
示例3: 安装httpd 服务,从epel仓库中安装(所有被控端都要有这个epel仓库)
[root@jenkins-001 ~]# ansible webservers -m yum -a 'name=httpd state=present enablerepo=epel'
示例4: 更新所有软件包,kernel* 除外,一般不会更新内核文件,因为系统中有些app可能会依赖内核的一些特性,升级后app可能会失效
[root@jenkins-001 ~]# ansible webservers -m yum -a 'name=* state=present exclude="kernel*"'
功能:把控制端的文件拷贝到被控端
参数 | 选项 | 含义 |
---|---|---|
src | 控制端的原文件路径 | |
dest | 被控端的文件路径 | |
owner | 属主 | |
group | 属组 | |
mode | 权限 | |
backup | 备份 | |
validate | 验证 | |
content |
示例1:更新nfs配置
[root@jenkins-001 ~]# ansible webservers -m copy -a 'src=./exports.j2 owner=root group=root dest=/etc/exports mode=0644 backup=yes'
示例2:往一个文件里写内容
[root@jenkins-001 ~]# ansible webservers -m copy -a 'content="123456" dest=/etc/rsync.pass owner=root group=root mode=0600 backup=yes'
示例3: 验证sudo文件配置是否正确
[root@jenkins-001 ~]# cat test.yml
- hosts: webservers
tasks:
- name: Copy a "sudoers" file on the remote machine for editing
copy:
src: /etc/sudoers
dest: /etc/sudoers.edit
remote_src: yes
validate: /usr/sbin/visudo -csf %s
功能:启动服务
参数 | 选项 | 含义 |
---|---|---|
name | 服务名称 | |
state | started stopped restarted reloaded |
状态 |
enable | yes/no | 开机自启动 |
deamon_reload | yes | 重载整个systemd配置文件 |
示例1: 启动nfs服务,并设置开机自启动
[root@jenkins-001 ~]# ansible webservers -m systemd -a 'name=nfs state=started enabled=yes'
示例2: 关闭nsf服务,并关闭开机自启动
[root@jenkins-001 ~]# ansible webservers -m systemd -a 'name=nfs state=stopped enabled=no'
功能: 创建文件、创建目录、授权
参数 | 选项 | 含义 |
---|---|---|
path | 在被控端创建的路径 | |
owner | 属主 | |
group | 属组 | |
mode | 权限 | |
state | touch directory link hard |
文件 目录 软链接 硬链接 |
recurse | yes | 递归授权 |
示例1:创建一个data目录
[root@jenkins-001 ~]# ansible webservers -m file -a 'path=/data owner=www group=www mode="0755" recurse=yes'
示例2: 在/data 目录下创建一个文件
[root@jenkins-001 ~]# ansible webservers -m file -a 'path=/data/test.txt state=touch owner=www group=www mode="0644"'
功能: 创建组
参数 | 选项 | 含义 |
---|---|---|
name | 指定组名称 | |
gid | 指定gid | |
state | present absent |
创建(默认) 删除 |
示例1:创建组
[root@jenkins-001 ~]# ansible webservers -m group -a 'name=www gid=666 state=present'
功能: 创建、删除用户
选项 | 参数 | 含义 |
---|---|---|
name | 创建用户的名称 | |
uid | 指定uid | |
group | 指定基本组 | |
shell | 登录shell类型默认是/bin/bash | |
create_home | 是否创建家目录 | |
password | 设置密码,需加密后的字符串,否则不生效 | |
groups append |
admins,dev yes |
附加组 追加 |
state remove |
absent yes |
删除 家目录一起删除 |
示例1:创建www用户,指定uid 888, 基本组www
[root@jenkins-001 ~]# ansible webservers -m user -a 'name=www uid=888 group=www shell=/sbin/nologin create_home=no'
示例2: 创建db用户,基本组是root,附加组adm,sys
[root@jenkins-001 ~]# ansible webservers -m user -a 'name=db group=root groups=adm,sys append=yes shell=/bin/bash create_home=yes'
示例3: 创建用户并设置密码
[root@jenkins-001 ~]# cat t1.yml
- hosts: webservers
tasks:
- name: Create New User And Set Password
user:
name: aaa
password: "{{ '123' | password_hash('sha512') }}"
shell: /bin/bash
groups: sys,adm
append: yes
[root@web-002 ~]# id aaa
uid=1002(aaa) gid=1002(aaa) 组=1002(aaa),3(sys),4(adm)
示例4: 创建一个用户并生成密钥
[root@jenkins-001 ~]# ansible webservers -m user -a 'name=dev generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'
功能:挂载文件系统
参数 | 选项 | 含义 |
---|---|---|
src | 源设备路径或者网络地址 | |
path | 挂载至本地路径下 | |
fstype | nfs iso9660 ext4 xfs |
设备类型 |
opts | ro,noauto | 挂载选项 |
state | present absent mounted unmounted |
永久挂载但没有立即生效 卸载 临时+永久卸载 临时挂载 临时卸载 |
示例1: 将192.168.5.1的/data目录挂载到192.168.5.2的/opt目录下
[root@jenkins-001 ~]# ansible 192.168.5.2 -m mount -a 'src=192.168.5.1:/data path=/top fstype=nfs opts=defaulsts state=present'
功能: 定时任务
参数 | 选项 | 含义 |
---|---|---|
name | 描述信息,描述脚本的作用 | |
minute | 分钟 | |
hour | 小时 | |
weekday | 周 | |
user | 执行定时用户,不写则默认执行用户 | |
job | 任务 |
示例1: 每天凌晨3点执行/bin/bash /scripts/backup.sh &> /dev/null
[root@jenkins-001 ~]# ansible webservers -m cron -a 'name="backup data scripts" hour=03 minute=00 job="/bin/bash /scripts/backup.sh &> /dev/null"'
示例2: 删除定时任务
[root@jenkins-001 ~]# ansible webservers -m cron -a 'name="backup data scripts" state=absent'
示例3: 注释定时任务
[root@jenkins-001 ~]# ansible webservers -m cron -a 'name="backup data scripts" disabled=yes