netsplit 0.3.7__tar.gz → 0.3.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ *.egg-info/
2
+ build/
3
+ dist/
4
+ docs/_build
5
+ results.xml
6
+ .envrc
7
+ .coverage
@@ -0,0 +1,19 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.5.0
4
+ hooks:
5
+ - id: check-yaml
6
+ - id: end-of-file-fixer
7
+ - id: trailing-whitespace
8
+ - repo: https://github.com/PyCQA/flake8
9
+ rev: 6.1.0
10
+ hooks:
11
+ - id: flake8
12
+ - repo: local
13
+ hooks:
14
+ - id: pytest
15
+ name: pytest
16
+ entry: "uv run pytest"
17
+ language: system
18
+ pass_filenames: false
19
+ types: [python]
@@ -0,0 +1,57 @@
1
+ ## v0.3.9 (2026-10-31)
2
+
3
+ ### Fix
4
+
5
+ - Update dependencies
6
+
7
+ ## v0.3.8 (2026-09-30)
8
+
9
+ ### Fix
10
+
11
+ - update dependencies
12
+
13
+ ## v0.3.7 (2026-08-21)
14
+
15
+ ### Fix
16
+
17
+ - Poetry update
18
+
19
+ ## v0.3.6 (2025-09-02)
20
+
21
+ ### Fix
22
+
23
+ - Poetry update
24
+
25
+ ## v0.3.5 (2025-01-14)
26
+
27
+ ### Fix
28
+
29
+ - Poetry update
30
+
31
+ ## v0.3.4 (2024-06-25)
32
+
33
+ ### Fix
34
+
35
+ - Poetry updates
36
+
37
+ ## v0.3.3 (2023-12-24)
38
+
39
+ ### Fix
40
+
41
+ - **testing**: testing commitizen
42
+
43
+ ## v0.3.2 (2023-12-24)
44
+
45
+ ### Fix
46
+
47
+ - testing commitizen
48
+
49
+ ## v0.3.1 (2023-12-24)
50
+
51
+ ### Fix
52
+
53
+ - testing commitizen
54
+
55
+ ## v0.3.0 (2023-12-24)
56
+
57
+ ## v0.2.0 (2023-12-23)
@@ -0,0 +1,30 @@
1
+ .PHONY: help ## Print this help
2
+ help:
3
+ @grep -E '^\.PHONY: [a-zA-Z_-]+ .*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = "(: |##)"}; {printf "\033[36m%-30s\033[0m %s\n", $$2, $$3}'
4
+
5
+
6
+ .PHONY: init ## Initialize for development
7
+ init:
8
+ @uv sync
9
+ @uv run prek install
10
+
11
+
12
+ .PHONY: test ## Run tests
13
+ test:
14
+ @uv run pytest
15
+
16
+
17
+ .PHONY: clean ## Cleanup generated files
18
+ clean:
19
+ @rm -rf *.egg-info build dist docs/_build .coverage results.xml
20
+ @find . -type d -name __pycache__ -exec rm -r {} \+
21
+
22
+
23
+ .PHONY: release ## Make release
24
+ release:
25
+ uv run cz bump;
26
+ VERSION=`uv version --short`; \
27
+ git push; \
28
+ git tag -a v$$VERSION -m "Tagged version $$VERSION"; \
29
+ git push --tags; \
30
+ uv build --clear && uv publish --token ${UV_PUBLISH_TOKEN}
@@ -1,21 +1,41 @@
1
+ Metadata-Version: 2.5
2
+ Name: netsplit
3
+ Version: 0.3.9
4
+ Summary: Netsplit can help slice and dice your IP space
5
+ Author-email: Nikos Chasiotis <hasiotis@gmail.com>
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.10
8
+ Requires-Dist: click<9,>=8.0
9
+ Requires-Dist: ipaddress<2,>=1.0.23
10
+ Requires-Dist: rich<16,>=15.0.0
11
+ Requires-Dist: tomli<3,>=2.0.1
12
+ Description-Content-Type: text/markdown
13
+
1
14
  # Netsplit: Slice and dice your IP space
2
15
 
