forked from fediversity/fediversity
		
	Merge pull request 'Generate machines' list automatically' (#209) from Niols/Fediversity:generate-machines-list-by-hand into main
Reviewed-on: Fediversity/Fediversity#209 Reviewed-by: kiara Grouwstra <kiara@procolix.eu>
This commit is contained in:
		
						commit
						6e386a9fd6
					
				
					 11 changed files with 106 additions and 19 deletions
				
			
		|  | @ -60,6 +60,7 @@ | |||
|               inputs'.agenix.packages.default | ||||
|               inputs'.nixops4.packages.default | ||||
|               pkgs.httpie | ||||
|               pkgs.jq | ||||
|             ]; | ||||
|             shellHook = config.pre-commit.installationScript; | ||||
|           }; | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| # Infra | ||||
| 
 | ||||
| This directory contains the definition of the VMs that host our infrastructure. | ||||
| This directory contains the definition of [the VMs](machines.md) that host our | ||||
| infrastructure. | ||||
| 
 | ||||
| ## Provisioning VMs with an initial configuration | ||||
| 
 | ||||
|  | @ -29,7 +30,7 @@ everything will become much cleaner. | |||
| 
 | ||||
| 3. Run the provisioning script: | ||||
|    ``` | ||||
|    sh infra/proxmox-provision.sh 117 | ||||
|    sh infra/proxmox-provision.sh fedi117 | ||||
|    ``` | ||||
|    The script can take several ids at the same time. It requires some | ||||
|    authentication options and provides several more. See `--help`. | ||||
|  | @ -45,7 +46,11 @@ everything will become much cleaner. | |||
| 
 | ||||
|    FIXME: Make the provisioning script do that for us. | ||||
| 
 | ||||
| 7. Commit the machine's configuration, public key, etc. | ||||
| 7. Regenerate the list of machines: | ||||
|    ``` | ||||
|    sh infra/machines.md.sh | ||||
|    ``` | ||||
|    Commit it with the machine's configuration, public key, etc. | ||||
| 
 | ||||
| 8. At this point, the machine contains a very basic configuration that contains | ||||
|    just enough for it to boot and be reachable. Go on to the next section to | ||||
|  | @ -91,16 +96,3 @@ nixops4 apply | |||
| ## Removing an existing VM | ||||
| 
 | ||||
| See `infra/proxmox-remove.sh --help`. | ||||
| 
 | ||||
| ## Machines | ||||
| 
 | ||||
| These machines are hosted on the Procolix Proxmox instance, | ||||
| to which non-Procolix members of the project do not have access. | ||||
| They host our stable infrastructure. | ||||
| 
 | ||||
|   Machine   Proxmox       Description | ||||
|   --------- ------------- ------------------------ | ||||
|   vm02116   Procolix      Forgejo | ||||
|   vm02187   Procolix      Wiki | ||||
|   fedi200   Fediversity   Testing machine for Hans | ||||
|   fedi201   Fediversity   FediPanel | ||||
|  |  | |||
|  | @ -41,6 +41,15 @@ in | |||
|       ''; | ||||
|     }; | ||||
| 
 | ||||
|     description = mkOption { | ||||
|       description = '' | ||||
|         A human-readable description of the machine's purpose. It should be | ||||
|         constituted of a first line giving a very short description, followed | ||||
|         by a blank line, then followed by more details if necessary. | ||||
|       ''; | ||||
|       default = ""; | ||||
|     }; | ||||
| 
 | ||||
|     ########################################################################## | ||||
|     ## Virtualised hardware | ||||
| 
 | ||||
|  | @ -62,6 +71,12 @@ in | |||
|       default = 2048; | ||||
|     }; | ||||
| 
 | ||||
|     diskSize = mkOption { | ||||
|       type = types.int; | ||||
|       description = "The amount of disk of the VM in GiB."; | ||||
|       default = 32; | ||||
|     }; | ||||
| 
 | ||||
|     ########################################################################## | ||||
|     ## Networking | ||||
| 
 | ||||
