安装部署软件
yum install -y ansible
vim /etc/ansible/hosts #编写主机清单目录
ansible all -m shell -a "hostname" #测试是否可以管理主机
命令格式:ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) “执行什么动作”
常用模块:
shell模块
参数 | 选项/默认值 | 释义 |
---|---|---|
chdir | 在执行命令前,进入到指定目录中 | |
creates | 判断指定文件是否存在,如果存在,不执行后面的操作 | |
removes | 判断指定文件是否存在,如果存在,执行后面的操作 | |
free_form | 必须要输入一个合理的命令 |
文件模块:
copy模块
参数 | 选项/默认值 | 释义 |
---|---|---|
src | 指定将本地管理主机的什么数据信息进行远程复制 | |
backup | no* yes | 默认数据复制到远程主机,会覆盖原有文件(yes 将源文件进行备份) |
content | 在文件中添加信息 | |
dest(required) | 将数据复制到远程节点的路径信息 | |
group | 文件数据复制到远程主机,设置文件属组用户信息 | |
mode | 文件数据复制到远程主机,设置数据的权限 eg 0644 0755 | |
owner | 文件数据复制到远程主机,设置文件属主用户信息 | |
remote_src | no* yes | 如果设置为yes,表示将远程主机上的数据进行移动操作如果设置为no, 表示将管理主机上的 |
ansible web01 -m copy -a "src=./cuoni.txt dest=/data backup=yes group=www owner=www mode=0777" #复制cuoni文件到 /data目录中,设置属主属组为www,权限设置为777
fetch模块
参数 | 选项/默认值 | 释义 |
---|---|---|
src(required) | 要获取的远程系统上的文件,必须是文件,而不是目录 | |
dest | 用于保存文件的目录 |
ansible web01 -m fetch -a "src=/root/cuoni.txt dest=/root" #拉取远程主机上的文件放入/root文件夹中
安装模块
yum
参数 | 选项/默认值 | 释义 |
---|---|---|
name(required) | 指定软件名称信息 | |
state | absent/removed | 将软件进行卸载(慎用) |
= | present/installed | 将软件进行安装 |
latest | 安装最新的软件 yum update |
ansible web01 -m yum -a "name=httpd-tools state=installed" #安装
ansible web01 -m yum -a "name=httpd-tools state=removed" #卸载
服务模块
service
参数 | 选项/默认值 | 释义 |
---|---|---|
enabled | no yes | 设置服务是否开机自启动 如果参数不指定,原有服务开机自启动状态进行保留 |
name (required) | 设置要启动/停止服务名称 | |
state= | reloaded | 平滑重启 |
= | restarted | 重启 |
= | started | 启动 |
= | stopped |
ansible web01 -m service -a "name=nfs state=started enable=yes" #启动nfs服务,并且设置系统开机自启动
挂载模块
mount
参数 | 选项/默认值 | 释义 |
---|---|---|
fstype | 指定挂载的文件系统类型 | |
opts | 指定挂载的参数信息 | |
path | 定义一个挂载点信息 | |
src | 定义设备文件信息 | |
state | absent | 会进行卸载,也会修改fstab文件信息 |
= | unmounted | 会进行卸载,不会修改fstab文件 |
= | present | 不会挂载,只会修改fstab文件 |
= | mounted | 会进行挂载,会修改fstab文件 |
在进行挂载的时候,使用state=mounted
在进行卸载的时候,使用state=absent
ansible web01 -m mount -a "src=172.16.1.31:/data/ path=/mnt fstype=nfs state=present" #以上信息只是在/etc/fstab文件中添加了配置信息,不会真正进行挂载(mount -a)
ansible web01 -m mount -a "src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted" #以上信息是在/etc/fstab文件中添加了配置信息,并且也会真正进行挂载
定时任务
cron
参数 | 选项/默认值 | 释义 |
---|---|---|
minute/hour/day/month/weekday | 和设置时间信息相关参数 | |
job | 和设置定时任务相关参数 | |
name(required) | 设置定时任务注释信息 | |
state | absent | 删除指定定时任务 |
disabled | yes | 将指定定时任务进行注释 |
= | no | 取消注释 |
ansible web01 -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' " #每五分钟同步一次时间
ansible web01 -m cron -a "name='ntpdate time' state=absent" #删除定时任务
ansible web01 -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes" #注释定时任务
用户模块
group
参数 | 选项/默认值 | 释义 |
---|---|---|
gid | 指创建的组ID信息 | |
name | 指创建组名称信息 | |
state | absent | 删除指定的用户组 |
= | present | 创建指定的用户组 |
ansible web01 -m group -a "name=tong gid=1055" #创建一个指定的用户组tong gid=1055
ansible web01 -m group -a "tongn gid=1055 state=absent" #删除一个指定的用户组
user
参数 | 选项/默认值 | 释义 |
---|---|---|
password | 请输入密码信息 | |
name | 指定用户名信息 | |
uid | 指定用户uid信息 | |
group | 指定用户主要属于哪个组 | |
groups | 指定用户属于哪个附加组信息 | |
shell | /bin/bash或/sbin/nologin | 指定是否能够登录 |
create_home | yes/no | 是否创建家目录信息 |
home | 指定家目录创建在什么路径 默认/home |
备注:password设置密码时不能使用明文方式,只能使用密文方式
可以给用户设置密码 还可以给用户修改密码
基本用法:
扩展用法:
1) 指定用户uid信息
ansible 172.16.1.31 -m user -a "name=oldboy02 uid=6666"
2) 指定用户组信息
ansible 172.16.1.31 -m user -a "name=oldboy03 group=oldboy02"
ansible 172.16.1.31 -m user -a "name=oldboy04 groups=oldboy02"
3) 批量创建虚拟用户
ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
4) 给指定用户创建密码
PS: 利用ansible程序user模块设置用户密码信息,需要将密码明文信息转换为密文信息进行设置
生成密文密码信息方法:
方法一:
ansible all -i localhost, -m debug -a "msg={{ '密码信息123456' | password_hash('sha512', 'oldboy') }}"
[root@m01 tmp]# ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy') }}"
localhost | SUCCESS => {
"msg": "$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1"
}