3
16
  [![PyPi version](https://badge.fury.io/py/netsplit.svg)](https://pypi.org/project/netsplit/)
4
17
  [![Build status](https://github.com/hasiotis/netsplit/workflows/Pull%20Request/badge.svg)](https://github.com/hasiotis/netsplit/actions?query=workflow%3A%22Pull+Request%22)
5
- [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/hasiotis/netsplit/blob/master/LICENSE)
18
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/hasiotis/netsplit/blob/main/LICENSE)
6
19
 
20
+ Netsplit plans your IP space. Describe a network and its members in a TOML
21
+ file, and netsplit splits it into subnets and renders the result as a table.
7
22
 
8
23
  ## Installation
9
24
 
10
- Install and update using:
25
+ Requires Python 3.10 or newer. Install and update using:
26
+ ```console
27
+ pipx install netsplit
28
+ pipx upgrade netsplit
11
29
  ```
30
+ or, with pip:
31
+ ```console
12
32
  pip3 install --user --upgrade netsplit
13
33
  ```
14
34
 
15
35
  ## Usage
16
36
 
17
37
  Here is a very simple network plan:
18
- ```
38
+ ```toml
19
39
  [netsplit]
20
40
  description = "Global / Subnet"
21
41
  network = "192.168.0.0/24"
@@ -25,7 +45,7 @@ Here is a very simple network plan:
25
45
  members = ["NetA", "NetB"]
26
46
  ```
27
47
  We can render it with:
28
- ```
48
+ ```console
29
49
  ❯ netsplit plan -p examples/netsplit-simple.toml -r 2
30
50
  ╷ ╷ ╷ ╷
31
51
  # │ Global / Subnet │ Subnet │ idx+ext/slots │ IPs
@@ -37,10 +57,22 @@ We can render it with:
37
57
  1 │ Global / RESERVED │ ..................192.168.0.192/26 │ 4 / 4 │ 64
38
58
  ╵ ╵ ╵ ╵
39
59
  ```
40
- Make sure to check examples for complex network plans:
60
+ Here `-p` selects the plan file and `-r 2` also shows reserved slots down to
61
+ level 2. With `slots = 4` and only two members, the two unused slots are listed
62
+ as `RESERVED`. The `idx+ext/slots` column shows the slot index (plus any
63
+ extension) out of the total number of slots.
64
+
65
+ Run `netsplit plan --help` for all options (`-l` limits the displayed level,
66
+ `-k` filters by keyword).
67
+
68
+ Make sure to check the [examples](examples/) for complex network plans:
69
+
70
+ ![Multicloud Plan](https://raw.githubusercontent.com/hasiotis/netsplit/main/examples/img/netsplit-multicloud.png)
71
+
72
+ ## License
41
73
 
42
- ![Multicloud Plan](/examples/img/netsplit-multicloud.png)
74
+ Apache 2.0, see [LICENSE](LICENSE).
43
75
 
44
- # Similar projects:
76
+ ## Similar projects
45
77
 
46
78
  * [Visual Subnet Calculator](https://github.com/ckabalan/visualsubnetcalc)
@@ -1,41 +1,28 @@
1
- Metadata-Version: 2.4
2
- Name: netsplit
3
- Version: 0.3.7
4
- Summary: Netsplit can help slice and dice your IP space
5
- License-File: LICENSE
6
- Author: Nikos Chasiotis
7
- Author-email: hasiotis@gmail.com
8
- Requires-Python: >=3.10,<4.0
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.10
11
- Classifier: Programming Language :: Python :: 3.11
12
- Classifier: Programming Language :: Python :: 3.12
13
- Classifier: Programming Language :: Python :: 3.13
14
- Classifier: Programming Language :: Python :: 3.14
15
- Requires-Dist: click (>=8.0,<9.0)
16
- Requires-Dist: ipaddress (>=1.0.23,<2.0.0)
17
- Requires-Dist: rich (>=13.7.0,<14.0.0)
18
- Requires-Dist: tomli (>=2.0.1,<3.0.0)
19
- Description-Content-Type: text/markdown
20
-
21
1
  # Netsplit: Slice and dice your IP space
22
2
 
23
3
  [![PyPi version](https://badge.fury.io/py/netsplit.svg)](https://pypi.org/project/netsplit/)
24
4
  [![Build status](https://github.com/hasiotis/netsplit/workflows/Pull%20Request/badge.svg)](https://github.com/hasiotis/netsplit/actions?query=workflow%3A%22Pull+Request%22)
25
- [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/hasiotis/netsplit/blob/master/LICENSE)
5
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/hasiotis/netsplit/blob/main/LICENSE)
26
6
 
7
+ Netsplit plans your IP space. Describe a network and its members in a TOML
8
+ file, and netsplit splits it into subnets and renders the result as a table.
27
9
 
28
10
  ## Installation
29
11
 
30
- Install and update using:
12
+ Requires Python 3.10 or newer. Install and update using:
13
+ ```console
14
+ pipx install netsplit
15
+ pipx upgrade netsplit
31
16
  ```
17
+ or, with pip:
18
+ ```console
32
19
  pip3 install --user --upgrade netsplit
33
20
  ```
34
21
 
35
22
  ## Usage
36
23
 
37
24
  Here is a very simple network plan:
38
- ```
25
+ ```toml
39
26
  [netsplit]
40
27
  description = "Global / Subnet"
41
28
  network = "192.168.0.0/24"
@@ -45,7 +32,7 @@ Here is a very simple network plan:
45
32
  members = ["NetA", "NetB"]
46
33
  ```
47
34
  We can render it with:
48
- ```
35
+ ```console
49
36
  ❯ netsplit plan -p examples/netsplit-simple.toml -r 2
50
37
  ╷ ╷ ╷ ╷
51
38
  # │ Global / Subnet │ Subnet │ idx+ext/slots │ IPs
@@ -57,11 +44,22 @@ We can render it with:
57
44
  1 │ Global / RESERVED │ ..................192.168.0.192/26 │ 4 / 4 │ 64
58
45
  ╵ ╵ ╵ ╵
59
46
  ```
60
- Make sure to check examples for complex network plans:
47
+ Here `-p` selects the plan file and `-r 2` also shows reserved slots down to
48
+ level 2. With `slots = 4` and only two members, the two unused slots are listed
49
+ as `RESERVED`. The `idx+ext/slots` column shows the slot index (plus any
50
+ extension) out of the total number of slots.
61
51
 
62
- ![Multicloud Plan](/examples/img/netsplit-multicloud.png)
52
+ Run `netsplit plan --help` for all options (`-l` limits the displayed level,
53
+ `-k` filters by keyword).
63
54
 
64
- # Similar projects:
55
+ Make sure to check the [examples](examples/) for complex network plans:
65
56
 
66
- * [Visual Subnet Calculator](https://github.com/ckabalan/visualsubnetcalc)
57
+ ![Multicloud Plan](https://raw.githubusercontent.com/hasiotis/netsplit/main/examples/img/netsplit-multicloud.png)
67
58
 
59
+ ## License
60
+
61
+ Apache 2.0, see [LICENSE](LICENSE).
62
+
63
+ ## Similar projects
64
+
65
+ * [Visual Subnet Calculator](https://github.com/ckabalan/visualsubnetcalc)
@@ -0,0 +1,43 @@
1
+ [netsplit]
2
+ description = "Global / Cloud / VPC / Net"
3
+ network = "10.8.0.0/16"
4
+
5
+ [plan]
6
+ options = { slots = 4 }
7
+
8
+ [plan.members]
9
+ [plan.members.cloud01]
10
+ options = { index = 2, slots = 4 }
11
+
12
+ [plan.members.cloud01.members]
13
+ [plan.members.cloud01.members.vpc01]
14
+ options = { extend = 1, slots = 4 }
15
+ members = ["Net1", "Net2", "Net3"]
16
+
17
+ [plan.members.cloud01.members.vpc02]
18
+ options = { slots = 4 }
19
+ members = ["Net1", "Net2", "Net3"]
20
+
21
+ [plan.members.cloud02]
22
+ options = { slots = 4 }
23
+
24
+ [plan.members.cloud02.members]
25
+ [plan.members.cloud02.members.vpc01]
26
+ options = { slots = 4 }
27
+ members = ["Net1", "Net2", "Net3"]
28
+
29
+ [plan.members.cloud02.members.vpc02]
30
+ options = { slots = 4 }
31
+ members = ["Net1", "Net2", "Net3"]
32
+
33
+ [plan.members.cloud03]
34
+ options = { slots = 8 }
35
+
36
+ [plan.members.cloud03.members]
37
+ [plan.members.cloud03.members.vpc01]
38
+ options = { extend = 2, slots = 4 }
39
+ members = ["Net1", "Net2", "Net3"]
40
+
41
+ [plan.members.cloud03.members.vpc02]
42
+ options = { extend = 1, slots = 2 }
43
+ members = ["Net1", "Net2"]
@@ -0,0 +1,59 @@
1
+ [netsplit]
2
+ description = "Root / Cluster"
3
+ network = "192.168.0.0/16"
4
+
5
+ [plan]
6
+ options = { slots = 4 }
7
+
8
+ [plan.members]
9
+ [plan.members.cluster01]
10
+ options = { slots = 16 }
11
+
12
+ [plan.members.cluster01.members]
13
+ [plan.members.cluster01.members.control]
14
+ options = { slots = 1 }
15
+
16
+ [plan.members.cluster01.members.pods]
17
+ options = { extend = 3, slots = 1 }
18
+
19
+ [plan.members.cluster01.members.services]
20
+ options = { extend = 1, slots = 1 }
21
+
22
+ [plan.members.cluster02]
23
+ options = { slots = 16 }
24
+
25
+ [plan.members.cluster02.members]
26
+ [plan.members.cluster02.members.control]
27
+ options = { slots = 1 }
28
+
29
+ [plan.members.cluster02.members.pods]
30
+ options = { extend = 3, slots = 1 }
31
+
32
+ [plan.members.cluster02.members.services]
33
+ options = { extend = 1, slots = 1 }
34
+
35
+ [plan.members.cluster03]
36
+ options = { slots = 16 }
37
+
38
+ [plan.members.cluster03.members]
39
+ [plan.members.cluster03.members.control]
40
+ options = { slots = 1 }
41
+
42
+ [plan.members.cluster03.members.pods]
43
+ options = { extend = 3, slots = 1 }
44
+
45
+ [plan.members.cluster03.members.services]
46
+ options = { extend = 1, slots = 1 }
47
+
48
+ [plan.members.cluster04]
49
+ options = { slots = 16 }
50
+
51
+ [plan.members.cluster04.members]
52
+ [plan.members.cluster04.members.control]
53
+ options = { slots = 1 }
54
+
55
+ [plan.members.cluster04.members.pods]
56
+ options = { extend = 3, slots = 1 }
57
+
58
+ [plan.members.cluster04.members.services]
59
+ options = { extend = 1, slots = 1 }
@@ -0,0 +1,32 @@
1
+ [netsplit]
2
+ description = "Global / Cloud / Environment / Subnet"
3
+ network = "10.0.0.0/8"
4
+
5
+ [plan]
6
+ options = { slots = 8 }
7
+
8
+ [plan.members]
9
+ [plan.members.aws]
10
+ options = { index = 3, extend = 2, slots = 4 }
11
+
12
+ [plan.members.aws.members]
13
+ [plan.members.aws.members.production]
14
+ options = { extend = 1, slots = 8 }
15
+ members = ["Lan1", "Lan2", "Lan3"]
16
+
17
+ [plan.members.aws.members.staging]
18
+ options = { extend = 1, slots = 16 }
19
+ members = ["Lan1", "Lan2", "Lan3"]
20
+
21
+
22
+ [plan.members.gcp]
23
+ options = { slots = 4 }
24
+
25
+ [plan.members.gcp.members]
26
+ [plan.members.gcp.members.production]
27
+ options = { extend = 1, slots = 8 }
28
+ members = ["Lan1", "Lan2", "Lan3", "Lan4"]
29
+
30
+ [plan.members.gcp.members.staging]
31
+ options = { extend = 1, slots = 16 }
32
+ members = ["Lan1", "Lan2", "Lan3", "Lan4"]
@@ -0,0 +1,7 @@
1
+ [netsplit]
2
+ description = "Global / Subnet"
3
+ network = "192.168.0.0/24"
4
+
5
+ [plan]
6
+ options = { slots = 4 }
7
+ members = ["NetA", "NetB"]
@@ -0,0 +1,42 @@
1
+ [project]
2
+ name = "netsplit"
3
+ version = "0.3.9"
4
+ description = "Netsplit can help slice and dice your IP space"
5
+ authors = [{ name = "Nikos Chasiotis", email = "hasiotis@gmail.com" }]
6
+ readme = "README.md"
7
+ requires-python = ">=3.10"
8
+ dependencies = [
9
+ "tomli>=2.0.1,<3",
10
+ "ipaddress>=1.0.23,<2",
11
+ "rich>=15.0.0,<16",
12
+ "click>=8.0,<9",
13
+ ]
14
+
15
+ [project.scripts]
16
+ netsplit = "netsplit.cli:cli"
17
+
18
+ [dependency-groups]
19
+ dev = [
20
+ "pytest>=9.1.1,<10",
21
+ "jsonpickle>=4.1.2,<5",
22
+ "commitizen>=4.2,<5",
23
+ "prek>=0.5.4,<0.6",
24
+ ]
25
+
26
+ [tool.pytest.ini_options]
27
+ addopts = "-ra -q"
28
+
29
+ [tool.commitizen]
30
+ name = "cz_conventional_commits"
31
+ tag_format = "v$version"
32
+ version_scheme = "semver"
33
+ version_provider = "uv"
34
+ update_changelog_on_bump = true
35
+ major_version_zero = true
36
+
37
+ [build-system]
38
+ requires = ["hatchling"]
39
+ build-backend = "hatchling.build"
40
+
41
+ [tool.hatch.build.targets.sdist]
42
+ exclude = [".claude", ".github"]
@@ -0,0 +1,3 @@
1
+ [flake8]
2
+ max-line-length=180
3
+ exclude=.venv,.git,__pycache__
File without changes
@@ -0,0 +1,62 @@
1
+ [
2
+ { "level": 0, "slots": 1, "index": 0, "extend": 0, "name": "MultiCloud", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.0.0.0/8" ] } ] } },
3
+ { "level": 1, "slots": 8, "index": 1, "extend": 0, "name": "MultiCloud / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.0.0.0/11" ] } ] } },
4
+ { "level": 1, "slots": 8, "index": 2, "extend": 0, "name": "MultiCloud / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.32.0.0/11" ] } ] } },
5
+ { "level": 1, "slots": 8, "index": 3, "extend": 1, "name": "MultiCloud / aws", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.64.0.0/10" ] } ] } },
6
+ { "level": 2, "slots": 4, "index": 1, "extend": 1, "name": "MultiCloud / aws / production", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.64.0.0/11" ] } ] } },
7
+ { "level": 3, "slots": 8, "index": 1, "extend": 0, "name": "MultiCloud / aws / production / Lan1", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.64.0.0/14" ] } ] } },
8
+ { "level": 3, "slots": 8, "index": 2, "extend": 0, "name": "MultiCloud / aws / production / Lan2", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.68.0.0/14" ] } ] } },
9
+ { "level": 3, "slots": 8, "index": 3, "extend": 0, "name": "MultiCloud / aws / production / Lan3", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.72.0.0/14" ] } ] } },
10
+ { "level": 3, "slots": 8, "index": 4, "extend": 0, "name": "MultiCloud / aws / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.76.0.0/14" ] } ] } },
11
+ { "level": 3, "slots": 8, "index": 5, "extend": 0, "name": "MultiCloud / aws / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.80.0.0/14" ] } ] } },
12
+ { "level": 3, "slots": 8, "index": 6, "extend": 0, "name": "MultiCloud / aws / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.84.0.0/14" ] } ] } },
13
+ { "level": 3, "slots": 8, "index": 7, "extend": 0, "name": "MultiCloud / aws / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.88.0.0/14" ] } ] } },
14
+ { "level": 3, "slots": 8, "index": 8, "extend": 0, "name": "MultiCloud / aws / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.92.0.0/14" ] } ] } },
15
+ { "level": 2, "slots": 4, "index": 3, "extend": 1, "name": "MultiCloud / aws / staging", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.96.0.0/11" ] } ] } },
16
+ { "level": 3, "slots": 16, "index": 1, "extend": 0, "name": "MultiCloud / aws / staging / Lan1", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.96.0.0/15" ] } ] } },
17
+ { "level": 3, "slots": 16, "index": 2, "extend": 0, "name": "MultiCloud / aws / staging / Lan2", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.98.0.0/15" ] } ] } },
18
+ { "level": 3, "slots": 16, "index": 3, "extend": 0, "name": "MultiCloud / aws / staging / Lan3", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.100.0.0/15" ] } ] } },
19
+ { "level": 3, "slots": 16, "index": 4, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.102.0.0/15" ] } ] } },
20
+ { "level": 3, "slots": 16, "index": 5, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.104.0.0/15" ] } ] } },
21
+ { "level": 3, "slots": 16, "index": 6, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.106.0.0/15" ] } ] } },
22
+ { "level": 3, "slots": 16, "index": 7, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.108.0.0/15" ] } ] } },
23
+ { "level": 3, "slots": 16, "index": 8, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.110.0.0/15" ] } ] } },
24
+ { "level": 3, "slots": 16, "index": 9, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.112.0.0/15" ] } ] } },
25
+ { "level": 3, "slots": 16, "index": 10, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.114.0.0/15" ] } ] } },
26
+ { "level": 3, "slots": 16, "index": 11, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.116.0.0/15" ] } ] } },
27
+ { "level": 3, "slots": 16, "index": 12, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.118.0.0/15" ] } ] } },
28
+ { "level": 3, "slots": 16, "index": 13, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.120.0.0/15" ] } ] } },
29
+ { "level": 3, "slots": 16, "index": 14, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.122.0.0/15" ] } ] } },
30
+ { "level": 3, "slots": 16, "index": 15, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.124.0.0/15" ] } ] } },
31
+ { "level": 3, "slots": 16, "index": 16, "extend": 0, "name": "MultiCloud / aws / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.126.0.0/15" ] } ] } },
32
+ { "level": 1, "slots": 8, "index": 5, "extend": 0, "name": "MultiCloud / gcp", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.128.0.0/11" ] } ] } },
33
+ { "level": 2, "slots": 4, "index": 1, "extend": 1, "name": "MultiCloud / gcp / production", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.128.0.0/12" ] } ] } },
34
+ { "level": 3, "slots": 8, "index": 1, "extend": 0, "name": "MultiCloud / gcp / production / Lan1", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.128.0.0/15" ] } ] } },
35
+ { "level": 3, "slots": 8, "index": 2, "extend": 0, "name": "MultiCloud / gcp / production / Lan2", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.130.0.0/15" ] } ] } },
36
+ { "level": 3, "slots": 8, "index": 3, "extend": 0, "name": "MultiCloud / gcp / production / Lan3", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.132.0.0/15" ] } ] } },
37
+ { "level": 3, "slots": 8, "index": 4, "extend": 0, "name": "MultiCloud / gcp / production / Lan4", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.134.0.0/15" ] } ] } },
38
+ { "level": 3, "slots": 8, "index": 5, "extend": 0, "name": "MultiCloud / gcp / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.136.0.0/15" ] } ] } },
39
+ { "level": 3, "slots": 8, "index": 6, "extend": 0, "name": "MultiCloud / gcp / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.138.0.0/15" ] } ] } },
40
+ { "level": 3, "slots": 8, "index": 7, "extend": 0, "name": "MultiCloud / gcp / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.140.0.0/15" ] } ] } },
41
+ { "level": 3, "slots": 8, "index": 8, "extend": 0, "name": "MultiCloud / gcp / production / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.142.0.0/15" ] } ] } },
42
+ { "level": 2, "slots": 4, "index": 3, "extend": 1, "name": "MultiCloud / gcp / staging", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.144.0.0/12" ] } ] } },
43
+ { "level": 3, "slots": 16, "index": 1, "extend": 0, "name": "MultiCloud / gcp / staging / Lan1", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.144.0.0/16" ] } ] } },
44
+ { "level": 3, "slots": 16, "index": 2, "extend": 0, "name": "MultiCloud / gcp / staging / Lan2", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.145.0.0/16" ] } ] } },
45
+ { "level": 3, "slots": 16, "index": 3, "extend": 0, "name": "MultiCloud / gcp / staging / Lan3", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.146.0.0/16" ] } ] } },
46
+ { "level": 3, "slots": 16, "index": 4, "extend": 0, "name": "MultiCloud / gcp / staging / Lan4", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.147.0.0/16" ] } ] } },
47
+ { "level": 3, "slots": 16, "index": 5, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.148.0.0/16" ] } ] } },
48
+ { "level": 3, "slots": 16, "index": 6, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.149.0.0/16" ] } ] } },
49
+ { "level": 3, "slots": 16, "index": 7, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.150.0.0/16" ] } ] } },
50
+ { "level": 3, "slots": 16, "index": 8, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.151.0.0/16" ] } ] } },
51
+ { "level": 3, "slots": 16, "index": 9, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.152.0.0/16" ] } ] } },
52
+ { "level": 3, "slots": 16, "index": 10, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.153.0.0/16" ] } ] } },
53
+ { "level": 3, "slots": 16, "index": 11, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.154.0.0/16" ] } ] } },
54
+ { "level": 3, "slots": 16, "index": 12, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.155.0.0/16" ] } ] } },
55
+ { "level": 3, "slots": 16, "index": 13, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.156.0.0/16" ] } ] } },
56
+ { "level": 3, "slots": 16, "index": 14, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.157.0.0/16" ] } ] } },
57
+ { "level": 3, "slots": 16, "index": 15, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.158.0.0/16" ] } ] } },
58
+ { "level": 3, "slots": 16, "index": 16, "extend": 0, "name": "MultiCloud / gcp / staging / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.159.0.0/16" ] } ] } },
59
+ { "level": 1, "slots": 8, "index": 6, "extend": 0, "name": "MultiCloud / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.160.0.0/11" ] } ] } },
60
+ { "level": 1, "slots": 8, "index": 7, "extend": 0, "name": "MultiCloud / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.192.0.0/11" ] } ] } },
61
+ { "level": 1, "slots": 8, "index": 8, "extend": 0, "name": "MultiCloud / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "10.224.0.0/11" ] } ] } }
62
+ ]
@@ -0,0 +1,31 @@
1
+ [netsplit]
2
+ network = "10.0.0.0/8"
3
+
4
+ [plan]
5
+ options = { slots = 8 }
6
+
7
+ [plan.members]
8
+ [plan.members.aws]
9
+ options = { index = 3, extend = 1, slots = 4 }
10
+
11
+ [plan.members.aws.members]
12
+ [plan.members.aws.members.production]
13
+ options = { extend = 1, slots = 8 }
14
+ members = ["Lan1", "Lan2", "Lan3"]
15
+
16
+ [plan.members.aws.members.staging]
17
+ options = { extend = 1, slots = 16 }
18
+ members = ["Lan1", "Lan2", "Lan3"]
19
+
20
+
21
+ [plan.members.gcp]
22
+ options = { slots = 4 }
23
+
24
+ [plan.members.gcp.members]
25
+ [plan.members.gcp.members.production]
26
+ options = { extend = 1, slots = 8 }
27
+ members = ["Lan1", "Lan2", "Lan3", "Lan4"]
28
+
29
+ [plan.members.gcp.members.staging]
30
+ options = { extend = 1, slots = 16 }
31
+ members = ["Lan1", "Lan2", "Lan3", "Lan4"]
@@ -0,0 +1,7 @@
1
+ [
2
+ { "level": 0, "slots": 1, "index": 0, "extend": 0, "name": "Simple-nets", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.0/24" ] } ] } },
3
+ { "level": 1, "slots": 4, "index": 1, "extend": 0, "name": "Simple-nets / NetA", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.0/26" ] } ] } },
4
+ { "level": 1, "slots": 4, "index": 2, "extend": 0, "name": "Simple-nets / NetB", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.64/26" ] } ] } },
5
+ { "level": 1, "slots": 4, "index": 3, "extend": 0, "name": "Simple-nets / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.128/26" ] } ] } },
6
+ { "level": 1, "slots": 4, "index": 4, "extend": 0, "name": "Simple-nets / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.192/26" ] } ] } }
7
+ ]
@@ -0,0 +1,6 @@
1
+ [netsplit]
2
+ network = "192.168.0.0/24"
3
+
4
+ [plan]
5
+ options = { slots = 4 }
6
+ members = ["NetA", "NetB"]
@@ -0,0 +1,7 @@
1
+ [
2
+ { "level": 0, "slots": 1, "index": 0, "extend": 0, "name": "Simple", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.0/24" ] } ] } },
3
+ { "level": 1, "slots": 4, "index": 1, "extend": 0, "name": "Simple / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.0/26" ] } ] } },
4
+ { "level": 1, "slots": 4, "index": 2, "extend": 0, "name": "Simple / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.64/26" ] } ] } },
5
+ { "level": 1, "slots": 4, "index": 3, "extend": 0, "name": "Simple / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.128/26" ] } ] } },
6
+ { "level": 1, "slots": 4, "index": 4, "extend": 0, "name": "Simple / RESERVED", "prefix": { "py/reduce": [ { "py/type": "ipaddress.IPv4Network" }, { "py/tuple": [ "192.168.0.192/26" ] } ] } }
7
+ ]
@@ -0,0 +1,5 @@
1
+ [netsplit]
2
+ network = "192.168.0.0/24"
3
+
4
+ [plan]
5
+ options = { slots = 4 }