summaryrefslogtreecommitdiff
path: root/worker/scripts/ansible_playbook
diff options
context:
space:
mode:
Diffstat (limited to 'worker/scripts/ansible_playbook')
-rwxr-xr-xworker/scripts/ansible_playbook95
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;
+ }
}