Ansible 安装与简单使用

一、安装

$ pip install ansible

#for debian

$ sudo apt-add-repository ppa:rquillo/ansible

$ sudo apt-get update

$ sudo apt-get install ansible

#for centos

$ sudo yum install ansible

二、环境说明

1. 控制主机为本机

2. 被控端为局域网192.168.1.5

3. 通过ssh 密钥认证

三、使用

#内建的 ping 模块

ansible all -m ping

#执行命令

ansible all -a "/bin/echo hello, world"

#以上两条命令结果是一样的,因为默认调用 command  模块,所以可以省略, all 表示所有节点, -a 后面是参数

ansible all -m command -a "/bin/echo hello, world"

# shell 模块

ansible all -m shell -a "ping baidu.com -c 3"

########################################################

http://www.kisops.com/?p=23

Ansible和目前市面上一些其它的项目管理工具有很大的不同,它的设计初衷就是为了更方便、快捷的进行配置管理。它易于安装和使用、语法也非常简单易学。你可以用Ansible将平常复杂的配置工作变得简单,变得更加标准化更容易控制。

Ansible只需要在一台普通的服务器上运行即可,不需要在被管控的服务器上安装客户端。因为它是基于SSH的,Linux服务器离不开SSH,所以Ansible不需要为配置工作添加额外的支持。 你可以通过命令行来使用Ansible,运行Ansible的服务器这里俗称“管理节点”;通过Ansible进行管理的服务器俗称“受控节点”。

管理节点依赖的东西比较少,列表如下:

  1. Python 2.6 或更高版本
  2. Paramiko(Python的SSH模块)
  3. PyYAML(Python的YAML解析器)
  4. Jinja2(Python的模板引擎)

受控节点如果是Python 2.4 或 Python 2.5 ,则需额外安装 Simplejson 模块。到Python的2.6或以上版本,就则内置了 Simplejson模块,不需要额外安装任何其它依赖。值得欣慰的是,目前主流的服务器上内置的Python版本绝多数都是 Python 2.6 以上版本。

第一章节包括如下内容

  1. 安装Ansible
  2. 配置Ansible
  3. 使用Ansible的命令行
  4. 怎样获得帮助

安装方法

通常大家都喜欢用各个系统自带的包管理工具去安装和维护软件包。但这样,你并不一定能获取到最新或最可靠的Ansible版本。所以,建议你使用pip来安装和管理Ansible。

Pip是专门用来管理Python模块的工具,Ansible会将每次正式发布都更新到pip仓库中。所以通过pip安装或更新Ansible,会比较稳妥的拿到最新稳定版。

如果你已经基于Ansible开发大量模块,你最好一直使用对应版本。此时不建议你升级到最新版本,以免由于不兼容等问题导致模块功能异常。

使用软件仓库安装Ansible

主要的Linux发行版都有自己的软件包管理系统,能帮你自动解决软件包的依赖关系。比如:

  • Fedora、RHEL、CentOS以及兼容的发行版:$ sudo yum -y install ansible
  • Ubuntu、Debian,以及兼容发行版:$ apt-get install ansible

使用pip安装Ansible

前面已经介绍使用pip来安装Ansible。需要注意的是,如果使用pip安装Ansible。升级操作系统时,并不会同时升级Ansible。另外,升级操作系统有可能损坏Ansible环境,毕竟它依赖Python。Pip的安装指令为:

$ pip install ansible

使用源码安装Ansible

最时尚的玩法是使用源码安装了。你会拿到最新版,但并非稳定版。所以,使用源码安装时要留意Bug,积极关注社区和版本更新。请从Github上获取最新代码,安装过程如下:

$ git clone git://github.com/ansible/ansible.git
$ cd ansible && sudo make install

Ansible设置

通常我们用Ansible拉取需要管理的“受控节点”的服务器列表,后续我们会介绍很多相关的方法。

默认情况下Ansible会读取 /etc/ansible 文件里的主机列表,内容为ini格式的。每个中括号里代表一个分组,其下的机器列表都归属于这个分组,直到出现下一个中括号为止。通常我们按组来执行任务,同一组受控服务器应用相同的配置。一台服务器也可以归属到多个组,以完成多个功能角色的配置。低耦合、模块化,非常灵活! 我们来举个例子:将3台受控服务器划到WebServers组,机器名分别是Site01、Site02和Site01-dr。另外还有1个Production组包含了Site01、Site02、Db01和Bastion。那么对应的配置文件
/etc/ansible 如下:

