Locations of visitors to this page

Tuesday, March 18, 2014

Ansible 简介

草稿

简介

配置管理、应用部署、临时任务等功能的开源软件工具。开发语言Python。协调器配置文件Playbook使用YAML格式。默认使用SSH管理远端服务器,因此不需要额外安装代理。

对比

和puppet,saltstack的简单对比

简单对比
ansiblesaltstackpuppet
历史 始于2012,由Puppet前雇员、Cobbler的作者、Func的联合作者米高迪翰(Michael Dehaan)开发 始于2011,作者是汤玛士S赫奇(Thomas S Hatch)。新型项目,活跃,不稳定,BUG多 始于2005,历史悠久,成熟,稳定
主要功能 Configuration, State Management, Software Installation, Orchestration,Command Execution 配置管理,状态管理,软件安装,协调,远程执行 配置管理。MCollective模块负责Orchestration和远程执行
语言 Python Python Ruby
拓扑结构 CS结构(control machine, managed node)
不需要安装客户端代理
CS结构(master, minion, syndic)
必须安装代理(0.17.0+版本增加了salt-ssh,可以通过SSH通信,无需部署minion)
CS结构()
通信层协议 SSH2 (Python paramiko模块)
1.3之后旧的Fireball模式已不再使用,新增新的加速模式
1.5之后支持SSH pipeline模式
ZeroMQ (PUB/SUB模式)。速度快,有时执行丢机器 REST
安全 通信、认证基于SSH 支持外部认证、授权,如PAM, LDAP。通信不加密?
输出格式 json 格式有raw, text, yaml, json 等
结果数据还可以通过Returner导入其它外部存储,如Redis, MongoDB, MySQL等
配置文件 Playbook剧本(YAML, jinja2模板引擎)
按剧本顺序执行
没有依赖关系?
sls状态文件
默认Renderer是YAML+jinja2模板引擎
执行顺序不以sls中定义的为准。0.17.0增加state_auto_order选项,按照sls中定义的顺序执行
执行任务、顺序受依赖关系影响
pp(DSL)
开发 有API REST API,目前是个独立的项目
客户 EverNote, Rackspace, Fedora, Care.com, ... LinkedIn, Hulu, Rackspace, Mulesoft, Affirm, Comcast, Clemson University, ...

环境要求

管理端(Control Machine):

  • Python 2.6
  • Python模块:python-pip python-simplejson python-paramiko PyYAML python-jinja2 python-httplib2
被管理端(Managed Node):
  • Python 2.4+
  • Python 2.4版本需要安装Python模块:python-simplejson
注意:
  • 不支持Python 3.x
  • Solaris系统默认不带Python,默认不能支持ansible。需要手工安装Python2.4+,并指定Python解释器(设置变量ansible_python_interpreter)
  • RHEL4.x系统自带Python版本是2.3,因此默认也不能支持ansible。操作同Solaris
  • #script模块和#raw模块不需要被管理端安装Python解释器和python-simplejson模块

模块

几种command类型模块之间对比
模块被管理端是否安装Python环境控制端显示格式是否支持SHELL变量、重定向等
command 原始
raw 原始
script json
shell 原始

command模块

执行一条命令,后面跟着以空格分开的参数
不通过SHELL解释器执行命令,所以不支持SHELL变量和重定向符号等,比如$HOME变量,"<"、">"、"|"、和"&"等操作符(如有此需求,请使用#shell模块)
举例:

$ ansible bai -m command -a "hostname"
10.11.12.1 | success | rc=0 >>
sns1.cp.sohu.com

10.11.12.2 | success | rc=0 >>
sns2.cp.sohu.com

...
被管理端必须安装Python解释器和python-simplejson模块

raw模块

raw模式下,不经过其它模块子系统,执行原始的SSH命令
被管理端服务器无需安装任何Python解释器及Python模块
使用raw模式通常有2个目的:1.初始化(Bootstrap)被管理端的Python环境,2.管理一些无法安装Python的特殊设备(如路由器)。其它情况建议使用#script模块或#command模块
举例:

$ ansible bai -m raw -a "hostname"
10.11.12.1 | success | rc=0 >>
sns1.cp.sohu.com


10.11.12.1 | success | rc=0 >>
sns2.cp.sohu.com


...

script模块

将一个本地脚本传输到远程服务器上,执行此脚本,脚本后面可以带一系列参数
和#raw模块一样,被管理端服务器无需安装Python环境
举例:

$ echo 'hostname; echo $1' >/tmp/z
$ ansible bai -m script -a "/tmp/z haha"
10.11.12.1 | success >> {
    "rc": 0,
    "stderr": "",
    "stdout": "sns1.cp.sohu.com\nhaha\n"
}

10.11.12.2 | success >> {
    "rc": 0,
    "stderr": "",
    "stdout": "sns2.cp.sohu.com\nhaha\n"
}

...

shell模块

同#command模块,只不过通过/bin/sh解释器执行命令
举例:

$ ansible bai -m shell -a "echo \$HOME"
10.11.12.1 | success | rc=0 >>
/home/bai

10.11.12.2 | success | rc=0 >>
/home/bai

...

临时任务

临时任务(Ad hoc task)通常是一次性执行、比较简单的命令
剧本通常用于配置管理和发布
不写-m参数,默认以#command模块执行临时命令

剧本

剧本(Playbook)

目录

目录(Inventory)

图形用户界面

Ansible Tower是收费的(10台服务器以下免费),价格参考Ansible Tower Pricing

Website Analytics

Followers