Ansible基本使用及常用模块详解

一、ansible基本使用

定义主机组
定义被管理节点列表的文件/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管理其他节点

格式:ansible [options]
常用选项:

	-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
  1. 在所有主机上执行
[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
  1. 在指定的主机上执行命令
[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"

我在学习过程中常用的模块差不多就这几个,以后学习工作中遇到再补充。

------做运维之前很矫情的小年轻-----

你可能感兴趣的:(Ansible)