Compare commits

...

6 commits

9 changed files with 71 additions and 12 deletions

22
bin/passwords-for Executable file
View file

@ -0,0 +1,22 @@
#!/usr/bin/env python3
from bundlewrap.repo import Repository
from os.path import realpath, dirname
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('node', help='Node to generate passwords for')
args = parser.parse_args()
bw = Repository(dirname(dirname(realpath(__file__))))
node = bw.get_node(args.node)
if node.password:
print(f"password: {node.password}")
for metadata_key in sorted([
'users/root/password',
]):
if value := node.metadata.get(metadata_key, None):
print(f"{metadata_key}: {value}")

View file

@ -3,4 +3,4 @@
from bundlewrap.repo import Repository from bundlewrap.repo import Repository
from os.path import realpath, dirname from os.path import realpath, dirname
repo = Repository(dirname(dirname(realpath(__file__)))) bw = Repository(dirname(dirname(realpath(__file__))))

View file

@ -55,7 +55,7 @@ for vlan_name, vlan_id in node.metadata.get('routeros/vlans').items():
'vlan-id': vlan_id, 'vlan-id': vlan_id,
'interface': 'bridge', 'interface': 'bridge',
'tags': { 'tags': {
'routeros-vlan', 'routeros-vlans',
}, },
} }
@ -68,10 +68,28 @@ for vlan_name, vlan_id in node.metadata.get('routeros/vlans').items():
'routeros-vlan-ports', 'routeros-vlan-ports',
}, },
'needs': { 'needs': {
'tag:routeros-vlan', 'tag:routeros-vlans',
}, },
} }
for port_name, port_conf in node.metadata.get('routeros/ports').items():
untagged_vlan = node.metadata.get('routeros/vlan_groups')[port_conf.get('vlan_group')]['untagged']
routeros[f'/interface/bridge/port?interface={port_name}'] = {
'disabled': False,
'bridge': 'bridge',
'pvid': node.metadata.get('routeros/vlans')[untagged_vlan],
'tags': {
'routeros-ports'
},
'needs': {
'tag:routeros-vlan-ports',
},
}
if comment := port_conf.get('comment', None):
routeros[f'/interface/bridge/port?interface={port_name}']['_comment'] = comment
# create IPs # create IPs
for ip, ip_conf in node.metadata.get('routeros/ips').items(): for ip, ip_conf in node.metadata.get('routeros/ips').items():
routeros[f'/ip/address?address={ip}'] = { routeros[f'/ip/address?address={ip}'] = {
@ -80,7 +98,8 @@ for ip, ip_conf in node.metadata.get('routeros/ips').items():
'routeros-ip', 'routeros-ip',
}, },
'needs': { 'needs': {
'tag:routeros-vlan', 'tag:routeros-vlans',
'tag:routeros-ports'
}, },
} }
@ -90,7 +109,8 @@ routeros['/interface/bridge?name=bridge'] = {
'priority': node.metadata.get('routeros/bridge_priority'), 'priority': node.metadata.get('routeros/bridge_priority'),
'protocol-mode': 'rstp', 'protocol-mode': 'rstp',
'needs': { 'needs': {
'tag:routeros-vlan', 'tag:routeros-vlans',
'tag:routeros-ports',
'tag:routeros-vlan-ports', 'tag:routeros-vlan-ports',
'tag:routeros-ip', 'tag:routeros-ip',
}, },
@ -102,7 +122,7 @@ routeros['/interface/vlan'] = {
'id-by': 'name', 'id-by': 'name',
}, },
'needed_by': { 'needed_by': {
'tag:routeros-vlan', 'tag:routeros-vlans',
} }
} }
@ -114,6 +134,6 @@ routeros['/interface/bridge/vlan'] = {
}, },
}, },
'needed_by': { 'needed_by': {
'tag:routeros-vlan', 'tag:routeros-vlans',
} }
} }

View file

@ -18,6 +18,7 @@
'iot': '2', 'iot': '2',
'internet': '3', 'internet': '3',
'proxmox': '4', 'proxmox': '4',
'wokeonlan': '5',
'gast': '9', 'gast': '9',
'rolf': '51', 'rolf': '51',
}, },
@ -30,12 +31,17 @@
'proxmox', 'proxmox',
'gast', 'gast',
'rolf', 'rolf',
'wokeonlan',
}, },
}, },
'internet': { 'internet': {
'untagged': 'internet', 'untagged': 'internet',
'tagged': set(), 'tagged': set(),
}, },
'wokeonlan': {
'untagged': 'wokeonlan',
'tagged': set(),
},
}, },
'vlan_ports': {}, 'vlan_ports': {},
}, },

View file

@ -1,5 +1,8 @@
def wake_on_lan(node):
node.repo.libs.wol.wake(node)
def node_apply_start(repo, node, **kwargs): def node_apply_start(repo, node, **kwargs):
repo.libs.wol.wake(node) wake_on_lan(node)
def node_run_start(repo, node, cmd, **kwargs): def node_run_start(repo, node, cmd, **kwargs):
repo.libs.wol.wake(node) wake_on_lan(node)

View file

@ -25,7 +25,7 @@
}, },
'wakeonlan': { 'wakeonlan': {
'interface': 'enp0s31f6', 'interface': 'enp0s31f6',
'ipv4': '10.0.0.6/24', 'ipv4': '10.0.5.5/24',
'mac': '4c:cc:6a:d5:96:f8', 'mac': '4c:cc:6a:d5:96:f8',
}, },
}, },

View file

@ -42,6 +42,13 @@
'ipv4': '10.0.4.1/24', 'ipv4': '10.0.4.1/24',
'dhcp_server': True, 'dhcp_server': True,
}, },
'wakeonlan': {
'type': 'vlan',
'vlan_interface': 'internal',
'id': 5,
'ipv4': '10.0.5.1/24',
'dhcp_server': True,
},
'guest': { 'guest': {
'type': 'vlan', 'type': 'vlan',
'vlan_interface': 'internal', 'vlan_interface': 'internal',

View file

@ -27,7 +27,8 @@
'vlan_group': 'infra', 'vlan_group': 'infra',
}, },
'ether5': { 'ether5': {
'vlan_group': 'infra', 'vlan_group': 'wokeonlan',
'comment': 'home.backups wakeonlan',
}, },
'ether6': { 'ether6': {
'vlan_group': 'infra', 'vlan_group': 'infra',

View file

@ -1,4 +1,4 @@
bundlewrap ~=4.0, >=4.23.1 bundlewrap ~=4.0, >=4.24
pycryptodome pycryptodome
PyNaCl PyNaCl
PyYAML PyYAML