4个版本 (2个破坏性)

0.3.0 2024年1月26日
0.2.2 2024年1月25日
0.2.1 2024年1月19日
0.2.0 2024年1月19日
0.1.0 2024年1月11日

#62 in 文本编辑器

Download history 2/week @ 2024-07-01

每月51次下载

Apache-2.0

135KB
3.5K SLoC

子网花园

描述

子网花园是一种基于源代码控制的网络基础设施管理方法,类似于IPAM,无需设置专门的IPAM服务器。数据库是一个可读性强的文本文件,可以用任何文本编辑器编辑,并存储在git仓库中。

特性

  • 可读性文本文件
  • 基于Git的版本控制
  • 自动子网分配

如何使用

安装

使用cargo

cargo install subg

这将将在~/.cargo/bin中安装subg二进制文件。确保此目录在您的PATH环境变量中。

初始化

子网花园将其数据存储在一个池文件中。此文件是一个对源代码控制友好的文本文件,可以用任何文本编辑器编辑,并容易放置在版本控制下。每个池文件负责管理单个父子网下的子网。

例如,要创建一个新池文件,用于管理10.10.0.0/16子网,运行

subg init 10.10.0.0/16

这将创建当前目录中名为subnet-garden-pool.yaml的新池文件。

您还可以管理IPv6子网。例如,要管理fc00::/112子网,运行

subg init fc00::/112

您可以使用--pool-path选项指定池文件的别名

subg init --pool-path institute-network.yaml 10.10.0.0/16

您还可以设置SUBG_POOL_PATH环境变量以指定池文件。这在每次运行命令时不必指定--pool-path选项时非常有用

# Using an environment variable
export SUBG_POOL_PATH=institute-network.yaml
subg init 10.10.0.0/16

也可以将池文件存储为JSON而不是YAML

export SUBG_POOL_PATH=subnet-garden-pool.json
subg init 10.10.0.0/16

管理子网

一旦初始化了池文件,就可以开始分配、释放,并查看管理子网的信息。

子网分配

当需要分配新的子网时,可以通过请求一个覆盖所需主机位数的子网来这样做。

分配匿名子网

例如,要分配一个可以容纳8位主机(256个主机)的子网,运行

subg allocate 8

这将从池中分配一个8位子网。子网的位置由池中的可用空间决定。

分配命名子网

子网可以被分配名称。一旦分配,该名称可以在其他命令中引用。例如,要分配一个带有名称的子网,运行

subg allocate 8 tardigrade-lab

这将创建一个名为 tardigrade-lab 的8位子网。

分配一组子网

在许多情况下,需要分配一组子网,例如在多个数据中心和可用区构建系统时。例如,在两个可用区和两个区域中各分配2个8位子网,运行

subg allocate 8 tardigrade-project-{}-{}-{} us-east-1,eu-central-1 a,b %0..2

这将总共分配8个子网

tardigrade-project-us-east-1-a-0
tardigrade-project-us-east-1-a-1
tardigrade-project-us-east-1-b-0
tardigrade-project-us-east-1-b-1
tardigrade-project-eu-central-1-a-0
tardigrade-project-eu-central-1-a-1
tardigrade-project-eu-central-1-b-0
tardigrade-project-eu-central-1-b-1

声明特定CIDR

在某些情况下,您可能想要分配具有特定地址的子网。例如,当将子网池应用于现有网络时。要声明特定子网,运行

subg claim 10.10.110.0/24

查看已分配的子网

要查看已分配的子网,运行

subg cidrs

要查看命名子网的列表,使用

subg names

子网命名

可以添加、更改或删除子网的名称。示例

为未命名的子网添加名称

subg rename 10.10.0.0/24 rotifer-lab

更改子网的名称

subg rename rotifer-lab other-microbe-lab

要删除子网的名称,省略名称

subg rename other-microbe-lab

释放子网

可以通过名称或CIDR来释放子网。例如,要释放之前声明的子网,运行

subg free 10.10.110.0/24

子网名称模板

在描述一组子网时,名称参数成为用于描述每个新子网名称的模板。模板之后的参数以所有组合生成。这些值被替换到模板中的每个 {} 占位符中。

列表参数

列表参数指定为值逗号分隔列表。例如,要为每个可用区 ab 生成子网列表,运行

subg allocate 8 tardigrade-experiment-az-{} a,b

这将创建两个网络,tardigrade-experiment-az-atardigrade-experiment-az-b

范围参数

范围参数用于指定数字范围。例如,要生成6个子网列表,运行

subg allocate 8 rotifer-experiment-{} %0..6

请注意,范围不包括最后一个数字。这将创建6个子网

rotifer-experiment-0
rotifer-experiment-1
rotifer-experiment-2
rotifer-experiment-3
rotifer-experiment-4
rotifer-experiment-5

子网花园池格式

子网花园池文件存储为YAML或JSON文件。以下是一个YAML池文件的示例

cidr: 10.10.0.0/16
subnets:
- cidr: 10.10.0.0/24
- cidr: 10.10.1.0/24
  name: tardigrade-lab
- cidr: 10.10.110.0/24

依赖关系

~4–5MB
~104K SLoC