Ansible之安装部署及常用模块的使用介绍

  当我们管理多台服务器的时候,通常会有批量执行命令,批量yum安装软件,批量添加计划任务等各种批量的工作,在这个时候使用ansible就是一个不错的选择;ansible是一款非常轻量级的服务器集中管理软件,它默认采用SSH的方式去管理客户端,也就是省略了客户端程序,这比起很多需要安装客户端程序的软件来说很让人喜欢,我们可以用它的各种模块来实现对客户端的批量管理(执行命令/安装软件/指定计划任务等),对于一些较为复杂的需要重复执行的任务我们可以通过ansible一个叫做playbook的来管理这些任务,在playbook中我们可以使用变量.条件,以及模板等,好了更多的功能我会在后面的博文中慢慢发出,今天先来ansible之安装跟常用模块的使用:

环境简介:

系统:Centos-6.5_x86_64
yum源:epel

1. 安装

yum -y install ansible

2. ansible配置文件目录

/etc/ansible/       #这个目录主要是有ansible的配置文件跟客户端的管理配置文件
/usr/share/ansible  #ansible的模块存放目录,里面有ansible各个模块的文件

3. ansible配置文件

/etc/ansible/ansible.cfg(主要参数解析,这里主要有两个需要解释的选项)
  library        = /usr/share/ansible  #指定库文件位置(就是ansible模块文件存放位置)
  remote_tmp     = $HOME/.ansible/tmp  #客户端临时文件的路径(ansible通过ssh通道在远程主机上根据playbook生成对应的临时python代码,然后远程执行这一段临时代码,并在执行完成后删除,我们在执行的时候可以去客户端执行ps命令看到这个过程的)
/etc/ansible/hosts  (主机配置文件)
  文件的配置格式为
  [definename]
  host or hostname
  #在定义主机的时候,主要需要注意的有
  1) 要以主机名定义客户机的时候要保证server端能够正确的解析这个主机名;
  2) 主机定义的时候可以有很多匹配规则,如web-[a-z].host.com,db-[01:30].host.com;

4. ansible的使用(命令)

#命令格式:
ansible <pattern_goes_here> -m <module_name> -a <arguments>
#例如:
ansible all -m copy -a 'src=/etc/my.cnf dest=/etc/'
#几个重要参数的含义:
-i    #指定inventory文件(主机定义文件)
all   #表示在host文件中定义的所有的主机,可以替换成响应的组名或IP地址
#针对于主机可以使用匹配规则(所有的匹配都基于配置文件中的主机)
  IP地址: ansible  192.168.239.132
  IP匹配: ansible  192.168.239.*
  IP匹配: ansible  *
  组匹配: ansible 组名:&hostname     <表示这个组跟其他组的一个主机>
  组匹配: ansible 组名:!hostname     <表示这个组但是出除去这个组的这个主机>
#类似的匹配还很多,几乎能想到的匹配都能支持,具体参照http://docs.ansible.com/intro_patterns.html
-m    #指定使用哪个模块,默认采用command模块
-a    #指定模块的参数,每个模块都有相应的模块参数
-u    #指定远端机器的用户

5. 常用模块介绍

command   <执行linux命令的>
  #ansible all  -m command -a 'ifconfig'
copy     <实现文件复制>
  #ansible all  -m copy -a 'src=/etc/my.cnf dest=/etc/my.cnf owner=mysql group=mysql' owner group 可以根据选择自定义的决定要不要指定
file    <实现目录文件权限的修改/创建与删除>
  #ansible all  -m file -a 'dest=/etc/rsync.d/secrets  mode=600 owner=root group=root'
  #ansible all -m file -a 'dest=/data/install mode=755 owner=root grou=root state=directory' #创建这个不存在的目录
  #ansible all -m file -a 'dest=/data/tmp state=absent'  #删除这个目录
yum     <使用yum进行软件包的管理>
  #ansible all -m yum -a 'name=httpd state=installed'
service   <管理linux系统服务>
  #ansible all -m service -a 'name=httpd state=start'
  #state选项主要有:start,restart,stop
cront      <管理linux计划任务>
  #ansible all -m cron -a 'name="you autoupdate" weekday="2" minute=0 hour=12 user="root" job="/usr/sbin/yum-autoupdate" cron_file=ansible_yum-autoupdate'

6. 常用模块的几个重要参数选项:

yum模块中:
关于yum模块有几个状态参数<即state=>
  latest    #安装最新的一个版本
  installed #安装一个包
  removed   #卸载已经安装的软件包
  present   #安装指定的软件包<需要提供软件包的位置>,如
#yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present
#yum: name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present
关于name参数的选项<即name=>
  *       #匹配所有的已经安装的包
#ansible all -m yum -a 'name=* state=latest'  #表示更新所有的已经安装的rpm包
  @       #表示安装软件包组
#ansible all -m yum -a 'name=@Development Tools state=present'
service模块中:
  #state选项有start,restart,stop
cron,模块中:
  name     #相当于计划任务的注释说明,会在crontab里面以注释行的形式出现
  关于时间的定义
   #minute  #指定分的格式:*(每分)(默认值) */5(每五分) 01(01分) 15(15分)
   #hour    #指定小时的格式: *(每小时)(默认值) */5(没五小时) 01(1点) 15(15点)
   #day     #指定天的格式: *(每天)(默认值) */5(每五天) 01(每个的1日)  (0-31)
   #month   #指定月的格式: *(每月)(默认值) */5(每五个月) 01(一月) (1-12)
   #weekday #指定周的日期: *(每周)(默认值) */2(每两周) 1(周一)(1-7)
  reboot  #这个计划任务是否等下次重启后再生效
  user    #指定哪个用户的计划任务

7. 其实ansible还有很多使用的使用的模块,想知道他们的用法

ansible-doc modulename

8. 几个常用模块的实战案例:

1)通过ping监测下所有的客户端的网络连通性


wKioL1MySzjQY5FYAAGIzl5siG4724.jpg

2) 利用command模块看下所有客户端的时间

wKiom1MyTEXBu849AAGaL0HgfNw701.jpg

3) 使用yum模块为所有的客户端安装最新的htop软件包

wKiom1MyTNyQMiWCAAiIh22N4PM613.jpg

4) 给yanhisan这个用户添加一个计划任务

wKiom1MyT1WjxOPsAAIqJ5FZlfs230.jpg

查看下yanshisan这个用户的计划任务

wKiom1MyT4uQVBIKAAIJDjYjTaQ614.jpg

好了,有了这些我们差不多能用ansible进行一些日常的批量维护了,ansible更多的功能,我会在后期的"续集中补充"!!!!!,ansible使用

你可能感兴趣的:(ansible,ansible模块,ansible安装使用)