Skip to content
Snippets Groups Projects
deployment.nix 1.19 KiB
Newer Older
  • Learn to ignore specific revisions
  • # A NixOS module which enables remotely-triggered deployment updates.
    { config, ... }:
    let
    
      # A handy alias for our part of the configuration.
      cfg = config.services.private-storage.deployment;
    
    
      # Compute an authorized_keys line that allows the holder of a certain key to
      # execute a certain command *only*.
    
      restrictedKey =
        { authorizedKey, command, gridName }:
        "restrict,command=\"${command} ${gridName}\" ${authorizedKey}";
    
        services.private-storage.deployment.authorizedKey = {
          type = lib.types.str;
          example = lib.literalExample ''
            ssh-ed25519 AAAAC3N...
          '';
          description = ''
            The SSH public key to authorize to trigger a deployment update.
          '';
        };
        services.private-storage.deployment.gridName = {
          type = lib.types.str;
          example = lib.literalExample "staging";
          description = ''
            The name of the grid configuration to use to update this deployment.
          '';
        };
    
      };
    
      config = {
        users.users.deployment = {
          openssh.authorizedKeys.keys = [
    
            (restrictedKey {
              inherit (cfg) authorizedKey gridName;
              command = ./update-deployment;
            })