4个版本 (2个重大变更)
0.3.0 | 2024年1月26日 |
---|---|
0.2.2 | 2024年1月25日 |
0.2.1 | 2024年1月19日 |
0.2.0 |
|
0.1.0 | 2024年1月11日 |
#527 in 网络编程
用于 subg
58KB
1.5K SLoC
子网花园
描述
子网花园是一种基于源代码管理的网络基础设施管理方法,类似于IPAM,无需设置专门的IPAM服务器。数据库是一个可由任何文本编辑器编辑的文本文件,并存储在git仓库中。
特性
- 可读文本文件
- 基于Git的版本控制
- 自动子网分配
如何使用
安装
使用cargo
cargo install subg
这将把 subg
二进制文件安装到 ~/.cargo/bin
。请确保此目录已包含在您的 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
子网名称模板
在描述一组子网时,名称参数变为用于描述每个新子网名称的模板。模板后面的参数将在每种组合中生成。值将替换模板中的每个 {}
占位符。
列表参数
列表参数指定为逗号分隔的值列表。例如,要为每个可用区域 a
和 b
生成子网列表,请运行
subg allocate 8 tardigrade-experiment-az-{} a,b
这将创建两个网络,tardigrade-experiment-az-a
和 tardigrade-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
依赖关系
~1–1.7MB
~40K SLoC