ansible 自动化运维工具
一.ansible简介
ansible是自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。ansible只是提供一种框架,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块.
二.ansible的特点:
1.部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作,轻量级,没有agent,更新时,只需在操作机上进行一次更新即可;
2.默认使用SSH协议对设备进行管理
3.有大量常规运维操作模块,可实现日常绝大部分操作
4.配置简单、功能强大、扩展性强
5.支持API及自定义模块,可通过Python轻松扩展
6.通过Playbooks(剧本)来定制强大的配置、状态管理
7.提供一个功能强大、操作性强的Web管理界面和REST API接口
三.ansible的架构:
ansible的架构五个组成部分:
1)ansible:核心
2)modules:包括 Ansible 自带的核心模块(core modules)及自定义模块(custom modules)
3)Plugins :完成模块功能的补充,包括连接插件、邮件插件等
4)Playbooks : 剧本;定义 Ansible 多任务配置文件,由Ansible 自动执行
5)host Inventory : 定义 Ansible 管理主机的清单
四.ansible工作流程:
ansible工作流程简单流程:
1)加载默认的配置文件,默认/etc/ansible/ansible.cfg
2)查找对应的主机配置文件,找到要执行的主机或者组
3)加载自己对应的模块文件,如command
4) 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器端
5)对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件
6)给文件+x执行,执行并返回结果
7)删除临时py文件,sleep 0退出
五.安装ansible
1.需要下载epel源才能安装ansible.
yum install epel-release -y
2.yum install ansible -y
版本介绍3.主要配置文件和命令:
/etc/ansible/ansible.cfg #主配置文件,配置ansible工作特性
/etc/ansible/hosts #主机清单
/etc/ansible/roles/ #存放角色的目录
/usr/bin/ansible #主程序,临时命令执行工具
/usr/bin/ansible-doc #查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy #下载/上传代码或Roles模块的官网平台
/usr/bin/ansible-playbook #定制自动化任务,编排剧本工具
/usr/bin/ansible-pull #远程执行命令的工具
/usr/bin/ansible-vault #文件加密工具
/usr/bin/ansible-console #基于Console界面与用户交互的执行工具
3.1.ansible默认配置文件:
[defaults] 默认配置
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#module_utils = /usr/share/my_module_utils/ #模块存放目录
#remote_tmp = ~/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时命令执行目录
#forks = 5 #默认并发数
#poll_interval = 15 #时间间隔
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行ansible命令是否询问sudo用户密码
#ask_pass = True #每次执行ansible命令是否询问ssh密码
#transport = smart #传输方式
#remote_port = 22 #远程端口号
#module_lang = C
#module_set_locale = False
host_key_checking = False #检查对应服务器的host_key,建议取消注释.
log_path=/var/log/ansible.log #记录日志及位置,默认不记录 建议取消注释
4.免秘钥登录被管理的服务器:
操作步骤:ssh免秘钥登录
如果出现ssh链接较慢的现象,这里则需要修改sshd服务的两个参数来解决该问题:
UseDNS no
GSSAPIAuthentication no
5.ansible主要参数详解
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
-v :打印详细模式
-i PATH :指定host文件路径
-f NUM:指定fork开启同步进程的个数,默认是5
-m NAME:指定module模块,默认为command模块
-a MODULE_ARGS:module模块的参数或者命令
-k:输入远程被管理端root的密码,
-sudo:基于sudo执行
-K:提示输入sudo密码与sudo一起使用
-u USERNAME:执行执行用户
-C:测试执行过程,不改变真实内容,相当于预演
-T TIMEOUT:执行命令超时事件,默认为10s
--version:查看Ansible软件的版本信息
ansible-doc -l --------->查看模块列表
ansible-doc -s 模块名称 --------->查看相关模块参数
6.测试连接被控制服务器:
ansible -m ping ip地址
测试连接被控制服务器7.主机清单中增加被控端主机,需要注意的是,主机清单也支持分组模式,这里将三台主机分为web_ceshi组
主机清单中增加被控端主机在/etc/ansible/host中存在三类主机:未分组的主机,有组的主机(一组属于"webservers"组的主机)和数据库有关("dbservers"组中的数据库服务器集合)
六.模块的使用
1.ping模块的使用:
测试分组服务器进行存活性检测:
分组服务器进行存活性检测2.command模块:
选项:
1)chdir # 在执行命令之前,先切换到该目录
改变目录2)creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
存在不创建文件removes # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
不存在不执行3.shell模块: -a 的参数就是shell命令
shell模块4.copy模块
报错:Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!
解决方法(被控制端操作):
yum install libselinux-python -y
关闭selinux
1)指定文件复制
文件复制2)指定内容复制:
指定文件复制5.file模块
1)创建目录:
-a 'path=目录位置 state=directory group=属组 ower=属主 mode=权限'
2)创建链接:
-a 'path=链接文件位置 src=源文件位置 state=link '
-a ' src=源文件位置 dest=链接文件位置 state=hard ' ------>硬链接
3)删除文件:
-a 'path=文件位置 state=absent'
6.fetch
1)拉取远程主机文件到本地:
拉取文件7.cron计划任务模块:
参数:
1)action:
cron backup= #如果设置,创建一个crontab备份 【yes|no】
cron_file= #如果指定, 使用这个文件cron.d,而不是单个用户
2)crontab
day= #日应该运行的工作(1-31, *, */2, )
hour= # 小时 (0-23, *, */2, )
minute= #分钟(0-59, *, */2, )
month= #月(1-12, *, /2, )
weekday # 周 ( 0-6forSunday-Saturday,, )
job= #指明运行的命令是什么
name= #定时任务描述
reboot # 任务在重启时运行,不建议使用,建议使用special_time
special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务
user #以哪个用户的身份执行
实例:
ansible web-ceshi -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F' state=absent"
ansible web-ceshi -m cron -a 'name="list df every hour" special_time=hourly job="/bin/df -lh >> /app/disk_total &> /dev/null"
ansible web-ceshi -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F' "
8.yum模块:
实例1:ansible web-ceshi -m yum -a "name=/app/zabbix-release-3.4-2.el7.noarch.rpm state=present disable_gpg_check=yes"
参数:
name:#所安装的包的名称
state= #present安装, latest安装最新的, absent 卸载软件。
disable_gpg_check #是否禁止GPG checking,只用于`present‘ or `latest’。
9.user模块,group模块:
1)user模块是请求的是useradd, userdel, usermod三个指令。
常用参数
参数名选项说明
home 指定用户的家目录,需要与create home配合使
groups 指定用户的属组
uid 指定用的uid
password 指定用户的密码
name 指定用户名
createhome 是否创建家目录 yes|no
system 是否为系统用户
remove 当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r
state 是创建还是删除
shell 指定用户的shell环境
指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。不同的发行版默认使用的加密方式可能会有区别,具体可以查看/etc/login.defs文件确认,centos 6.5版本使用的是SHA512加密算法
eg:创建用户along01,uid=1111,组为along,家目录在/app/along01 下
ansible web-ceshi -m user -a 'name=along01 comment="along01 is along" uid=1111 group=along shell=/bin/bash home=/app/along01'
ansible web-ceshi -m shell -a "cat /etc/passwd |grep along01" 查看
ansible web-ceshi -m user -a "name=along01 state=absent" 删除用户
ansible web-ceshi -m group -a 'name=along state=present'
10.远端执行脚本:
ansible -m script web-ceshi -a '脚本名称'
11.setup模块
查询全部信息1)ansible all -m setup --tree /tmp/facts
将所有主机的信息输入到监控端的/tmp/facts目录下,每台主机的信息输入到主机名文件中
2)查看部分详细信息:
过滤信息13. get_url模块
目的:将http://192.168.1.115/favicon.ico文件下载到指定节点的/tmp目录下
命令:ansible web-ceshi -m get_url -a 'url=http://192.168.1.115/favicon.ico dest=/tmp'
要想更好更简便的使用,请多参考官网的帮助文档http://docs.ansible.com/ansible/latest/intro_adhoc.html 或者使用ansible-hoc 模块名查看!!!!!