diff options
Diffstat (limited to 'worker/scripts/ansible_playbook')
-rwxr-xr-x | worker/scripts/ansible_playbook | 95 |
1 files changed, 60 insertions, 35 deletions
diff --git a/worker/scripts/ansible_playbook b/worker/scripts/ansible_playbook index a85995b..062680d 100755 --- a/worker/scripts/ansible_playbook +++ b/worker/scripts/ansible_playbook @@ -4,6 +4,7 @@ import { BitwardenSession, getRequiredEnv, getStdout, + loggerWithPrefix, prependWith, type SecureNote, } from "@liz-ci/utils"; @@ -13,41 +14,65 @@ const args: AnsiblePlaybookJobProps = { path: getRequiredEnv("path"), playbooks: getRequiredEnv("playbooks"), }; - -const bitwardenSession = new BitwardenSession(); - -const secretFiles = await Promise.all( - ["ansible_secrets", "ssh_key"] - .map((secretName) => - bitwardenSession - .getItem<SecureNote>(secretName) - .then(async ({ notes: recoveredSecret }) => { - const tempFile = await Deno.makeTempFile(); - await Deno.writeTextFile(tempFile, recoveredSecret); - return tempFile; - }) - ), +const logger = loggerWithPrefix(() => + `[${new Date().toISOString()}] [ansible_playbook.'${args.playbooks}']` ); -const [ansibleSecrets, sshKey] = secretFiles; -try { - const volumes = [ - `${args.path}:/ansible`, - `${sshKey}:/root/id_rsa`, - `${ansibleSecrets}:/ansible/secrets.yml`, - ]; - const playbookCmd = `ansible-playbook -e @secrets.yml ${args.playbooks}`; - - await getStdout([ - "docker", - "run", - ...prependWith(volumes, "-v"), - "willhallonline/ansible:latest", - ...playbookCmd.split(" "), - ]); -} finally { - await Promise.allSettled( - [bitwardenSession.close()].concat( - secretFiles.map((p) => Deno.remove(p)), - ), + +const run = async () => { + logger.log("Starting Ansible playbook job"); + + const bitwardenSession = new BitwardenSession(); + const secretFiles = await Promise.all( + ["ansible_secrets", "ssh_key"] + .map((secretName) => + bitwardenSession + .getItem<SecureNote>(secretName) + .then(async ({ notes: recoveredSecret }) => { + const tempFile = await Deno.makeTempFile(); + await Deno.writeTextFile(tempFile, recoveredSecret); + logger.log(secretName, "stored at", tempFile); + return tempFile; + }) + ), ); + const [ansibleSecrets, sshKey] = secretFiles; + + try { + const volumes = [ + `${args.path}:/ansible`, + `${sshKey}:/root/id_rsa`, + `${ansibleSecrets}:/ansible/secrets.yml`, + ]; + + const playbookCmd = `ansible-playbook -e @secrets.yml ${args.playbooks}`; + const deployCmd = [ + "docker", + "run", + ...prependWith(volumes, "-v"), + "willhallonline/ansible:latest", + ...playbookCmd.split(" "), + ]; + logger.log("deploying...", deployCmd); + await getStdout(deployCmd); + } finally { + await Promise.allSettled( + [bitwardenSession.close()].concat( + secretFiles.map((p) => { + logger.log(`cleanup`, p); + return Deno.remove(p); + }), + ), + ); + } + + logger.log("ansible playbook job completed"); +}; + +if (import.meta.main) { + try { + await run(); + } catch (e) { + logger.error("womp womp D:", e); + throw e; + } } |