《Ansible自动化运维:技术与最佳实践》第三章读书笔记

本文介绍了Ansible的核心组件,包括Inventory、Ad-Hoc命令、playbook、facts和role。Inventory是管理不同业务主机信息的工具,支持静态和动态配置。Ad-Hoc命令用于快速执行任务,如文件复制、服务管理和包管理。Playbook是Ansible配置管理的主要手段,而facts组件用于收集远程主机信息。Role则是组织playbook的一种方式,提供了一种标准的目录结构。此外,还介绍了Ansible Galaxy,一个分享和安装角色的平台。
摘要由CSDN通过智能技术生成

本章主要通过对 Ansible 经常使用的组件进行讲解,使对 Ansible 有一个更全面的了解,主要包含以下内容:

Ansible Inventory
Ansible Ad-Hoc 命令
Ansible playbook
Ansible facts
Ansible role
Ansible Galaxy
1|1Ansible Inventory
Inventory 组件主要存储在配置管理工作中需要管理的不同业务的不同机器的信息。默认 Ansible 的 Inventory 是静态的 INI 格式的文件/etc/ansible/hosts,可以通过 ANSIBLE_HOSTS 环境变量指定或者运行 ansible 和 ansible-playbook 的时候用 -i 参数临时设置。

定义主机和主机组
首先看下默认 Inventory 文件是如何定义主机和主机组的,默认的 Inventory 文件如下:

# - 主机组由[header]元素分隔
# - 您可以输入主机名或IP地址
# - hostname/ip 可以是多个组的成员

# 未组合的主机,在任何主机组之前指定。
## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10

# 属于'webservers'组的主机集合
## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
# 如果有多个主机遵循模式
## www[001:006].example.com

# 'dbservers'组中的数据库服务器集合
## [dbservers]
## 
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57
## db-[99:101]-node.example.com
多个 Inventory 列表
Ansible 支持多个 Inventory 文件,方便管理维护不同业务或环境中的机器。下面介绍如何使用多个 Inventory 文件。

首先新建一个文件夹用来存放 Inventory 文件

mkdir inventory

并在文件夹内新建文件,webservers 和 hosts。

hosts 文件如下:

10.1.90.59
10.1.90.69
webservers 文件如下:

[webservers]
10.1.90.59
10.1.90.69
[ansible:children]
webservers
然后修改 ansible.cfg 文件中的 inventory 的默认路径

inventory = /root/ansible/inventory/

这样就可以使用 ansible 的list-hosts 参数来进行验证

ansible 10.1.90.59:10.1.90.69 --list-hosts

返回:

  hosts (2):
    10.1.90.59
    10.1.90.69
动态 Inventory
动态 Inventory 其实可以通过把 ansible.cfg 文件中的 inventory 默认路径改为一个脚本。

脚本需要支持两个参数

list或者-l ,这个参数显示所有主机以及主机组的信息(json格式)
host或者-H ,参数后面指定一个host,会显示这台主机的所有信息(json格式)
下面是 hosts.py 脚本:

import argparse
import sys
import json
def list():
    r={}
    h=['10.1.90.'+ str(i) for i in (59,69)]
    hosts={'host':h}
    r['webservers']=hosts
    return  json.dumps(r,indent=4)

def hosts(name):
    r={'ansible_ssh_pass':'123'}
    cpis=dict(r.items())
    return json.dumps(cpis)

if __name__=='__main__':
    parser=argparse.ArgumentParser()
    parser.add_argument('-l','--list',help='host list',action='store_true')
    parser.add_argument('-H','--host',help='hosts vars')
    args=vars(parser.parse_args())
    if args['list']:
        print list()
    elif args['host']:
        print hosts(args['host'])
    else:
        parser.print_help()
执行脚本函数 python hosts.py -l,返回如下:

{
    "webservers": {
        "host": [
            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值