Compare commits
3 Commits
8adee3cdbe
...
bd49636f27
| Author | SHA1 | Date | |
|---|---|---|---|
|
bd49636f27
|
|||
|
f54de8bea1
|
|||
|
7d6413cf10
|
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +1,2 @@
|
|||||||
_secrets.yaml filter=git-crypt diff=git-crypt
|
_secrets.yaml filter=git-crypt diff=git-crypt
|
||||||
|
secrets.yaml filter=git-crypt diff=git-crypt
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
server:
|
server:
|
||||||
tftpIp: 192.168.1.1
|
tftpIp: 192.168.1.1
|
||||||
httpUrl: http://192.168.1.1:8000
|
httpUrl: http://192.168.1.1:8000
|
||||||
|
|
||||||
|
tailscale:
|
||||||
|
loginServer: https://headscale.huizinga.dev
|
||||||
|
|||||||
@@ -26,5 +26,6 @@ patches:
|
|||||||
- !patch install-disk
|
- !patch install-disk
|
||||||
- !patch network
|
- !patch network
|
||||||
- !patch vip
|
- !patch vip
|
||||||
|
- !patch tailscale
|
||||||
patchesControlPlane:
|
patchesControlPlane:
|
||||||
- !patch allow-control-plane-workloads
|
- !patch allow-control-plane-workloads
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
machine:
|
machine:
|
||||||
network:
|
network:
|
||||||
hostname: {{hostname}}
|
hostname: {{node.hostname}}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
machine:
|
machine:
|
||||||
install:
|
install:
|
||||||
disk: {{installDisk}}
|
disk: {{node.installDisk}}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
machine:
|
machine:
|
||||||
network:
|
network:
|
||||||
interfaces:
|
interfaces:
|
||||||
- interface: {{interface}}
|
- interface: {{node.interface}}
|
||||||
dhcp: false
|
dhcp: false
|
||||||
addresses:
|
addresses:
|
||||||
- {{ip}}
|
- {{node.ip}}
|
||||||
routes:
|
routes:
|
||||||
- network: 0.0.0.0/0
|
- network: 0.0.0.0/0
|
||||||
gateway: {{gateway}}
|
gateway: {{node.gateway}}
|
||||||
|
|||||||
7
patches/tailscale.yaml
Normal file
7
patches/tailscale.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
apiVersion: v1alpha1
|
||||||
|
kind: ExtensionServiceConfig
|
||||||
|
name: tailscale
|
||||||
|
environment:
|
||||||
|
- TS_AUTHKEY={{ config.tailscale.authKey }}
|
||||||
|
- TS_EXTRA_ARGS=--login-server https://headscale.huizinga.dev
|
||||||
|
- TS_ROUTES={{ helper.tailscale_subnet(node.gateway, node.netmask) }}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
machine:
|
machine:
|
||||||
network:
|
network:
|
||||||
interfaces:
|
interfaces:
|
||||||
- interface: {{interface}}
|
- interface: {{node.interface}}
|
||||||
vip:
|
vip:
|
||||||
ip: {{cluster.controlPlaneIp}}
|
ip: {{node.cluster.controlPlaneIp}}
|
||||||
|
|||||||
@@ -2,3 +2,4 @@ PyYAML==6.0.3
|
|||||||
requests==2.32.5
|
requests==2.32.5
|
||||||
Jinja2==3.1.6
|
Jinja2==3.1.6
|
||||||
GitPython==3.1.45
|
GitPython==3.1.45
|
||||||
|
netaddr==1.3.0
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ customization:
|
|||||||
- siderolabs/util-linux-tools
|
- siderolabs/util-linux-tools
|
||||||
- siderolabs/intel-ucode
|
- siderolabs/intel-ucode
|
||||||
- siderolabs/i915
|
- siderolabs/i915
|
||||||
|
- siderolabs/tailscale
|
||||||
|
|||||||
BIN
secrets.yaml
Normal file
BIN
secrets.yaml
Normal file
Binary file not shown.
17
tools/render
17
tools/render
@@ -11,6 +11,7 @@ import git
|
|||||||
import requests
|
import requests
|
||||||
import yaml
|
import yaml
|
||||||
from jinja2 import Environment, FileSystemLoader, StrictUndefined, Template
|
from jinja2 import Environment, FileSystemLoader, StrictUndefined, Template
|
||||||
|
from netaddr import IPAddress
|
||||||
|
|
||||||
REPO = git.Repo(sys.path[0], search_parent_directories=True)
|
REPO = git.Repo(sys.path[0], search_parent_directories=True)
|
||||||
assert REPO.working_dir is not None
|
assert REPO.working_dir is not None
|
||||||
@@ -40,7 +41,7 @@ def render_templates(node: dict, args: dict):
|
|||||||
def default(self, o):
|
def default(self, o):
|
||||||
if isinstance(o, Template):
|
if isinstance(o, Template):
|
||||||
try:
|
try:
|
||||||
rendered = o.render(args | node)
|
rendered = o.render(args | {"node": node})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
e.add_note(f"While rendering for: {node['hostname']}")
|
e.add_note(f"While rendering for: {node['hostname']}")
|
||||||
raise e
|
raise e
|
||||||
@@ -52,6 +53,11 @@ def render_templates(node: dict, args: dict):
|
|||||||
return Inner
|
return Inner
|
||||||
|
|
||||||
|
|
||||||
|
def tailscale_subnet(gateway: str, netmask: str):
|
||||||
|
netmask_bits = IPAddress(netmask).netmask_bits()
|
||||||
|
return f"{IPAddress(gateway) & IPAddress(netmask)}/{netmask_bits}"
|
||||||
|
|
||||||
|
|
||||||
@functools.cache
|
@functools.cache
|
||||||
def get_schematic_id(schematic: str):
|
def get_schematic_id(schematic: str):
|
||||||
"""Lookup the schematic id associated with a given schematic"""
|
"""Lookup the schematic id associated with a given schematic"""
|
||||||
@@ -134,7 +140,14 @@ def main():
|
|||||||
with open(ROOT.joinpath("config.yaml")) as fyaml:
|
with open(ROOT.joinpath("config.yaml")) as fyaml:
|
||||||
config = yaml.safe_load(fyaml)
|
config = yaml.safe_load(fyaml)
|
||||||
|
|
||||||
template_args = {"config": config, "root": ROOT}
|
with open(ROOT.joinpath("secrets.yaml")) as fyaml:
|
||||||
|
config |= yaml.safe_load(fyaml)
|
||||||
|
|
||||||
|
template_args = {
|
||||||
|
"config": config,
|
||||||
|
"root": ROOT,
|
||||||
|
"helper": {"tailscale_subnet": tailscale_subnet},
|
||||||
|
}
|
||||||
|
|
||||||
nodes = []
|
nodes = []
|
||||||
for fullname in walk_files(NODES):
|
for fullname in walk_files(NODES):
|
||||||
|
|||||||
Reference in New Issue
Block a user