4533 发表于 2015-12-24 09:34:46

ansible基本介绍

问:试想一下,要在N台主机上做相同的配置,一遍又一遍,是不是特别想让这种重复性工作一下搞定?
   本文介绍的ansible就是能减轻这种压力的自动化工具。

一、Ansible简介
Ansible是自动化运维工具的一种,使用Python编写的,通过远程控制其他主机,来达到修改配置、软件部署、修改用户等工作。
控制方式:通过ssh协议控制其他主机实现
特性:
    ①幂等性:不管重复执行多少次,得到的结果都是一样的
    ②期望状态:只要给出想要达到的结果,无需制定具体怎么做

二、Ansible组成部分
·Host inventory:主机列表,用来定义被控制的远程主机。
·Modules:模块,ansible用来向各主机上定义执行操作的。
·Ad Hoc Commands:命令,ansible用来配合modules,完成具体指令的,类似于"参数"的概念。
·Playbooks:剧本,通过YAML语言进行编写的,可批量完成多次任务的组合。
   tasks:任务,调用 modules 和 commands 来完成指定目的
   handles:触发器,通常在任务最后添加nodify,用来触发该操作的执行,可以理解为需要被触发才能执行的task。
   roles:角色,用来将需要多次调用的执行任务,放在roles下的子目录中,调用时直接添加角色名即可,将各项操作分开,方便管理修改。
   variables:变量,用来保存经常变化的数据参数。

三、Ansible的命令行操作
使用方式:我是直接用YUM安装的,方便快捷
ansible <hosts> -m<Module> -a "Command"

用户列表:
hosts通常是调用/etc/ansbile/hosts这个文件,有指定方式,可单独添加,也可使用组定义,还可使用通配符定义,以下就是通过组定义的示例。当然,你也可以手动直接在写入单个IP也可以。
      ansible_ssh_user=    登录远端主机的用户
      ansible_ssh_pass=    登录远端主机的密码,由于是明文不***全,可以直接和远程主机做ssh密钥认证。
例   # vim/etc/ansilbe/hosts
                  #用来被调用的组名称
            192.168.214.134ansible_ssh_user=xxxansible_ssh_pass=xxx
            192.168.214.135   #用来指定需要远程的用户

Module+ Command:指定整个执行目的。
查询操作:
       ansible-doc -l   #查看各个module
       ansible-doc 模块名#查看模块可使用的命令参数。

这里主要介绍常用的模块:
   copy:将本地文件复制到各个主机上,一般用于配置文件的同步修改。
         src=\'#\'"         #指定本地的源文件或目录
         dest=         #指目标存放路径
   例:ansible hostdb -m copy -a"src=/var/a.txt dest=/tmp/"

    file:对远程的文件或目录进行修改
         dest=         #指定修改的路径,也可使用name,path
         state={ file | directory | link | absent | hard }#指定执行操作
         file:创建文件
         directory:创建目录,这里是递归创建
         link:创建软链接
         hard:创建硬链接
         absent:删除文件或目录,递归删除
   例:ansible hostdb -m file -a"dest=/tmp/xxy/ owner=root group=root mode=620 state=directory"

    yum:控制远程主机进行yum安装
         name=      #指定yum安装的包名
         state={ present | absent }      #指定执行哪种操作{安装|卸载}
   例:ansible hostdb -m yum -a"name=mysql-server state=present"

    service:对服务进行管理操作
          name=      #指定操作的服务名称
          state={ started | stoped | restarted | reloaded} #对服务器的操作,这个不解释
   例:ansible hostdb -m service -a"name=mysql state=restart"

    cron:指定任务计划
          name=      #ansible需要添加的一个crontab名称
          minute=       #设置任务计划的时间,还有hour、day、month、weekday。
          job=         #设置任务计划的具体执行命令
         state={ present | absent }   #指定{添加|删除}
    例:ansible hostdb -m cron -a"name=test minute=*/5 job='ntpdate 192.168.214.131 > /dev/null'state=present"

    command、shell:这两个命令都是在主机上直接执行命令的。但有些命令通过command执行会出错,通过shell可以执行成功。使用command可以省略"-m"
例:ansible hostdb -a "ls /etc/passwd"
         ansible hostdb -m shell -a "yum -y install ntp"

以上就是ansible的命令行操作的常见模块的示例,其实挺简单的,一台主机控制多台主机,不管是配置还是管理都能减去大部分时间,赶快把这个技能点亮吧。


页: [1]
查看完整版本: ansible基本介绍