Ansible的插件、清单与动态库存管理
立即解锁
发布时间: 2025-08-24 00:22:10 阅读量: 1 订阅数: 2 


Ansible for DevOps:服务器和配置管理的最佳实践
### Ansible的插件、清单与动态库存管理
#### 1. Ansible集合概述
Ansible集合使得Ansible内容(插件、模块和角色)的分发更加容易,同时也有助于更均衡地进行Ansible自身的维护。你可能有时会使用单纯的角色,有时会使用集合(包含或不包含角色)。无论哪种情况,Ansible都能轻松地整合和共享自定义的Ansible功能。
#### 2. Ansible清单基础
##### 2.1 基本清单文件示例
对于最简单的需求,一个基本的`hosts.ini`清单文件就足以向Ansible描述如何连接你想要管理的服务器。例如:
```ini
# Inventory file hosts.ini
# Groups are defined using square brackets (e.g. [groupname]).
# Each server in the group is defined on its own line.
[myapp]
www.myapp.com
```
如果你想在这个清单中的所有`myapp`服务器上运行Ansible剧本,可以这样设置剧本:
```yaml
---
- hosts: myapp
tasks:
[...]
```
如果你想对清单中的所有`myapp`服务器运行临时命令,可以运行如下命令:
```bash
# Use ansible to check memory usage on all the myapp servers.
$ ansible -i hosts.ini myapp -a "free -m"
```
##### 2.2 实际应用中的清单文件
对于大多数实际应用,通常需要更多的服务器,并且针对不同的应用需求(数据库、缓存、应用程序、队列等)使用不同的服务器。以下是一个用于监控服务器正常运行时间的小型Web应用的实际清单文件示例:
```ini
# Individual Server Check.in servers.
[servercheck-web]
www1.servercheck.in
www2.servercheck.in
[servercheck-web:vars]
ansible_user=servercheck_svc
[servercheck-db]
db1.servercheck.in
[servercheck-log]
log.servercheck.in
[servercheck-backup]
backup.servercheck.in
[servercheck-nodejs]
atl1.servercheck.in
atl2.servercheck.in
nyc1.servercheck.in
nyc2.servercheck.in
nyc3.servercheck.in
ned1.servercheck.in
ned2.servercheck.in
[servercheck-nodejs:vars]
ansible_user=servercheck_svc
foo=bar
# Server Check.in distribution-based groups.
[centos:children]
servercheck-web
servercheck-db
servercheck-nodejs
servercheck-backup
[ubuntu:children]
servercheck-log
```
这个清单文件描述了一个简单明了的架构,通过将服务器分组,可以方便地对特定组的服务器运行剧本或命令。例如,当发现`Shellshock`漏洞时,要更新所有`CentOS`服务器,只需运行以下命令:
```bash
$ ansible centos -m yum -a "name=bash state=latest"
```
##### 2.3 顶级剧本示例
以下是一个用于完全配置所有服务器的顶级剧本示例:
```yaml
---
# Set up basic, standardized components across all servers.
- hosts: all
become: yes
roles:
- security
- logging
- firewall
# Configure web application servers.
- hosts: servercheck-web
roles:
- nginx
- php
- servercheck-web
# Configure database servers.
- hosts: servercheck-db
roles:
- pgsql
- db-tuning
# Configure logging server.
- hosts: servercheck-log
roles:
- java
- elasticsearch
- logstash
- kibana
# Configure backup server.
- hosts: servercheck-backup
roles:
- backup
# Configure Node.js application servers.
- hosts: servercheck-nodejs
roles:
- servercheck-node
```
#### 3. 非生产环境的清单文件管理
对于生产环境,使用上述剧本和基本清单文件很好。但当你想为开发或用户认证环境配置一个类似但独立的基础设施时,最好使用单独的清单文件。建议在与Ansible剧本相同的版本控制仓库中,为每个环境包含一个清单文件,例如在`inventories`目录下:
```plaintext
servercheck/
inventories/
inventory-prod
inventory-cert
inventory-dev
playbook.yml
```
当运行`playbook.yml`来配置开发环境时,可以传入开发清单的路径:
```bash
$ ansible-playbook playbook.yml -i inventories/inventory-dev
```
#### 4. 清单变量
##### 4.1 静态清单文件中的变量定义
对于极其简单的用例,通常是当你需要定义一两个与连接相关的变量(如`ansible_user`或`ansible_ssh_port`)时,可以直接在清单文件中放置变量。例如:
```ini
[www]
# You can define host-specific variables inline with the host.
www1.example.com ansible_user=johndoe
www2.exa
```
0
0
复制全文
相关推荐










