问:试想一下,要在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
[hostdb] #用来被调用的组名称
192.168.214.134 ansible_ssh_user=xxx ansible_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的命令行操作的常见模块的示例,其实挺简单的,一台主机控制多台主机,不管是配置还是管理都能减去大部分时间,赶快把这个技能点亮吧。