定义主机组
定义被管理节点列表的文件/etc/ansible/hosts
,在定义被管理节点的时候,可以单独基于主机做定义,也可以将多个主机定义成一个主机组。
在上篇博文安装部署ansible时候已经定义了一个主机组webservers
,这里我再单独定义一台主机testser
[root@ser1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.220.5.114
[root@ser1 ~]# vim /etc/ansible/hosts
[testser] <<<添加
10.220.5.114 <<<添加
格式:ansible
常用选项:
-m: 指定模块名称
-a:指定模块具体参数
-s:以sudo的方式运行操作
-i:指定被管理节点的主机列表
-f:一批连接几个主机进行操作(默认是5个)
在管理节点通过ansible在被管理节点执行命令
格式:ansible 目标 -m command -a "命令"
说明:
目标:目标可以是一个主机组,也可以是 /etc/ansible/hosts 文件中的一个或者多个主机,也可以是 all 表示所有
-m command:表示这次ansible操作是基于command模块实现
-a "命令":表示是在被管理及诶单上要执行的命令
例子:
1.在webservers
主机组上执行
[root@ser1 ~]# ansible webservers -m command -a "hostname"
10.220.5.113 | CHANGED | rc=0 >>
ser3
10.220.5.112 | CHANGED | rc=0 >>
ser2
[root@ser1 ~]# ansible all -m command -a "hostname"
10.220.5.112 | CHANGED | rc=0 >>
ser2
10.220.5.113 | CHANGED | rc=0 >>
ser3
10.220.5.114 | CHANGED | rc=0 >>
ser4
[root@ser1 ~]# ansible 10.220.5.114 -m command -a "hostname"
10.220.5.114 | CHANGED | rc=0 >>
ser4
查看ansible所支持的模块信息
[root@ser1 ~]# ansible-doc -l
【默认使用command模块】
查看一个模块的使用帮助
格式:ansible-doc -s 模块名
# 查看command模块的使用帮助
[root@ser1 ~]# ansible-doc -s command
1. command模块
默认模块,在没有-m
指定的情况下默认使用-m command
作用:在各个被管理节点上执行命令,但是不能传递参数和变量。
2. corn模块
作用:在指定的时间运行指定的命令(计划任务)
字命令:
state:present【创建任务】 absent【删除任务】
backup:对远程主机上的原任务计划内容修改之前做备份
job:要执行的任务
name:该任务的描述(必须项)
user:以哪个用户的身份运行
minute:分钟(0-59,*,*/2,……),不写默认为*
hour:小时(0-23,*,*/2,……),不写默认为*
day:日(1-31,*,*/2,……),不写默认为*
month:月(1-12,*,*/2,……),不写默认为*
weekday:周(0-7,*,……),不写默认为*
例子:每个两分钟在/tmp
下的log.txt
中追加一个123
[root@ser1 ~]# ansible webservers -m cron -a 'minute="*/2" hour=* day=* month=* weekday=* job="echo 123 >>/tmp/log.txt" name="job1" state="present"'
# 检查一下
[root@ser1 ~]# ansible webservers -a "crontab -l"
例子:每五分钟所有的从节点来主节点同步一次时间
[root@ser1 ~]# ansible all -m cron -a 'name="sync time from ser1" minute=*/5 job="/usr/sbin/ntpdate ser1"'
3. group模块
作用:在指定节点上创建组
例子:创建一个组组名为cx55887,gid为2018
[root@ser1 ~]# ansible webservers -m group -a 'gid=2018 name=cx55887'
4. user模块
作用:管理用户
可以使用ansible-doc -s user
查看帮助,参数搜通俗易懂。
例子:创建一个用户名为cx55887,并加入到cx55887组中
[root@ser1 ~]# ansible webservers -m user -a 'name=cx55887 group=cx55887 state=present'
5. copy模块
作用:复制文件到远程主机
字命令:
src:原文件路径,可以是绝对路径,也可以是相对路径
dest:目标文件路径
mode:指定权限
backup:有目标文件存在的情况下,先对原文件做备份,然后进行覆盖
force:强制执行覆盖操作
owner:指定复制后的文件中的属主
content:替代src,也就是键一段字符串做为源,直接将这个内容写到目标文件中
directory_mode:递归的设定目录的权限,默认为系统默认权限
注意:src如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/“来结尾,则只复制目录里的内容,如果没有使用”/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
例子:
[root@ser1 ~]# ansible webservers -m copy -a 'src="/etc/passwd" dest=/tmp/passwd1 mode=777 owner=cx55887 backup=yes'
6. service模块
作用:管理服务
字命令:
name:指定服务名称
arguments:给命令行提供一些选项
enabled:指定服务是否开机自启动
state:指定服务最后的状态started stopped reloaded restarted
runlevel:指定运行级别
例子:管理httpd
[root@ser1 ~]# ansible all -a "systemctl status httpd"
[root@ser1 ~]# ansible all -m service -a "name=httpd state=started enabled=on"
[root@ser1 ~]# ansible all -a "ss -tnl"
7. ping模块
作用:测试主机是否在线,主机如果在线,则回复pong
例子:测试主机列表清单中的主机是否在线
[root@ser1 ~]# ansible all -m ping
8. file模块
作用:实现盐城文件的管理操作
字命令:
owner:修改属主
group:修改属组
mode:修改权限
follow:如果复制的文件是一个连接文件,那么复制以后依然是连接文件,而且和原始文件一样,指向相同的文件
path:指定目标路径
recurse:递归的设置文件的属性,只对目录有效--yes表示使用递归设置
state:
touch:创建一个新的空文件
directory:创建一个新的目录,当目录存在时不会进行修改
link:创建软连接,结合src一起使用才有效
hard:创建硬连接
absent:删除文件,目录,软连接
src:当state=link时,要被连接文件的源路径
例子:
# ansible all -m file -a 'state=touch path=/tmp/abc.def'
# ansible all -m file -a 'state=link src=/tmp/abc.def path=/tmp/abc.def.ln'
# ansible all -m file -a 'state=absent path=/tmp/abc.def'
# ansible all -m file -a 'force=on state=absent path=/tmp/'
# ansible all -m file -a 'force=on state=absent path=/tmp'
9. shell模块
作用:用于在各被管理节点运行指定的命令,类似于command,但是可以执行复杂的命令,可以使用变量
10. script模块
作用:讲一个本地脚本传递到远程主机上,并运行
ansible websersers -m script -a '脚本名'
11.yum模块
作用:管理远程主机上的rpm包
字命令:
name:表示要安装软件包的名字
state:表示安装还是卸载
presen:默认的,表示安装
lastest:安装最新版本
absent:表示删除
例子:
# ansible webservers -m yum -a "name=lrzsz state=present"
我在学习过程中常用的模块差不多就这几个,以后学习工作中遇到再补充。
------做运维之前很矫情的小年轻-----