nixos modules for convenient deployment of cloud resources
at main 1.3 kB view raw
1{pkgs, lib ? pkgs.lib, self ? null, nixosSystem ? null}: let 2 l = lib; 3 mkProviderApp = provider: 4 l.concatStringsSep "\n" (l.flatten ( 5 l.mapAttrsToList 6 ( 7 name: module: 8 if module.enable 9 then '' 10 log info "deploying ${name} resource(s)..." 11 nu ${module.mkApp pkgs} 12 '' 13 else [] 14 ) 15 provider 16 )); 17 mkApp = {config, ...}: pkgs.writers.writeNu "deploy-resources" '' 18 use std/log 19 ${ 20 l.concatStringsSep "\n\n" 21 ( 22 l.mapAttrsToList 23 ( 24 name: provider: '' 25 log info "deploying resources for ${name}..." 26 ${mkProviderApp provider} 27 '' 28 ) 29 config.providers 30 ) 31 } 32 ''; 33in 34 if self != null 35 then 36 l.mergeAttrsList ( 37 l.mapAttrsToList 38 ( 39 hostname: host: 40 if l.hasAttr "providers" host.config 41 then { 42 "deploy-${hostname}-resources" = { 43 type = "app"; 44 program = toString (mkApp host); 45 }; 46 } 47 else {} 48 ) 49 self.nixosConfigurations 50 ) 51 else if nixosSystem != null 52 then 53 { 54 run = mkApp nixosSystem; 55 } 56 else 57 throw "nixos-cloud-resources: neither 'self' or 'nixosSystem' was provided, aborting"