shift31/hostbase

此软件包已被废弃,不再维护。未建议替代软件包。

一个高度可扩展的主机和网络数据库,具有全文搜索和RESTful API

0.2.0 2015-02-02 04:59 UTC

This package is not auto-updated.

Last update: 2020-03-02 04:27:50 UTC


README

一个高度可扩展的主机和网络数据库,具有全文搜索和RESTful API

Hostbase目前正在开发中,但相当可用。我创建这个项目是为了帮助我学习Laravel框架,研究REST API开发,并应用企业架构模式。~@bgetsug

概述

Hostbase是一个用于对主机、子网和IP地址进行编目的系统和网络管理工具。它旨在支持任何规模的私有或公共云操作。无论您有几十个还是几千个跨多个环境和数据中心的主机,Hostbase都可以为您提供服务导向架构的基础,以跟踪主机和网络的生命周期。而不是在您的持续集成服务器、部署工具、配置系统或其他CMDB中存储重复的主机信息,Hostbase可以提供单个集中式界面来动态存储和检索此信息。

技术

Hostbase使用Couchbase Server以您选择的任何模式存储数据,因此您不会被锁定在除主机、子网和IP的初级概念以外的任何特定数据模型中。这些对象存储在单个Couchbase bucket中作为JSON文档。使用Couchbase插件为Elasticsearch,数据从Couchbase实时流式传输到Elasticsearch。这允许使用Elasticsearch/Lucene查询字符串语法进行全文搜索。例如,假设您通过角色、环境和数据中心对主机进行“标记”。要检索所有'web_server'角色的主机列表,在'QA'环境中,在'dallas01'数据中心,搜索查询可能非常简单,如下所示:env:qa AND role:web_server AND datacenter:dallas01

除了Couchbase和Elasticsearch之外,Hostbase还需要一个带有PHP 5.5或更高版本的Web服务器。所有搜索和CRUD操作都可通过RESTful网络服务提供。

安装

大致概述(所有内容都在一台机器上)...

  1. 下载并安装Couchbase Server
  2. 在您的Couchbase服务器上
    • 创建(或保留)'default' bucket。这将用于会话/缓存。
    • 创建一个名为'hostbase'的bucket(您可以将其命名为任何您想要的名称,但默认配置支持此命名约定)
  3. 下载并安装Elasticsearch 1.3.0
  4. 在您的Elasticsearch服务器上,创建一个名为'hostbase'的索引,至少包含1个分片...副本是可选的但建议使用。数据始终可以通过从Couchbase再次复制来重新索引。
  5. 安装Couchbase插件为Elasticsearch
  6. 配置Couchbase XDCR以将'hostbase' bucket复制到Elasticsearch集群
  7. 安装PHP 5.5和您选择的Web服务器(已测试Apache)
  8. 安装Couchbase PHP客户端库Couchbase PHP客户端库
  9. 将整个仓库下载/克隆到您选择的目录中,并配置您的Web服务器,以便像其他基于Laravel的项目一样提供服务。有关更多信息,请参阅https://laravel.net.cn/docs/installation。您也可以通过运行composer create-project shift31/hostbase -s dev使用Composer下载它。
  10. 从项目根目录运行:composer install

可选,但推荐,下载CLI (PHAR)

开发服务器(Vagrant)

出于开发或测试目的,使用Vagrant可以节省一些安装时间。您需要1.5GB的空闲RAM。

git clone https://github.com/shift31/hostbase.git
cd hostbase
vagrant up
vagrant ssh
cd /vagrant
composer install

配置

有关基于Laravel的项目配置的背景信息,请参阅https://laravel.net.cn/docs/configuration

  1. 相应地编辑app/config/app.php。
  2. 编辑app/config/database.php,并添加您的Couchbase服务器信息(如果您在单独的主机上运行Couchbase)。
  3. 根据需要编辑app/config/elasticsearch.php。有关详细信息,请参阅https://github.com/shift31/laravel-elasticsearch
  4. 如果您不想使用Couchbase的memcached功能进行会话/缓存,请相应地编辑app/config/session.php和app/config/cache.php。

使用方法

目前还没有Web UI或批量原始数据(JSON、CSV)导入工具。因此,如果您有大量主机,最好的方法是使用PHP客户端库并编写自己的导入器。您可以自由探索下面的导入器以获取示例。

REST API端点

URI 操作 注释
GET主机 HostController@index 列出所有主机
POST主机 HostController@store
GET hosts/{host} HostController@show
PUT hosts/{host} HostController@update
PATCH hosts/{host} HostController@update
DELETE hosts/{host} HostController@destroy
GET子网 SubnetController@index 列出所有子网
POST子网 SubnetController@store
GET subnets/{subnet} SubnetController@show
PUT subnets/{subnet} SubnetController@update
PATCH subnets/{subnet} SubnetController@update
DELETE subnets/{subnet} SubnetController@destroy
GET IP地址 IpAddressController@index 列出所有IP地址
POST ipaddresses IpAddressController@store
GET ipaddresses/{ipaddress} IpAddressController@show
PUT ipaddresses/{ipaddress} IpAddressController@update
PATCH ipaddresses/{ipaddress} IpAddressController@update
DELETE ipaddresses/{ipaddress} IpAddressController@destroy
  • 必须接收JSON (Content-Type: application/json)
    • /hosts
      • 示例

        {
            "fqdn": "hostname.domain.tld",
            "hostname": "hostname",
            "domain": "domain.tld",
            "adminCredentials": {
                "username": "admin_username",
                "password": "admin_password"
            }
        }
      • 必填字段

        • fqdn
        • hostname(如果未指定,则从FQDN自动生成)
        • domain(如果未指定,则从FQDN自动生成)
      • 特殊字段(可选)

        • adminCredentials - 密码在存储到数据库之前将进行加密,并通过API检索时进行解密
    • /subnets
      • 示例

        {
            "network": "10.0.0.0",
            "netmask": "255.255.255.0",
            "gateway": "10.0.0.254",
            "cidr": "24"
        }
      • 必填字段

        • network
        • netmask
        • gateway
        • cidr
    • /ipaddresses
      • 示例

        {
            "subnet": "10.0.0.0/24",
            "ipAddress": "10.0.0.1",
            "host": "hostname.domain.tld"
        }
      • 必填字段

        • subnet
        • ipAddress
  • 搜索,其中'q'参数是elasticsearch/lucene查询字符串
    • /hosts?q=
    • /subnets?q=
    • /ipaddresses?q=
    • 其他参数
      • limit(默认为10,000;设置Elasticsearch结果的'size')
      • showData('1' = true [默认],'0' = false)

cURL 示例

存储一个主机
curl -H 'Content-Type: application/json' http://hostbase.192.168.33.10.xip.io/hosts -d '
{
    "fqdn": "hostname.domain.tld",
    "hostname": "hostname",
    "domain": "domain.tld",
    "adminCredentials": {
        "username": "admin_username",
        "password": "admin_password"
    }
}' | python -m json.tool
显示一个主机

curl http://hostbase.192.168.33.10.xip.io/hosts/hostname.domain.tld | python -m json.tool

更新一个主机(添加一个字段)

curl -X PUT -H 'Content-Type: application/json' http://hostbase.192.168.33.10.xip.io/hosts/hostname.domain.tld -d '{ "foo": "bar" }' | python -m json.tool

更新一个主机(删除一个字段)

curl -X PUT -H 'Content-Type: application/json' http://hostbase.192.168.33.10.xip.io/hosts/hostname.domain.tld -d '{ "foo": null }' | python -m json.tool

删除一个主机

curl -X DELETE http://hostbase.192.168.33.10.xip.io/hosts/hostname.domain.tld | python -m json.tool

命令行界面

CLI 利用 API 客户端库,因此您可以从 PHP 安装的任何位置管理您的 Hostbase 服务器。

https://github.com/shift31/hostbase-cli

导入器

PHP API 客户端库

https://github.com/shift31/hostbase-api-client-php

安全

如果您的主机和网络数据敏感,则必须您提供防火墙、VPN 和相关认证方法来保护您的数据。

基本认证将很快实施,但在此之前,建议(至少)仅在私有网络上运行 Hostbase 服务器/客户端。

待办事项/?

  • 测试
  • 实现使用存储在 Hostbase 和/或 LDAP 中的用户进行 HTTP Basic 认证
  • Ansible Playbook 以帮助自动化安装
  • 集成
    • 脚本以定期从 Puppet Facts 更新 Hostbase...可能使用 Facter 输出,通过 Cron 运行
    • Puppet 函数以允许从 Puppet 清单查询 Hostbase
    • Hiera 后端以允许从 Hiera 查询 Hostbase
  • 命令行工具以帮助初始配置(由 Laravel 的 artisan 命令驱动)
  • API
    • 分页
    • 排序
    • 批量操作
  • ...