|  |  | |||
|  | @ -115,9 +115,13 @@ let | |||
|     inherit ((makeResourceConfig { inherit vmName isTestVm; }).fediversityVm) | ||||
|       proxmox | ||||
|       vmId | ||||
|       description | ||||
| 
 | ||||
|       sockets | ||||
|       cores | ||||
|       memory | ||||
|       diskSize | ||||
| 
 | ||||
|       hostPublicKey | ||||
|       unsafeHostPrivateKey | ||||
|       ; | ||||
|  |  | |||
							
								
								
									
										15
									
								
								infra/machines.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								infra/machines.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| <!-- This file is auto-generated by `machines.md.sh` from the machines' | ||||
|      configuration. --> | ||||
| 
 | ||||
| # Machines | ||||
| 
 | ||||
| Currently, this repository keeps track of the following VMs: | ||||
| 
 | ||||
| Machine | Proxmox | Description | ||||
| --------|---------|------------- | ||||
| [`fedi200`](./fedi200) | fediversity | Testing machine for Hans | ||||
| [`fedi201`](./fedi201) | fediversity | FediPanel | ||||
| [`vm02116`](./vm02116) | procolix | Forgejo | ||||
| [`vm02187`](./vm02187) | procolix | Wiki | ||||
| 
 | ||||
| This table excludes all machines with names starting with `test`. | ||||
							
								
								
									
										43
									
								
								infra/machines.md.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								infra/machines.md.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| #!/usr/bin/env sh | ||||
| set -euC | ||||
| 
 | ||||
| cd "$(dirname "$0")" | ||||
| 
 | ||||
| { | ||||
| cat <<\EOF | ||||
| <!-- This file is auto-generated by `machines.md.sh` from the machines' | ||||
|      configuration. --> | ||||
| 
 | ||||
| # Machines | ||||
| 
 | ||||
| Currently, this repository keeps track of the following VMs: | ||||
| 
 | ||||
| Machine | Proxmox | Description | ||||
| --------|---------|------------- | ||||
| EOF | ||||
| 
 | ||||
| vmOptions=$( | ||||
|   cd .. | ||||
|   nix eval \ | ||||
|     --impure --raw --expr " | ||||
|       builtins.toJSON (builtins.getFlake (builtins.toString ./.)).vmOptions | ||||
|     " \ | ||||
|     --log-format raw --quiet | ||||
| ) | ||||
| 
 | ||||
| ## NOTE: `jq`'s `keys` is alphabetically sorted, just what we want here. | ||||
| for machine in $(echo "$vmOptions" | jq -r 'keys[]'); do | ||||
|   if [ "${machine#test}" = "$machine" ]; then | ||||
|     proxmox=$(echo "$vmOptions" | jq -r ".$machine.proxmox") | ||||
|     description=$(echo "$vmOptions" | jq -r ".$machine.description" | head -n 1) | ||||
| 
 | ||||
|     # shellcheck disable=SC2016 | ||||
|     printf '[`%s`](./%s) | %s | %s\n' "$machine" "$machine" "$proxmox" "$description" | ||||
|   fi | ||||
| done | ||||
| 
 | ||||
| cat <<\EOF | ||||
| 
 | ||||
| This table excludes all machines with names starting with `test`. | ||||
| EOF | ||||
| } >| machines.md | ||||
|  | @ -2,6 +2,8 @@ | |||
|   fediversityVm = { | ||||
|     vmId = 200; | ||||
|     proxmox = "fediversity"; | ||||
|     description = "Testing machine for Hans"; | ||||
| 
 | ||||
|     domain = "abundos.eu"; | ||||
|     ipv4 = { | ||||
|       address = "95.215.187.200"; | ||||
|  |  | |||
|  | @ -1,5 +1,9 @@ | |||
| { | ||||
|   fediversityVm = { | ||||
|     vmId = 201; | ||||
|     proxmox = "fediversity"; | ||||
|     description = "FediPanel"; | ||||
| 
 | ||||
|     domain = "abundos.eu"; | ||||
|     ipv4 = { | ||||
|       address = "95.215.187.201"; | ||||
|  |  | |||
|  | @ -1,5 +1,9 @@ | |||
| { | ||||
|   fediversityVm = { | ||||
|     vmId = 2116; | ||||
|     proxmox = "procolix"; | ||||
|     description = "Forgejo"; | ||||
| 
 | ||||
|     ipv4.address = "185.206.232.34"; | ||||
|     ipv6.address = "2a00:51c0:12:1201::20"; | ||||
|   }; | ||||
|  |  | |||
|  | @ -1,5 +1,9 @@ | |||
| { | ||||
|   fediversityVm = { | ||||
|     vmId = 2187; | ||||
|     proxmox = "procolix"; | ||||
|     description = "Wiki"; | ||||
| 
 | ||||
|     ipv4.address = "185.206.232.187"; | ||||
|     ipv6.address = "2a00:51c0:12:1201::187"; | ||||
|   }; | ||||
|  |  | |||
|  | @ -181,6 +181,7 @@ grab_vm_options () { | |||
| 
 | ||||
|   proxmox=$(echo "$options" | jq -r .proxmox) | ||||
|   vm_id=$(echo "$options" | jq -r .vmId) | ||||
|   description=$(echo "$options" | jq -r .description) | ||||
| 
 | ||||
|   if [ "$proxmox" != fediversity ]; then | ||||
|     die "I do not know how to provision things that are not Fediversity VMs, | ||||
|  | @ -190,6 +191,7 @@ but I got proxmox = '%s' for VM %s." "$proxmox" "$vm_name" | |||
|   sockets=$(echo "$options" | jq -r .sockets) | ||||
|   cores=$(echo "$options" | jq -r .cores) | ||||
|   memory=$(echo "$options" | jq -r .memory) | ||||
|   disk_size=$(echo "$options" | jq -r .diskSize) | ||||
| 
 | ||||
|   host_public_key=$(echo "$options" | jq -r .hostPublicKey) | ||||
|   host_private_key=$(echo "$options" | jq -r .unsafeHostPrivateKey) | ||||
|  | @ -198,8 +200,8 @@ but I got proxmox = '%s' for VM %s." "$proxmox" "$vm_name" | |||
|     die 'I do not know what to do with a private key but no public key.' | ||||
|   fi | ||||
| 
 | ||||
|   printf 'done grabing VM options for VM %s. Got:\n  id: %d\n  sockets: %d\n  cores: %d\n  memory: %d MiB\n' \ | ||||
|     "$vm_name" "$vm_id" "$sockets" "$cores" "$memory" | ||||
|   printf 'done grabing VM options for VM %s. Got:\n  id: %d\n  sockets: %d\n  cores: %d\n  memory: %d MiB\n  disk size: %d GiB\n' \ | ||||
|     "$vm_name" "$vm_id" "$sockets" "$cores" "$memory" "$disk_size" | ||||
| } | ||||
| 
 | ||||
| ################################################################################ | ||||
|  | @ -286,6 +288,7 @@ create_vm () { | |||
|     vmid=="$vm_id" \ | ||||
|     name=="$vm_name" \ | ||||
|     pool==Fediversity \ | ||||
|     description=="$description" \ | ||||
|     \ | ||||
|     ide2=="local:iso/installer-$vm_name.iso,media=cdrom" \ | ||||
|     ostype==l26 \ | ||||
|  | @ -295,7 +298,7 @@ create_vm () { | |||
|     agent==1 \ | ||||
|     \ | ||||
|     scsihw==virtio-scsi-single \ | ||||
|     scsi0=='linstor_storage:32,discard=on,ssd=on,iothread=on' \ | ||||
|     scsi0=="linstor_storage:$disk_size,discard=on,ssd=on,iothread=on" \ | ||||
|     \ | ||||
|     sockets=="$sockets" \ | ||||
|     cores=="$cores" \ | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue