文章目录
系统环境
管理端:外网IP—10.0.0.61 内网IP—172.16.1.61
受控端:外网IP—10.0.0.7 内网IP—172.16.1.7
受控端:外网IP—10.0.0.51 内网IP—172.16.1.51
链接上文:Ansible安装部署
1)command(默认)命令模块
切换至/tmp目录
chdir=/tmp
若文件不存在,则执行命令A
creates=文件 命令A
若文件存在,则执行命令B
removes=文件 命令B
如果172.16.1.7这台主机上存在/etc/hosts文件,则执行操作---远程创建/root/1.txt文件
ansible 172.16.1.7 -m command -a "touch /root/1.txt removes=/etc/hosts"
2)copy 将文件从管理端向被控端分发模块
src=被分发的文件
dest=被拷贝到远程主机的目录位置(必须有)
content=文件内容(与src二选一)
force=yes(同名文件默认覆盖)
backup=yes(如果远程主机有同名文件,要备份)
owner=属主(修改属主信息)
group=属组(修改属组信息)
mode=400(修改文件权限为400)
将本地主机的/etc/ansible/hosts文件传输到172.16.1.51的/tmp目录下,如果有重名文件,则强制覆盖。并修改属主和属组为oldboy,文件权限为777。
ansible 172.16.1.51 -m copy -a "src=/etc/ansible/hosts dest=/tmp force=yes owner=oldboy group=oldboy mode=777"
在远程主机172.16.1.7上创建一个/tmp目录下的名为hi.txt的文件,文件内容”HelloWorld"
ansible 172.16.1.7 -m copy -a "content=HelloWorld dest=/tmp/hi.txt"
如果传输的是一个目录,比如 src=/tmp dest=/etc src后面的/tmp表示将整个目录及其子文件一起传输到远程主机
如果是 src=/tmp/ dest=/etc src后面的/tmp/表示只将目录下的子文件进行传输
3)fetch 将文件从远程主机拉取到本机的模块
命令用法与copy模块相似,注意不要写反即可,此处略。
将IP为172.16.1.7主机上的/root/user.txt文件拉取到本地的目录下,在本地目录下的文件名是172.16.1.7
[root@m01 ansible]# ansible 172.16.1.7 -m fetch -a "src=/tmp/user.txt dest=/root"
172.16.1.7 | CHANGED => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/root/172.16.1.7/tmp/user.txt",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"remote_md5sum": null
}
[root@m01 ansible]# ll /root/
total 4
drwxr-xr-x 3 root root 17 Aug 12 16:26 172.16.1.7
4)file 设置(远程主机的)文件属性的模块
创建目录
dest=新目录 state=directory
创建普通文件
dest=文件名 state=touch
创建文件软链接
src=源文件 dest=软链接文件 state=link
创建文件硬链接
src=源文件 dest=硬链接文件 state=hard
删除文件或目录
dest=文件(目录)名 state=absent
在51(IP简写)主机上,创建一个/oldboy/oldboy.txt普通文件
ansible 172.16.1.51 -m file -a "dest=/oldboy/oldboy.txt state=touch"
在7主机上,创建一个文件oldboy.txt的软链接文件
ansible 172.16.1.7 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_link.txt state=link"
在7主机上,删除目录/oldboy
ansible 172.16.1.7 -m file -a "dest=/oldboy/ state=absent"
5)yum 安装软件的模块
安装软件
name=软件名 state=installed
卸载软件
name=软件名 state=absent
在51主机上,安装glances软件命令
ansible 172.16.1.51 -m yum -a "name=glances state=installed"
6)service 管理软件服务启动、运行、开机自启、关闭的模块
启动并开机自启软件服务
name=服务名 state=started enabled=yes
重启并开机自启软件服务
name=服务名 state=restarted enabled=yes
关机并取消开机自启服务
name=服务名 state=stopped enabled=no
在7主机上,启动nfs服务,并设置开机自启动
ansible 172.16.1.7 -m service -a "name=nfs state=started enabled=yes"
7)cron 编辑定时任务的模块
第几分钟,取值范围0-59
minute=分
第几小时,取值范围0-23
hour=时
每月的第几天,取值范围1-31
day=天
每年的第几月,取值范围1-12
month=月
每个礼拜的第几周,取值范围0-6(0是周日)
weekday=周
name='给该定时任务的注释‘
job='可在Linux命令行中运行的绝对路径格式的命令'
删除由ansible设置好的定时任务(手动crontab -e的无法由此删除)
state=absent
批量注释定时任务
disabled=yes
在51主机上,设置注释为‘time sync’的定时任务,每天凌晨2时自动更新最新同步时间,并取消任何输出信息
ansible 172.16.1.51 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
取消之前设置的有注释的定时任务(必须是通过ansible设置的定时任务才能被同样的办法删除)
ansible 172.16.1.7 -m cron -a "name='time sync' state=absent"
8)mount 挂载的模块
src=要挂载的设备或文件
path=指定的挂载点目录
fstype=指定的文件系统类型
立即挂载,且修改/etc/fstab文件,开机自动挂载
state=mounted
不立即挂载,会修改/etc/fstab文件,开机自动挂载
state=present
立即卸载,且删除/etc/fstab文件中的信息,关闭开机自动挂载功能(永久卸载)
state=absent
立即卸载,不删除/etc/fstab文件中的信息(临时卸载)
state=umounted
9)user 创建、删除用户的模块
创建用户
name=用户名
state=present
删除用户
name=用户名
state=absent
uid=数字(指定用户的UID信息)
group=用户组名
如果创建的是虚拟用户,不创建家目录,禁止用户登录
create_home=no
shell=/sbin/nologin
该参数等价于(useradd mysql -M -s /sbin/nologin)
ansible 172.16.1.51 -m user -a "name=mysql create_home=no shell=/sbin/nologin"
10)shell模块
相较于command模块,它支持管道和重定向
[root@m01 ansible]# ansible web -m shell -a "echo hello world "
172.16.1.7 | CHANGED | rc=0 >>
hello world
[root@m01 ansible]# ansible web -m shell -a "echo hello world > /root/1.txt"
172.16.1.7 | CHANGED | rc=0 >>
ps.
1)双引号–对特殊符号进行解析
单引号–所见即所得,不会对特殊符号进行解析
2)ansible剧本编写规范
--两个空格构成一个缩进关系(禁用tab键)
--冒号后用空格和后续内容隔开
--短横线构成列表信息,且每个短横线后要有空格隔开