diff dns.py @ 278:4e424a144183

for netboot pi
author drewp@bigasterisk.com
date Sat, 30 Mar 2024 00:15:46 -0700
parents 075ceead3673
children 5c5c314051c5
line wrap: on
line diff
--- a/dns.py	Sat Mar 23 14:22:20 2024 -0700
+++ b/dns.py	Sat Mar 30 00:15:46 2024 -0700
@@ -1,9 +1,11 @@
 from io import StringIO
 import subprocess
-from tempfile import NamedTemporaryFile
+
 from pyinfra import host
-from pyinfra.operations import files, systemd
+from pyinfra.operations import files, systemd, server
+from pyinfra.facts.server import Arch, LinuxDistribution
 
+is_pi = host.get_fact(LinuxDistribution)['name'] in ['Debian', 'Raspbian GNU/Linux']
 
 def dnsmasq_instance(net_name,
                      house_iface,
@@ -36,10 +38,38 @@
 
 def standard_host_dns():
     files.template(src='templates/hosts.j2', dest='/etc/hosts')
-    files.link(path='/etc/resolv.conf', target='/run/systemd/resolve/resolv.conf', force=True)
-    files.template(src='templates/resolved.conf.j2', dest='/etc/systemd/resolved.conf')
-    systemd.service(service='systemd-resolved.service', running=True, restarted=True)
+    if is_pi:
+        files.put(dest='/etc/resolv.conf', src=StringIO('''
+# written by pyinfra
+nameserver 10.2.0.3
+search bigasterisk.com
+                  '''))
+    else:
+        files.link(path='/etc/resolv.conf', target='/run/systemd/resolve/resolv.conf', force=True)
+        files.template(src='templates/resolved.conf.j2', dest='/etc/systemd/resolved.conf')
+        systemd.service(service='systemd-resolved.service', running=True, restarted=True)
+
 
+def rpi_net_boot():
+    files.directory(path='/opt/dnsmasq/tftp')
+    for pi_serial, _ in pi_serial_hostname:
+        files.directory(path=f'/opt/dnsmasq/tftp/{pi_serial}')
+        # then we transfer from pi to here
+
+def rpi_iscsi_volumes():
+    iscsi_dir = '/d2/rpi-iscsi'
+    for _, pi_hostname in pi_serial_hostname:
+        out= f'{iscsi_dir}/{pi_hostname}.disk'
+        files.directory(path=iscsi_dir)
+        server.shell(f'dd if=/dev/zero of={out} count=0 bs=1 seek=4G conv=excl || true')
+        files.put(dest=f"/etc/tgt/conf.d/{pi_hostname}.conf", src=StringIO(f"""
+<target iqn.2024-03.com.bigasterisk:{pi_hostname}.target>
+    backing-store {out}
+    initiator-name iqn.2024-03.com.bigasterisk:{pi_hostname}.initiator
+</target> 
+                            """))
+    systemd.service(service='tgt.service', running=True, restarted=True)
+    
 
 standard_host_dns()
 
@@ -51,8 +81,10 @@
 
     dnsmasq_instance('10.5', house_iface='unused', dhcp_range='unused',
                      listen_address='unused')  # only works after wireguard is up
-
+elif host.name == 'ditto':
+    rpi_iscsi_volumes() # move out of this file- it's not dns
 elif host.name == 'pipe':
+    rpi_net_boot()
     files.directory(path='/opt/dnsmasq')
     dnsmasq_instance('10.2',
                      house_iface='eth1',