|
@@ -8,7 +8,7 @@ import docker
|
|
import tarfile
|
|
import tarfile
|
|
import time
|
|
import time
|
|
from googleapiclient.discovery import build
|
|
from googleapiclient.discovery import build
|
|
-from googleapiclient.http import MediaIoBaseUpload
|
|
|
|
|
|
+from googleapiclient.http import MediaIoBaseUpload, MediaFileUpload
|
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
|
from google.auth.transport.requests import Request
|
|
from google.auth.transport.requests import Request
|
|
from docker.errors import NotFound, APIError
|
|
from docker.errors import NotFound, APIError
|
|
@@ -140,7 +140,7 @@ def create_postgres_backup(database, docker_client):
|
|
if pg_container is None or pg_container.status == 'exited':
|
|
if pg_container is None or pg_container.status == 'exited':
|
|
return (False, None)
|
|
return (False, None)
|
|
|
|
|
|
- tmp_file = '%s_%s.tar' % (database, datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))
|
|
|
|
|
|
+ tmp_file = '%s_database_%s.tar' % (database, datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))
|
|
command = 'pg_dump -U %s -d %s -F tar -C -b -c -f %s' % (POSTGRES_USER, database, tmp_file)
|
|
command = 'pg_dump -U %s -d %s -F tar -C -b -c -f %s' % (POSTGRES_USER, database, tmp_file)
|
|
|
|
|
|
result = pg_container.exec_run(command)
|
|
result = pg_container.exec_run(command)
|
|
@@ -153,15 +153,24 @@ def create_postgres_backup(database, docker_client):
|
|
'''
|
|
'''
|
|
'''
|
|
'''
|
|
def create_odoo_filestore_backup(folder_name):
|
|
def create_odoo_filestore_backup(folder_name):
|
|
|
|
+ root_path = './tmp'
|
|
|
|
+
|
|
|
|
+ if not os.path.exists(root_path):
|
|
|
|
+ os.mkdir(root_path)
|
|
|
|
+
|
|
|
|
+ tar_name = '%s_filestore_%s.tar' % (folder_name, datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))
|
|
|
|
+ tar_path = os.path.join(root_path, tar_name)
|
|
filestore_path = os.path.join(ODOO_PATH, folder_name, 'files', 'filestore', folder_name)
|
|
filestore_path = os.path.join(ODOO_PATH, folder_name, 'files', 'filestore', folder_name)
|
|
|
|
|
|
- with tarfile.open(os.path.join(filestore_path, folder_name + '.tar'), mode='w') as filestore_tar:
|
|
|
|
- filestore_tar.add(filestore_path)
|
|
|
|
- filestore_tar.close()
|
|
|
|
|
|
+ with tarfile.open(tar_path, mode='w') as tar:
|
|
|
|
+ tar.add(filestore_path, os.path.basename(filestore_path))
|
|
|
|
+ tar.close()
|
|
|
|
+
|
|
|
|
+ return os.path.abspath(tar_path)
|
|
|
|
|
|
'''
|
|
'''
|
|
'''
|
|
'''
|
|
-def upload_to_drive(backup_file_name, backup_folder_id, docket_client, service):
|
|
|
|
|
|
+def upload_postgres_to_drive(backup_file_name, backup_folder_id, docket_client, service):
|
|
if service == None:
|
|
if service == None:
|
|
return None
|
|
return None
|
|
|
|
|
|
@@ -182,7 +191,7 @@ def upload_to_drive(backup_file_name, backup_folder_id, docket_client, service):
|
|
'name': backup_file_name,
|
|
'name': backup_file_name,
|
|
'parents': [backup_folder_id]
|
|
'parents': [backup_folder_id]
|
|
}
|
|
}
|
|
- backup_media = MediaIoBaseUpload(raw_data, mimetype='application/tar', chunksize=5*(1024*1024))
|
|
|
|
|
|
+ backup_media = MediaIoBaseUpload(raw_data, mimetype='application/tar', chunksize=2*(1024*1024))
|
|
|
|
|
|
result = service.files().create(body=backup_metadata, media_body=backup_media).execute()
|
|
result = service.files().create(body=backup_metadata, media_body=backup_media).execute()
|
|
raw_data.close()
|
|
raw_data.close()
|
|
@@ -191,7 +200,25 @@ def upload_to_drive(backup_file_name, backup_folder_id, docket_client, service):
|
|
|
|
|
|
'''
|
|
'''
|
|
'''
|
|
'''
|
|
-def delete_backup_file(backup_name, docker_client):
|
|
|
|
|
|
+def upload_filestore_to_drive(backup_path, backup_folder_id, service):
|
|
|
|
+ if service == None:
|
|
|
|
+ return None
|
|
|
|
+
|
|
|
|
+ backup_name = os.path.basename(backup_path)
|
|
|
|
+
|
|
|
|
+ backup_metadata = {
|
|
|
|
+ 'name': backup_name,
|
|
|
|
+ 'parents': [backup_folder_id]
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ backup_media = MediaFileUpload(backup_path, mimetype='application/tar', chunksize=2*(1024*1024))
|
|
|
|
+
|
|
|
|
+ result = service.files().create(body=backup_metadata, media_body=backup_media).execute()
|
|
|
|
+ return result.get('id')
|
|
|
|
+
|
|
|
|
+'''
|
|
|
|
+'''
|
|
|
|
+def delete_postgres_backup(backup_name, docker_client):
|
|
pg_container = get_pg_container(docker_client)
|
|
pg_container = get_pg_container(docker_client)
|
|
|
|
|
|
if pg_container is None or pg_container.status == 'exited':
|
|
if pg_container is None or pg_container.status == 'exited':
|
|
@@ -204,6 +231,11 @@ def delete_backup_file(backup_name, docker_client):
|
|
return False
|
|
return False
|
|
|
|
|
|
return True
|
|
return True
|
|
|
|
+
|
|
|
|
+'''
|
|
|
|
+'''
|
|
|
|
+def delete_filestore_backup(backup_path):
|
|
|
|
+ os.remove(backup_path)
|
|
|
|
|
|
'''
|
|
'''
|
|
'''
|
|
'''
|
|
@@ -235,16 +267,19 @@ def run_backup():
|
|
|
|
|
|
if not backup_ok:
|
|
if not backup_ok:
|
|
if backup_name:
|
|
if backup_name:
|
|
- delete_backup_file(backup_name, docker_client)
|
|
|
|
|
|
+ delete_postgres_backup(backup_name, docker_client)
|
|
|
|
|
|
continue
|
|
continue
|
|
|
|
|
|
- upload_to_drive(backup_name, folder_id, docker_client, service)
|
|
|
|
- delete_backup_file(backup_name, docker_client)
|
|
|
|
|
|
+ upload_postgres_to_drive(backup_name, folder_id, docker_client, service)
|
|
|
|
+ delete_postgres_backup(backup_name, docker_client)
|
|
|
|
+
|
|
|
|
+ filestore_path = create_odoo_filestore_backup(db)
|
|
|
|
+ upload_filestore_to_drive(filestore_path, folder_id, service)
|
|
|
|
+ delete_filestore_backup(filestore_path)
|
|
|
|
|
|
time.sleep(1)
|
|
time.sleep(1)
|
|
|
|
|
|
docker_client.close()
|
|
docker_client.close()
|
|
|
|
|
|
-# run_backup()
|
|
|
|
-create_odoo_filestore_backup('ferresur')
|
|
|
|
|
|
+run_backup()
|