def deploy_dotfiles(c): """ Deploy to dotfiles """ hosts = [ DeployHost("localhost", meta=dict(flake_attr="desktop")), DeployHost("eve.r", meta=dict(flake_attr="eve")), ] g = DeployGroup(hosts) def deploy_homemanager(host: DeployHost) -> None: host.run( f"""sudo -u joerg zsh <<'EOF' cd $HOME source $HOME/.zshrc homeshick pull homeshick symlink homeshick cd dotfiles nix build --out-link $HOME/.hm-activate ".#hmConfigurations.{host.meta["flake_attr"]}.activation-script" $HOME/.hm-activate/activate EOF""" ) g.run_function(deploy_homemanager)
def get_hosts(hosts: str) -> List[DeployHost]: if hosts == "": return [ DeployHost(f"build{n + 1:02d}.nix-community.org") for n in range(4) ] return [DeployHost(f"{h}.nix-community.org") for h in hosts.split(",")]
def deploy(c): """ Deploy to eve, eva and localhost """ deploy_nixos( [ DeployHost("eve.r"), DeployHost("localhost"), DeployHost( "eve.r", forward_agent=True, command_prefix="eva.r", meta=dict(target_host="eva.r", flake_attr="eva"), ), ] )
def deploy_rock(c): """ Deploy to matchbox """ deploy_nixos( [DeployHost("localhost", meta=dict(target_host="rock.r", flake_attr="rock"))] )
def deploy_matchbox(c): """ Deploy to matchbox """ deploy_nixos( [ DeployHost( "localhost", command_prefix="eva.r", meta=dict(target_host="matchbox.r", flake_attr="matchbox"), ) ] )
def document_nixos(hosts: List[str]) -> None: """ Generate documentation, expects "hostname.r" """ hosts = DeployGroup([DeployHost(h) for h in HOSTS]) def doc_host(h: DeployHost) -> None: h.run_local(f"../generate-host-info.sh {h.host}") pwd = os.getcwd() os.chdir("docs/hosts") hosts.run_function(doc_host) os.chdir(pwd)
def reboot(c, hosts=""): """ Reboot hosts. example usage: fab --hosts clara.r,donna.r reboot """ deploy_hosts = [DeployHost(h) for h in hosts.split(",")] for h in deploy_hosts: g = DeployGroup([h]) g.run("reboot &") print(f"Wait for {h.host} to shutdown", end="") sys.stdout.flush() wait_for_port(h.host, h.port, shutdown=True) print("") print(f"Wait for {h.host} to start", end="") sys.stdout.flush() wait_for_port(h.host, h.port) print("")
def get_lldp_neighbors(hosts: List[str]) -> None: """ Get LLDP-discovered neighbors, expects "hostname.r" """ tum = DeployGroup([DeployHost(h) for h in HOSTS]) def doc_tum(h: DeployHost) -> None: h.run_local(f"../../get-lldp-neighbors.sh {h.host}") pwd = os.getcwd() os.chdir("docs/hosts") if not os.path.exists("lldp"): os.mkdir("lldp") os.chdir("lldp") tum.run_function(doc_tum) os.system("../../generate-lldp-graph.sh") os.chdir("..") shutil.rmtree("lldp", ignore_errors=True) os.chdir(pwd)
def deploy_bernie(c): """ Deploy to bernie """ deploy_nixos([DeployHost("bernie.r")])
def cleanup_gcroots(c, hosts=""): deploy_hosts = [DeployHost(h) for h in hosts.split(",")] for h in deploy_hosts: g = DeployGroup([h]) g.run("find /nix/var/nix/gcroots/auto -type s -delete") g.run("systemctl restart nix-gc")
def get_hosts(hosts: str) -> List[DeployHost]: return [DeployHost(h) for h in hosts.split(",")]
def deploy_host(c, host): """ Deploy to a single host, i.e. inv deploy-host --host 192.168.1.2 """ deploy_nixos([DeployHost(host)])
def deploy(c): """ Deploy to servers """ deploy_nixos([DeployHost(h) for h in HOSTS])