Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
configuration
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
configuration
Commits
a7aa6f5f
Commit
a7aa6f5f
authored
Feb 23, 2017
by
Brian Beggs
Committed by
GitHub
Feb 23, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3502 from edx/max/pipeline-rollback
Ansible Script to rollback migrations
parents
97e07527
9da70faf
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
140 additions
and
0 deletions
+140
-0
playbooks/continuous_delivery/rollback_migrations.yml
+140
-0
No files found.
playbooks/continuous_delivery/rollback_migrations.yml
0 → 100644
View file @
a7aa6f5f
# This playbook will check for migrations to rollback for Django applications within a larger
# Django project. The provided input file will determine what migrations should be rolled back.
#
# The playbook uses the Django management commands found in this Django app repo:
# https://github.com/edx/edx-django-release-util
# So the Django app above needs to be installed in the Django project.
#
# Required variables for this playbook:
#
# - APPLICATION_PATH - the top-level path of the Django application; the application lives underneath
# this directory in a directory with the same name as APPLICATION_NAME.
# NOTE: It is assumed that edx-django-release-util is one of its INSTALLED_APPS.
# - APPLICATION_NAME - The name of the application that we are migrating.
# - APPLICATION_USER - user which is meant to run the application
# - ARTIFACT_PATH - the path where the migration artifacts should be copied after completion
# - initial_states - An array of the migrations
# - database - Name of the database to run the rollback against
#
# Other variables:
# - migration_result - the filename where the migration output is saved
# - SUB_APPLICATION_NAME - used for migrations in edxapp {lms|cms}, must be specified
# when APPLICATION_NAME is edxapp
# - EDX_PLATFORM_SETTINGS - The settings to use for the edx platform {aws|devstack} DEFAULT: aws
# - HIPCHAT_TOKEN - API token to send messages to hipchat
# - HIPCHAT_ROOM - ID or name of the room to send the notification
# - HIPCHAT_URL - URL of the hipchat API (defaults to v1 of the api)
#
# Example command line to run this playbook:
# ansible-playbook \
# -vvvv \
# -i ../{artifact_path}/ansible_inventory \
# --private-key=$PRIVATE_KEY \
# --module-path=playbooks/library \
# --user=ubuntu \
# -e APPLICATION_PATH=$APPLICATION_PATH \
# -e APPLICATION_NAME=$APPLICATION_NAME \
# -e APPLICATION_USER=$APPLICATION_USER \
# -e ARTIFACT_PATH=`/bin/pwd`/../{artifact_path}/migrations \
# -e DB_MIGRATION_USER=$DB_MIGRATION_USER \
# -e DB_MIGRATION_PASS=$DB_MIGRATION_PASS \
# -e ../{artifact_path}/migration_input_file \
# -e SUB_APPLICATION_NAME={sub_application_name} \
# playbooks/continuous_delivery/rollback_migrations.yml
-
hosts
:
all
gather_facts
:
false
become
:
true
vars
:
COMMAND_PREFIX
:
"
.
{{
APPLICATION_PATH
}}/{{
APPLICATION_NAME
}}_env;
DB_MIGRATION_USER={{
DB_MIGRATION_USER
}}
DB_MIGRATION_PASS='{{
DB_MIGRATION_PASS
}}'
/edx/bin/python.{{
APPLICATION_NAME
}}
/edx/bin/manage.{{
APPLICATION_NAME
}}
"
EDX_PLATFORM_SETTINGS
:
"
aws"
rollback_result
:
rollback_result.yml
original_state
:
original_state.yml
migration_plan
:
migration_plan.yml
migration_result
:
migration_result.yml
database
:
default
vars_files
:
-
roles/edxapp/defaults/main.yml
tasks
:
-
name
:
Create a temporary directory for the migration output.
command
:
mktemp -d
become_user
:
"
{{
APPLICATION_USER
}}"
register
:
temp_output_dir
-
name
:
generate current migration state
shell
:
>
{{ COMMAND_PREFIX }} show_unapplied_migrations
--output_file '{{ temp_output_dir.stdout }}/{{ original_state }}'
become_user
:
"
{{
APPLICATION_USER
}}"
when
:
APPLICATION_NAME != "edxapp"
-
name
:
generate current migration state for edxapp
shell
:
>
{{ COMMAND_PREFIX }} {{ SUB_APPLICATION_NAME }} show_unapplied_migrations
--database '{{ database }}'
--output_file '{{ temp_output_dir.stdout }}/{{ database }}_{{ original_state }}'
--settings '{{ EDX_PLATFORM_SETTINGS }}'
become_user
:
"
{{
APPLICATION_USER
}}"
when
:
APPLICATION_NAME == "edxapp"
-
name
:
migrate to original versions
shell
:
>
{{ COMMAND_PREFIX }} run_specific_migrations
--migration '{{ item.app }}' '{{ item.migration }}'
--output_file '{{ temp_output_dir.stdout }}/{{ migration_plan }}'
become_user
:
"
{{
APPLICATION_USER
}}"
with_items
:
"
{{
initial_states
}}"
when
:
APPLICATION_NAME != "edxapp"
-
name
:
migrate to original versions for edxapp
shell
:
>
{{ COMMAND_PREFIX }} {{ SUB_APPLICATION_NAME }} run_specific_migrations
--migration '{{ item.app }}' '{{ item.migration }}'
--output_file '{{ temp_output_dir.stdout }}/{{ database }}_{{ migration_plan }}'
--database '{{ database }}'
--settings '{{ EDX_PLATFORM_SETTINGS }}'
become_user
:
"
{{
APPLICATION_USER
}}"
with_items
:
"
{{
initial_states
}}"
when
:
APPLICATION_NAME == "edxapp"
-
name
:
generate post rollback migration state
shell
:
>
{{ COMMAND_PREFIX }} show_unapplied_migrations
--output_file '{{ temp_output_dir.stdout }}/{{ migration_result }}'
become_user
:
"
{{
APPLICATION_USER
}}"
when
:
APPLICATION_NAME != "edxapp"
-
name
:
generate post migration state for edxapp
shell
:
>
{{ COMMAND_PREFIX }} {{ SUB_APPLICATION_NAME }} show_unapplied_migrations
--database '{{ database }}'
--output_file '{{ temp_output_dir.stdout }}/{{ database }}_{{ migration_result }}'
--settings '{{ EDX_PLATFORM_SETTINGS }}'
become_user
:
"
{{
APPLICATION_USER
}}"
when
:
APPLICATION_NAME == "edxapp"
-
name
:
List all migration files
action
:
"
command
ls
-1
{{
temp_output_dir.stdout
}}"
register
:
migration_files
-
name
:
Transfer artifacts to the proper place.
fetch
:
src
:
"
{{
temp_output_dir.stdout
}}/{{
item
}}"
dest
:
"
{{
ARTIFACT_PATH
}}/"
flat
:
True
fail_on_missing
:
True
mode
:
0700
with_items
:
-
"
{{
migration_files.stdout_lines
}}"
-
name
:
Send Hipchat notification cleanup has finished
hipchat_2_0_0_1
:
api
:
"
{{
HIPCHAT_URL
}}"
token
:
"
{{
HIPCHAT_TOKEN
}}"
room
:
"
{{
HIPCHAT_ROOM
}}"
msg
:
"
Migrations
have
completed."
ignore_errors
:
yes
when
:
HIPCHAT_TOKEN is defined
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment