lifecycle: improve reliability of system migrations (#7089)
* lifecycle: improve reliability of system migrations better transaction handling which allows for re-trying migrations without needing manual intervention Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * remove explicit commit --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
@ -1,10 +1,7 @@
|
||||
# flake8: noqa
|
||||
from os import system
|
||||
|
||||
from lifecycle.migrate import BaseMigration
|
||||
|
||||
SQL_STATEMENT = """
|
||||
BEGIN TRANSACTION;
|
||||
DELETE FROM django_migrations WHERE app = 'passbook_stages_prompt';
|
||||
DROP TABLE passbook_stages_prompt_prompt cascade;
|
||||
DROP TABLE passbook_stages_prompt_promptstage cascade;
|
||||
@ -25,7 +22,7 @@ DELETE FROM django_migrations WHERE app = 'passbook_flows' AND name = '0008_defa
|
||||
DELETE FROM django_migrations WHERE app = 'passbook_flows' AND name = '0009_source_flows';
|
||||
DELETE FROM django_migrations WHERE app = 'passbook_flows' AND name = '0010_provider_flows';
|
||||
DELETE FROM django_migrations WHERE app = 'passbook_stages_password' AND name = '0002_passwordstage_change_flow';
|
||||
COMMIT;"""
|
||||
"""
|
||||
|
||||
|
||||
class Migration(BaseMigration):
|
||||
@ -35,17 +32,14 @@ class Migration(BaseMigration):
|
||||
)
|
||||
return bool(self.cur.rowcount)
|
||||
|
||||
def system_crit(self, command):
|
||||
retval = system(command) # nosec
|
||||
if retval != 0:
|
||||
raise Exception("Migration error")
|
||||
|
||||
def run(self):
|
||||
self.cur.execute(SQL_STATEMENT)
|
||||
self.con.commit()
|
||||
self.system_crit("./manage.py migrate passbook_stages_prompt")
|
||||
self.system_crit("./manage.py migrate passbook_flows 0008_default_flows --fake")
|
||||
self.system_crit("./manage.py migrate passbook_flows 0009_source_flows --fake")
|
||||
self.system_crit("./manage.py migrate passbook_flows 0010_provider_flows --fake")
|
||||
self.system_crit("./manage.py migrate passbook_flows")
|
||||
self.system_crit("./manage.py migrate passbook_stages_password --fake")
|
||||
with self.con.transaction():
|
||||
self.cur.execute(SQL_STATEMENT)
|
||||
self.system_crit("./manage.py migrate passbook_stages_prompt")
|
||||
self.fake_migration(
|
||||
("passbook_flows", "0008_default_flows"),
|
||||
("passbook_flows", "0009_source_flows"),
|
||||
("passbook_flows", "0010_provider_flows"),
|
||||
)
|
||||
self.system_crit("./manage.py migrate passbook_flows")
|
||||
self.fake_migration(("passbook_stages_password", ""))
|
||||
|
Reference in New Issue
Block a user