shift31/hostbase
一个高度可扩展的主机和网络数据库,具有全文搜索和RESTful API
Requires
- php: >=5.5
- barryvdh/laravel-ide-helper: 1.*
- doctrine/inflector: 1.*
- laravel/framework: 4.2.*
- league/fractal: @stable
- shift31/laravel-elasticsearch: 1.3.*@dev
- symfony/yaml: ~2.6
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网络服务提供。
安装
大致概述(所有内容都在一台机器上)...
- 下载并安装Couchbase Server
- 在您的Couchbase服务器上
- 创建(或保留)'default' bucket。这将用于会话/缓存。
- 创建一个名为'hostbase'的bucket(您可以将其命名为任何您想要的名称,但默认配置支持此命名约定)
- 下载并安装Elasticsearch 1.3.0。
- 在您的Elasticsearch服务器上,创建一个名为'hostbase'的索引,至少包含1个分片...副本是可选的但建议使用。数据始终可以通过从Couchbase再次复制来重新索引。
- 安装Couchbase插件为Elasticsearch
- 配置Couchbase XDCR以将'hostbase' bucket复制到Elasticsearch集群
- 安装PHP 5.5和您选择的Web服务器(已测试Apache)
- 安装Couchbase PHP客户端库Couchbase PHP客户端库
- 将整个仓库下载/克隆到您选择的目录中,并配置您的Web服务器,以便像其他基于Laravel的项目一样提供服务。有关更多信息,请参阅https://laravel.net.cn/docs/installation。您也可以通过运行
composer create-project shift31/hostbase -s dev
使用Composer下载它。 - 从项目根目录运行:
composer install
开发服务器(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。
- 相应地编辑app/config/app.php。
- 编辑app/config/database.php,并添加您的Couchbase服务器信息(如果您在单独的主机上运行Couchbase)。
- 根据需要编辑app/config/elasticsearch.php。有关详细信息,请参阅https://github.com/shift31/laravel-elasticsearch。
- 如果您不想使用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
-
- /hosts
- 搜索,其中'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
导入器
- PuppetDB: https://github.com/shift31/hostbase-importer-puppetdb
- SoftLayer: https://github.com/shift31/hostbase-importer-softlayer
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
- 分页
- 排序
- 批量操作
- ...