ansible简介
什么是ansible
ansible是2013年推出的一款IT自动化和DevOps软件,2015年被RedHat收购。是基于Python研发,糅合很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能
ansible可以实现:
-自动化部署APP
-自动化管理配置项
-自动化持续交付
-自动化(AWS)云服务管理
为什么选择ansible
选择一款配置管理软件,无外乎从以下几点来权衡利弊
-活跃度(社区)
-学习成本
-使用成本
-编码语言
-性能
-使用是否广泛
ansible优点
-只需要SSH和Python即可使用
-无客户端
-ansible功能强大,模块丰富
-上手容易,门槛底
-基于Python开发,做二次开发更容易
-使用的公司比较多,社区活跃
ansible特性
模块化设计,调用特定的模块完成特定任务
基于Python语言实现
-paramiko
-PyYAML(半结构化语言)
-Jinja2
其模块支持JSON等标准输出格式,可以采用任何编程语言重写
- 部署简单
- 主从模式工作
- 支持自定义模块
- 支持playbook
- 易于使用
- 支持多层部署
- 支持异构IT环境
工作流程
ansible安装
软件依赖关系
对管理主机
-要求Python 2.6或 Python 2.7
ansible使用以下模块,都需要安装
-paramiko
-PyYAML
-Jinja2
-httplib2
-six
对被托管主机
-ansible默认通过SSH协议管理机器
-被管理主机要开启ssh服务,允许ansible主机登录
-在托管节点上也需要安装Python2.5或以上的版本
-如果托管节点上开启了SElinux,需要安装libselinux-python
公共变量
子组定义
app:children下写的组名
动态主机
无限可能
-ansible Inventory包含静态和动态的Inventory,静态Inventory指在文件/etc/ansible/hosts中指定的主机和组,动态Inventory指通过外部脚本获取主机列表,安装其要求格式返回给ansilbe命令
Json
-JSON(JaveScript Object Notation JavaScript对象表示法),一种基于独立于语言的轻量级数据交换格式
模块
ansible-doc
-模块的手册相当于shell的man,很重要
-ansible-doc -l 列出所有模块
-ansible-doc 模块名 #查看模块帮助
ping模块
-测试网络连通性,ping模块没有参数
command模块
-默认模块,远程执行命令
注意:
-command不能有以下字符 "<",">","|","&"
-command模块不能解析系统变量
-该模块不启动shell直接在ssh进程中执行,所有用到shell命令执行都会失败
shell模块
-基本用法和command一样,区别是通过/bin/sh、进行执行命令,可以执行任何命令
-不能执行交互式命令,例如vim top等
案例
变量解析
-ansible执行命令是二次解析
-第一次在本机解析,第二次在执行机器解析
-需要第二次解析的变量要转义(\)
文件在哪里
-文件在用户目录
-ansible是使用ssh多次连接执行
-连接退出以后之前的状态就全部失效了
-解决办法:使用chdir代替cd命令
案例
script模块
在本地写脚本,然后使用script模块批量执行
注意:该脚本包含但不限于shell脚本,只要指定Sha-bang解释器的脚本都可运行
案例
yum模块
使用yum包管理器来管理软件包
name:要进行操作的软件包名字
state:动作(installed,removed)
service模块
name:必须选,服务名称
enabled:是否开机启动 yes|no
sleep:执行restarted,会在stop和start之间沉睡几秒
state:对当前服务执行启动,停止,重启加载等操作
copy模块
-复制文件到远程主机
-src:复制本地文件到远程主机,绝对路径和相对路径都可以,路径为目录时会递归复制。若路径以“/”结尾,只复制目录里的内容,若不以"/"结尾,则复制包含目录在内的整个内容,类似于rsync
-dest:必须选。远程主机的绝对路径,如果源文件是一个目录,那该路径必须是目录
-复制的文件一般是配置文件,大小在1M左右的文件,大小过大拷贝速度慢
-backup:覆盖前先备份源文件,备份文件包含实践信息。有两个选项:yes|no
-force:若目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,设为no,则只有当目标主机的目标位置不存在改文件时,才复制。默认为yes
案例
lineinfile模块
-类似sed的一种行编辑替换模块
-path 目标文件
-regexp 正则表达式,要修改的行
-line 最终修改的结果
replace模块
-类似sed的一种行编辑替换模块
-path 目标文件
-regexp 正则表达式,要修改的行
-replace 最终修改的结果
lineinfile与replace的区别
lineinfile替换匹配到的一整行
replace替换匹配到的部分
案例
setup模块
setup模块
-主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数
-filter过滤所需信息