转载

Ansible工作原理(2)

HOW ANSIBLE WORKS

1.有效的体系结构

Ansible作品通过连接节点和推出小程序,称为“Ansible模块”。这些程序都写资源模型系统的所期望的状态。Ansible然后执行这些模块通过SSH(默认情况下),并完成后删除它们。

你的库的模块可以驻留在任何机器上,并且没有服务器守护进程,或数据库。通常你会使用你最喜欢的终端程序,一个文本编辑器,可能版本控制系统来跟踪你的内容的变化。

你的朋友SSH KEYS

支持密码,但SSH keys with key-agent使用Ansible是最好的方法之一。但如果您想要使用Kerberos,不错。很多选择!root不需要登录,您可以登录任何用户,然后su或sudo任何用户。

Ansible“authorized_key”模块是一个伟大的方式使用Ansible控制什么机器可以访问主机。其他选项,如kerberos或身份管理系统,也可以使用。

ssh-agent bash
ssh-add ~/.ssh/id_rsa

管理你的主机在简单的文本文件中

默认情况下,Ansible代表什么机器使用一个非常简单的INI文件管理,管理你所有的机器组自己的选择。

添加新的机器,没有额外的SSL签名服务器的参与,所以没有任何麻烦决定为什么一个特定的机器没能联系起来,由于模糊的NTP或DNS问题。

如果在你的基础设施有一个真理的来源,也可以,用插件,如图库存,组,和来自像EC2,Rackspace,OpenStack变量的信息,或者更多。

下面是一个纯文本文件清单:

[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com

一旦库存列出主机变量可以分配给他们在简单的文本文件(子目录称为“group_vars /”或“host_vars /”或直接在库存文件。

或者,正如前面提到的,使用一个动态库存,库存等数据源EC2,Rackspace,或者OpenStack。

2.基础知识:使用ANSIBLE特设并行任务执行

一旦你有了一个实例,你可以谈论它,没有任何额外的设置:

ansible all -m ping 
ansible foo.example.com -m yum "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"

请注意,我们已经访问原始状态的资源模块以及运行命令。这些模块是非常容易编写和Ansible ships with a fleet of them的大部分工作已经完成。

Ansible包含一个巨大的工具箱构建模块,超过200个。Module:  http://docs.ansible.com/modules_by_category.html

Playbooks:一个简单+强大的自动化语言

Playbooks可以精心编排多个片基础设施拓扑,和非常详细的控制有多少机器来解决。这是Ansible开始变得最有趣的地方。

Ansible编排的方法是一个良好的简单,因为我们相信你的自动化代码应该完美的意义,应该有很少记住关于特殊的语法或特性。

这是一个Playbooks是什么样子的。作为一个提醒,这只是这里的宣传片,跳在docs.ansible.com的完整的文档和所有可能的。

---
- hosts: webservers
serial: 5 # update 5 machines at a time
roles:
- common
- webapp


- hosts: content_servers
roles:
- common
- content

AN EXAMPLE app_config.yml MIGHT LOOK LIKE:

---
- yum: name= state=installed
with_items:
- app_server
- acme_software

- service: name=app_server state=running enabled=yes

- template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf
notify:
- restart app server

The Ansible doc explores this in much greater depth. There’s a LOT more that you can do, including:

Ansible文档探索在更大的深度。还有很多,你可以做的,包括:

  • 机器的负载平衡器和监控窗口
  • 有一个服务器知道所有其他人的IP地址使用事实收集关于这些特定的服务器,使用这些动态构建配置文件
  • 设置一些变量和其他提示,当他们没有设置默认值
  • 使用一个命令的结果决定是否运行另一个

有很多先进的可能性但很容易开始最重要的是,语言仍是可读的、透明的,你从来没有声明明确的订购关系或编程语言编写代码。

EXTEND ANSIBLE: MODULES, PLUGINS and API

Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc). Inventory can also plug in to any datasource by writing a program that speaks to that datasource and returns JSON. There’s also various Python APIs for extending Ansible’s connection types (SSH is not the only transport possible), callbacks (how Ansible logs, etc), and even for adding new server side behaviors.

延长ANSIBLE:模块、插件和API

如果你想写自己的,Ansible模块可以用任何语言编写,可以返回JSON(Ruby、Python、bash等)。库存也可以插入到任何数据源通过编写一个程序,说到数据源并返回JSON。还有各种Python api扩展Ansible的连接类型(SSH可能不是唯一的运输),回调(如何Ansible日志等),甚至添加新的服务器端行为。

翻译原文: http://www.ansible.com/how-ansible-works

正文到此结束
Loading...