项目作者: ivoronin

项目描述 :
Tiny IP Address Registry API Server (IPAM)
高级语言: Python
项目地址: git://github.com/ivoronin/tiara.git
创建时间: 2020-05-02T19:33:28Z
项目社区:https://github.com/ivoronin/tiara

开源协议:

下载


Tiara - Tiny IP Address Registry API Server

Simple and lightweight IPAM server with a clean REST API.
Intended to be used with Terraform and other infrastructure automation tools.

Deployment

A Docker container for Tiara is available from Docker Hub

  1. docker run -d --name tiara \
  2. -e IPAM_USERNAME=ipam \
  3. -e IPAM_PASSWORD=ipam \
  4. -e IPAM_DATABASE_URI=sqlite:////data/ipam.db \
  5. -p 8000:8000 -v /data:/data \
  6. ivoronin/tiara:latest

PostgreSQL and MySQL are supported too. Check SQLAlchemy docs for the connection URI format.

Terraform example

This example uses REST API provider.
Please also see examples/vsphere-tf for complete example of using Tiara together with Terraform in vSphere environment.

  1. provider "restapi" {
  2. uri = "http://127.0.0.1:8000"
  3. username = "ipam"
  4. password = "ipam"
  5. write_returns_object = true
  6. create_returns_object = true
  7. }
  8. # Create network resource
  9. resource "restapi_object" "ipam_network" {
  10. path = "/network"
  11. data = jsonencode({
  12. "address" = "10.0.1.0/25"
  13. })
  14. }
  15. # Create range resource
  16. resource "restapi_object" "ipam_range" {
  17. path = "/network/${restapi_object.ipam_network.id}/range"
  18. data = jsonencode({
  19. "start" = "10.0.1.40",
  20. "stop" = "10.0.1.50",
  21. })
  22. }
  23. # Obtain next available IP address
  24. resource "restapi_object" "ipam_address" {
  25. path = "/network/${restapi_object.ipam_network.id}/range/${restapi_object.ipam_range.id}/address"
  26. data = jsonencode({
  27. "name" = "example"
  28. })
  29. }
  30. # Obtained value is accessible as ${restapi_object.ipam_address.api_data.address}

REST API Reference

  • When sending a POST or PUT request, all parameters should be passed in the request body as JSON
  • Server returns the object created on all write operations (POST, PUT)
  • Basic HTTP authentication is being used
  • Server prohibits creation of overlapping networks and ranges
  • Various other integrity checks are implemented

Network

Schema

  1. {
  2. "id": "integer",
  3. "address": "string"
  4. }

Methods

  • List all networks: GET /network
  • Create network: POST /network, required parameters: address (‘10.0.0.0/8’)
  • Read network: GET /network/<network_id>
  • Update network: PUT /network/<network_id>, required parameters: address (‘10.0.0.0/8’)
  • Delete network: DELETE /network/<network_id>

Range

Schema

  1. {
  2. "id": "integer",
  3. "start": "string",
  4. "stop": "string",
  5. "network_id": "integer"
  6. }

Methods

  • List all ranges: GET /network/<network_id>/range
  • Create range: POST /network/<network_id>/range, required parameters: start (‘10.0.0.10’), stop (‘10.0.0.99’)
  • Read range: GET /network/<network_id>/range
  • Update network: PUT /network/<network_id>/range/<range_id>, required parameters: start (‘10.0.0.10’), stop (‘10.0.0.99’)
  • Delete network: DELETE /network/<network_id>/range

Address

Schema

  1. {
  2. "id": "integer",
  3. "address": "string",
  4. "name": "string",
  5. "range_id": "integer"
  6. }

Methods

  • List all addresses: GET /network/<network_id>/range/<range_id>/address
  • Create (request next available) address: POST /network/<network_id>/range/<range_id>/address, required parameters: name (string)
  • Read address: GET /network/<network_id>/range/<range_id>/address/<address_id>
  • Update address: PUT /network/<network_id>/range/<range_id>/address/<address_id>, required parameters: name (string)
  • Delete address: DELETE /network/<network_id>/range/<range_id>/address/<address_id>