码迷,mamicode.com
首页 > 其他好文 > 详细

ansible学习记录

时间:2014-10-01 00:06:40      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:ansible

ansible相关


基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。


Inventory文件用来定义要管理的主机,默认位置/etc/ansible/hosts


ansible是一个python package,是个完全的unpack and play软件,对客户端唯一的要求是有ssh有python,并且装了python-simplejson包


ansible安装过程

服务端   python2.6    hosts文件配置客户端群组和主机名称

客户端   SSH authorized_keys


必须得生成密钥  

用paramiko生成密钥来进行分发


s = paramiko.SSHClient()

s.load_system_host_keys()#加载本机know_hosts文件

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())  #如果没有加进去

pkey_file=‘/home/test/.ssh/id_rsa‘

key=paramiko.RSAKey.from_private_key_file(pkey_file)

s.connect(host,22,user,pkey=key,timeout=5)

stdin,stdout,stderr=s.exec_command(cmd)#执行命令

stdout.read()

s.close()


hosts文件如何定义


常用ansible命令-playbook

ansible -i /etc/ansible/hosts all -a ‘who‘

ansible -i /etc/ansible/hosts all -m ping

ansible all -m raw -a ‘w‘


该命令选项的作用分别为:

-i:指定 inventory 文件,使用当前目录下的 hosts

all:针对 hosts 定义的所有主机执行,这里也可以指定组名或模式

-m:指定所用的模块,我们使用 Ansible 内置的 ping 模块来检查能否正常管理远端机器

-u:指定远端机器的用户


安装 Ansible


Ansible 能够安装到 Linux、BSD、Mac OS X 等平台,Python 版本最低要求为 2.6。 常用 Linux 发行一般可以通过其自带的包管理器安装 Ansible:


yum install ansible     

apt-get install ansible 

paramiko、PyYAML、jinja2 等 Python 依赖库。


准备 Inventory


Inventory 文件用来定义你要管理的主机。其默认位置在 /etc/ansible/hosts ,如果不保存在默认位置,也可通过 -i 选项指定。


被管理的机器可以通过其 IP 或域名指定。未分组的机器需保留在 hosts 的顶部,分组 可以使用 [] 指定,如:


现在,我们执行以下命令来看看 Ansible 是否能正常工作:


ansible -i hosts all -m ping -u www

该命令选项的作用分别为:


-i:指定 inventory 文件,使用当前目录下的 hosts

all:针对 hosts 定义的所有主机执行,这里也可以指定组名或模式

-m:指定所用的模块,我们使用 Ansible 内置的 ping 模块来检查能否正常管理远端机器

-u:指定远端机器的用户


如果返回如下结果:


linuxtoy.org | success >> {

    "changed": false,

    "ping": "pong"

}

则说明一切正常。


下面我们再看看远端机器的 uptime:


ansible all -a ‘uptime‘

这将输出:


linuxtoy.org | success | rc=0 >>

11:23:16 up 177 days, 21:19,  0 users,  load average: 0.55, 0.45, 0.39

此处我们省略了 -m,Ansible 默认使用 command 模块;-a 指定模块的参数,即执行 uptime 命令。


使用 Ad-Hoc 管理简单任务


执行 Ad-Hoc 就跟我们在 Linux 下执行单行命令差不多,用来快速完成简单的任务十分 方便。比如:如果被管理端的 Python 为 2.4,那么需要 python-simplejson 这个包。我们可以通过以下命令在所有 CentOS 主机上安装它:


ansible all -m raw -a ‘yum -y install python-simplejson‘

花时间看看 Ansible 的模块非常值得,你将明白它能干什么。创建用户及组、安装 软件包、分发配置文件、管理服务等等不一而足。在命令行下,可通过 ansible-doc 查询模块文档,如:


ansible-doc raw

使用 Playbook 管理复杂任务


ad-hoc命令——临时执行命令


对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定。Playbook 是 Ansible 真正强大的地方,它允许使用变量、条件、循环、以及模板,也能通过角色 及包含指令来重用既有内容。我们来看一个简单的例子,该例子在远端机器上创建一个 新的用户:


---

- name: create user

  hosts: vps

  user: root

  gather_facts: false


  vars:

  - user: "toy"


  tasks:

  - name: create {{ user }} on vps

    user: name="{{ user }}"

首先,我们给 Playbook 指定了一个名称;接着,通过 hosts 让该 Playbook 仅作用于 vps 组;user 指定以 root 帐号执行,Ansible 也支持普通用户以 sudo 方式执行;gather_facts 的作用是搜集远端机器的相关信息,稍后可通过变量形式在 Playbook 中使用;vars 定义变量,也可单独放在文件中;tasks 指定要执行的任务。


要执行 Playbook,可以敲入:


ansible-playbook user.yml

执行结果为:


PLAY [create user] ************************************************************


TASK: [create toy on vps] *****************************************************

changed: [linuxtoy.org]


PLAY RECAP ********************************************************************

linuxtoy.org               : ok=1    changed=1    unreachable=0    failed=0


本文出自 “muzinan的技术博客” 博客,请务必保留此出处http://muzinan110.blog.51cto.com/684213/1559799

ansible学习记录

标签:ansible

原文地址:http://muzinan110.blog.51cto.com/684213/1559799

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!