[WebServers]
Site01
Site02
Site01-dr

[Production]
Site01
Site02
Db01
Bastion

配置好主机列表之后,就可以开始执行批量任务了。Ansible自带了ping模块,可以测试“管理节点”和和“受控节点”之间的网络联通情况。

Linux服务器均使用SSH进行远程管理,SSH服务是服务器必备组件。Ansible在设计上简化使用成本,在“管理节点”上使用SSH连接“受控节点”。通过创建SSH连接来发送指使并执行,达到配置管理的目的。这样避免了不同版本的操作系统、甚至不同发行版的操作系统下使用Agent带来的兼容性问题。

首先,我们来赶紧体验一下Ansible的强大魅力。使用Ansible来测试“受控节点”的网络联通情况:

$ ansible Site01 -u root -k -m ping

回车后会提示你输入root密码,然后会打印如下结果:

Site01 | success >> {
“changed”: false,
“ping”: “pong”
}

如果你使用密钥方式登录SSH,去掉 -k 参数即可。可以为Ansible设置一个特定的用户,所有操作均以此用户来执行。甚至可以为每个“受控节点”设置各自不同的用户。

全局用户的设置见配置文件 /etc/ansible/ansible.cfg ,修改 [defaults] 段落里的 remote_user 的值即可。也可以通过修改 remote_port 来定义Ansible去使用非标准的22/SSH 端口来进行连接和管理。在没有给“受控节点”或“受控组”进行特定设置时,Ansible将默认使用全局设置。

可以通过设置 ansible_ssh_user 来用指定用户在“受控节点”上执行任务,还可以通过设置 ansible_ssh_host 来指定不同的主机或域名,SSH对应的端口也可以通过 ansible_ssh_port 来修改,同时你还能使用特定的密钥登录。以下示例中,我们在Site01上指定 root 用户运行,而在Site02上指定 nobody 用户运行;同时对上述提到的配置也进行了示范:

[WebServers]
Site01  ansible_ssh_user=root
Site02  ansible_ssh_user=nobody
Site01-dr   ansible_ssh_host=site01-dr.cm

[Production]
Site01  ansible_ssh_port=7722
Site02
Db01    ansible_ssh_private_key_file=/key/.ssh.id_rsa
Bastion ansible_ssh_user=www

可能有些场景下,执行配置管理需要用到 root 权限。但由于安全原因,可能会限制 root 使用SSH登录。比如:Ubuntu系统默认就不能使用 root 直接SSH登录系统。Ansible设计时也考虑到此类场景,这种情况下我们只需要告诉Ansible使用sudo的方式执行那些需要 root 权限的配置任务。前提条件是执行Ansible任务的用户需要有 sudo 的权限。

要设定Ansible使用sudo,执行Ansible的任务的用户必须要有sudo权限。可以通过修改 /etc/sudoers 文件或 visudo 命令来完成,或者直接使用现在符合条件的用户。参数 –sudo 即告诉Ansible使用sudo来运行任务,如果sudo需要密码,则需要添加 -k 参数,或者在配置文件 /etc/ansible/ansible.cfg 中添加 ask_sudo_pass 的属性。

开始使用Ansible

Ansible使用键值方式接受参数,即传统的KV方式(key=value)。每次执行任务后,将以JSON格式返回结果。它可以解析复杂的参数,或者用playbooks方式(第2章会讲解)。Ansible返回会明确指明运行是否成功、是否有变动以及失败时的错信息。

通常都用 playbooks 的方式来执行Ansible任务,少数情况下使用命令行模式运行。过去,我们用Ansible的ping模块来检查“受控节点”是否正常受控。而实际上,ping模块仅仅执行了Ansible最核心的功能并检查了网络联通性,并未做其它实际性动作。

进而产生了 setup 模块,它不仅可以反馈“受控节点”的可用性,还会收集一些系统信息以供其它模块使用。Setup 模块定义了一系列的采集指令,比如:内核版本、机器名、IP地址等等,并将这些信息保存在内置变量,其它模块再执行任务时可以直接引用或用于判断条件。

准备好 hosts 信息后,我们来开始第1次尝试Ansible命令行吧:

$ansible MachineName -u root -k -m setup

以上指令就是通过Ansible向服务器 MachineName以root身份执行setup模块。如上所述,它能收集系统的基础信息,如下表:

字段名 参考值 含义
ansible_architecture    x86_64  受控节点系统框架
ansible_distribution    CentOS  受控节点的操作系统发行版
ansible_distribution_version    6.3 受控节点发行版本的版本号
ansible_domain  kisops.org  受控节点的主域名
ansible_fqdn    site01.kisops.org   受控节点的完整机器名
ansible_interfaces  [“lo”,”eth0”]   列出受控节点所有的网卡
ansible_kernel  2.6.32-431.5.1.el6.x86_64   受控节点的内核版本号
ansible_memtotal_mb 30099   受控节点总内存大小(兆)
ansible_processor_count 24  受控节点的CPU核心
ansible_virualization_role  guest   受控节点的身份:host为宿主机,guest为虚拟机
ansible_virtualization_type kvm 受控节点的虚拟化类型

Ansible的setup模块是用Python获取的。如果受控节点安装有facter或ohai模块,也能通过facter或ohai模块来取值。对应结果将是以 facter_ 或 ohai_ 开头的。

Ansible还有一个基础模块叫file,顾名思义是与文件相关的。它可以用于查看文件的属性、修改文件属性、查询文件是否被修改等等。以下为修改/etc/fstab的示例:

$ ansible MachineName -u root -k -m file -a ‘path=/etc/fstab’

结果如下:

MachineName | success >> {
“changed”: false,
“group”: “root”,
“mode”: “0644”,
“owner”: “root”,
“path”: “/etc/fstab”,
“size”: 779,
“state”: “file”
}

再来看一个示例,在 /tmp 目录下以nobody用户的身份创建一个 ksops 的文件夹:

$ ansible MachineName -u root -k -m file -a ‘path=/tmp/ksops state=directory mode=0755 owner=nobody’

返回结果如下:

achineName | sucess >> {
changed”: true,
group”: “root”,
mode”: “0755”,
owner”: “nobody”,
path”: “/tmp/ksops”,
size”: 4096,
state”: “directory”

如果目录不存在或属性和预设的不一致,Changed的值就为True。如果相同(比如重复执行指令),Changed的值将变为False。

Ansible有很多模块的用法与file模块类似,比如copy模块。Copy模块的作用就是从“控制节点”上拷贝文件到“受控节点”上。比如将“控制节点”的 fstab 文件拷贝“受控节点”的 /tmp/fstab 下,对应的指令为:

$ ansible MachineName -m copy -a ‘src=fstab  dest=/tmp/fstab mode=644 owner=root’

如果是头一次运行,返回值可能是类似:

MachineName | success >> {
“changed”: true,
“dest”: “/tmp/fstab”,
“group”: “root”,
“md5sum”: “866563b712d204d82876d1153d06c1f1”,
“mode”: “0644”,
“owner”: “root”,
“size”: 831,
“src”: “/home/ksops/tmp/ansible-task-tmp/source”,
“state”: “file”
}

Ansible有一个非常有用的模块是 command,相信很多人都需要它!Command模块就是“远程执行命令”,用它指执行Shell任务就是分分钟的事情了。而且脚本运行过程中还能使用setup模块定义的变量,是不是超爽?! 相比Ansible的内置模块而言,Command模块无法通过返回值来判断命令是否执行成功。但Ansible添加了creates 和 removes 的属性,以此检查命令是否成功执行或者是否应该被执行。如果你定义了
creates 属性,当文件已存在时,它不会再执行。相反如果定义了 removes 属性,则只有文件存在的情况下命令才会被执行。比如:

$ ansible MachineName -m command -a ‘rm -rfv /tmp/testfile removes=/tmp/testfile’

如果“受控节点”上 /tmp/testfile 并不存在,Ansible则提示跳过,输出如下: MachineName | skipped

否则,如果文件存在,则返回成功:

ansibletest | success | rc=0 >>

实际上,基础的文件操作还是推荐使用Ansible的file模块。因为file模块能获取更多信息,执行状态等信息。同样file模块能创建或删除文件,比如以上用 command 模块执行的文件删除操作,用 file 模块的实现方式如下:

$ ansible MachineName -m file -a ‘path=/tmp/testfile state=absent’

针对需要使用到Shell命令的一些特性的场景,Ansible内置了 shell 模块。它可以处理重定向、管道输出、后台任务等功能,同时和 command 模块一样,它也支持 creates 属性。但是, shell 模块不支持 removes 属性。示例如下:

$ ansible MachineName -m shell -a ‘/opt/kingsoft/bin/monitor.sh > /data/log/ops/ksm.log creates=/data/log/ops/ksm.log’

获取模块帮忙 Ansible的模块非常多,大家有需要可以去官网按需查看。与Ansible帮助文档相关的就是 ansible-doc 命令了,比如,列出所有模块和简要描述:

$ ansible-doc -l

如果要看指定模块的帮忙信息,以 file 模块为例:

$ ansible-doc file

很简单也很方便。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 07:26:02

Ansible 安装与简单使用的相关文章

ansible安装及简单配置

一.安装Ansible 安装epel扩展源 rpm -ivh epel-release-7-5.noarch.rpm 安装ansible yum -y install ansible 安装sshpass curl -O -L  tar -zxvf sshpass-1.05.tar.gz  cd sshpass-1.058 ./configure make && make install 配置shh互信,远程操作无需输入密码  ssh-keygen  ssh-copy-id -i ~/.ss

ansible安装和简单使用

一.安装 1.安装第三方epel源 centos 5的epel rpm -ivh http://mirrors.sohu.com/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm centos 6的epel rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm 由于是6版本所以安装6的epel 2.安装ansible yum install

第1天:Ansible安装部署

Ansible介绍 Ansible是一个简单的自动化引擎,可完成配置管理.应用部署.服务编排以及各种IT需求.它是一款使用Python语言开发实现的开源软件,其依赖Jinjia2.paramiko和PyYAML这几个python库. Ansible安装部署简单,只需要再主控端部署Ansible环境,被控端无须做任何操作,基于SSH进行配置管理.Ansible作为自动化系统运维的一大利器,在构建整个体系过程中有这举足轻重的地位.其简单易用.易于安装.功能强大.便于分享.内含大量模板等都是它的魅力所

ansible安装应用及playbook剧本的定义

在配置集群时,每个节点上有很多相同的配置,如启动服务相同.安装程序.提供相同的配置文件,甚至定制相同的任务计划来定期执行某些操作等.如果你管理的只是三两个节点配置起来还是相当简单的,但是有三五十台,甚至上百台你还要自已一个一个手动来配置,那就太痛苦了.因些我们就需要能实现批量管理的一套组件,ansible就是实现这样管理的工具. ansible以它强大功能和简单上手的应用,在2012年获OSS(Open Source Software,开源软件 开放源代码软件)一项大奖,评为前十名,评为最有用的

ansible 安装与基本功能的使用

实验环境: centos6.6  IP 192.168.38.152 (安装ansible) centos6.6  IP 192.168.38.155(hostname: web155.com,实验用的客户机) 安装方法: 利用yum 安装ansible,要求系统的python要是2.6以上 1.1  开始安装: 1.1.1 需要在152的机器安装一下epel外部源,可以使用阿里云的源: 更新源的方法: 1. 首先卸载以前装的epel 以免影响   rpm -e epel-release 2. 

ansible安装及使用

一.ansible介绍 1.ansible ansible是新出现的自动化运维工具,基于Python研发.糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能.仅需在管理工作站上安装ansible程序配置被管控主机的IP信息,被管控的主机无客户端.ansible应用程序存在于epel(第三方社区)源,依赖于很多python组件.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操

初探ansible安装

一.ansible介绍常用的自动化运维工具 Puppet —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱SaltStack —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YMAL,使得配置 脚本更简单 Ansible —基于 Pythonparamiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2 模板语言,更强的远程命令执行操作 其他 DevOps 请参看:https://g

ansible安装方法

一 需要安装些什么 Ansible默认通过 SSH 协议管理机器. 安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库.只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的机器.在远程被管理的机器上,不需要安装运行任何软件,因此升级Ansible版本不会有太多问题. 二 ansible版本选择 因为Ansible可以很简单的从源码运行,且不必在远程被管理机器上安装任何软件,很多Ansible用户会跟进使用开发版本. Ansible一般每两个月出一个发

ansible原理及简单应用

一.基础介绍 1.简介 ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括. (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory: