(define (cleanup-temporary-ssh-key/maybe)
(when (%hetzner-ssh-key-file)
(delete-file (%hetzner-ssh-key-file))
(%hetzner-ssh-key-file #f)
(format #t "TODO: delete temporary ssh key via hetzner api~%")))
(define (deploy-hetzner machine)
"Internal implementation of 'deploy-machine' for 'machine' instances with an
environment type of 'hetzner-environment-type'."
(hetzner-machine-validate machine)
(define server (hetzner-machine-server machine))
(unless (or server (hetzner-configuration-ssh-public-key
(machine-configuration machine)))
(format #t "using a temporary ssh key for provisioning~%")
(%hetzner-ssh-key-file (temporary-ssh-key-file)))
(unless (hetzner-machine-ssh-key machine)
(hetzner-machine-ssh-key-create machine))
(let* ((server (or server
(hetzner-machine-provision machine)))
(delegate-machine (hetzner-machine-delegate machine server)))
(guard (c (#t (cleanup-temporary-ssh-key/maybe)))
(mlet %store-monad
((value (deploy-machine delegate-machine)))
(cleanup-temporary-ssh-key/maybe)
(return value)))))