comments and code adjustments

This commit is contained in:
David Kennedy 2024-06-03 16:53:02 -04:00
parent 42a2e8d3ae
commit 4ff60817da
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
4 changed files with 60 additions and 12 deletions

View file

@ -11,7 +11,12 @@ Simple scripts are provided as detailed below.
To export from the source environment, run the following command from src directory: To export from the source environment, run the following command from src directory:
manage.py export_tables manage.py export_tables
On a sandbox, connect to the sandbox (getgov-stable in ex below) and run the command: Connect to the source sandbox and run the command:
cf ssh {source-app}
/tmp/lifecycle/shell
./manage.py export_tables
example exporting from getgov-stable:
cf ssh getgov-stable cf ssh getgov-stable
/tmp/lifecycle/shell /tmp/lifecycle/shell
./manage.py export_tables ./manage.py export_tables
@ -37,10 +42,13 @@ file from the target environment to local. Run the below commands from local.
Get passcode by running: Get passcode by running:
cf ssh-code cf ssh-code
scp file from app (app is getgov-stable in example below) to local tmp: scp file from source app to local file:
scp -P 2222 -o User=cf:$(cf curl /v3/apps/$(cf app getgov-stable --guid)/processes | jq -r '.resources[] | select(.type=="web") | .guid')/0 ssh.fr.cloud.gov:app/tmp/exported_tables.zip . scp -P 2222 -o User=cf:$(cf curl /v3/apps/$(cf app {source-app} --guid)/processes | jq -r '.resources[] | select(.type=="web") | .guid')/0 ssh.fr.cloud.gov:app/tmp/exported_tables.zip {local_file_path}
when prompted, supply the passcode retrieved in the 'cf ssh-code' command when prompted, supply the passcode retrieved in the 'cf ssh-code' command
example copying from stable to local cwd:
scp -P 2222 -o User=cf:$(cf curl /v3/apps/$(cf app getgov-stable --guid)/processes | jq -r '.resources[] | select(.type=="web") | .guid')/0 ssh.fr.cloud.gov:app/tmp/exported_tables.zip .
### Import ### Import
@ -53,7 +61,14 @@ that there are no database conflicts on import.
In order to delete all rows from the appropriate tables, run the following In order to delete all rows from the appropriate tables, run the following
command: command:
manage.py clean_tables cf ssh {target-app}
/tmp/lifecycle/shell
./manage.py clean_tables
example cleaning getgov-backup:
cf ssh getgov-backup
/tmp/lifecycle/backup
./manage.py clean_tables
For reference, this deletes all rows from the following tables: For reference, this deletes all rows from the following tables:
@ -76,12 +91,23 @@ To scp the exported_tables.zip file from local to the sandbox, run the following
Get passcode by running: Get passcode by running:
cf ssh-code cf ssh-code
scp file from app (app is getgov-stable in example below) to local cwd: scp file from local to target app:
scp -P 2222 -o User=cf:$(cf curl /v3/apps/$(cf app getgov-stable --guid)/processes | jq -r '.resources[] | select(.type=="web") | .guid')/0 tmp/exported_tables.zip ssh.fr.cloud.gov:app/tmp/exported_tables.zip scp -P 2222 -o User=cf:$(cf curl /v3/apps/$(cf app {target-app} --guid)/processes | jq -r '.resources[] | select(.type=="web") | .guid')/0 {local_file_path} ssh.fr.cloud.gov:app/tmp/exported_tables.zip
when prompted, supply the passcode retrieved in the 'cf ssh-code' command when prompted, supply the passcode retrieved in the 'cf ssh-code' command
example copy of local file in tmp to getgov-backup:
scp -P 2222 -o User=cf:$(cf curl /v3/apps/$(cf app getgov-backup --guid)/processes | jq -r '.resources[] | select(.type=="web") | .guid')/0 tmp/exported_tables.zip ssh.fr.cloud.gov:app/tmp/exported_tables.zip
Then connect to a shell in the target environment, and run the following import command: Then connect to a shell in the target environment, and run the following import command:
manage.py import_tables cf ssh {target-app}
/tmp/lifecycle/shell
./manage.py import_tables
example cleaning getgov-backup:
cf ssh getgov-backup
/tmp/lifecycle/backup
./manage.py import_tables
For reference, this imports tables in the following order: For reference, this imports tables in the following order:

View file

@ -2272,12 +2272,11 @@ class PublicContactResource(resources.ModelResource):
self.create_instances.append(instance) self.create_instances.append(instance)
else: else:
self.update_instances.append(instance) self.update_instances.append(instance)
elif not using_transactions and dry_run:
# we don't have transactions and we want to do a dry_run
pass
else: else:
if not using_transactions and dry_run: instance.save(skip_epp_save=True)
# we don't have transactions and we want to do a dry_run
pass
else:
instance.save(skip_epp_save=True)
self.after_save_instance(instance, using_transactions, dry_run) self.after_save_instance(instance, using_transactions, dry_run)

View file

@ -4,6 +4,8 @@ from django.core.management import BaseCommand
from django.apps import apps from django.apps import apps
from django.db import transaction from django.db import transaction
from registrar.management.commands.utility.terminal_helper import TerminalHelper
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -17,6 +19,24 @@ class Command(BaseCommand):
logger.error("clean_tables cannot be run in production") logger.error("clean_tables cannot be run in production")
return return
TerminalHelper.prompt_for_execution(
system_exit_on_terminate=True,
info_to_inspect=f"""
This script will delete all rows from the following tables:
* Contact
* Domain
* DomainInformation
* DomainRequest
* DraftDomain
* Host
* HostIp
* PublicContact
* User
* Website
""",
prompt_title="Do you wish to proceed with these changes?",
)
table_names = [ table_names = [
"DomainInformation", "DomainInformation",
"DomainRequest", "DomainRequest",

View file

@ -63,6 +63,9 @@ class Command(BaseCommand):
return return
# if table_name is Contact, clean the table first # if table_name is Contact, clean the table first
# User table is loaded before Contact, and signals create
# rows in Contact table which break the import, so need
# to be cleaned again before running import on Contact table
if table_name == "Contact": if table_name == "Contact":
self.clean_table(table_name) self.clean_table(table_name)