forked from fediversity/fediversity
		
	add deployment method: ssh
This commit is contained in:
		
							parent
							
								
									f429ed3656
								
							
						
					
					
						commit
						ae958ce407
					
				
					 2 changed files with 65 additions and 5 deletions
				
			
		|  | @ -2,7 +2,7 @@ | |||
|   inputs, | ||||
|   # sources, | ||||
|   lib, | ||||
|   # providers, | ||||
|   config, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
|  | @ -28,7 +28,20 @@ let | |||
|           { | ||||
|             implementation = requests: { | ||||
|               input = requests; | ||||
|               output = { }; | ||||
|               output.ssh-host = { | ||||
|                 ssh = { | ||||
|                   host = "localhost"; | ||||
|                   username = "root"; | ||||
|                   authentication.password = "password"; | ||||
|                 }; | ||||
|                 nixos-configuration = | ||||
|                   { ... }: | ||||
|                   { | ||||
|                     users.users = config.resources.shell.login-shell.apply ( | ||||
|                       lib.filterAttrs (_name: value: value ? login-shell) requests | ||||
|                     ); | ||||
|                   }; | ||||
|               }; | ||||
|             }; | ||||
|           }; | ||||
|       }; | ||||
|  |  | |||
|  | @ -6,12 +6,15 @@ | |||
| let | ||||
|   inherit (lib) mkOption types; | ||||
|   inherit (lib.types) | ||||
|     attrsOf | ||||
|     attrTag | ||||
|     attrsOf | ||||
|     deferredModuleWith | ||||
|     submodule | ||||
|     optionType | ||||
|     functionTo | ||||
|     nullOr | ||||
|     optionType | ||||
|     raw | ||||
|     str | ||||
|     submodule | ||||
|     ; | ||||
| 
 | ||||
|   functionType = submodule ./function.nix; | ||||
|  | @ -25,7 +28,51 @@ let | |||
|       ); | ||||
|     }; | ||||
|   }; | ||||
|   nixos-configuration = mkOption { | ||||
|     description = "A NixOS configuration."; | ||||
|     type = raw; | ||||
|   }; | ||||
|   host-ssh = mkOption { | ||||
|     description = "SSH connection info to connect to a single host."; | ||||
|     type = submodule { | ||||
|       options = { | ||||
|         host = mkOption { | ||||
|           description = "the host to access by SSH"; | ||||
|           type = str; | ||||
|         }; | ||||
|         username = mkOption { | ||||
|           description = "the SSH user to use"; | ||||
|           type = nullOr str; | ||||
|           default = null; | ||||
|         }; | ||||
|         authentication = mkOption { | ||||
|           description = "authentication method"; | ||||
|           type = attrTag { | ||||
|             private-key = mkOption { | ||||
|               description = "path to the user's SSH private key"; | ||||
|               type = str; | ||||
|               example = "/root/.ssh/id_ed25519"; | ||||
|             }; | ||||
|             password = mkOption { | ||||
|               description = "SSH password"; | ||||
|               # TODO: mark as sensitive | ||||
|               type = str; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
|   deployment = attrTag { | ||||
|     ssh-host = { | ||||
|       description = "A Terraform deployment by SSH to update a single existing NixOS host."; | ||||
|       type = submodule { | ||||
|         options = { | ||||
|           inherit nixos-configuration; | ||||
|           ssh = host-ssh; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| in | ||||
| { | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue