[TOC] 本文简要介绍ansible的一些情况,更为详细的使用指南,会逐步分享。

简介

ansible是一个自动化运维的工具,它可以方便的配置系统,部署软件包,管理机器等等。 ansible可以让你方便的在新搭建的测试环境上配置自己需要的基础软件,在客户现场你可以通过ansible实现一建化安装,作为自己的开发环境,ansible,可以让你专注于开发,开发环境的配置仅需要改动配置文件即可完成,而无需去手工运行各种管理复杂的安装配置命令。 而与其它devops软件相比,ansible显得更为轻量化,无需配置client,由于使用python写成,源码清晰易读,不仅自带一大批的模块,可以方便扩展,也支持第三方语言的扩展。

安装

ansible支持多种形式安装,作为一个软件,它可以通过源码安装,apt,yum,portage,pkg安装,同时,它作为一个python包,支持pip和easy_install形式安装。 ubuntu下安装如下:

$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible

pip 安装如下

$ sudo pip install ansible

清单

清单是ansible中的一个文件列表文件,用于指定管理配置哪些机器。 ansible的清单文件通常位于/etc/ansible/hosts 一个常用的例子如下: > mail.example.com > [webservers] foo.example.com bar.example.com > [dbservers] one.example.com two.example.com three.example.com > ntp_server: acme.example.org

被管理的主机可以通过域名的形式直接指定,如mail服务器,也可以通过分组的方式给出,如webservers和dbservers,别名的方式也是支持的,如ntpserver。

密码有三种方式指定,一是配置无密码登陆,二是通过ansible_ssh_pass在hosts文件中指定,还有一种方式是执行命令时用-k的方式,要求输入密码。

命令行执行

ansible可以通过命令行的方式即时输入命令管理集群,也可以通过playbook 的方式批量化执行(有点儿像python,可以走repl也可以通过py文件执行)

重启

下面的命令可以重启整个存储服务器集群,按10个一组并发执行命令,如果集群里有30台机器,就是分三批执行。 > $ ansible storageserver -a "/sbin/reboot" -f 10

任意命令

可以通过shell模块执行在指定的服务器中执行任意命令,下面的命令会查看所有raleigh机房中机器的终端. > $ ansible raleigh -m shell -a 'echo $TERM'

文件操作

如前文提及,ansible中自带了功能强大的各种模块,对于文件操作,copy模块,file自然可以一展身手。

下面的命令,会把本地的hosts文件拷贝到atlanta机房中的所有机器 $ ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"

下面的命令,会改名所有webserver中指定文件的权限 $ ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"

包管理

yum和apt都被ansible所支持,下面的命令分别会安装acme1.5的版本,安装acme最新版,卸载acme > $ ansible webservers -m yum -a "name=acme-1.5 state=present" $ ansible webservers -m yum -a "name=acme state=latest" $ ansible webservers -m yum -a "name=acme state=absent"

playbook

playbook是ansible中批量执行命令的文件,基于yaml格式,类似于chef中的cookbook。 下面先用一个例子演示一下,更具体的会分几篇文章来描述细节。

--- - hosts: webservers remote_user: root tasks: - name: test connection ping: remote_user: root

其中hosts表示对哪些主机进行操作,remote_user表示用什么用户来进行操作。 下面的tasks则是对任务的定义,name是独一无人的一个任务名(如果有多个同名task,只执行第一个),接着是task的任务,这边是执行ping命令,接下来是定义这个task执行用的身份,比如root。

后面会分章节,详细介绍ansible。