From c89ef9ff52273500a05607a20d40fe397ea6af0e Mon Sep 17 00:00:00 2001 From: joostdecock Date: Sun, 17 Oct 2021 11:45:41 +0200 Subject: [PATCH] chore: imported ansible into monorepo --- ansible/group_vars/all.yaml | 5 ++ ansible/inventory.yaml | 21 +++++ ansible/playbooks/backup_mongo.yaml | 20 +++++ .../playbooks/clone_production_database.yaml | 10 +++ ansible/playbooks/files/fs_backup_mongo.sh | 9 ++ ansible/playbooks/files/migrate_data.js | 85 +++++++++++++++++++ ansible/playbooks/install_updates.yaml | 11 +++ ansible/playbooks/migrate_data_for_2.7.yaml | 22 +++++ .../schedule_daily_mongo_backup.yaml | 19 +++++ 9 files changed, 202 insertions(+) create mode 100644 ansible/group_vars/all.yaml create mode 100644 ansible/inventory.yaml create mode 100644 ansible/playbooks/backup_mongo.yaml create mode 100644 ansible/playbooks/clone_production_database.yaml create mode 100755 ansible/playbooks/files/fs_backup_mongo.sh create mode 100644 ansible/playbooks/files/migrate_data.js create mode 100644 ansible/playbooks/install_updates.yaml create mode 100644 ansible/playbooks/migrate_data_for_2.7.yaml create mode 100644 ansible/playbooks/schedule_daily_mongo_backup.yaml diff --git a/ansible/group_vars/all.yaml b/ansible/group_vars/all.yaml new file mode 100644 index 00000000000..4247f61074b --- /dev/null +++ b/ansible/group_vars/all.yaml @@ -0,0 +1,5 @@ +--- +ansible_ssh_private_key_file: ~/.ssh/ansibot_id_rsa +ansible_user: ansibot +tmp: /tmp/ansible +backup_dir: /fs/backup diff --git a/ansible/inventory.yaml b/ansible/inventory.yaml new file mode 100644 index 00000000000..72ce9f18089 --- /dev/null +++ b/ansible/inventory.yaml @@ -0,0 +1,21 @@ +# This is the Ansible inventory file for FreeSewing infrastructure + +local: + hosts: + localhost: {} + +all: + children: + main: + hosts: + backend.freesewing.org: + db: freesewing + next: + hosts: + next.backend.freesewing.org: + db: next_freesewing + 2022: + hosts: + maze.backend.freesewing.org: + db: freesewing + diff --git a/ansible/playbooks/backup_mongo.yaml b/ansible/playbooks/backup_mongo.yaml new file mode 100644 index 00000000000..7e6f36e34f1 --- /dev/null +++ b/ansible/playbooks/backup_mongo.yaml @@ -0,0 +1,20 @@ +--- +- hosts: '!localhost' + gather_facts: false + become: true + tasks: + - name: Copy backup script to host + copy: + src: fs_backup_mongo.sh + dest: /usr/sbin + owner: root + group: root + mode: '0755' + + - name: Backup mongo database + shell: + cmd: "/usr/sbin/fs_backup_mongo.sh {{ db }}" + args: + executable: /bin/bash + + diff --git a/ansible/playbooks/clone_production_database.yaml b/ansible/playbooks/clone_production_database.yaml new file mode 100644 index 00000000000..0c99626bccd --- /dev/null +++ b/ansible/playbooks/clone_production_database.yaml @@ -0,0 +1,10 @@ +--- +# Hardcoding this to prevent accidentally dropping the production database +- hosts: backend.freesewing.org + gather_facts: false + become: true + tasks: + - name: Clone production database + shell: "mongodump --archive --db=freesewing | mongorestore --archive --nsFrom='freesewing.*' --nsTo='next_freesewing.*'" + + diff --git a/ansible/playbooks/files/fs_backup_mongo.sh b/ansible/playbooks/files/fs_backup_mongo.sh new file mode 100755 index 00000000000..4ca94376bb0 --- /dev/null +++ b/ansible/playbooks/files/fs_backup_mongo.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +date=$(date +%F) +backupDir="/fs/backup/mongo/${date}/" +[ -z "$1" ] && echo "Missing param" && exit 1 +database=$1 + +mkdir -p $backupDir +mongodump --db $database --out $backupDir diff --git a/ansible/playbooks/files/migrate_data.js b/ansible/playbooks/files/migrate_data.js new file mode 100644 index 00000000000..488692b06a6 --- /dev/null +++ b/ansible/playbooks/files/migrate_data.js @@ -0,0 +1,85 @@ +/* + * This migrates 2.6 data to 2.7 + */ + + +// The shoulderSlope measurement is now different, so we need to remove it +db.people.updateMany({}, {$unset: { 'measurements.shoulderSlope': '' }}) +db.patterns.updateMany({}, {$unset: { 'data.settings.measurements.shoulderSlope': '' }}) + +// The seatDepth measurement is no longer used, so we remove it +db.people.updateMany({}, {$unset: { 'measurements.seatDepth': '' }}) +db.patterns.updateMany({}, {$unset: { 'data.settings.measurements.seatDepth': '' }}) + +// The hipsToUpperLeg measurement is no longer used, so we remove it +db.people.updateMany({}, {$unset: { 'measurements.hipsToUpperLeg': '' }}) +db.patterns.updateMany({}, {$unset: { 'data.settings.measurements.hipsToUpperLeg': '' }}) + +/* A bunch of circumference measurements have been renamed */ +// ankle +db.people.updateMany({}, {$rename: {'measurements.ankleCircumference': 'measurements.ankle'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.ankleCircumference': 'data.settings.measurements.ankle'}}) + +// biceps +db.people.updateMany({}, {$rename: {'measurements.bicepsCircumference': 'measurements.biceps'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.bicepsCircumference': 'data.settings.measurements.biceps'}}) + +// chest +db.people.updateMany({}, {$rename: {'measurements.chestCircumference': 'measurements.chest'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.chestCircumference': 'data.settings.measurements.chest'}}) + +// head +db.people.updateMany({}, {$rename: {'measurements.headCircumference': 'measurements.head'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.headCircumference': 'data.settings.measurements.head'}}) + +// hips +db.people.updateMany({}, {$rename: {'measurements.hipsCircumference': 'measurements.hips'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.hipsCircumference': 'data.settings.measurements.hips'}}) + +// knee +db.people.updateMany({}, {$rename: {'measurements.kneeCircumference': 'measurements.knee'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.kneeCircumference': 'data.settings.measurements.knee'}}) + +// neck +db.people.updateMany({}, {$rename: {'measurements.neckCircumference': 'measurements.neck'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.neckCircumference': 'data.settings.measurements.neck'}}) + +// seat +db.people.updateMany({}, {$rename: {'measurements.seatCircumference': 'measurements.seat'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.seatCircumference': 'data.settings.measurements.seat'}}) + +// upperleg +db.people.updateMany({}, {$rename: {'measurements.upperLegCircumference': 'measurements.upperLeg'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.upperLegCircumference': 'data.settings.measurements.upperLeg'}}) + +// wrist +db.people.updateMany({}, {$rename: {'measurements.wristCircumference': 'measurements.wrist'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.wristCircumference': 'data.settings.measurements.wrist'}}) + +/* Natural waist is now just waist */ +// Waist +db.people.updateMany({}, {$rename: {'measurements.naturalWaist': 'measurements.waist'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.naturalWaist': 'data.settings.measurements.waist'}}) + +// WaistToFloor +db.people.updateMany({}, {$rename: {'measurements.naturalWaistToFloor': 'measurements.waistToFloor'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.naturalWaistToFloor': 'data.settings.measurements.waistToFloor'}}) + +// WaistToKnee +db.people.updateMany({}, {$rename: {'measurements.naturalWaistToKnee': 'measurements.waistToKnee'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.naturalWaistToKnee': 'data.settings.measurements.waistToKnee'}}) + +// WaistToSeat +db.people.updateMany({}, {$rename: {'measurements.naturalWaistToSeat': 'measurements.waistToSeat'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.naturalWaistToSeat': 'data.settings.measurements.waistToSeat'}}) + +// WaistToUnderbust +db.people.updateMany({}, {$rename: {'measurements.naturalWaistToUnderbust': 'measurements.waistToUnderbust'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.naturalWaistToUnderbust': 'data.settings.measurements.waistToUnderbust'}}) + +// WaistToHips +db.people.updateMany({}, {$rename: {'measurements.naturalWaistToHip': 'measurements.waistToHips'}}) +db.patterns.updateMany({}, {$rename: {'data.settings.measurements.naturalWaistToHip': 'data.settings.measurements.waistToHips'}}) + + +/* seatDepth is no longer uses */ diff --git a/ansible/playbooks/install_updates.yaml b/ansible/playbooks/install_updates.yaml new file mode 100644 index 00000000000..d2edb7402c7 --- /dev/null +++ b/ansible/playbooks/install_updates.yaml @@ -0,0 +1,11 @@ +--- +- hosts: '!localhost' + gather_facts: false + become: true + tasks: + - name: Update all packages to their latest version + apt: + name: '*' + state: latest + update_cache: yes + diff --git a/ansible/playbooks/migrate_data_for_2.7.yaml b/ansible/playbooks/migrate_data_for_2.7.yaml new file mode 100644 index 00000000000..41dfbd87684 --- /dev/null +++ b/ansible/playbooks/migrate_data_for_2.7.yaml @@ -0,0 +1,22 @@ +--- +# Hardcoding this to prevent accidentally migrating the production database +- hosts: next.backend.freesewing.org + gather_facts: false + become: true + tasks: + - name: Create temporary directory + file: + path: "{{tmp}}" + state: directory + mode: '0755' + - name: Copy migration file to remote host + copy: + src: migrate_data.js + dest: "{{tmp}}" + owner: root + group: root + mode: '0755' + - name: Migrate 2.6 data to 2.7 + shell: "mongo next_freesewing {{tmp}}/migrate_data.js" + + diff --git a/ansible/playbooks/schedule_daily_mongo_backup.yaml b/ansible/playbooks/schedule_daily_mongo_backup.yaml new file mode 100644 index 00000000000..cac026fec71 --- /dev/null +++ b/ansible/playbooks/schedule_daily_mongo_backup.yaml @@ -0,0 +1,19 @@ +--- +- hosts: '!localhost' + gather_facts: false + become: true + tasks: + - name: Copy backup script to host + copy: + src: fs_backup_mongo.sh + dest: /usr/sbin + owner: root + group: root + mode: '0755' + + - name: Schedule cron job for database backup + cron: + name: "Backup mongodb {{ db }}" + minute: 25 + hour: 8 + job: "/usr/sbin/fs_backup_mongo.sh {{ db }}"